{
  "openapi": "3.1.0",
  "info": {
    "title": "B20 Check",
    "version": "1.0.0",
    "description": "Legitimacy check for B20 tokens on Base. Verifies whether an address is a factory-native B20, detects copycats and known-asset imposters (homoglyph-aware), reports live issuer powers (mint, burn, pause, freeze, seize, admin) and issuer activity, and returns a danger/caution/ok verdict as an EIP-712-signed attestation an agent can independently verify.",
    "x-guidance": "Call GET /v1/verify/{address} with a token contract address on Base (0x + 40 hex) to get a signed legitimacy verdict (ok | caution | danger | not_applicable) with issuer-power risk flags before buying, holding or pricing any B20 token. The route replies HTTP 402 (x402 v2); any x402 client pays automatically in USDC on Base. Try it free first via GET /v1/demo/{address} (20 req/min per IP). Verify authenticity by recovering the EIP-712 signer per the recipe in GET /v1/schema. More: /llms.txt.",
    "contact": {
      "url": "https://b20check.com"
    }
  },
  "servers": [
    {
      "url": "https://b20check.com"
    }
  ],
  "x-discovery": {
    "tags": [
      "b20",
      "base",
      "token-verification",
      "security",
      "attestation"
    ]
  },
  "paths": {
    "/v1/verify/{address}": {
      "get": {
        "operationId": "verifyB20Token",
        "summary": "Signed legitimacy verdict for a B20 token (paid, x402)",
        "description": "Legitimacy check for B20 tokens on Base. Verifies whether an address is a factory-native B20, detects copycats and known-asset imposters (homoglyph-aware), reports live issuer powers (mint, burn, pause, freeze, seize, admin) and issuer activity, and returns a danger/caution/ok verdict as an EIP-712-signed attestation an agent can independently verify.",
        "parameters": [
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-fA-F]{40}$"
            },
            "description": "EVM address of the token to verify (B20 addresses start with 0xb20; any address is accepted)."
          }
        ],
        "x-payment-info": {
          "protocols": [
            {
              "x402": {}
            }
          ],
          "price": {
            "mode": "fixed",
            "currency": "USD",
            "amount": "0.01"
          }
        },
        "responses": {
          "200": {
            "description": "Signed verdict (see GET /v1/schema for the full response schema and example)."
          },
          "402": {
            "description": "x402 v2 payment challenge: PAYMENT-REQUIRED header carries scheme, network eip155:8453, price and payTo."
          }
        }
      }
    },
    "/v1/demo/{address}": {
      "get": {
        "operationId": "verifyB20TokenDemo",
        "summary": "Free rate-limited demo of the same check (20 req/min per IP)",
        "parameters": [
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-fA-F]{40}$"
            }
          }
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Same shape as the paid route."
          },
          "429": {
            "description": "Demo rate limit."
          }
        }
      }
    },
    "/v1/schema": {
      "get": {
        "operationId": "getResponseSchema",
        "summary": "Full JSON response schema, example and attestation verification recipe",
        "security": [],
        "responses": {
          "200": {
            "description": "JSON schema document."
          }
        }
      }
    },
    "/v1/stats": {
      "get": {
        "operationId": "getStats",
        "summary": "Public usage stats (tokens indexed, snapshot block, 30-day usage)",
        "security": [],
        "responses": {
          "200": {
            "description": "Stats JSON."
          }
        }
      }
    }
  }
}