Skip to main content

Get Supported Configurations

This is the V1 API. For new integrations we recommend Get Supported Configurations (V2), which is conformant with the x402 v2 specification.

POST /papi/v1/b402/supported

Returns all payment kinds, extensions, and facilitator signer addresses currently supported by B402.

Request Body

No request body required. Send empty JSON {} or omit the body entirely.

Example

{}
curl -X POST https://{domain}/papi/v1/b402/supported \
-H 'Content-Type: application/json' \
-H 'X-Tesla-ClientId: {your client id}' \
-H 'X-Tesla-SignAccessToken: {your access token}' \
-H 'X-Tesla-Timestamp: {now}' \
-H 'X-Tesla-Signature: {signature}' \
-d '{}'

Response Body

FieldTypeRemarks
kindsarrayList of supported payment kinds
kinds[].x402Versionintegerx402 protocol version (currently 1)
kinds[].schemestringPayment scheme (currently "exact")
kinds[].networkstringCAIP-2 network identifier (e.g. "eip155:56")
kinds[].extraobjectExtended details for this kind
kinds[].extra.namestringToken name (e.g. "U", "USD1", "USDC", "USDT")
kinds[].extra.versionstringToken contract version for EIP-712 signing
kinds[].extra.assetTransferMethodstring"eip3009", "permit2-exact", or "permit2-upto"
kinds[].extra.facilitatorAddressstringFacilitator contract address for this transfer method
extensionsarraySupported x402 extensions (currently empty [])
signersmapNetwork identifier → list of Facilitator signer addresses

Example

{
"code": "000000",
"message": "success",
"data": {
"kinds": [
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "U",
"version": "1",
"assetTransferMethod": "eip3009",
"facilitatorAddress": "0x1111111111111111111111111111111111111111"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "U",
"version": "1",
"assetTransferMethod": "permit2-exact",
"facilitatorAddress": "0x2222222222222222222222222222222222222222"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "U",
"version": "1",
"assetTransferMethod": "permit2-upto",
"facilitatorAddress": "0x3333333333333333333333333333333333333333"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "USD1",
"version": "1",
"assetTransferMethod": "eip3009",
"facilitatorAddress": "0x1111111111111111111111111111111111111111"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "USD1",
"version": "1",
"assetTransferMethod": "permit2-exact",
"facilitatorAddress": "0x2222222222222222222222222222222222222222"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "USD1",
"version": "1",
"assetTransferMethod": "permit2-upto",
"facilitatorAddress": "0x3333333333333333333333333333333333333333"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "USDT",
"version": "1",
"assetTransferMethod": "permit2-exact",
"facilitatorAddress": "0x2222222222222222222222222222222222222222"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "USDT",
"version": "1",
"assetTransferMethod": "permit2-upto",
"facilitatorAddress": "0x3333333333333333333333333333333333333333"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "USD Coin",
"version": "2",
"assetTransferMethod": "permit2-exact",
"facilitatorAddress": "0x2222222222222222222222222222222222222222"
}
},
{
"x402Version": 1,
"scheme": "exact",
"network": "eip155:56",
"extra": {
"name": "USD Coin",
"version": "2",
"assetTransferMethod": "permit2-upto",
"facilitatorAddress": "0x3333333333333333333333333333333333333333"
}
}
],
"extensions": [],
"signers": {
"eip155:56": [
"0x1111111111111111111111111111111111111111"
]
}
}
}

Notes:

  • The response changes infrequently. It is safe to cache the result and refresh periodically (e.g. once per hour).
  • facilitatorAddress varies by assetTransferMethod — each transfer method deploys a separate facilitator contract.
  • signers lists the authorized settlement addresses. Only transactions signed by these addresses will be accepted on-chain.

Forwarding facilitatorAddress to Buyers (Merchant Responsibility)

⚠️ Required: The merchant MUST forward facilitatorAddress (and the rest of extra) from the /supported response into the paymentRequirements.extra object of the HTTP 402 Payment Required response returned to buyers. Buyers rely on this field to construct a valid Permit2 signature — they cannot, and should not, call /supported themselves (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. In V1 the facilitatorAddress field is overloaded:

  • For assetTransferMethod: "eip3009" it carries the Facilitator EOA (the wallet that submits the on-chain transaction). Buyers do not use it when signing EIP-3009, but it is still useful for traceability.
  • For assetTransferMethod: "permit2-exact" and "permit2-upto" it carries the Permit2 proxy contract address — this is the value the buyer must set as permit2Authorization.spender when signing. Without it, the buyer cannot construct a valid signature and B402 will reject with invalid_exact_evm_permit2_payload_spender.
  • For assetTransferMethod: "permit2-upto" this same address is what the buyer binds into witness.facilitator — again, buyers have no other way to obtain it.

V2 splits this into two explicit fields (signerAddress / spenderAddress) to remove the overload. See V2 — Get Supported Configurations for the recommended shape.

Field mapping: /supported response → merchant 402 response

From /supported responseMust appear in merchant's 402 response asRequired for
kinds[].extra.facilitatorAddresspaymentRequirements.extra.facilitatorAddressAll methods — especially permit2-exact / permit2-upto, where it is the Permit2 spender.
kinds[].extra.namepaymentRequirements.extra.nameAll methods (EIP-712 domain name).
kinds[].extra.versionpaymentRequirements.extra.versionAll methods (EIP-712 domain version).
kinds[].extra.assetTransferMethodpaymentRequirements.extra.assetTransferMethodAll methods (selects the signing scheme).

Example — merchant 402 response body (permit2-upto)

HTTP/1.1 402 Payment Required
Content-Type: application/json

{
"x402Version": 1,
"accepts": [
{
"scheme": "exact",
"network": "eip155:56",
"amount": "100000000",
"resource": "https://ai.example.com/api/v1/chat",
"description": "AI Agent API - per-request billing",
"payTo": "0x8B3a350e2f3E6B9cC6FB10Fd106bA08f08bec5D2",
"asset": "0x55d398326f99059ff775485246999027b3197955",
"maxTimeoutSeconds": 300,
"extra": {
"name": "Tether USD",
"version": "1",
"assetTransferMethod": "permit2-upto",
"facilitatorAddress": "0x3333333333333333333333333333333333333333"
}
}
]
}

Implementation tip: Cache the /supported response on the merchant side and copy facilitatorAddress / name / version / assetTransferMethod from the matching kinds[] entry into every 402 response you emit. Do not hardcode these addresses — they may change when B402 upgrades Permit2 proxies, and /supported is the single source of truth.