Is this x402/MPP API safe to pay? $0.001 preflight, fixes, a $0.25 test purchase. Free quick check.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Free: after paying an x402 endpoint, pass the PAYMENT-RESPONSE header it returned (X-PAYMENT-RESPONSE in v1). Returns the transaction, network and payer it names, whether that transaction exists on-chain and succeeded, and which USDC moved from whom to whom, with an explorer link. Read-only. Limited to 10 calls per hour.
The PAYMENT-RESPONSE header value (base64 JSON)
Free: after paying an x402 endpoint, pass the PAYMENT-RESPONSE header it returned (X-PAYMENT-RESPONSE in v1). Returns the transaction, network and payer it names, whether that transaction exists on-chain and succeeded, and which USDC moved from whom to whom, with an explorer link. Read-only. Limited to 10 calls per hour.
| Argument | Type | Description |
|---|---|---|
| header* | string | The PAYMENT-RESPONSE header value (base64 JSON) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"header"
],
"properties": {
"header": {
"type": "string",
"maxLength": 20000,
"minLength": 8,
"description": "The PAYMENT-RESPONSE header value (base64 JSON)"
}
},
"additionalProperties": false
}Report a bug, a missing feature or anything else about this service, in a structured way. Free. A person reads every report; nothing is run or changed automatically.
| Argument | Type | Description |
|---|---|---|
| type | string | bug, feature (something missing) or other |
| contact | string | Optional: how to reach you about it |
| message* | string | What happened or what you need |
| endpoint | string | Optional: the route or tool it is about, e.g. /v1/token |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"message"
],
"properties": {
"type": {
"enum": [
"bug",
"feature",
"other"
],
"type": "string",
"description": "bug, feature (something missing) or other"
},
"contact": {
"type": "string",
"description": "Optional: how to reach you about it"
},
"message": {
"type": "string",
"description": "What happened or what you need"
},
"endpoint": {
"type": "string",
"description": "Optional: the route or tool it is about, e.g. /v1/token"
}
},
"additionalProperties": false
}Free: check the signed receipt that every paid x402 Doctor answer carries (diagnose, preflight, batch, deep, fix, delivery check; HTTP or MCP), for example to prove later which verdict you got before paying an endpoint. Pass the whole answer as response. Returns valid, the signer and whether it is an x402 Doctor signer; with route and input also whether the receipt is for exactly that request. A changed verdict or receipt fails. Read-only, nothing is stored. Same as POST /api/v1/verify.
| Argument | Type | Description |
|---|---|---|
| input | object | The tool arguments you sent (MCP), or the query parameters as strings (HTTP) |
| route | string | The request it answered: "mcp <tool name>" for an MCP answer (e.g. "mcp x402_preflight"), "GET /api/v1/preflight" for an HTTP one |
| response* | object | The whole paid answer as you received it, including its receipt |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"response"
],
"properties": {
"input": {
"type": "object",
"description": "The tool arguments you sent (MCP), or the query parameters as strings (HTTP)",
"additionalProperties": {}
},
"route": {
"type": "string",
"description": "The request it answered: \"mcp <tool name>\" for an MCP answer (e.g. \"mcp x402_preflight\"), \"GET /api/v1/preflight\" for an HTTP one"
},
"response": {
"type": "object",
"description": "The whole paid answer as you received it, including its receipt",
"additionalProperties": {}
}
},
"additionalProperties": false
}Paid ($0.25 via x402 in USDC on Base, Solana, Algorand or Stellar, or in RLUSD on the XRP Ledger): not a reading but a purchase. x402 Doctor buys the endpoint once (at most $0.1, USDC on Base, from its own wallet) with the example input its listing declares, checks the answer against the declared output schema, has TypeSafe's Jev judge whether it is what was paid for, and measures the charge on chain. Answers with a job id at once; follow it with x402_delivery_status (free), the result usually comes within minutes. The endpoint must get a "go" from the pre-payment check and be payable in USDC on Base; otherwise it is refused before payment. Same as GET /api/v1/delivery-check. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint to buy once (https, someone else's, payable in USDC on Base) |
| method | string | HTTP method of the paid route (default: GET, then POST) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint to buy once (https, someone else's, payable in USDC on Base)"
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method of the paid route (default: GET, then POST)"
}
},
"additionalProperties": false
}Free: the status of a delivery check ordered with x402_delivery_check (or GET /api/v1/delivery-check): awaiting_payment, queued or done, and once done the result: paid_and_delivered, the outcome, the charge measured on chain and the transaction.
| Argument | Type | Description |
|---|---|---|
| id* | string | The job id x402_delivery_check answered with |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9]{10}$",
"description": "The job id x402_delivery_check answered with"
}
},
"additionalProperties": false
}Paid ($0.01 via x402 in USDC on Base, Solana, Algorand or Stellar, or in RLUSD on the XRP Ledger): diagnose an x402 endpoint the way a paying agent would, without paying it: the 402 challenge format, every accepts[] option, the resource URL, Solana settlement readiness, which wallets can pay, Bazaar/OpenAPI discovery and the browser paywall. Returns every check with pass/warn/fail and a fix hint. For the endpoint's owner or a developer debugging it; to decide whether to pay someone else's endpoint, use x402_preflight. Same as GET /api/v1/diagnose. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid |
| body | string | Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried. |
| method | string | HTTP method of the paid route (default: GET, then POST) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid"
},
"body": {
"type": "string",
"maxLength": 16384,
"description": "Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried."
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method of the paid route (default: GET, then POST)"
}
},
"additionalProperties": false
}Paid ($0.05 via x402 in USDC on Base, Solana, Algorand or Stellar, or in RLUSD on the XRP Ledger): diagnoses your x402 endpoint, then returns per problem the concrete change as code for your stack (express, next, hono, node, python, generic), filled in with your own payTo, amount, network and route. For the endpoint's owner: includes the diagnosis, so there is no need to call x402_diagnose first. Same as GET /api/v1/fix. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid |
| body | string | Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried. |
| stack | string | Your server stack (default: detected) |
| method | string | HTTP method of the paid route (default: GET, then POST) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid"
},
"body": {
"type": "string",
"maxLength": 16384,
"description": "Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried."
},
"stack": {
"enum": [
"express",
"next",
"hono",
"node",
"python",
"generic"
],
"type": "string",
"description": "Your server stack (default: detected)"
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method of the paid route (default: GET, then POST)"
}
},
"additionalProperties": false
}Paid ($0.001 via x402 in USDC on Base, Solana, Algorand or Stellar, or in RLUSD on the XRP Ledger): call this before your agent pays an x402 endpoint. Returns go, caution or no_go, the recommended payment option, and why: payment would fail, the seller's payout address is on the OFAC SDN sanctions list, over your budget (max_usd), price above what is advertised, not HTTPS, unknown token, its 30-day track record. Never pays the endpoint. The buyer's check for one call; for several endpoints at once use x402_preflight_batch, before a payment above about $1 x402_preflight_deep, and to debug your own endpoint x402_diagnose. Same as GET /api/v1/preflight. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid |
| body | string | Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried. |
| client | string | Set to gateway when your agent pays with Circle's Gateway client (@circle-fin/x402-batching) from a Gateway balance: Gateway-only endpoints are then not a caution, and Gateway options are recommended first. |
| method | string | HTTP method of the paid route (default: GET, then POST) |
| max_usd | number | Your budget per call in USD, e.g. 0.05 |
Paid ($0.005 via x402 in USDC on Base, Solana, Algorand or Stellar, or in RLUSD on the XRP Ledger): the pre-payment check for up to 10 x402 endpoints at once. Per endpoint go, caution or no_go, the recommended payment option and why, plus totals. For marketplaces and agents that weigh several services. Never pays the endpoints. Same as GET /api/v1/preflight/batch. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Argument | Type | Description |
|---|---|---|
| urls* | array | The x402 endpoints to check (public http(s) URLs), at most 10 |
| client | string | Set to gateway when your agent pays with Circle's Gateway client (@circle-fin/x402-batching) from a Gateway balance: Gateway-only endpoints are then not a caution, and Gateway options are recommended first. |
| method | string | HTTP method of the paid route (default: GET, then POST) |
| max_usd | number | Your budget per call in USD, e.g. 0.05 |
| network | string | CAIP-2 network you want to pay on, e.g. eip155:8453 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"urls"
],
"properties": {
"urls": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"description": "The x402 endpoints to check (public http(s) URLs), at most 10"
},
"client": {
"enum": [
"gateway"
],
"type": "string",
"description": "Set to gateway when your agent pays with Circle's Gateway client (@circle-fin/x402-batching) from a Gateway balance: Gateway-only endpoints are then not a caution, and Gateway options are recommended first."
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method of the paid route (default: GET, then POST)"
},
"max_usd": {
"type": "number",
"description": "Your budget per call in USD, e.g. 0.05",
"exclusiveMinimum": 0
},
"network": {
"type": "string",
"description": "CAIP-2 network you want to pay on, e.g. eip155:8453"
}
},
"additionalProperties": false
}Paid ($0.01 via x402 in USDC on Base, Solana, Algorand or Stellar, or in RLUSD on the XRP Ledger): for expensive calls. The pre-payment verdict (go, caution or no_go) plus the full diagnosis, the 30-day history per day, how reliable the seller's other endpoints are and whether the endpoint moved domains. Never pays the endpoint. Worth it before a payment above about $1; for an ordinary call x402_preflight is enough. Same as GET /api/v1/preflight/deep. The answer carries a signed receipt (EIP-191, bound to your arguments) that proves later which verdict you got.
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid |
| body | string | Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried. |
| client | string | Set to gateway when your agent pays with Circle's Gateway client (@circle-fin/x402-batching) from a Gateway balance: Gateway-only endpoints are then not a caution, and Gateway options are recommended first. |
| method | string | HTTP method of the paid route (default: GET, then POST) |
| max_usd | number | Your budget per call in USD, e.g. 0.5 |
| network | string |
Free: does this x402 endpoint work for a paying agent? Returns pass, warn or fail with the number of problems and the top three. Limited to 10 calls per hour. For every check use x402_diagnose ($0.01); for code changes x402_fix ($0.05); before paying someone else's endpoint x402_preflight ($0.001).
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid |
| body | string | Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried. |
| method | string | HTTP method of the paid route (default: GET, then POST) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid"
},
"body": {
"type": "string",
"maxLength": 16384,
"description": "Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried."
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method of the paid route (default: GET, then POST)"
}
},
"additionalProperties": false
}Free: add your own paid endpoint to the x402 Trust Index when no registry lists it yet (CDP Bazaar, Circle's Agent Marketplace, GoPlausible, MPP directory). x402 Doctor first checks that it answers 402 with a payment challenge (x402, MPP or L402); the next daily scan starts its record, which buyers' agents see before they pay. At most 25 endpoints per host. Limited to 10 calls per hour.
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid"
}
},
"additionalProperties": false
}Free: the daily track record of a paid x402 or MPP endpoint from the x402 Trust Index: on how many of the last 30 scanned days an agent could pay it, the latest verdict and reasons, price and networks. found: false when it is not in the index; add your own endpoint with x402_trust_add. Limited to 10 calls per hour. Before paying, x402_preflight ($0.001) checks the live 402 and includes this record.
| Argument | Type | Description |
|---|---|---|
| url* | string | The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid"
}
},
"additionalProperties": false
}| network | string | CAIP-2 network you want to pay on, e.g. eip155:8453 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid"
},
"body": {
"type": "string",
"maxLength": 16384,
"description": "Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried."
},
"client": {
"enum": [
"gateway"
],
"type": "string",
"description": "Set to gateway when your agent pays with Circle's Gateway client (@circle-fin/x402-batching) from a Gateway balance: Gateway-only endpoints are then not a caution, and Gateway options are recommended first."
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method of the paid route (default: GET, then POST)"
},
"max_usd": {
"type": "number",
"description": "Your budget per call in USD, e.g. 0.05",
"exclusiveMinimum": 0
},
"network": {
"type": "string",
"description": "CAIP-2 network you want to pay on, e.g. eip155:8453"
}
},
"additionalProperties": false
}| CAIP-2 network you want to pay on, e.g. eip155:8453 |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The x402 endpoint (public http(s) URL), e.g. https://api.example.com/paid"
},
"body": {
"type": "string",
"maxLength": 16384,
"description": "Example JSON request body, for a POST route that checks its input before the 402 (implies POST). Without it, {} is sent and the requestBody example in the endpoint's /openapi.json is tried."
},
"client": {
"enum": [
"gateway"
],
"type": "string",
"description": "Set to gateway when your agent pays with Circle's Gateway client (@circle-fin/x402-batching) from a Gateway balance: Gateway-only endpoints are then not a caution, and Gateway options are recommended first."
},
"method": {
"enum": [
"GET",
"POST"
],
"type": "string",
"description": "HTTP method of the paid route (default: GET, then POST)"
},
"max_usd": {
"type": "number",
"description": "Your budget per call in USD, e.g. 0.5",
"exclusiveMinimum": 0
},
"network": {
"type": "string",
"description": "CAIP-2 network you want to pay on, e.g. eip155:8453"
}
},
"additionalProperties": false
}