{
  "openapi": "3.1.1",
  "info": {
    "title": "SeleAPIs",
    "description": "Hub de APIs da Sele Sistemas. Cada API vive sob a sua propria rota. Primeira API disponivel: /cep (consulta de CEP com fallback ViaCEP -> BrasilAPI).",
    "version": "v1"
  },
  "servers": [
    {
      "url": "http://seleapi.sele.com.br/"
    }
  ],
  "paths": {
    "/cep/{cep}": {
      "get": {
        "tags": [
          "CEP"
        ],
        "summary": "Consulta um CEP com fallback ViaCEP -> BrasilAPI.",
        "description": "Aceita CEP com ou sem mascara (ex.: 13208056 ou 13208-056). Retorna um modelo unico e estavel independente do provedor que respondeu. 200 = encontrado; 404 = nao encontrado (corpo com encontrado=false); 400 = CEP mal formado.",
        "operationId": "ConsultarCep",
        "parameters": [
          {
            "name": "cep",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^[^.]+$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CepResultado"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CepResultado"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CepResultado"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "CepResultado": {
        "type": "object",
        "properties": {
          "encontrado": {
            "type": "boolean",
            "description": "false quando os dois provedores falharam ou o CEP e invalido."
          },
          "cep": {
            "type": "string",
            "description": "CEP normalizado, sempre com mascara \"00000-000\"."
          },
          "logradouro": {
            "type": "string",
            "description": "ViaCEP.logradouro | BrasilAPI.street"
          },
          "complemento": {
            "type": "string",
            "description": "ViaCEP.complemento | (BrasilAPI nao traz)"
          },
          "bairro": {
            "type": "string",
            "description": "ViaCEP.bairro | BrasilAPI.neighborhood"
          },
          "cidade": {
            "type": "string",
            "description": "ViaCEP.localidade | BrasilAPI.city"
          },
          "uf": {
            "type": "string",
            "description": "ViaCEP.uf | BrasilAPI.state (2 letras)"
          },
          "ibge": {
            "type": "string",
            "description": "ViaCEP.ibge | vazio quando a resposta veio da BrasilAPI."
          },
          "latitude": {
            "type": [
              "null",
              "string"
            ],
            "description": "So preenchido pela BrasilAPI v2 quando ha coordenadas."
          },
          "longitude": {
            "type": [
              "null",
              "string"
            ],
            "description": "So preenchido pela BrasilAPI v2 quando ha coordenadas."
          },
          "fonte": {
            "type": "string",
            "description": "\"viacep\" | \"brasilapi\" | \"\" (para log/auditoria)."
          }
        },
        "description": "Modelo unico e estavel de saida do proxy de CEP. Normaliza os formatos do\nViaCEP e da BrasilAPI num contrato so, independente de quem respondeu."
      }
    }
  },
  "tags": [
    {
      "name": "CEP"
    }
  ]
}