API reference
Every endpoint, what it takes and what it returns.
Base URLs: https://facilitator.amnt.io (mainnet) and https://facilitator.amnt.io/testnet (testnet). No auth.
POST /verify
Checks a payment without moving money.
{ "paymentPayload": { "x402Version": 2, "...": "..." }, "paymentRequirements": { "scheme": "exact", "network": "hedera:mainnet", "...": "..." } }{ "isValid": true, "payer": "0.0.12345" }When it's refused, isValid is false with invalidReason and invalidMessage. A payment that already settled is refused as already_settled.
POST /settle
Same body as /verify. Signs as fee payer, sends the transaction, waits for confirmation.
{ "success": true, "transaction": "0.0.10774954@1789388081.467032996", "network": "hedera:mainnet", "payer": "0.0.12345" }On failure success is false with errorReason and errorMessage. Sending the same payment twice returns already_settled and the first transaction id.
GET /supported
The networks this instance settles, with each fee payer.
{ "kinds": [{ "x402Version": 2, "scheme": "exact", "network": "hedera:mainnet", "extra": { "feePayer": "0.0.10774954" } }], "extensions": ["bazaar"], "signers": { "hedera:*": ["0.0.10774954"] } }GET /health
200 when every fee payer can pay, 503 when one is low.
{ "status": "ok", "env": "mainnet", "chains": [{ "network": "hedera:mainnet", "feePayer": "0.0.10774954", "balance": 10.4, "unit": "HBAR", "lowBalance": false }] }GET /stats
Query: env (mainnet or testnet), network (optional CAIP-2 id), days (1 to 365, default 14).
Returns settlements, failed, volumeAtomic, successRate, avgAtomic, medianSettleMs, payers, a daily series, byNetwork and byStatus. successRate is settled attempts divided by all recorded settle attempts (including failed or rejected attempts) in the requested window. Treat it as an observed rate, not an uptime promise; check the sample size and date range. Amounts are atomic USDC: divide by 1,000,000.
GET /transactions
Query: env, network, status (settled, failed, rejected), limit (1 to 100), cursor (from the last page).
Each row has network, status, payer, pay_to, amount_atomic, resource_url, tx_id, error_reason, total_ms, created_at and an explorer link.
GET /discovery/resources
The Hedera Bazaar. Same shape as Coinbase's /discovery/resources. Query: limit, offset. Entries drop off after 30 days with no settled payment.
Errors
| Status | Meaning |
|---|---|
400 | Your request is malformed. The body says which field. Don't retry it. |
503 | The facilitator can't start (misconfigured) or a fee payer is low. Retry later. |