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
| Field | Type | Remarks |
|---|---|---|
| kinds | array | List of supported payment kinds |
| kinds[].x402Version | integer | x402 protocol version (currently 1) |
| kinds[].scheme | string | Payment scheme (currently "exact") |
| kinds[].network | string | CAIP-2 network identifier (e.g. "eip155:56") |
| kinds[].extra | object | Extended details for this kind |
| kinds[].extra.name | string | Token name (e.g. "U", "USD1", "USDC", "USDT") |
| kinds[].extra.version | string | Token contract version for EIP-712 signing |
| kinds[].extra.assetTransferMethod | string | "eip3009", "permit2-exact", or "permit2-upto" |
| kinds[].extra.facilitatorAddress | string | Facilitator contract address for this transfer method |
| extensions | array | Supported x402 extensions (currently empty []) |
| signers | map | Network 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).
facilitatorAddressvaries byassetTransferMethod— each transfer method deploys a separate facilitator contract.signerslists 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 ofextra) from the/supportedresponse into thepaymentRequirements.extraobject of the HTTP402 Payment Requiredresponse returned to buyers. Buyers rely on this field 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. 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 aspermit2Authorization.spenderwhen signing. Without it, the buyer cannot construct a valid signature and B402 will reject withinvalid_exact_evm_permit2_payload_spender. - For
assetTransferMethod: "permit2-upto"this same address is what the buyer binds intowitness.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 response | Must appear in merchant's 402 response as | Required for |
|---|---|---|
kinds[].extra.facilitatorAddress | paymentRequirements.extra.facilitatorAddress | All methods — especially permit2-exact / permit2-upto, where it is the Permit2 spender. |
kinds[].extra.name | paymentRequirements.extra.name | All methods (EIP-712 domain name). |
kinds[].extra.version | paymentRequirements.extra.version | All methods (EIP-712 domain version). |
kinds[].extra.assetTransferMethod | paymentRequirements.extra.assetTransferMethod | All 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
/supportedresponse on the merchant side and copyfacilitatorAddress/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.