Skip to content

Base USDC Facilitator

The Base USDC Facilitator handles verification and settlement for EVM scheme payments — USDC on Base via EIP-3009 TransferWithAuthorization. It is FluxA's production x402 settlement endpoint and is registered on x402scan.

Base URL

https://facilitator.fluxapay.xyz/

Supported

AspectValues
Schemesexact
Networks (mainnet)base (v1), eip155:8453 (v2)
Networks (testnet)base-sepolia (v1), eip155:84532 (v2)
AssetsUSDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 on Base; 0x036CbD53842c5426634e7929541eC2318f3dCF7e on Base Sepolia)
x402Version1, 2
SignatureEIP-712 TransferWithAuthorization (EIP-3009)

Endpoints

MethodPathDescription
POST/verifyValidate an EVM payment proof
POST/settleSubmit on-chain transferWithAuthorization and return the tx hash
GET/supportedReturn the list of (x402Version, scheme, network, asset) tuples this facilitator accepts

Verify

Validates an x402 payment payload without executing settlement.

Request

json
{
  "paymentPayload": {
    "x402Version": 2,
    "scheme": "exact",
    "network": "eip155:8453",
    "payload": {
      "signature": "0x...",
      "authorization": {
        "from": "0xPayerWallet...",
        "to": "0xRecipientAddress...",
        "value": "10000",
        "validAfter": "1700000000",
        "validBefore": "1700000060",
        "nonce": "0x<32-byte-random-hex>"
      }
    }
  },
  "paymentRequirements": {
    "scheme": "exact",
    "network": "eip155:8453",
    "maxAmountRequired": "10000",
    "resource": "/api/data",
    "payTo": "0xRecipientAddress...",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "maxTimeoutSeconds": 60,
    "extra": { "name": "USD Coin", "version": "2" }
  }
}

Both x402Version: 1 (with network: "base") and x402Version: 2 (with network: "eip155:8453") request shapes are accepted; the rest of the payload is identical.

Validation Checks

  1. scheme is exact and network matches a supported network.
  2. EIP-712 signature recovers to authorization.from.
  3. authorization.to matches paymentRequirements.payTo.
  4. authorization.value is exactly paymentRequirements.maxAmountRequired.
  5. Current time is within validAfter / validBefore.
  6. nonce has not been used (replay protection at the USDC contract level).
  7. Payer's USDC balance covers value.
  8. The extra.name / extra.version match the on-chain USDC EIP-712 domain.

Response (success)

json
{
  "isValid": true,
  "payer": "0xPayerWallet...",
  "network": "eip155:8453",
  "currency": "USDC",
  "amount": "10000"
}

Response (failure)

json
{
  "isValid": false,
  "invalidReason": "invalid_signature"
}

Settle

Submits the signed authorization on-chain and returns the transaction hash.

Request

Same shape as Verify.

Response (success)

json
{
  "success": true,
  "transaction": "0xabc123...",
  "txHash": "0xabc123...",
  "network": "eip155:8453",
  "payer": "0xPayerWallet...",
  "amount": "10000",
  "currency": "USDC"
}

The transaction hash returned here is what the upstream server includes in the X-Payment-Response header to the client.

Idempotency

If settle is called for an authorization whose nonce has already been consumed on-chain, the facilitator returns the original transaction hash instead of submitting a duplicate. Safe to retry.

Gas

The facilitator covers gas for the on-chain transferWithAuthorization call. Funds flow user → user (payer → payTo); FluxA never holds the USDC.

Supported

GET /supported

Returns the canonical list of (x402Version, scheme, network, asset) tuples accepted by this facilitator. Use it to discover compatibility from a client without hard-coding values.

Response

json
{
  "kinds": [
    { "x402Version": 1, "scheme": "exact", "network": "base",         "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" },
    { "x402Version": 2, "scheme": "exact", "network": "eip155:8453",  "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913" },
    { "x402Version": 1, "scheme": "exact", "network": "base-sepolia", "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" },
    { "x402Version": 2, "scheme": "exact", "network": "eip155:84532", "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e" }
  ]
}

Error Scenarios

ErrorDescription
invalid_signatureEIP-712 signature recovery does not match authorization.from
invalid_recipientauthorization.to does not match paymentRequirements.payTo
invalid_amountauthorization.value does not match maxAmountRequired
invalid_validity_windowCurrent time outside validAfter / validBefore
nonce_already_usedNonce has already been settled on-chain
insufficient_balancePayer's USDC balance is below value
unsupported_networknetwork is not in /supported
unsupported_x402_versionx402Version is not 1 or 2
settlement_failedOn-chain transferWithAuthorization reverted

Released under the MIT License.