{
  "openapi": "3.1.0",
  "info": {
    "title": "BaseBrief x402",
    "version": "1.0.0",
    "description": "Pay-per-result Base mainnet state for autonomous agents. Every result is a point-in-time direct JSON-RPC read with explicit evidence and limitations."
  },
  "servers": [
    { "url": "https://basebrief-x402.savannah-5966.chatgpt.site" }
  ],
  "paths": {
    "/api/v1/base/gas": {
      "get": {
        "operationId": "getBaseGasSnapshot",
        "summary": "Get current Base gas and EIP-1559 fee caps",
        "responses": {
          "200": { "$ref": "#/components/responses/Result" },
          "402": { "$ref": "#/components/responses/PaymentRequired" },
          "502": { "$ref": "#/components/responses/UpstreamError" }
        },
        "x-payment-info": {
          "price": { "mode": "fixed", "currency": "USD", "amount": "0.004" },
          "protocols": [{ "x402": {} }]
        }
      }
    },
    "/api/v1/base/address": {
      "get": {
        "operationId": "getBaseAddressSnapshot",
        "summary": "Get ETH, USDC, nonce and account type for a Base address",
        "parameters": [
          { "$ref": "#/components/parameters/Address" }
        ],
        "responses": {
          "200": { "$ref": "#/components/responses/Result" },
          "400": { "$ref": "#/components/responses/InvalidInput" },
          "402": { "$ref": "#/components/responses/PaymentRequired" },
          "502": { "$ref": "#/components/responses/UpstreamError" }
        },
        "x-payment-info": {
          "price": { "mode": "fixed", "currency": "USD", "amount": "0.004" },
          "protocols": [{ "x402": {} }]
        }
      }
    },
    "/api/v1/base/token": {
      "get": {
        "operationId": "getBaseTokenMetadata",
        "summary": "Read ERC-20 metadata from a Base token contract",
        "parameters": [
          {
            "name": "address",
            "in": "query",
            "required": true,
            "description": "ERC-20 contract address on Base.",
            "schema": { "$ref": "#/components/schemas/Address" },
            "example": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
          }
        ],
        "responses": {
          "200": { "$ref": "#/components/responses/Result" },
          "400": { "$ref": "#/components/responses/InvalidInput" },
          "402": { "$ref": "#/components/responses/PaymentRequired" },
          "502": { "$ref": "#/components/responses/UpstreamError" }
        },
        "x-payment-info": {
          "price": { "mode": "fixed", "currency": "USD", "amount": "0.004" },
          "protocols": [{ "x402": {} }]
        }
      }
    },
    "/api/v1/base/allowance": {
      "get": {
        "operationId": "getBaseTokenAllowance",
        "summary": "Get ERC-20 balance, allowance and approval signals",
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": { "$ref": "#/components/schemas/Address" },
            "example": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
          },
          {
            "name": "owner",
            "in": "query",
            "required": true,
            "schema": { "$ref": "#/components/schemas/Address" },
            "example": "0x0000000000000000000000000000000000000001"
          },
          {
            "name": "spender",
            "in": "query",
            "required": true,
            "schema": { "$ref": "#/components/schemas/Address" },
            "example": "0x0000000000000000000000000000000000000002"
          }
        ],
        "responses": {
          "200": { "$ref": "#/components/responses/Result" },
          "400": { "$ref": "#/components/responses/InvalidInput" },
          "402": { "$ref": "#/components/responses/PaymentRequired" },
          "502": { "$ref": "#/components/responses/UpstreamError" }
        },
        "x-payment-info": {
          "price": { "mode": "fixed", "currency": "USD", "amount": "0.004" },
          "protocols": [{ "x402": {} }]
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Address": {
        "type": "string",
        "pattern": "^0x[0-9a-fA-F]{40}$"
      },
      "Evidence": {
        "type": "object",
        "required": ["chain", "chainId", "blockNumber", "source", "pointInTime", "checkedAt"],
        "properties": {
          "chain": { "type": "string", "const": "Base mainnet" },
          "chainId": { "type": "integer", "const": 8453 },
          "blockNumber": { "type": "string" },
          "source": { "type": "string", "const": "Base JSON-RPC" },
          "pointInTime": { "type": "boolean", "const": true },
          "checkedAt": { "type": "string", "format": "date-time" }
        }
      },
      "Result": {
        "type": "object",
        "description": "Route-specific Base state with a common evidence object.",
        "additionalProperties": true,
        "properties": {
          "evidence": { "$ref": "#/components/schemas/Evidence" },
          "limitations": { "type": "array", "items": { "type": "string" } }
        }
      },
      "Error": {
        "type": "object",
        "required": ["error", "message"],
        "properties": {
          "error": { "type": "string" },
          "message": { "type": "string" }
        }
      }
    },
    "parameters": {
      "Address": {
        "name": "address",
        "in": "query",
        "required": true,
        "description": "EVM address on Base.",
        "schema": { "$ref": "#/components/schemas/Address" },
        "example": "0x4200000000000000000000000000000000000006"
      }
    },
    "responses": {
      "Result": {
        "description": "Paid point-in-time Base state.",
        "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Result" } } }
      },
      "PaymentRequired": {
        "description": "x402 payment quote in the PAYMENT-REQUIRED header and JSON body.",
        "headers": {
          "PAYMENT-REQUIRED": { "schema": { "type": "string" } }
        },
        "content": { "application/json": { "schema": { "type": "object", "additionalProperties": true } } }
      },
      "InvalidInput": {
        "description": "A query parameter is missing or invalid.",
        "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }
      },
      "UpstreamError": {
        "description": "Base JSON-RPC did not return usable state.",
        "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }
      }
    }
  }
}
