{
  "openapi": "3.1.0",
  "info": {
    "title": "Radar CNPJ",
    "version": "dev",
    "description": "radar-cnpj.com — índice GET /api/."
  },
  "servers": [
    {
      "url": "https://www.radar-cnpj.com"
    }
  ],
  "paths": {
    "/api/": {
      "get": {
        "summary": "Índice auto-descrito de toda a superfície deste Worker.",
        "description": "Devolve: { name, description, endpoints[], quickstart[] }",
        "responses": {
          "200": {
            "description": "{ name, description, endpoints[], quickstart[] }"
          }
        }
      }
    },
    "/api/health": {
      "get": {
        "summary": "Health da origem (contagens da base).",
        "description": "Devolve: { ok, … } | geo-restrição",
        "responses": {
          "200": {
            "description": "{ ok, … } | geo-restrição"
          }
        }
      }
    },
    "/api/cnpj/{cnpj}": {
      "get": {
        "summary": "Ficha de empresa (14 dígitos). Cache de borda 6h.",
        "description": "Devolve: { ok, … dados cadastrais }",
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ ok, … dados cadastrais }"
          }
        }
      }
    },
    "/api/busca": {
      "get": {
        "summary": "Busca por termo e/ou filtros avançados (`q`, `f` JSON).",
        "description": "Devolve: { ok, items[], page, … }",
        "responses": {
          "200": {
            "description": "{ ok, items[], page, … }"
          }
        }
      }
    },
    "/api/sugerir": {
      "get": {
        "summary": "Autocomplete de empresas/termos.",
        "description": "Devolve: { ok, items[] }",
        "responses": {
          "200": {
            "description": "{ ok, items[] }"
          }
        }
      }
    },
    "/api/ref": {
      "get": {
        "summary": "Referência para seletores (CNAE, município, natureza): `tipo` + `q` ou `codigos`.",
        "description": "Devolve: { ok, items[] }",
        "responses": {
          "200": {
            "description": "{ ok, items[] }"
          }
        }
      }
    },
    "/api/export": {
      "get": {
        "summary": "Export CSV/JSON da busca (`format=csv|json` + mesmos params de busca).",
        "description": "Devolve: arquivo ou JSON",
        "responses": {
          "200": {
            "description": "arquivo ou JSON"
          }
        }
      }
    },
    "/api/ia": {
      "post": {
        "summary": "Texto → filtros normalizados (caminho síncrono ~18–20s).",
        "description": "Devolve: { ok, filtros[] }",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "texto": "padarias em SP com MEI"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "{ ok, filtros[] }"
          }
        }
      }
    },
    "/api/ia/jobs": {
      "post": {
        "summary": "Enfileira job de IA (quando o síncrono estoura).",
        "description": "Devolve: 202 { job_id, eta }",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "texto": "…"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "202 { job_id, eta }"
          }
        }
      }
    },
    "/api/ia/jobs/{id}": {
      "get": {
        "summary": "Poll do job de IA.",
        "description": "Devolve: { status, filtros? }",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ status, filtros? }"
          }
        }
      }
    },
    "/api/local": {
      "get": {
        "summary": "Cidade/UF do visitante via geo de borda (nunca cachear).",
        "description": "Devolve: { fonte: 'borda', uf, municipio, … }",
        "responses": {
          "200": {
            "description": "{ fonte: 'borda', uf, municipio, … }"
          }
        }
      }
    },
    "/api/municipio-proximo": {
      "get": {
        "summary": "Município mais próximo de lat/lon (centroide oficial do IBGE; nunca cachear).",
        "description": "Devolve: { municipio: { codigo, descricao, uf, km } }",
        "responses": {
          "200": {
            "description": "{ municipio: { codigo, descricao, uf, km } }"
          }
        }
      }
    },
    "/api/contato": {
      "post": {
        "summary": "Contato: Turnstile (humano) ou x402 $0.10 (agente). Alias /api/contact.",
        "description": "Devolve: { ok } | 402 accepts[]",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "nome": "…",
                "email": "a@example.com",
                "mensagem": "…",
                "aberto_em": 0,
                "turnstile": "(humano)"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "{ ok } | 402 accepts[]"
          }
        }
      }
    },
    "/api/contact": {
      "post": {
        "summary": "Alias EN de POST /api/contato.",
        "description": "Devolve: { ok } | 402",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "name": "…",
                "email": "…",
                "message": "…",
                "form_ts": 0
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "{ ok } | 402"
          }
        }
      }
    },
    "/api/monitor/session": {
      "post": {
        "summary": "Cria sessão anônima de monitoramento (uuid).",
        "description": "Devolve: 201 { session_id }",
        "responses": {
          "200": {
            "description": "201 { session_id }"
          }
        }
      }
    },
    "/api/monitor/session/email": {
      "put": {
        "summary": "E-mail de alertas da sessão.",
        "description": "Devolve: { ok }",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "email": "a@example.com"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "{ ok }"
          }
        }
      }
    },
    "/api/me/monitor": {
      "get": {
        "summary": "Watches da sessão (header x-radar-session).",
        "description": "Devolve: { items[] }",
        "responses": {
          "200": {
            "description": "{ items[] }"
          }
        }
      },
      "post": {
        "summary": "Adiciona watch de CNPJ na sessão.",
        "description": "Devolve: { ok }",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "example": {
                "cnpj": "00000000000000"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "{ ok }"
          }
        }
      }
    },
    "/api/me/monitor/{id}": {
      "delete": {
        "summary": "Remove watch.",
        "description": "Devolve: { ok }",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ ok }"
          }
        }
      }
    },
    "/api/monitor/changes/{cnpj}": {
      "get": {
        "summary": "Histórico de alterações cadastrais do CNPJ.",
        "description": "Devolve: { changes[] }",
        "parameters": [
          {
            "name": "cnpj",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "{ changes[] }"
          }
        }
      }
    }
  }
}