AgentPay x402 Trust Oracle
POST agentpay.tools/tools/verified_route/call
Why an agent can trust this route.
Sonar evidence is advisory. Paid delivery is shown as verified only when paid probes are available; otherwise route estimates use the unpaid handshake as a clearly labeled proxy.
Observed outcomes
Buyer-side trust oracle for the x402 marketplace: 'I need X, budget $Y — which tool is real?' Sweeps the WHOLE catalog across many queries, collapses sybil/factory clusters (one wallet stamping many fake-distinct listings), ranks the genuinely-used survivors by unique-payer usage, and returns one vetted pick with a ready-to-pay challenge. The credit-bureau check an agent can't do in a single query.
Resource: agentpay.tools/tools/verified_route/call
Network: eip155:8453 · Asset: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 · Pay to: 0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7
Payment methods: eip3009 · Last validation: —
{
"input": {
"body": {
"parameters": {
"need": "dex pair liquidity",
"chain": "",
"budget_usd": 1
}
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"need": "dex pair liquidity",
"catalog": {
"scanned": 117,
"real_providers": 41,
"biggest_factory": {
"pay_to": "0x2bb72231eed3",
"listings": 72
},
"sybil_collapsed": 73
},
"vetting": "swept 17 queries → 117 listings → collapsed 73 sybil listings → 41 real providers",
"recommendation": {
"url": "https://otto.example/dex",
"name": "Otto AI",
"network": "eip155:8453",
"quality": 3851,
"calls30d": 3246,
"payers30d": 200,
"price_usd": "0.001",
"ready_to_pay": {
"url": "https://otto.example/dex",
"accepts": {
"scheme": "exact",
"network": "eip155:8453"
},
"network": "eip155:8453"
}
}
}
},
"paymentRequirements": [
{
"raw": {
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2",
"assetTransferMethod": "eip3009"
},
"payTo": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"amount": "10000",
"scheme": "exact",
"network": "eip155:8453",
"mimeType": "application/json",
"resource": "https://agentpay.tools/tools/verified_route/call",
"description": "AgentPay tool call",
"outputSchema": {
"input": {
"type": "object",
"required": [
"need"
],
"properties": {
"need": {
"type": "string",
"description": "What the agent needs, e.g. 'dex pair liquidity', 'crypto prices'"
},
"chain": {
"type": "string",
"default": "",
"description": "Optional chain filter: 'base', 'arbitrum', 'arbitrum-stack'. Empty = all chains."
},
"budget_usd": {
"type": "number",
"default": 1,
"description": "Max USDC the agent will pay the downstream tool per call"
}
}
},
"errors": [
{
"body": {
"error": "<summary>",
"reason": "<machine-readable reason>"
},
"when": "No payment attached (this challenge), or the attached payment failed verification: wrong amount/recipient, memo mismatch, expired, or already used (replay)",
"retry": "Re-request the challenge and pay again",
"status": 402
},
{
"body": {
"detail": [
{
"loc": [
"body"
],
"msg": "<what is wrong>",
"type": "<error type>"
}
]
},
"when": "Request body present but malformed (invalid JSON or wrong field types) WITH a payment header attached — checked BEFORE settlement, so the payment is never consumed. An unpaid malformed request gets the 402, not a 422",
"retry": "Fix the body and retry with a fresh payment",
"status": 422
},
{
"body": {
"detail": "Tool '<name>' not found"
},
"when": "Unknown tool name",
"status": 404
},
{
"body": {
"error": "Rate limit exceeded"
},
"when": "Rate limited (per-IP and per-wallet limits)",
"retry": "Back off and retry after a minute",
"status": 429
},
{
"body": {
"tool": "<name>",
"error": "Tool execution failed",
"payment_status": "refund_pending"
},
"when": "Payment settled on-chain but tool execution failed — the payment is marked refund_pending automatically; you are not charged for a failed call",
"status": 502
},
{
"body": {
"detail": "<what is unavailable>"
},
"when": "Tool temporarily unavailable, or the gateway cannot persist the challenge (fail-closed)",
"retry": "Retry shortly",
"status": 503
}
],
"output": {
"need": "dex pair liquidity",
"chain": null,
"catalog": {
"scanned": 117,
"after_vetting": 114,
"real_providers": 41,
"unique_wallets": 38,
"biggest_factory": {
"pay_to": "0x2bb72231eed3",
"listings": 72
},
"sybil_collapsed": 73
},
"vetting": "swept 17 queries → 117 listings → collapsed 73 sybil listings → 41 real providers",
"survivors": [],
"budget_usd": "1",
"recommendation": {
"url": "https://otto.example/dex",
"name": "Otto AI",
"flags": [],
"pay_to": "0x0e84ddedaae6a7",
"network": "eip155:8453",
"quality": 3851,
"calls30d": 3246,
"payers30d": 200,
"price_usd": "0.001",
"ready_to_pay": {
"url": "https://otto.example/dex",
"accepts": {
"scheme": "exact",
"network": "eip155:8453"
},
"network": "eip155:8453",
"price_usd": "0.001"
}
}
}
},
"maxTimeoutSeconds": 300
},
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0xE8B25A72dD6aeF69515452a61AD231C7DF2843b7",
"scheme": "exact",
"network": "eip155:8453",
"amountAtomic": "10000"
}
]
}Source catalog records are retained separately from live endpoint observations. Sonar score, uptime, and latency are advisory metrics. CDP indexing is not inferred from validation.