Module types

Module types 

Source
Expand description

Core types for the x402 protocol

This module defines all the core data structures and types used throughout the x402 protocol implementation. It provides type-safe representations of payment requirements, payment payloads, network configurations, and facilitator responses.

§Architecture

The types module is organized as follows:

  • network - Network configuration and chain-specific details
  • payment - Payment requirements and payload structures
  • facilitator - Facilitator configuration and response types
  • discovery - Discovery API types for resource discovery
  • constants - Protocol constants (networks, schemes, addresses)

§Examples

§Creating Payment Requirements

use rust_x402::types::{PaymentRequirements, Network};

let mut requirements = PaymentRequirements::new(
    "exact",                                          // scheme
    "base-sepolia",                                   // network
    "1000000",                                        // amount (1 USDC)
    "0x036CbD53842c5426634e7929541eC2318f3dCF7e",   // USDC contract
    "0x209693Bc6afc0C5328bA36FaF03C514EF312287C",   // recipient
    "https://api.example.com/resource",              // resource URL
    "API access payment",                             // description
);

// Set USDC metadata
requirements.set_usdc_info(Network::Testnet)?;

§Creating Payment Payload

use rust_x402::types::{PaymentPayload, ExactEvmPayload, ExactEvmPayloadAuthorization};

let authorization = ExactEvmPayloadAuthorization::new(
    "0x857b06519E91e3A54538791bDbb0E22373e36b66",   // from
    "0x209693Bc6afc0C5328bA36FaF03C514EF312287C",   // to
    "1000000",                                        // value
    "1745323800",                                     // validAfter
    "1745323985",                                     // validBefore
    "0xf3746613c2d920b5fdabc0856f2aeb2d4f88ee6037b8cc5d04a71a4462f13480", // nonce
);

let payload = ExactEvmPayload {
    signature: "0x2d6a...".to_string(),
    authorization,
};

let payment = PaymentPayload::new("exact", "base-sepolia", payload);

// Encode to base64 for HTTP header
let encoded = payment.to_base64()?;

§Network Configuration

use rust_x402::types::{Network, NetworkConfig, networks};

// Using the Network enum
let network = Network::Testnet;
println!("Network: {}", network.as_str());
println!("USDC: {}", network.usdc_address());

// Using NetworkConfig for detailed info
let config = NetworkConfig::base_sepolia();
println!("Chain ID: {}", config.chain_id);
println!("USDC Contract: {}", config.usdc_contract);

// Using constants
let usdc = networks::get_usdc_address("base-sepolia");
println!("USDC address: {:?}", usdc);

§Facilitator Configuration

use rust_x402::types::FacilitatorConfig;
use std::time::Duration;

let config = FacilitatorConfig::new("https://x402.org/facilitator")
    .with_timeout(Duration::from_secs(30));

// Validate the configuration
config.validate()?;

§Type Categories

§Payment Types

§Response Types

§Configuration Types

Re-exports§

pub use constants::networks;
pub use constants::schemes;
pub use discovery::DiscoveryResource;
pub use discovery::DiscoveryResponse;
pub use discovery::PaginationInfo;
pub use facilitator::AuthHeadersFn;
pub use facilitator::AuthHeadersFnArc;
pub use facilitator::AuthHeadersFnBox;
pub use facilitator::FacilitatorConfig;
pub use facilitator::SettleResponse;
pub use facilitator::SupportedKind;
pub use facilitator::SupportedKinds;
pub use facilitator::VerifyResponse;
pub use network::Network;
pub use network::NetworkConfig;
pub use payment::ExactEvmPayload;
pub use payment::ExactEvmPayloadAuthorization;
pub use payment::PaymentPayload;
pub use payment::PaymentRequirements;
pub use payment::PaymentRequirementsResponse;
pub use payment::X402_VERSION;

Modules§

constants
Common constants for networks and schemes
discovery
Discovery API types
facilitator
Facilitator configuration and response types
network
Network configuration types
payment
Payment-related types