Hit POST /generate-image/v1 without any payment header and the server returns HTTP 402 Payment Required. The response carries two challenges, one per rail, so any compliant client can satisfy either:
HTTP/2 402
access-control-allow-origin: *
payment-required: <base64-json> # x402 challenge
www-authenticate: Payment id="...",
method="tempo", intent="charge",
request="<base64-json>",
expires="2026-04-17T18:25:27Z" # MPP challenge
content-type: application/json
Try it: curl -i -X POST https://api.run402.com/generate-image/v1 -d '{"prompt":"x"}' -H "Content-Type: application/json"
Decoded x402 challenge (payment-required header → base64 JSON) includes an accepts array, one entry per supported network:
{
"x402Version": 2,
"accepts": [
{ "scheme": "exact",
"network": "eip155:8453", // Base mainnet
"amount": "30000", // = $0.03 USDC (6 dp)
"asset": "0x8335…2913", // USDC contract
"payTo": "0x059D…5945" },
{ "scheme": "exact",
"network": "eip155:84532", // Base Sepolia
"amount": "30000",
"asset": "0x036C…CF7e",
"payTo": "0x059D…5945" }
]
}
Decoded MPP challenge (request param of www-authenticate, also base64 JSON):
{
"amount": "30000",
"currency": "0x20c0…0000", // pathUSD on Tempo
"methodDetails": { "chainId": 42431 }, // Moderato
"recipient": "0x059D…5945"
}