{
  "openapi": "3.0.0",
  "info": {
    "title": "Linebras API",
    "version": "0.4.0"
  },
  "servers": [
    {
      "url": "https://linebras.com"
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Recomendado. Use lb_live_sk_* para backend ou lb_live_pk_* com escopos limitados para widget/frontend."
      },
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key",
        "description": "Alternativa compatível para integrações que não conseguem enviar Authorization. Use o mesmo valor da API key."
      }
    },
    "schemas": {
      "StandardMeta": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string"
          },
          "cached": {
            "type": "boolean"
          },
          "updated_at": {
            "type": "string"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean"
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      },
      "Cep": {
        "type": "object",
        "properties": {
          "cep": {
            "type": "string"
          },
          "logradouro": {
            "type": "string"
          },
          "bairro": {
            "type": "string"
          },
          "cidade": {
            "type": "string"
          },
          "uf": {
            "type": "string"
          },
          "ibge": {
            "type": "string"
          }
        }
      },
      "CpfValidate": {
        "type": "object",
        "properties": {
          "cpf": {
            "type": "string"
          },
          "formatted": {
            "type": "string"
          },
          "valid": {
            "type": "boolean"
          },
          "scope": {
            "type": "string"
          }
        }
      },
      "CnpjValidate": {
        "type": "object",
        "properties": {
          "cnpj": {
            "type": "string"
          },
          "formatted": {
            "type": "string"
          },
          "valid": {
            "type": "boolean"
          },
          "scope": {
            "type": "string"
          }
        }
      },
      "Usage": {
        "type": "object",
        "properties": {
          "month": {
            "type": "string"
          },
          "total": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "by_endpoint": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        }
      },
      "BatchValidate": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer"
          },
          "limit_per_request": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "BearerAuth": []
    },
    {
      "ApiKeyAuth": []
    }
  ],
  "paths": {
    "/health": {
      "get": {
        "summary": "Healthcheck público",
        "description": "Healthcheck público. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Conta e operação"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "security": []
      }
    },
    "/v1/me": {
      "get": {
        "summary": "Plano/chave atual",
        "description": "Plano/chave atual. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Conta e operação"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/usage": {
      "get": {
        "summary": "Consumo mensal",
        "description": "Consumo mensal. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Conta e operação"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cep/{cep}": {
      "get": {
        "summary": "Consulta CEP cache-first em DuckDB + Parquet com fallback controlado",
        "description": "Consulta CEP cache-first em DuckDB + Parquet com fallback controlado. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cep",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{8}$"
            },
            "description": "CEP com 8 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/cep/status": {
      "get": {
        "summary": "Status do CEP Advanced cache",
        "description": "Status do CEP Advanced cache. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cep/busca": {
      "get": {
        "summary": "Busca reversa CEP cache-first; fallback remoto controlado quando necessário",
        "description": "Busca reversa CEP cache-first; fallback remoto controlado quando necessário. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cep/autocomplete": {
      "get": {
        "summary": "Autocomplete de endereço para checkout baseado no cache local",
        "description": "Autocomplete de endereço para checkout baseado no cache local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cep/normalize": {
      "get": {
        "summary": "Normalização local de CEP/endereço",
        "description": "Normalização local de CEP/endereço. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cpf/validate/{cpf}": {
      "get": {
        "summary": "Validação matemática CPF",
        "description": "Validação matemática CPF. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cpf",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{11}$"
            },
            "description": "CPF com 11 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/cnpj/validate/{cnpj}": {
      "get": {
        "summary": "Validação matemática CNPJ",
        "description": "Validação matemática CNPJ. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{14}$"
            },
            "description": "CNPJ com 14 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/cnpj/{cnpj}": {
      "get": {
        "summary": "BETA: consulta CNPJ completa com cache e fonte externa",
        "description": "BETA: consulta CNPJ completa com cache e fonte externa. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{14}$"
            },
            "description": "CNPJ com 14 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/pix/status": {
      "get": {
        "summary": "Status do Pix Financeiro local",
        "description": "Status do Pix Financeiro local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/pix/validate/{chave}": {
      "get": {
        "summary": "Validação e normalização Pix local sem DICT",
        "description": "Validação e normalização Pix local sem DICT. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "chave",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/pix/normalize": {
      "get": {
        "summary": "Normalização Pix por query param chave/key/value",
        "description": "Normalização Pix por query param chave/key/value. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/pix/instituicoes": {
      "get": {
        "summary": "Instituições financeiras por ISPB/COMPE/nome via snapshot local",
        "description": "Instituições financeiras por ISPB/COMPE/nome via snapshot local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/pix/instituicoes/{ispb|compe}": {
      "get": {
        "summary": "Lookup de instituição por ISPB ou COMPE",
        "description": "Lookup de instituição por ISPB ou COMPE. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tipo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ncm",
                "cfop",
                "cst",
                "csosn"
              ]
            },
            "description": "Tipo fiscal: ncm, cfop, cst ou csosn."
          }
        ]
      }
    },
    "/v1/ddd/{ddd}": {
      "get": {
        "summary": "DDD",
        "description": "DDD. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "ddd",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{2}$"
            },
            "description": "DDD brasileiro com 2 dígitos."
          }
        ]
      }
    },
    "/v1/ibge/status": {
      "get": {
        "summary": "Status do IBGE Municípios Avançado",
        "description": "Status do IBGE Municípios Avançado. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ibge/estados": {
      "get": {
        "summary": "Estados",
        "description": "Estados. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ibge/cidades/{uf}": {
      "get": {
        "summary": "Cidades por UF com hierarquia, população e coordenadas quando disponível",
        "description": "Cidades por UF com hierarquia, população e coordenadas quando disponível. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "uf",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            },
            "description": "Sigla UF com 2 letras."
          }
        ]
      }
    },
    "/v1/ibge/municipios/{codigo}": {
      "get": {
        "summary": "Município avançado por código IBGE",
        "description": "Município avançado por código IBGE. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/ibge/municipios/search": {
      "get": {
        "summary": "Busca de municípios por nome, UF ou região",
        "description": "Busca de municípios por nome, UF ou região. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/bancos/status": {
      "get": {
        "summary": "Status do Bancos/ISPB/COMPE Pack",
        "description": "Status do Bancos/ISPB/COMPE Pack. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/bancos": {
      "get": {
        "summary": "Lista/busca Bancos/ISPB/COMPE por q, codigo, compe ou ispb",
        "description": "Lista/busca Bancos/ISPB/COMPE por q, codigo, compe ou ispb. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/bancos/search": {
      "get": {
        "summary": "Busca Bancos/ISPB/COMPE por nome/código/ISPB",
        "description": "Busca Bancos/ISPB/COMPE por nome/código/ISPB. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/bancos/{codigo}": {
      "get": {
        "summary": "Lookup por código bancário/COMPE",
        "description": "Lookup por código bancário/COMPE. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/bancos/compe/{codigo}": {
      "get": {
        "summary": "Lookup por COMPE",
        "description": "Lookup por COMPE. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/bancos/ispb/{ispb}": {
      "get": {
        "summary": "Lookup por ISPB",
        "description": "Lookup por ISPB. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "ispb",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/feriados/status": {
      "get": {
        "summary": "Status do Feriados Pack local",
        "description": "Status do Feriados Pack local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/feriados": {
      "get": {
        "summary": "Lista feriados por ano, UF, scope e pontos facultativos",
        "description": "Lista feriados por ano, UF, scope e pontos facultativos. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/feriados/{ano}": {
      "get": {
        "summary": "Feriados nacionais/estaduais por ano",
        "description": "Feriados nacionais/estaduais por ano. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "ano",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}$"
            },
            "description": "Ano de referência."
          }
        ]
      }
    },
    "/v1/feriados/{ano}/{uf}": {
      "get": {
        "summary": "Feriados nacionais + estaduais por UF",
        "description": "Feriados nacionais + estaduais por UF. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "ano",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}$"
            },
            "description": "Ano de referência."
          },
          {
            "name": "uf",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            },
            "description": "Sigla UF com 2 letras."
          }
        ]
      }
    },
    "/v1/feriados/check": {
      "get": {
        "summary": "Verifica se uma data é feriado/ponto facultativo",
        "description": "Verifica se uma data é feriado/ponto facultativo. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/indicadores/status": {
      "get": {
        "summary": "Status do pack local Câmbio/Indicadores",
        "description": "Status do pack local Câmbio/Indicadores. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Financeiro beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cambio/{moeda}": {
      "get": {
        "summary": "Câmbio PTAX local em DuckDB + Parquet por moeda, ex: USD/EUR/GBP/JPY",
        "description": "Câmbio PTAX local em DuckDB + Parquet por moeda, ex: USD/EUR/GBP/JPY. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Financeiro beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "moeda",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/indicadores/{indicador}": {
      "get": {
        "summary": "Indicadores SGS locais: SELIC, CDI, IPCA, IGPM, INPC e TR",
        "description": "Indicadores SGS locais: SELIC, CDI, IPCA, IGPM, INPC e TR. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Financeiro beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "indicador",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/fipe/status": {
      "get": {
        "summary": "Status FIPE: on-demand sem SQLite; release local pendente",
        "description": "Status FIPE: on-demand sem SQLite; release local pendente. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "FIPE beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/fipe/marcas": {
      "get": {
        "summary": "Marcas FIPE on-demand sem SQLite",
        "description": "Marcas FIPE on-demand sem SQLite. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "FIPE beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/fipe/modelos/{marca}": {
      "get": {
        "summary": "Modelos FIPE on-demand sem SQLite",
        "description": "Modelos FIPE on-demand sem SQLite. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "FIPE beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "marca",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/fipe/anos/{marca}/{modelo}": {
      "get": {
        "summary": "Anos FIPE on-demand sem SQLite",
        "description": "Anos FIPE on-demand sem SQLite. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "FIPE beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "marca",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          },
          {
            "name": "modelo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/fipe/valor/{marca}/{modelo}/{ano}": {
      "get": {
        "summary": "Preço FIPE on-demand sem SQLite",
        "description": "Preço FIPE on-demand sem SQLite. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "FIPE beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "marca",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          },
          {
            "name": "modelo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          },
          {
            "name": "ano",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}$"
            },
            "description": "Ano de referência."
          }
        ]
      }
    },
    "/v1/fiscal/status": {
      "get": {
        "summary": "Status do Fiscal Pack local",
        "description": "Status do Fiscal Pack local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Fiscal beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/fiscal/meta": {
      "get": {
        "summary": "Metadados do Fiscal Pack local",
        "description": "Metadados do Fiscal Pack local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Fiscal beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/fiscal/{ncm|cfop|cst|csosn}/{codigo}": {
      "get": {
        "summary": "Dataset fiscal local versionado: NCM, CFOP, CST e CSOSN",
        "description": "Dataset fiscal local versionado: NCM, CFOP, CST e CSOSN. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Fiscal beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tipo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ncm",
                "cfop",
                "cst",
                "csosn"
              ]
            },
            "description": "Tipo fiscal: ncm, cfop, cst ou csosn."
          },
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/fiscal/{ncm|cfop|cst|csosn}?q=termo": {
      "get": {
        "summary": "Busca fiscal por código ou descrição",
        "description": "Busca fiscal por código ou descrição. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Fiscal beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "tipo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "ncm",
                "cfop",
                "cst",
                "csosn"
              ]
            },
            "description": "Tipo fiscal: ncm, cfop, cst ou csosn."
          }
        ]
      }
    },
    "/v1/ncm/{codigo}": {
      "get": {
        "summary": "Alias para /v1/fiscal/ncm/{codigo}",
        "description": "Alias para /v1/fiscal/ncm/{codigo}. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cfop/{codigo}": {
      "get": {
        "summary": "Alias para /v1/fiscal/cfop/{codigo}",
        "description": "Alias para /v1/fiscal/cfop/{codigo}. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cst/{codigo}": {
      "get": {
        "summary": "Alias para /v1/fiscal/cst/{codigo}",
        "description": "Alias para /v1/fiscal/cst/{codigo}. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/csosn/{codigo}": {
      "get": {
        "summary": "Alias para /v1/fiscal/csosn/{codigo}",
        "description": "Alias para /v1/fiscal/csosn/{codigo}. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/geo/status": {
      "get": {
        "summary": "Status BETA_EXTERNAL de GeoIP/Clima/Geocoding",
        "description": "Status BETA_EXTERNAL de GeoIP/Clima/Geocoding. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/clima/status": {
      "get": {
        "summary": "Status BETA_EXTERNAL de clima/previsão/ar",
        "description": "Status BETA_EXTERNAL de clima/previsão/ar. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Dados auxiliares beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ip/status": {
      "get": {
        "summary": "Status BETA_EXTERNAL de GeoIP",
        "description": "Status BETA_EXTERNAL de GeoIP. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Dados auxiliares beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/clima/{cidade}": {
      "get": {
        "summary": "BETA_EXTERNAL: clima atual via Open-Meteo com cache; depois dos datasets core",
        "description": "BETA_EXTERNAL: clima atual via Open-Meteo com cache; depois dos datasets core. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Dados auxiliares beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cidade",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/ip/{ip}": {
      "get": {
        "summary": "BETA_EXTERNAL: GeoIP aproximado com cache e fallback de fonte; depois dos datasets core",
        "description": "BETA_EXTERNAL: GeoIP aproximado com cache e fallback de fonte; depois dos datasets core. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Dados auxiliares beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "ip",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cnae/status": {
      "get": {
        "summary": "Status do CNAE 2.3 CONCLA/IBGE local",
        "description": "Status do CNAE 2.3 CONCLA/IBGE local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cnae/{codigo}": {
      "get": {
        "summary": "Lookup CNAE local por seção/divisão/grupo/classe/subclasse",
        "description": "Lookup CNAE local por seção/divisão/grupo/classe/subclasse. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cnae/search": {
      "get": {
        "summary": "Busca CNAE 2.3 por termo ou código",
        "description": "Busca CNAE 2.3 por termo ou código. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cnae/hierarquia/{codigo}": {
      "get": {
        "summary": "Hierarquia completa de uma subclasse CNAE",
        "description": "Hierarquia completa de uma subclasse CNAE. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cnae/migracao/22-23/{codigo}": {
      "get": {
        "summary": "Apoio à migração CNAE Subclasses 2.2 para 2.3",
        "description": "Apoio à migração CNAE Subclasses 2.2 para 2.3. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/ibge/nomes/{nome}": {
      "get": {
        "summary": "BETA: estatísticas de nomes via IBGE",
        "description": "BETA: estatísticas de nomes via IBGE. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "nome",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/ibge/municipios/{codigo}/perfil": {
      "get": {
        "summary": "BETA: perfil geográfico de município via IBGE Localidades",
        "description": "BETA: perfil geográfico de município via IBGE Localidades. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/pix/estatisticas": {
      "get": {
        "summary": "Estatísticas Pix somente via release DuckDB/Parquet; SQLite desativado",
        "description": "Estatísticas Pix somente via release DuckDB/Parquet; SQLite desativado. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cmed": {
      "get": {
        "summary": "Busca comercial CMED/Anvisa com PF/PMC por ICMS em DuckDB + Parquet",
        "description": "Busca comercial CMED/Anvisa com PF/PMC por ICMS em DuckDB + Parquet. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cmed/status": {
      "get": {
        "summary": "Status do snapshot CMED/Anvisa",
        "description": "Status do snapshot CMED/Anvisa. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cmed/ean/{ean}": {
      "get": {
        "summary": "Lookup CMED por EAN",
        "description": "Lookup CMED por EAN. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "ean",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cmed/registro/{registro}": {
      "get": {
        "summary": "Lookup CMED por registro Anvisa",
        "description": "Lookup CMED por registro Anvisa. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "registro",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cmed/ggrem/{codigo}": {
      "get": {
        "summary": "Lookup CMED por código GGREM",
        "description": "Lookup CMED por código GGREM. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/cmed/cnpj/{cnpj}": {
      "get": {
        "summary": "Medicamentos por CNPJ do laboratório",
        "description": "Medicamentos por CNPJ do laboratório. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{14}$"
            },
            "description": "CNPJ com 14 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/saude/cmed": {
      "get": {
        "summary": "Alias legado para /v1/cmed",
        "description": "Alias legado para /v1/cmed. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cvm/fundos/{cnpj}": {
      "get": {
        "summary": "Cadastro de fundo CVM por CNPJ com último informe diário",
        "description": "Cadastro de fundo CVM por CNPJ com último informe diário. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{14}$"
            },
            "description": "CNPJ com 14 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/combustiveis/precos": {
      "get": {
        "summary": "Preços ANP últimas 4 semanas via snapshot local real",
        "description": "Preços ANP últimas 4 semanas via snapshot local real. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/saude/ans/operadoras": {
      "get": {
        "summary": "Starter: operadoras ANS ativas via dados abertos",
        "description": "Starter: operadoras ANS ativas via dados abertos. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/pncp/contratacoes": {
      "get": {
        "summary": "Starter: compras públicas PNCP com cache",
        "description": "Starter: compras públicas PNCP com cache. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cvm/status": {
      "get": {
        "summary": "Status do CVM Finance Pack local",
        "description": "Status do CVM Finance Pack local. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cvm/companhias/{cnpj}": {
      "get": {
        "summary": "Companhias abertas CVM por CNPJ em snapshot local DuckDB + Parquet",
        "description": "Companhias abertas CVM por CNPJ em snapshot local DuckDB + Parquet. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{14}$"
            },
            "description": "CNPJ com 14 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/cvm/fundos/search": {
      "get": {
        "summary": "Busca de fundos CVM por nome, gestor, admin ou situação",
        "description": "Busca de fundos CVM por nome, gestor, admin ou situação. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/cvm/fundos/{cnpj}/informe": {
      "get": {
        "summary": "Histórico de informe diário CVM por CNPJ",
        "description": "Histórico de informe diário CVM por CNPJ. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{14}$"
            },
            "description": "CNPJ com 14 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/bcb/sfn/instituicoes": {
      "get": {
        "summary": "Starter: instituições bancárias/SFN básico",
        "description": "Starter: instituições bancárias/SFN básico. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/bcb/sgs/{serie}": {
      "get": {
        "summary": "Starter: séries temporais BCB SGS",
        "description": "Starter: séries temporais BCB SGS. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "serie",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/inep/status": {
      "get": {
        "summary": "Status do snapshot INEP escolas",
        "description": "Status do snapshot INEP escolas. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/inep/escolas": {
      "get": {
        "summary": "Busca escolas INEP em snapshot local DuckDB + Parquet quando ACTIVE",
        "description": "Busca escolas INEP em snapshot local DuckDB + Parquet quando ACTIVE. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/educacao/escolas": {
      "get": {
        "summary": "Alias legado para /v1/inep/escolas",
        "description": "Alias legado para /v1/inep/escolas. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ibge/municipios/{codigo}/perfil-avancado": {
      "get": {
        "summary": "Perfil municipal avançado local: hierarquia, população 2025 e centróide IBGE Malhas",
        "description": "Perfil municipal avançado local: hierarquia, população 2025 e centróide IBGE Malhas. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Cadastros brasileiros"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "codigo",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Parâmetro obrigatório da rota."
          }
        ]
      }
    },
    "/v1/geo/geocode": {
      "get": {
        "summary": "BETA_EXTERNAL: geocoding OpenStreetMap/Nominatim com cache; depois dos datasets core",
        "description": "BETA_EXTERNAL: geocoding OpenStreetMap/Nominatim com cache; depois dos datasets core. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/geo/reverse": {
      "get": {
        "summary": "BETA_EXTERNAL: reverse geocoding OpenStreetMap/Nominatim com cache; depois dos datasets core",
        "description": "BETA_EXTERNAL: reverse geocoding OpenStreetMap/Nominatim com cache; depois dos datasets core. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/clima/previsao": {
      "get": {
        "summary": "BETA_EXTERNAL: previsão Open-Meteo com cache; depois dos datasets core",
        "description": "BETA_EXTERNAL: previsão Open-Meteo com cache; depois dos datasets core. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Dados auxiliares beta"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/ar/qualidade": {
      "get": {
        "summary": "BETA_EXTERNAL: qualidade do ar Open-Meteo com cache; depois dos datasets core",
        "description": "BETA_EXTERNAL: qualidade do ar Open-Meteo com cache; depois dos datasets core. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Linebras API"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/checkout/resolve": {
      "get": {
        "summary": "Composto checkout",
        "description": "Composto checkout. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Checkout"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/receita/cnpj/status": {
      "get": {
        "summary": "Status ACTIVE da base oficial local Receita Federal CNPJ em DuckDB + Parquet v2",
        "description": "Status ACTIVE da base oficial local Receita Federal CNPJ em DuckDB + Parquet v2. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/receita/cnpj/search": {
      "get": {
        "summary": "Busca empresarial na base local Receita Federal. UF é obrigatória para baixa latência; use query params uf, q, municipio, cnae, situacao e limit",
        "description": "Busca empresarial na base local Receita Federal. UF é obrigatória para baixa latência; use query params uf, q, municipio, cnae, situacao e limit. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error. Engine atual: duckdb+parquet-v2. Busca ampla sem UF retorna UF_REQUIRED_FOR_SEARCH.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "uf",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            },
            "description": "UF obrigatória para baixa latência. Exemplo: SP, DF, RJ."
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Termo em razão social ou nome fantasia."
          },
          {
            "name": "municipio",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Município para refinar a busca."
          },
          {
            "name": "cnae",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "CNAE fiscal para refinar a busca."
          },
          {
            "name": "situacao",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Situação cadastral para refinar a busca."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 10
            },
            "description": "Limite de resultados."
          }
        ]
      }
    },
    "/v1/receita/cnpj/{cnpj}/qsa": {
      "get": {
        "summary": "QSA de CNPJ quando disponível no snapshot local Receita Federal em DuckDB + Parquet v2",
        "description": "QSA de CNPJ quando disponível no snapshot local Receita Federal em DuckDB + Parquet v2. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Validações"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        },
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{14}$"
            },
            "description": "CNPJ com 14 dígitos, com ou sem máscara."
          }
        ]
      }
    },
    "/v1/batch/validate": {
      "post": {
        "summary": "Validação em lote JSON",
        "description": "Validação em lote JSON. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Batch"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/batch/csv": {
      "post": {
        "summary": "Validação em lote CSV",
        "description": "Validação em lote CSV. Respostas seguem o envelope padrão da Linebras API com success, data/meta ou error.",
        "tags": [
          "Batch"
        ],
        "responses": {
          "200": {
            "description": "Resposta bem-sucedida.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Parâmetro inválido ou JSON inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Authorization: Bearer ausente ou inválido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Escopo, tipo de chave ou origem não permitidos.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Recurso não encontrado.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit excedido.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  }
}