Get Supported Configurations (V2)
Code
Returns all payment kinds, extensions, and facilitator signer addresses supported by B402, conforming to the x402 v2 specification.
Differences from V1 (
/papi/v1/b402/supported):
V1 V2 kinds[].x402Version: 1kinds[].x402Version: 2kinds[].scheme: "exact"for all methods"exact"foreip3009/permit2-exact,"upto"forpermit2-uptokinds[].extra.facilitatorAddress(overloaded: EOA for eip3009, proxy contract for permit2)removed. Replaced by extra.signerAddress(EOA) +extra.spenderAddress(proxy, null for eip3009)signerskeys per-chain ("eip155:56")signerskeys are CAIP-2 wildcard namespaces ("eip155:*")
Request Body
No request body required. Send empty JSON {} or omit the body entirely.
Example
Code
Code
Response Body
| Field | Type | Remarks |
|---|---|---|
| kinds | array | List of supported payment kinds |
| kinds[].x402Version | integer | x402 protocol version (always 2) |
| kinds[].scheme | string | "exact" for eip3009 / permit2-exact; "upto" for permit2-upto |
| kinds[].network | string | CAIP-2 network identifier (e.g. "eip155:56") |
| kinds[].extra | object | Scheme-specific details |
| kinds[].extra.name | string | EIP-712 domain name of the token (e.g. "U", "USD1", "USD Coin", "Tether USD") |
| kinds[].extra.version | string | EIP-712 domain version of the token contract |
| kinds[].extra.assetTransferMethod | string | "eip3009", "permit2-exact", or "permit2-upto" (b402 inline extension) |
| kinds[].extra.signerAddress | string | Facilitator EOA that signs on-chain transactions. Present for all methods. |
| kinds[].extra.spenderAddress | string | Spender contract (Permit2 proxy) address. Null for eip3009; required for permit2 signing. |
| extensions | array | Supported x402 extensions (currently empty []) |
| signers | map | CAIP-2 wildcard namespace → list of Facilitator signer (EOA) addresses |
Example
Code
Notes:
- The response changes infrequently. It is safe to cache the result and refresh periodically (e.g. once per hour).
signerAddressis the Facilitator externally-owned account (EOA) — the wallet that submits on-chain transactions and pays gas. Use it to recover/verify transaction origin.spenderAddressis the Permit2 proxy contract that the buyer authorises in their Permit2 signature (permit2Authorization.spender). It is absent (null, omitted from JSON) foreip3009because EIP-3009 transfers are submitted directly against the token contract without a proxy.- For
permit2-upto,schemeis"upto"per the x402 v2 spec — the authorised amount is an upper bound, and the actual settled amount is specified at/settletime viasettleAmount.signerskeys use the CAIP-2 wildcard namespace (e.g."eip155:*") rather than per-chain identifiers, matching the x402 v2 reference implementation. A single Facilitator EOA signs across all EVM chains in this namespace.
Forwarding Addresses to Buyers (Merchant Responsibility)
⚠️ Required: The merchant MUST forward
signerAddressandspenderAddressfrom the/supportedresponse into thepaymentRequirements.extraobject of the HTTP402 Payment Requiredresponse returned to buyers. Buyers rely on these fields to construct a valid Permit2 signature — they cannot, and should not, call/supportedthemselves (the endpoint is gated by merchant credentials and is not part of the buyer-facing surface).
Per the x402 protocol, buyers never talk to B402 directly; the only channel between buyer and facilitator is the merchant's 402 response. If these fields are missing from the 402 body, the buyer has no way to know:
- Which contract to set as
permit2Authorization.spenderwhen signing (←spenderAddress). - Which address to bind in
witness.facilitatorforpermit2-uptosignatures (←signerAddress).
Omitting them will cause buyer-side signing to fail, or produce signatures that B402 rejects at
/verify with invalid_payload.
Field mapping: /supported response → merchant 402 response
From /supported response | Must appear in merchant's 402 response as | Required for |
|---|---|---|
kinds[].extra.signerAddress | paymentRequirements.extra.signerAddress | All methods. Buyers bind it into witness.facilitator for permit2-upto signatures. |
kinds[].extra.spenderAddress | paymentRequirements.extra.spenderAddress | permit2-exact and permit2-upto. Omit (or set to null) for eip3009. |
kinds[].extra.name | paymentRequirements.extra.name | All methods — EIP-712 domain name used by buyer when building the typed data. |
kinds[].extra.version | paymentRequirements.extra.version | All methods — EIP-712 domain version used by buyer when building the typed data. |
kinds[].extra.assetTransferMethod | paymentRequirements.extra.assetTransferMethod | All methods — selects which signing scheme the buyer must use. |
Example — merchant 402 response body (permit2-upto)
Code
Implementation tip: Cache the
/supportedresponse on the merchant side (see note above) and copysignerAddress/spenderAddress/name/version/assetTransferMethodfrom the matchingkinds[]entry into every 402 response you emit. Do not hardcode these addresses — they may change when B402 upgrades Permit2 proxies, and/supportedis the single source of truth.