Skip to content

x402 API reference

Three routes, all under https://api.kryard.com/x402/v1. None require authentication — no X-Stamp, no API key. That's what the x402 spec calls for, and it's why the facilitator carries hard limits instead.

GET /supported

What this deployment settles. No body.

json
{
  "kinds": [{ "x402Version": 1, "scheme": "exact", "network": "base-sepolia" }],
  "signers": { "eip155:*": ["0x433ff8253Faa9A57b6326f69Abc8Ad0bf208f5c1"] }
}

signers is the relayer that fronts gas. One deployment serves one chain.

POST /verify

Read-only. Recovers the signature and checks balance, nonce, and validity window against the chain. Never broadcasts, never costs anyone gas.

json
{
  "paymentPayload": {
    "x402Version": 1,
    "scheme": "exact",
    "network": "base-sepolia",
    "payload": {
      "signature": "0x…",
      "authorization": {
        "from": "0x…", "to": "0x…", "value": "10000",
        "validAfter": "1753660000", "validBefore": "1753660120",
        "nonce": "0x…32 bytes…"
      }
    }
  },
  "paymentRequirements": {
    "scheme": "exact", "network": "base-sepolia",
    "maxAmountRequired": "10000",
    "asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
    "payTo": "0x…", "resource": "https://…",
    "maxTimeoutSeconds": 120,
    "extra": { "name": "USDC", "version": "2" }
  }
}

{ "isValid": true, "payer": "0x…" } or { "isValid": false, "invalidReason": "…", "payer": "0x…" }

POST /settle

Same body. Re-verifies, then broadcasts the payer's transferWithAuthorization with the relayer paying gas.

{ "success": true, "transaction": "0x…", "network": "base-sepolia", "payer": "0x…" } or { "success": false, "errorReason": "…", "transaction": "", "network": "…", "payer": "0x…" }

Idempotent on (chain, asset, payer, nonce). A repeat returns the original transaction hash rather than transferring twice — retry safely.

Reason codes

Returned as invalidReason (verify) or errorReason (settle).

The payment itself

CodeMeaning
invalid_requestMalformed body, or a missing/non-address authorization.from.
invalid_exact_evm_signatureSignature doesn't recover to from. Usually a wrong EIP-712 domain.
invalid_exact_evm_recipient_mismatchSigned to ≠ the payTo in paymentRequirements.
invalid_exact_evm_insufficient_valueSigned value < maxAmountRequired.
invalid_exact_evm_insufficient_balancePayer's token balance won't cover it.
invalid_exact_evm_authorization_expiredOutside validAftervalidBefore.
invalid_exact_evm_authorization_usedThat nonce is already spent on chain.

Facilitator policy

CodeMeaning
x402_policy_disabledNo enabled policy for this chain. Fail-closed default.
x402_asset_not_allowedAsset outside the allowlist.
x402_payto_not_allowedDestination outside the allowlist, when one is configured.
x402_amount_below_minimumUnder the per-settle floor (0.01 USDC).
x402_amount_exceeds_capOver the per-settle ceiling (10 USDC).
x402_daily_gas_cap_exceededFacilitator's 24h gas budget is spent.
x402_monthly_gas_cap_exceeded30-day gas budget is spent.
x402_gas_estimate_unavailableGas couldn't be estimated, so the spend couldn't be bounded. Fails closed.
x402_settlement_in_flightThe same authorization is mid-settlement. Poll rather than retry hard.
x402_relayer_not_configuredOperator-side fault: the facilitator's relayer key isn't resolvable. Nothing you can fix as a caller — retry later or report it.

Throughput

CodeHTTPMeaning
x402_rate_limited429A limit below was hit. Nothing was reserved or broadcast.
x402_rate_limit_unavailable503The limiter couldn't be consulted, so the request was refused.

Limits

ScopeLimit
/verify per IP60 / minute
/settle per IP20 / minute
/settle per payer5 / minute
/settle facilitator-wide60 / minute
Per-settle amount0.01 – 10 USDC
Facilitator gas0.02 ETH / day · 0.1 ETH / month

Per-IP limits are charged on every request. The payer and facilitator-wide budgets are charged only after a payment verifies — so a flood of junk can't burn another payer's allowance or the shared budget.

Gas caps are the operator's spend, not yours. When one is exhausted, settlement stops until the window rolls.

Deployment facts

Base URLhttps://api.kryard.com
ChainBase Sepolia · 84532
AssetTestnet USDC 0x036CbD53842c5426634e7929541eC2318f3dCF7e
Schemeexact (EIP-3009 transferWithAuthorization)
Relayer0x433ff8253Faa9A57b6326f69Abc8Ad0bf208f5c1
AuthNone

Testnet only

No mainnet deployment, no SLA, no uptime guarantee. Suitable for integration work, not for real value.

Wallet infrastructure for gasless, sponsored transactions — a Turnkey-compatible signer and a managed EIP-7702 relay.