Developer
Developers
Call ContextIQ tools programmatically. Every endpoint accepts either a Pro API key or a per-call x402 USDC payment — no account required for the latter.
Your keys
Every endpoint below works right now with no account at all, paid per call via x402. Sign in only if you want a reusable API key instead of a per-call on-chain payment.
About x402 wire versions
“v1” and “v2” mean two different things here, worth keeping separate:
1. How you pay us. Every endpoint speaks wire v1 by default — the payment challenge in the JSON response body, proven with an X-PAYMENT header. Endpoints marked x402-v2below have a sibling route (see each endpoint's note for its exact path) that returns the identical result but issues its own challenge as wire v2 instead — CAIP-2 network ids, the challenge in a base64 PAYMENT-REQUIRED response header, proven with a PAYMENT-SIGNATURE header instead of X-PAYMENT, and a Bazaar discovery extension attached (a pilot for Coinbase's Bazaar/Agent.market catalog — listing isn't guaranteed even when the challenge is spec-compliant). Sending the wrong proof header for the route you called will fail.
2. What x402 Inspector and Agent Commerce Gate can read on someone else's endpoint.This is independent of which of our routes you called. Whether you hit our v1 or v2 route, our scanner reads a target's challenge from wherever it actually lives — the JSON body (v1-style) or the PAYMENT-REQUIREDheader (v2-style) — and treats the header as authoritative whenever it's present, even if the target's body is empty or just diagnostic, since the spec itself calls the response body a server implementation detail. You don't need to already know which wire version a target speaks before checking it.
Pricing & rate limits
| Tool | Method | Price | Rate limit |
|---|---|---|---|
Token Inspector pricing /api/v1/token-inspector/pricing/api/v1/token-inspector/pricing/x402-v2 | GET | $0.02 USDC/call | 60/min · 5,000/day |
Agent Protocol Inspector (scan, scanId lookup, and compare — v1 + v2) /api/v1/agent-protocol-inspector/api/v1/agent-protocol-inspector/x402-v2/api/v1/agent-protocol-inspector/{scanId}/api/v1/agent-protocol-inspector/x402-v2/{scanId}/api/v1/agent-protocol-inspector/compare/api/v1/agent-protocol-inspector/x402-v2/compare | POST/GET | $0.02 USDC/call | 20/min · 1,000/day Shared across all 6 paths listed — not a separate allowance per path. |
DNS Inspector /api/v1/dns-inspector/api/v1/dns-inspector/x402-v2 | POST | $0.02 USDC/call | 30/min · 2,000/day |
ERC-8004 Inspector /api/v1/erc8004-inspector/api/v1/erc8004-inspector/x402-v2 | POST | $0.02 USDC/call | 20/min · 1,000/day |
x402 Inspector /api/v1/x402-inspector/api/v1/x402-inspector/x402-v2 | POST | $0.02 USDC/call | 20/min · 1,000/day |
Agent Commerce Gate (decision, receipt, and checkId lookup — v1 + v2) /api/v1/policy-check/api/v1/policy-check/x402-v2/api/v1/policy-check/receipt/api/v1/policy-check/receipt/x402-v2/api/v1/policy-check/{checkId}/api/v1/policy-check/x402-v2/{checkId} | POST/GET | $0.02 USDC/call | 20/min · 1,000/day Shared across all 6 paths listed — not a separate allowance per path. |
Endpoints
/api/v1/token-inspector/pricingLook up per-model LLM pricing
Returns the current Token Inspector model catalog — every built-in model with its provider, tokenizer family, context window, and per-1M-token input/output pricing.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl https://contextiq.trango-compute.com/api/v1/token-inspector/pricing \ -H "Authorization: Bearer sk_live_..."
Response
{
"models": [
{
"id": "gpt-4o",
"name": "GPT-4o",
"provider": "OpenAI",
"tokenizerFamily": "o200k",
"contextWindow": 128000,
"inputPricePerM": 2.5,
"outputPricePerM": 10,
"isOpenSource": false
}
],
"generatedAt": "2026-08-01T12:00:00.000Z"
}Also speaks x402-v2 at /api/v1/token-inspector/pricing/x402-v2 — same result, see the callout above.
Agent Protocol Inspector: scan, look up, and compare
Three related endpoints. A scan (below) returns a scanId — hold onto it to look that exact scan back up without re-running it, or to diff two scans for a pass/warn/fail regression verdict (both further below). Agentic Commerce bundle →
/api/v1/agent-protocol-inspectorDetect MCP/A2A/ARD support on a URL
Scans a target URL for MCP, A2A, and ARD agent-protocol support (plus an llms.txt discoverability check) — the same scan that powers the Agent Protocol Inspector dashboard tool. The response also includes a normalized capability review and a deterministic IGA Review Packet (recommended decision, risk findings, reviewer/owner questions) derived from whatever skills/tools were declared, and a scanId for the two endpoints below.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl -X POST https://contextiq.trango-compute.com/api/v1/agent-protocol-inspector \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "huggingface.co/mcp"}'Response
{
"target": "https://huggingface.co/mcp",
"origin": "https://huggingface.co",
"protocols": {
"mcp": { "status": "confirmed", "evidence": [] },
"a2a": { "status": "not_detected", "evidence": [] },
"ard": { "status": "not_detected", "evidence": [] }
},
"llmsTxt": { "found": false, "url": "https://huggingface.co/llms.txt" },
"detectedCount": 1,
"scannedAt": "2026-08-04T12:00:00.000Z",
"conformance": "pass",
"scanId": "7f3c9a2e-1b44-4e8d-9c2a-5e7d0f1a8b3c",
"normalizedAgent": { "skills": [{ "...": "..." }] },
"capabilities": [{ "label": "Search or retrieve data", "category": "read_data", "risk": "low", "...": "..." }],
"igaPacket": { "recommendedDecision": "approve", "highestRisk": "low", "...": "..." }
}Also speaks x402-v2 at /api/v1/agent-protocol-inspector/x402-v2 — same result, see the callout above.
/api/v1/agent-protocol-inspector/{scanId}Look up a prior scan without re-scanning
Redeems the scanId returned by a scan call to fetch that exact scan again — no re-scan, no re-payment. normalizedAgent/capabilities/igaPacket are recomputed fresh on every lookup rather than cached from when the scan originally ran, so a capability-rule improvement shipped later applies to an old scan immediately. Ownership-scoped for logged-in/paid-tier scans (a scanId from another account 404s); an anonymous-tier scanId resolves for anyone holding it within its short retention window.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl https://contextiq.trango-compute.com/api/v1/agent-protocol-inspector/7f3c9a2e-1b44-4e8d-9c2a-5e7d0f1a8b3c \ -H "Authorization: Bearer sk_live_..."
Response
{
"target": "https://huggingface.co/mcp",
"scanId": "7f3c9a2e-1b44-4e8d-9c2a-5e7d0f1a8b3c",
"conformance": "pass",
"protocols": { "mcp": { "status": "confirmed", "...": "..." }, "a2a": { "...": "..." }, "ard": { "...": "..." } },
"normalizedAgent": { "...": "..." },
"capabilities": [{ "...": "..." }],
"igaPacket": { "recommendedDecision": "approve", "...": "..." }
}Also speaks x402-v2 at /api/v1/agent-protocol-inspector/x402-v2/{scanId} — same result, see the callout above.
/api/v1/agent-protocol-inspector/compareDiff two scans for a pass/warn/fail regression verdict
Structurally compares two of your own prior scans (by scanId) — a protocol status regression, or a removed MCP tool/A2A skill/auth mechanism, rolls up to a 'fail' verdict; an addition or a schema change rolls up to 'warn'. Built for CI: run a scan after every deploy, store the scanId, and diff each new deploy's scan against it to catch a regression before it reaches users. Both scanIds go through the same ownership check as the lookup endpoint above — comparing across two different accounts' scans 404s regardless of which side either scan lands on.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl -X POST https://contextiq.trango-compute.com/api/v1/agent-protocol-inspector/compare \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"baselineScanId": "7f3c9a2e-1b44-4e8d-9c2a-5e7d0f1a8b3c", "currentScanId": "a1d8e4f0-22b7-4c91-8e5a-9f0c1d2b3a4e"}'Response
{
"baselineScanId": "7f3c9a2e-1b44-4e8d-9c2a-5e7d0f1a8b3c",
"currentScanId": "a1d8e4f0-22b7-4c91-8e5a-9f0c1d2b3a4e",
"verdict": "fail",
"protocols": {
"mcp": { "statusChanged": false, "from": "confirmed", "to": "confirmed", "itemsRemoved": ["search_docs"] },
"a2a": { "statusChanged": false, "from": "not_detected", "to": "not_detected" },
"ard": { "statusChanged": false, "from": "not_detected", "to": "not_detected" }
},
"summary": ["MCP tool(s) removed: search_docs"]
}Also speaks x402-v2 at /api/v1/agent-protocol-inspector/x402-v2/compare — same result, see the callout above.
/api/v1/dns-inspectorLook up DNS, SPF, DMARC, and CAA records
Looks up A, AAAA, CNAME, NS, MX, TXT, SOA, and CAA records for a domain over DNS-over-HTTPS, with SPF/DMARC verdicts and DNS host / mail provider detection — the same scan that powers the DNS Inspector dashboard tool.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl -X POST https://contextiq.trango-compute.com/api/v1/dns-inspector \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "example.com"}'Response
{
"domain": "example.com",
"found": true,
"records": { "A": [], "AAAA": [], "CNAME": [], "NS": [], "MX": [], "TXT": [], "SOA": null, "CAA": [] },
"spf": { "record": null, "mechanisms": [], "allQualifier": null },
"dmarc": { "record": null, "policy": null, "subdomainPolicy": null, "pct": null, "reportTo": [], "verdict": "unprotected" },
"caaVerdict": "unrestricted",
"providers": { "dnsHost": null, "mailProvider": null },
"connectedServices": [],
"scannedAt": "2026-08-04T12:00:00.000Z"
}Also speaks x402-v2 at /api/v1/dns-inspector/x402-v2 — same result, see the callout above.
Agentic Commerce APIs
x402 Inspector, ERC-8004 Inspector, and Agent Commerce Gate compose together: x402 Inspector validates a counterparty's payment challenge is well-formed, ERC-8004 Inspector vets their on-chain identity and reputation, and Agent Commerce Gate combines both into a single allow/warn/block decision — plus a receipt endpoint to independently verify a settlement afterward. See the Agentic Commerce bundle page for the full pitch. Agentic Commerce bundle →
/api/v1/x402-inspectorValidate an endpoint's x402 payment challenge
Validates a target endpoint's x402 payment challenge — response shape, network/address format, and spec-version detection (with a GET→POST method fallback for POST-only resources) — the same scan that powers the x402 Inspector dashboard tool. For v2 endpoints that declare a Bazaar discovery extension, also surfaces the declared response shape (schema/example) as expectedResult, so a caller can see what they'll get back before paying. Does not verify facilitator reachability or complete live payment settlement.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl -X POST https://contextiq.trango-compute.com/api/v1/x402-inspector \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"url": "contextiq.trango-compute.com/api/v1/policy-check/x402-v2"}'Response
{
"target": "https://contextiq.trango-compute.com/api/v1/policy-check/x402-v2",
"status": "valid",
"evidence": [
"POST ... responded 402 with a parseable x402 payment challenge",
"Endpoint declares an expected response shape via a Bazaar discovery extension"
],
"warnings": [],
"details": {
"methodUsed": "POST",
"httpStatus": 402,
"x402Version": 2,
"versionLabel": "v2",
"accepts": [{ "scheme": "exact", "network": "eip155:8453", "payTo": "0x...", "asset": "0x..." }]
},
"expectedResult": {
"source": "bazaar-extension",
"method": "POST",
"schema": { "type": "object", "properties": { "decision": { "type": "string" }, "score": { "type": "number" } } },
"example": { "decision": "allow", "score": 95, "maxScore": 100 }
},
"scannedAt": "2026-08-22T12:00:00.000Z"
}Also speaks x402-v2 at /api/v1/x402-inspector/x402-v2 — same result, see the callout above.
/api/v1/erc8004-inspectorLook up an on-chain agent's identity and reputation
Looks up an ERC-8004 agent by agent ID — live on-chain reads from the Identity Registry (owner, agent wallet, tokenURI/metadata) and Reputation Registry (client count, aggregate feedback score) — the same lookup that powers the ERC-8004 Inspector dashboard tool (Beta). Address-based lookup isn't supported: the registry isn't ERC-721-Enumerable and free RPC providers reject unbounded event-log queries. ValidationRegistry isn't covered — no verified address is published for it.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl -X POST https://contextiq.trango-compute.com/api/v1/erc8004-inspector \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"agentId": "1", "network": "ethereum"}'Response
{
"agentId": "1",
"network": "ethereum",
"networkLabel": "Ethereum",
"status": "found",
"identity": { "owner": "0x...", "agentWallet": "0x..." },
"reputation": {
"clientCount": 2,
"clients": ["0x...", "0x..."],
"summary": { "count": 6, "value": "51", "valueDecimals": 0 }
},
"warnings": [],
"scannedAt": "2026-08-24T12:00:00.000Z"
}Also speaks x402-v2 at /api/v1/erc8004-inspector/x402-v2 — same result, see the callout above.
/api/v1/policy-checkDecide allow/warn/block before paying a counterparty
Combines an ERC-8004 identity/reputation lookup with an x402 payment-challenge validation into a single allow/warn/block decision with a transparent, itemized score — for gating an agent's autonomous payments on the result. agentId is optional — omit it to score the payment challenge alone (identity/reputation are marked 'not checked' rather than run against a fake ID). Pro feature, no free tier: requires a Pro API key or a per-call x402 payment on every request. The response includes a checkId — hold onto it to bind a settlement receipt to this decision (below), or to look the decision back up later without re-running it (further below). If you've customized your scoring rubric on the dashboard (Pro), calls made with your API key use your saved weights and thresholds instead of the defaults — maxScore reflects your own configured total, not always 100. Anonymous per-call x402 payments always use the default rubric.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl -X POST https://contextiq.trango-compute.com/api/v1/policy-check \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"endpoint": "https://api.example.com/paid-resource", "agentId": "1", "network": "ethereum"}'Response
{
"protocol": "x402",
"decision": "allow",
"score": 70,
"maxScore": 100,
"reasons": [
{ "check": "erc8004_identity_found", "points": 15, "maxPoints": 15, "detail": "Agent #1 is registered on Ethereum" },
{ "check": "x402_challenge_valid", "points": 20, "maxPoints": 20, "detail": "Payment challenge is well-formed with a usable option" }
],
"identity": { "agentId": "1", "network": "ethereum", "status": "found", "...": "..." },
"payment": { "target": "https://api.example.com/paid-resource", "status": "valid", "...": "..." },
"scannedAt": "2026-08-27T12:00:00.000Z",
"checkId": "b3f1c2a4-...-a1b2c3d4e5f6"
}Also speaks x402-v2 at /api/v1/policy-check/x402-v2 — same result, see the callout above.
/api/v1/policy-check/receiptBind a settlement receipt to a prior decision
After paying the endpoint an Agent Commerce Gate decision was made about, submit the on-chain transaction hash here. Independently verifies the transaction against the chain itself (not just trusting your claim) — confirms it's mined, decodes the ERC-20 transfer, and checks it actually paid the expected payTo address for at least the expected amount. Returns the original decision and the verified receipt side by side. Pro feature, no free tier. Note: settlement receipts require the payment middleware's own /settle call to have run (@trango/x402-middleware v0.4.0+) — earlier middleware versions never actually broadcast a transaction, so there'd be nothing to verify.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl -X POST https://contextiq.trango-compute.com/api/v1/policy-check/receipt \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"checkId": "b3f1c2a4-...-a1b2c3d4e5f6", "transaction": "0x1234...abcd"}'Response
{
"checkId": "b3f1c2a4-...-a1b2c3d4e5f6",
"decision": { "protocol": "x402", "decision": "allow", "score": 70, "...": "..." },
"receipt": {
"network": "base-sepolia",
"status": "confirmed",
"blockNumber": "18234521",
"payer": "0x857b...b66",
"transfers": [{ "token": "0x036C...dCF7e", "from": "0x857b...b66", "to": "0x2096...287C", "valueAtomic": "20000" }],
"matchesExpectedPayment": true,
"evidence": ["Transaction mined in block 18234521 with status success", "..."],
"warnings": [],
"verifiedAt": "2026-09-10T12:00:00.000Z"
}
}Also speaks x402-v2 at /api/v1/policy-check/receipt/x402-v2 — same result, see the callout above.
/api/v1/policy-check/{checkId}Look up a prior decision without re-running it
Redeems the checkId returned by a Policy Check call to fetch that exact decision again — no re-scan, no re-payment. Useful when a caller already has the checkId from an earlier response (e.g. to log it, hand it to another service, or check it again before acting) and just needs the record back. Not scoped to whoever ran the original check — checkId is a high-entropy UUID, and holding it is treated as sufficient proof you received it, the same way a claim ticket or tracking number works without a login check. Pro feature, no free tier.
Auth
Authorization: Bearer <your API key> (or) X-PAYMENT: <x402 payment proof> — $0.02 USDC per call on Base, no key required
Request
curl https://contextiq.trango-compute.com/api/v1/policy-check/b3f1c2a4-...-a1b2c3d4e5f6 \ -H "Authorization: Bearer sk_live_..."
Response
{
"checkId": "b3f1c2a4-...-a1b2c3d4e5f6",
"endpoint": "https://api.example.com/paid-resource",
"agentId": "1",
"network": "ethereum",
"createdAt": "2026-09-10T12:00:00.000Z",
"protocol": "x402",
"decision": "allow",
"score": 70,
"maxScore": 100,
"reasons": [{ "check": "erc8004_identity_found", "points": 15, "maxPoints": 15, "detail": "Agent #1 is registered on Ethereum" }]
}Also speaks x402-v2 at /api/v1/policy-check/x402-v2/{checkId} — same result, see the callout above.