x402 seller payability check
POST /api/seller-payabilityBuy one call from an x402 seller endpoint right now and report exactly what happened: the unpaid call's status, the 402 decoded (accepts, chains, payTo, asset, price), whether the accept's EIP-712 domain name matches the token it names (the defect that silently makes a whole catalog unpayable), whether a stock client's signed payment was accepted, the settlement receipt and transaction, a slice of the response body, and the time each leg took. Send POST /api/seller-payability with the required field url and pay $0.10 per call over x402 with USDC on an EVM chain. It returns a JSON object with url, method, checkedAt, payable, unpaidCall and 5 more.
Ends in plain-English flags, never a score. This is the live counterpart to seller-dossier, which reports what we already know: this one spends real USDC from our own wallet to find out. Point it at your own endpoint before you launch, or at a seller you are about to route money to. Up to $0.02 of the seller's price per check.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
url | string | yes | The seller endpoint to check (https), e.g. https://api.example.com/tools/summarize Also accepted as link, uri, href, page. |
method | string | no | GET or POST (default POST) - never a verb that could mutate the seller |
body | object | no | Optional JSON body the seller's route expects (POST only) |
maxUsd | number | no | Most to spend on the seller's own price, default 0.01, capped at 0.02 |
Example request
curl -i -X POST https://agent402.tools/api/seller-payability \
-H "Content-Type: application/json" \
-d '{"url":"https://agent402.tools/api/hash","method":"POST","body":{"text":"hello"}}'
Without payment this returns HTTP 402 Payment Required with the exact price for seller-payability; any x402 v2 or MPP client pays it and retries.
Example response
{
"url": "https://agent402.tools/api/hash",
"method": "POST",
"checkedAt": "2026-09-11T02:00:00.000Z",
"payable": true,
"unpaidCall": {
"status": 402,
"contentType": "application/json",
"error": null,
"ms": 180,
"bodySlice": "{}"
},
"challenge": {
"readable": true,
"networks": [
"eip155:8453"
],
"priceUsd": 0.01,
"payTo": "0x…",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"pricedFrom": "eip155:8453",
"accepts": []
},
"domainFindings": [
{
"network": "eip155:8453",
"verdict": "matches",
"advertisedName": "USD Coin",
"expectedName": "USD Coin",
"chain": "Base"
}
],
"payment": {
"attempted": true,
"status": 200,
"settled": true,
"error": null,
"ms": 2400,
"receipt": {
"network": "eip155:8453",
"payer": "0x…",
"transaction": "0x…",
"success": true
}
},
"responseSlice": "{\"summary\":\"…\"}",
"flags": [
"a stock buyer can pay this endpoint and get a result: nothing to fix"
]
}
| Field | Type | Always present | In the example |
|---|---|---|---|
url | string | no | https://agent402.tools/api/hash |
method | string | no | POST |
checkedAt | string | no | 2026-09-11T02:00:00.000Z |
payable | boolean | no | true |
unpaidCall | object | no | 5 fields: status, contentType, error, ms, bodySlice |
challenge | object | no | 7 fields: readable, networks, priceUsd, payTo, asset, pricedFrom |
domainFindings | array of objects | no | 1 item in the example |
payment | object | no | 6 fields: attempted, status, settled, error, ms, receipt |
responseSlice | string | no | {"summary":"…"} |
flags | array of string | no | 1 item in the example |
From an MCP client
catalog.call {
"slug": "seller-payability",
"params": {
"url": "https://agent402.tools/api/hash",
"method": "POST",
"body": {
"text": "hello"
}
}
}
The hosted connector at https://agent402.tools/mcp needs a payment for seller-payability; the stdio package pays it from a wallet or from AGENT402_CREDITS_KEY. Local install: npx -y agent402-mcp.
Errors and behavior
urlis required. An input the tool rejects returns an HTTP 4xx whose body carrieserror,tool,expected,requiredandexample, so the caller can correct it.- A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is cancelled when the tool fails.
- Wallet-only: this tool reaches the network or stored state, so it has no proof-of-work tier. A prepaid card-credits key issued earlier (
Authorization: Bearer a402_...) also pays it. - Long-running: payment settles after the work finishes, so only EVM exact payments are offered.
- A
GETorHEADto /api/seller-payability returns the same 402 quote, so the price can be read without a body. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/seller-payability", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"url": "https://agent402.tools/api/hash",
"method": "POST",
"body": {
"text": "hello"
}
}),
});
Related tools
x402 seller dossier
POST /api/seller-dossierEverything Agent402 knows about one x402 seller origin, in one read: identity and crawl history, the catalog with the pr…
Check an x402 seller's trust evidence
GET /api/x402/seller-trustTrust evidence for any x402 seller origin: is it indexed, does its manifest parse, how many tools does it publish, which…
Verify x402 settlement
GET /api/x402-verifyConfirm a USDC payment actually settled: given a tx hash (and network), returns whether it succeeded and the USDC transf…
Route and execute
POST /api/route/executeDescribe a task (or name a slug) and the Smart Order Router resolves the best-matching tool and RUNS it in the same call…
Route and execute (max tier)
POST /api/route/execute-maxDescribe a task (or name a slug) and the Smart Order Router resolves the best-matching tool and RUNS it in the same call…
Route and execute (plus tier)
POST /api/route/execute-plusDescribe a task (or name a slug) and the Smart Order Router resolves the best-matching tool and RUNS it in the same call…