{
  "name": "TrustBench",
  "description": "Non-custodial routing and audit layer for x402 that produces signed evidence rather than opinion. Every paid /route call emits an Ed25519-signed receipt covering the routing decision and the on-chain settlement reference, verifiable offline against a published public key with no dependency on TrustBench being online or honest. Hard spend caps, idempotency keys, and a fail-safe paywall (refuses to charge when the upstream merchant is non-conformant, so money never moves on bad routes) are bundled in. Agents sign their own EIP-3009 transferWithAuthorization with their own wallet (Coinbase Agentic Wallet recommended); TrustBench constructs the quote, routes to a probed and scored provider, observes the on-chain settlement, and emits the signed receipt.",
  "version": "0.1.0",
  "phase": "phase-4",
  "homepage": "https://trustbench.io",
  "documentation": {
    "methodology": "https://trustbench.io/methodology",
    "skill": "https://trustbench.io/skill.md",
    "llmsTxt": "https://trustbench.io/llms.txt",
    "readme": "https://github.com/lithvall/TrustBench/blob/main/README.md",
    "strategy": "https://github.com/lithvall/TrustBench/blob/main/TrustBench-strategy.md",
    "receiptSpec": "https://github.com/lithvall/TrustBench/blob/main/receipt-spec-v1.md"
  },
  "publicEndpoints": {
    "health": "https://trustbench.io/health",
    "rankings": "https://trustbench.io/rankings",
    "rankingsPaid": "https://trustbench.io/rankings/paid",
    "routeRead": "https://trustbench.io/route",
    "receipt": "https://trustbench.io/receipts/:id",
    "analytics": "https://trustbench.io/analytics",
    "methodology": "https://trustbench.io/methodology",
    "pricing": "https://trustbench.io/pricing",
    "mcpTools": "https://trustbench.io/mcp/tools"
  },
  "endpoints": [
    {
      "path": "/route",
      "method": "POST",
      "paid": true,
      "pricing_tier": "score-provider",
      "price_usdc": "0.005",
      "amount_atomic": "5000",
      "available_in": "v0.1.0",
      "payment_required_doc": "https://trustbench.io/pricing#tiers",
      "auth": "Bearer tb_live_<key> today; x402 payment-as-auth when TRUSTBENCH_PAYWALL_ENABLED=true",
      "description": "Non-custodial routing decision with Ed25519-signed routing receipt."
    },
    {
      "path": "/route/settle",
      "method": "POST",
      "paid": false,
      "available_in": "v0.1.0",
      "description": "Step 2 of the two-step quote/settle flow; settle fee is paid at quote time via the /route paywall."
    },
    {
      "path": "/rankings",
      "method": "GET",
      "paid_html": false,
      "paid_json_above_quota": "v0.2.0 (60 req/IP/min free, then $0.0005 per call)",
      "pricing_tier": "read",
      "available_in": "v0.1.0",
      "description": "HTML responses free permanently. JSON paid above per-IP free-tier quota starting in v0.2.0."
    },
    {
      "path": "/receipts/:id",
      "method": "GET",
      "paid_html": false,
      "paid_json_above_quota": "v0.2.0 (60 req/IP/min free, then $0.0005 per call)",
      "pricing_tier": "read",
      "available_in": "v0.1.0",
      "description": "Public, immutable receipt envelope. HTML free permanently."
    },
    {
      "path": "/score-provider",
      "method": "POST",
      "paid": true,
      "pricing_tier": "score-provider",
      "price_usdc": "0.005",
      "amount_atomic": "5000",
      "available_in": "v0.2.0",
      "description": "Reads liveness telemetry plus risk annotations for any registered URL."
    },
    {
      "path": "/verify",
      "method": "POST",
      "paid": true,
      "pricing_tier": "verify",
      "price_usdc": "0.002",
      "amount_atomic": "2000",
      "available_in": "v0.2.0",
      "description": "Hosted verifier for externally-provided TrustBench receipts."
    },
    {
      "path": "/receipts/:id?replay=true",
      "method": "GET",
      "paid": true,
      "pricing_tier": "audit-replay",
      "price_usdc": "0.01",
      "amount_atomic": "10000",
      "available_in": "v0.2.0",
      "description": "Re-verifies signature and on-chain settlement against current chain state."
    },
    {
      "path": "/compliance-export",
      "method": "POST",
      "paid": true,
      "pricing_tier": "compliance-export",
      "price_usdc": "0.50 single, 2.00 bundle <=100, negotiated >100",
      "available_in": "v0.3.0",
      "description": "Signed multi-receipt export bundle for compliance / audit consumers."
    }
  ],
  "authenticatedEndpoints": {
    "routeQuote": {
      "url": "https://trustbench.io/route",
      "method": "POST",
      "auth": "Bearer tb_live_<key>",
      "requiredHeaders": ["Idempotency-Key"],
      "body": {
        "capability": "search | inference | data | media | infra",
        "max_price": "atomic USDC integer string (6 decimals; 10000 = $0.01)",
        "payer_address": "0x prefixed 40-hex EOA"
      },
      "returns": {
        "route_id": "qt_<26-char ULID>",
        "payment_required": "legacy v0.x flat shape",
        "payment_requirements_v2": "raw merchant accepts[0] when present (null for v0.x merchants)",
        "expires_at": "ISO 8601, 5-minute validity window",
        "fallback_provider": "secondary choice with score_at_decision"
      }
    },
    "routeSettle": {
      "url": "https://trustbench.io/route/settle",
      "method": "POST",
      "auth": "Bearer tb_live_<key>",
      "body": "Either {route_id, signature} (legacy v0.x) or {route_id, x_payment} (SDK-built X-PAYMENT base64). Mutually exclusive.",
      "returns": "{response, receipt} plus X-Receipt-Id header. Idempotent on (route_id, payment); replays return x-idempotent-replay: true.",
      "failureModes": {
        "410": "route_id_expired (5-minute window closed)",
        "409": "idempotency_key_reused_with_different_body",
        "502": "provider_settlement_missing (no tx_hash recoverable from merchant; no receipt issued)"
      }
    },
    "receipt": {
      "url": "https://trustbench.io/receipts/:id",
      "method": "GET",
      "auth": "none (public, ULID acts as audit token)",
      "cache": "public, max-age=86400, immutable"
    }
  },
  "capabilities": ["search", "inference", "data", "media", "infra"],
  "capabilitiesNote": "Aligned with Coinbase Agentic Market's 5-category taxonomy as of Phase 4 (2026-05-05). The crawler stores other categories it observes (e.g. Travel, Social, Storage, Trading) in the providers table but does not route them until they graduate into the canonical 5 above.",
  "networks": ["base"],
  "settlementAssets": ["USDC"],
  "signing": {
    "algorithm": "Ed25519",
    "publicKeyUrl": "https://trustbench.io/.well-known/trustbench-pubkey",
    "publicKeyFormat": "PEM",
    "canonicalization": "JCS (RFC 8785)",
    "fallbackAlgorithm": "HMAC-SHA256 (server-internal only; publicKeyUrl returns 503 in fallback mode)",
    "verifierScripts": {
      "scorecard": "https://github.com/lithvall/TrustBench/blob/main/scripts/verify-scorecard.js",
      "receipt": "https://github.com/lithvall/TrustBench/blob/main/scripts/verify-receipt.js"
    }
  },
  "custody": {
    "model": "non-custodial",
    "claim": "TrustBench never holds funds, never signs payments, and never broadcasts transactions. The agent signs an EIP-3009 transferWithAuthorization with its own wallet; the merchant submits the on-chain transaction with its own gas wallet; TrustBench observes the resulting tx_hash and emits a signed receipt."
  },
  "pricing": {
    "model": "x402-native paywalled API",
    "description": "Endpoints are paywalled via x402 with per-call USDC settlement on Base through the Coinbase CDP facilitator at api.cdp.coinbase.com/platform/v2/x402. No subscriptions, no contracts. Full tier table at /pricing (HTML and JSON).",
    "publishedTiers": "https://trustbench.io/pricing",
    "liveInV010": "POST /route at $0.005 per call (score-provider tier)",
    "facilitator": "Coinbase CDP facilitator",
    "facilitatorUrl": "https://api.cdp.coinbase.com/platform/v2/x402",
    "facilitatorDocs": "https://docs.cdp.coinbase.com/x402/welcome",
    "providerVerificationBond": "refundable, pay-to-list, never pay-to-rank",
    "partnerCredit": "Existing partner agreements override the published table for that partner. Reach out via GitHub for partner-volume credit before integration locks in."
  },
  "policyPrimitives": {
    "idempotencyKeys": "16-128 char header on every POST /route. Same key + same body = cached replay. Same key + different body = 409.",
    "hardSpendCaps": "Per-call cap and rolling-window daily cap, both enforced server-side, both denominated in atomic USDC.",
    "signedReceipts": "Ed25519 over JCS-canonical receipt body. Detached signature so public_key_url can be overridden at verification time.",
    "queryableAudit": "GET /receipts/:id returns the exact signed envelope. ULID-keyed, immutable, public, cache-friendly."
  },
  "discoveryReferences": {
    "agenticMarketServices": "https://api.agentic.market/v1/services",
    "agenticMarketSkill": "https://agentic.market/skill.md",
    "x402Spec": "https://x402.org",
    "cdpDocs": "https://docs.cdp.coinbase.com/llms.txt"
  },
  "phases": {
    "phase3ClosedOn": "2026-05-04",
    "phase3Surfaces": "Authenticated POST /route + POST /route/settle, GET /receipts/:id, scripts/verify-receipt.js, paid-probe.ts. Smoke A1-A5 / B1-B4 green against the local mock provider.",
    "phase4Shipped": "Discovery surfaces (skill.md, manifest, llms.txt), Agentic Market crawler integration, 5-cat taxonomy alignment (Search / Inference / Data / Media / Infra), strict reservation-based spend caps (P4-7), first paid x402 receipt against a real provider (rcpt_01KQY7C44GAPSXZPFQYRZ1D10C settled on Base 2026-05-06).",
    "phase4InProgress": "x402-paywalled API endpoints (per-call pricing surface), public receipt explorer, formal partner integrations.",
    "phase5Planned": "p402, KYB and identity attestations, settlement-finality semantics across protocols, Canton coverage."
  },
  "contact": {
    "x": "https://x.com/TrustBench",
    "github": "https://github.com/lithvall/TrustBench"
  }
}
