{
  "openapi": "3.1.0",
  "info": {
    "title": "Verified catalog reliability lookup",
    "version": "0.4.0",
    "contact": {
      "url": "https://github.com/withgrokbot/verified-catalog/issues"
    },
    "x-guidance": "Ask GET /v1/lookup?task=<task>&max_price=<usd> (task names: /v1/tasks). 5 free calls per client per UTC day, then the same path answers 402; /v1/lookup/paid is the always-paid twin ($0.02 USDC on Base via x402) with identical results. Free MCP: POST /mcp.",
    "description": "Is an x402 endpoint reliable for task X at price <= Y? Facts from our own paid calls: receipts with settlement tx, delivered yes/no and a known-answer pass/fail. Pricing: 5 free lookups per client per UTC day, then HTTP 402 with an x402 payment requirement of $0.02 USDC on Base per lookup. Payment buys query access only. It never changes results, sort order, listings, check results or known-answer outcomes: free, paid and exempt lookups run the same code on the same data and get identical results. Not investment advice; we hold no customer funds."
  },
  "servers": [
    {
      "url": "https://verified-catalog-lookup.withgrokbot.workers.dev"
    }
  ],
  "paths": {
    "/v1/lookup": {
      "get": {
        "operationId": "lookup",
        "security": [],
        "summary": "Services for a task at or under a price, sorted by known-answer pass rate over the last n paid calls, then price",
        "parameters": [
          {
            "name": "task",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "task name, e.g. web-search (see /v1/tasks)"
          },
          {
            "name": "max_price",
            "in": "query",
            "schema": {
              "type": "number"
            },
            "description": "maximum listed price per call, USD"
          },
          {
            "name": "n",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5
            },
            "description": "paid receipts per service"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10
            },
            "description": "services returned"
          },
          {
            "name": "endpoint",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "a service id or endpoint URL"
          },
          {
            "name": "client",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "your agent or app name (optional)"
          },
          {
            "name": "ref",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "where you found this lookup, e.g. via-readme (optional, attribution only)"
          },
          {
            "name": "payer",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "your 0x wallet, if you want to report which vendor you paid (optional)"
          }
        ],
        "responses": {
          "200": {
            "description": "results (sorted), facts_only (broken on the seller's side, not sorted), access (free, paid or exempt). Identical results whether the call was free or paid. Paid calls carry a PAYMENT-RESPONSE header with the settlement tx."
          },
          "400": {
            "description": "bad parameters (never metered)"
          },
          "402": {
            "description": "free lookups used up for today: x402 v2 payment requirement in the PAYMENT-REQUIRED header (base64 JSON) and the body. Pay by retrying with a PAYMENT-SIGNATURE (x402 v2) or X-PAYMENT header. $0.02 USDC on Base, payTo 0x37cfCC8a29e9ff9458902B29E31E42dc7B718674. Payment buys query access only. It never changes results, sort order, listings, check results or known-answer outcomes: free, paid and exempt lookups run the same code on the same data and get identical results."
          }
        }
      }
    },
    "/v1/lookup/paid": {
      "get": {
        "operationId": "lookupPaid",
        "summary": "Same lookup as /v1/lookup, always paid: $0.02 USDC on Base per call via x402 (no free quota). Identical results.",
        "parameters": [
          {
            "name": "task",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "task name, e.g. web-search (see /v1/tasks); task or endpoint is required"
          },
          {
            "name": "max_price",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "maximum listed price per call, USD, e.g. 0.01"
          },
          {
            "name": "n",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "paid receipts per service, 1-20 (default 5)"
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "services returned, 1-20 (default 10)"
          },
          {
            "name": "endpoint",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "a service id or endpoint URL instead of a task"
          },
          {
            "name": "client",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "your agent or app name (optional)"
          },
          {
            "name": "ref",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "where you found this lookup (optional, attribution only)"
          },
          {
            "name": "payer",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "your 0x wallet (optional)"
          }
        ],
        "x-payment-info": {
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.02"
          },
          "protocols": [
            {
              "x402": {
                "scheme": "exact",
                "network": "eip155:8453",
                "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
                "payTo": "0x37cfCC8a29e9ff9458902B29E31E42dc7B718674"
              }
            }
          ]
        },
        "responses": {
          "200": {
            "description": "same body as /v1/lookup, access.tier = paid, PAYMENT-RESPONSE header with the settlement tx"
          },
          "400": {
            "description": "bad parameters (checked after the 402, before anything is settled)"
          },
          "402": {
            "description": "x402 v2 payment requirement ($0.02 USDC on Base) with Bazaar discovery metadata. Payment buys query access only. It never changes results, sort order, listings, check results or known-answer outcomes: free, paid and exempt lookups run the same code on the same data and get identical results."
          }
        }
      }
    },
    "/mcp": {
      "post": {
        "operationId": "mcp",
        "security": [],
        "summary": "Free remote MCP server (Streamable HTTP, stateless JSON-RPC 2.0): tools search_catalog, get_service, lookup (lookup shares the vc-mcp free quota)",
        "responses": {
          "200": {
            "description": "JSON-RPC response"
          },
          "202": {
            "description": "notification accepted"
          }
        }
      }
    },
    "/v1/tasks": {
      "get": {
        "operationId": "tasks",
        "security": [],
        "summary": "Task names",
        "responses": {
          "200": {
            "description": "task -> service ids"
          }
        }
      }
    }
  }
}