x402 Endpoint Health Check

Does your data endpoint actually “ask for payment correctly”? Paste the endpoint URL and check item-by-item: does it return 402 when unpaid? Is the payment-required header present? Is the network Base mainnet? Are the receiving address and amount correct? Can browsers read custom headers? Is the response fast enough? After checking, you get copy-paste-ready Node/Express code.

Free · No login required Local Request · Data is not uploaded Corresponding Incident · SSE endpoint incorrectly marked as dead

ABrowser Direct Connectivity Health Check

Send a request directly from your browser. If the target does not enable CORS, the browser will block it—use Method B below in that case.

The health check request is sent directly from your browser; the Feegate server does not relay or log it.

BPaste Response Headers for Parsing

Run the generated curl command below on your server, then paste its full output here—this method bypasses CORS restrictions and yields the most accurate result.

CYour收款 parameters (for generating the fix snippet)

USDC has 6 decimal places: 0.01 USDC must be written on-chain as 10000, not 0.01.

ResultHealth check result

Output 1Copyable curl self-check command

0 lines
Auto-generated after filling in the endpoint URL.
Note --noproxy '*': If a proxy is running locally, curl treats the proxy’s 410 response as"站点挂了",我们被这个假警报坑过。

Output 2Server-side fix snippet (Node/Express)

0 lines
Auto-generated after filling in the endpoint URL.
We’ve Fallen into This Pitfall Before

1 · The endpoint returning SSE is marked as "dead".Our own health checker uses a JSON-RPC client to probe the MCP endpoint; the remote side returns an SSE stream instead of JSON, causing parsing failure and marking the endpoint as dead. Later changed to:Check HTTP status codes onlyBoth 200 and 402 indicate the endpoint is alive.

2 · Browsers cannot read custom response headers.Under CORS, only simple response headers are readable,payment-required Must be written into Access-Control-Expose-HeadersOtherwise, the frontend receives null.

3 · Incorrect amount unit.USDC has 6 decimal places.maxAmountRequired Specify the smallest unit: 0.01 USDC = 10000. Written as 0.01 Actually charges only $0.00000001.

4 · Local proxy triggers false alerts.Always add site online status check. --noproxy '*'We previously misinterpreted the proxy’s 410 response as “the naked domain is down”, when it was actually 200.