Clear your x402 payments through hcrb.in
Buyers pay your wallet directly. hcrb.in verifies each payment, submits it through a facilitator and signs a receipt. It never holds the funds and takes no share of them.
1. Get a key
Buy settlement credits. Your key starts with ck_live_. Checking a payment is free. A settlement uses one credit, and only after the transfer to your wallet is confirmed on chain. A payment that fails uses none.
| Settlements | Price | After the first payment | |
|---|---|---|---|
| 500 | £9 by card | One payment. Never tops up. | Get this pack |
| 5,000 | £39 by card | Tops up automatically. See below. | Get this pack |
| 75,000 | £399 by card | Tops up automatically. See below. | Get this pack |
| 300 | $1.00 in USDC on Base | One payment. Never tops up. | Get this pack |
Automatic top-up. The £39 and £399 packs when paid by card. Not the £9 pack, not USDC, and not cards billed in INR. Your card is saved. When the balance falls to 500 credits or fewer it is charged £39, or the same amount in your billing currency, for 5,000 more credits. To turn it off: POST /v1/operator/auto-recharge?key=<your key>&enabled=false
2. Point your x402 server at the facilitator
Use https://api.code402.dev/facilitator as the facilitator URL and send your key with every call:
Authorization: Bearer ck_live_<key>
X-Facilitator-Key: ck_live_<key> works as well. Keep your own wallet as the payee in the 402 your API returns.
3. Verify, then settle
Both calls take the body a standard x402 server already sends to its facilitator:
{
"x402Version": 2,
"paymentPayload": {
"x402Version": 2,
"resource": {
"url": "https://your-api.example/report",
"mimeType": "application/json"
},
"accepted": {
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "25000",
"payTo": "0xYourWallet",
"maxTimeoutSeconds": 300,
"extra": {
"name": "USD Coin",
"version": "2"
}
},
"payload": {
"signature": "0x<buyer signature>",
"authorization": {
"from": "0xBuyerWallet",
"to": "0xYourWallet",
"value": "25000",
"validAfter": "0",
"validBefore": "<unix seconds>",
"nonce": "0x<32 bytes>"
}
}
},
"paymentRequirements": {
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "25000",
"payTo": "0xYourWallet",
"maxTimeoutSeconds": 300,
"extra": {
"name": "USD Coin",
"version": "2"
}
}
}
POST /facilitator/verify answers:
{
"isValid": true,
"facilitated_third_party": true
}
POST /facilitator/settle answers:
{
"success": true,
"transaction": "0x<transaction hash>",
"payTo": "0xYourWallet",
"operator_credits_remaining": 299,
"receipt_id": "<receipt id>",
"verify_url": "<public link to the signed receipt>"
}
Endpoints
| Call | Cost | What it does |
|---|---|---|
GET /facilitator/supported | free | Networks and tokens the facilitator accepts |
POST /facilitator/verify | free | Check a buyer's signed payment before you do the work |
POST /facilitator/settle | 1 credit on confirmed settlement | Submit the payment to your wallet |
GET /v1/exports/camt053?from=YYYY-MM-DD&to=YYYY-MM-DD | free | XML statement of the settlements paid to your wallets. Your key sees only its own. |
GET /v1/operator/auto-recharge?key=<your key> | free | Whether automatic top-up is on for your key. POST with enabled=false turns it off. |
Errors
| Status | Code | Meaning |
|---|---|---|
| 422 | PAYEE_NOT_THIS_OPERATOR | No seller key was sent for a payment to a wallet that is not ours. |
| 402 | FACILITATOR_QUOTA_EXHAUSTED | The key has no credits left. |
| 402 | settlement failed | The buyer's payment did not settle. No credit is used. |
| 403 | OFAC_SANCTIONS_BLOCKED | The payer or payee wallet matched the sanctions list. The screen is exact-match and is not a clearance. |
| 403 | STATUTORY_COMPLIANCE_GATE_BLOCKED | The check that runs before settlement refused the payment. Nothing was submitted and no credit is used. |
| 422 | BELOW_CLEARINGHOUSE_PRICE_FLOOR_10000_ATOMIC | The payment is below the minimum for seller payments, 0.001 USDC. |
| 503 | RECEIPT_SIGNER_UNAVAILABLE | The service cannot sign receipts at the moment. Nothing was submitted. Try again later. |
What this is and is not
- Supported: USDC on Base (eip155:8453). Other networks listed by /facilitator/supported have not been exercised in production.
- hcrb.in does not hold funds, does not guarantee payment and is not a party to your sale.
- A receipt records that a payment settled. It does not prove that your service was delivered or was of a given quality.
- A payment that settles on chain is final. hcrb.in does not reverse payments and does not decide disputes between you and your buyer.