amnt docs
x402 facilitator

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.

Request
{ "paymentPayload": { "x402Version": 2, "...": "..." }, "paymentRequirements": { "scheme": "exact", "network": "hedera:mainnet", "...": "..." } }
Response
{ "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.

Response
{ "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

StatusMeaning
400Your request is malformed. The body says which field. Don't retry it.
503The facilitator can't start (misconfigured) or a fee payer is low. Retry later.

On this page