exact, asset USDC. No fee, no account, no API key — you sign an authorization, we broadcast it and pay the gas. This page is how to call it. Whether you should call it, including what we have not secured, is on the facilitator page.Base URL is https://facilitator.wicketworld.xyz. Everything is JSON, CORS is open, nothing is authenticated.
Which networks and schemes we serve, and the signer address we broadcast from.
Check an authorization without spending anything. Also reserves the nonce, so a valid answer here cannot be overtaken.
Broadcast transferWithAuthorization on Arc, wait for confirmations, return the transaction hash.
Wallet balance, today's spend budget, authorizations in flight. Returns 503 when we cannot serve.
Non-spec: the extra block you must send, the value floor, the per-payer cap.
Arc's USDC predeploy names itself USDC, version 2. Several x402 SDKs default to USD Coin because that is correct on other chains. Sign with the wrong name and the signature recovers to a different address — there is no error and no warning, it simply never works.
{
"assetTransferMethod": "eip3009",
"name": "USDC",
"version": "2"
}DOMAIN_SEPARATOR() on 0x3600000000000000000000000000000000000000. Mainnet returns 0x940506929bba468048a19b567f4f0d534714bc06604b5c3017e5d16785ccdf84, testnet returns 0x361191522483d32a83e70ae7183b4b9629442c13a78bc9921d6f707911c8c6b0. If the domain you are hashing does not produce that, nothing else on this page matters.| Network | CAIP-2 | Chain id | Asset |
|---|---|---|---|
| Arc mainnet | eip155:5042 | 5042 | 0x3600…0000 |
| Arc testnet | eip155:5042002 | 5042002 | 0x3600…0000 |
USDC is the gas token on Arc, which is why the payer spends nothing beyond the amount itself. It is also why a facilitator is optional here: a payer who holds USDC can broadcast their own authorization and skip us entirely. We think that is worth saying out loud.
curl -s https://facilitator.wicketworld.xyz/supportedcurl -s -X POST https://facilitator.wicketworld.xyz/verify \
-H 'content-type: application/json' \
-d '{
"x402Version": 2,
"paymentPayload": {
"x402Version": 2,
"scheme": "exact",
"network": "eip155:5042",
"payload": {
"signature": "0x…",
"authorization": {
"from": "0x…", "to": "0x…", "value": "10000",
"validAfter": "…", "validBefore": "…", "nonce": "0x…"
}
}
},
"paymentRequirements": {
"scheme": "exact", "network": "eip155:5042",
"asset": "0x3600000000000000000000000000000000000000",
"amount": "10000", "payTo": "0x…", "maxTimeoutSeconds": 60,
"extra": { "assetTransferMethod": "eip3009", "name": "USDC", "version": "2" }
}
}'/verify claims the (payer, nonce) pair for you. Two identical requests racing each other cannot both come back valid, and /settle will not then be refused for a reason /verify did not already know about.Reasons come from the x402 v2 enum so a switch on them keeps working. When we refuse because of our own policy rather than your payload, the reason is the generic unexpected_verify_error or unexpected_settle_error, and a non-standard wicketReason field tells you what actually happened.
| wicketReason | Means | What to do |
|---|---|---|
below_minimum | The amount is under the floor for that network. | Read the floor from /meta and price above it. |
payer_daily_limit | That payer has used its allowance for the UTC day. | Wait for midnight UTC, or settle it yourself. |
daily_budget_exhausted | Our gas budget for the day is spent. | Same. /healthz shows what is left before you commit. |
| hot wallet below halt threshold | We are out of gas money. | We refuse here rather than after you have delivered. |
| Standard reason | Means |
|---|---|
insufficient_funds | The payer does not hold the amount. |
invalid_exact_evm_payload_signature | Recovery did not produce the from address. Usually the domain name. |
invalid_transaction_state | The nonce is used, reserved, or the simulation reverted. |
settlement_pending | Broadcast, not yet confirmed. The transaction hash is in the response — do not treat this as failure. |
There is no fee. There is a floor on the amount, a cap per payer per day, and a ceiling on how much gas we spend in a day; all three are published at /meta and /healthz so you can read them before you send rather than discover them from a refusal. The reasoning behind each number is on the facilitator page.
/healthz first and have somewhere else to fall back to. We would rather tell you that than have you find out during a launch.