API / Webhooks

Documentação para integração com o Observatório UAP Brasil. Nossa API permite que automações externas (n8n, Make, Zapier, scripts próprios) enviem notícias, casos históricose relatos para a fila de moderação do observatório.

Endpoint de ingestão

Endpoint único que aceita os três tipos de conteúdo. Toda submissão entra como pendente e só é publicada após aprovação por um moderador.

POST https://observatoriouapbrasil.com.br/api/public/webhooks/ingest

1. Autenticação

Cada requisição deve enviar uma chave de API gerada pelo administrador em Painel Administrativo → Webhooks → Chaves de API. A chave é mostrada uma única vez; guarde-a com segurança.

Authorization: Bearer whk_live_xxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json

2. Envelope da requisição

{
  "type": "news" | "historical_case" | "report",
  "data": { ... }   // estrutura específica do tipo (ver abaixo)
}

3. Notícia (type: "news")

{
  "type": "news",
  "data": {
    "title": "Título da notícia",
    "subtitle": "Subtítulo opcional",
    "content": "Conteúdo completo (markdown ou texto)",
    "author": "Nome do autor",
    "category": "Avistamentos",
    "tags": ["uap", "ovni", "brasil"],
    "featured_image_url": "https://exemplo.com/imagem.jpg",
    "source_url": "https://fonte-original.com",
    "published_at": "2026-06-04T12:00:00Z"
  }
}

4. Caso histórico (type: "historical_case")

{
  "type": "historical_case",
  "data": {
    "title": "Caso Varginha (1996)",
    "year": 1996,
    "location": "Varginha, MG",
    "summary": "Resumo curto do caso",
    "description": "Descrição completa, fontes, contexto",
    "tags": ["histórico", "mg"],
    "source_url": "https://fonte.com",
    "image_url": "https://exemplo.com/img.jpg"
  }
}

5. Relato (type: "report")

Ao aprovar, um registro é criado automaticamente em reports com status verified e passa a aparecer no mapa e na listagem pública.

{
  "type": "report",
  "data": {
    "witness_name": "João da Silva",
    "contact_email": "joao@exemplo.com",
    "city": "Rio de Janeiro",
    "state": "RJ",
    "location": "Praia de Copacabana",
    "event_at": "2026-05-30T22:15:00-03:00",
    "duration": "5 minutos",
    "witnesses_count": 3,
    "object_shape": "Esfera luminosa",
    "description": "Descrição detalhada do avistamento...",
    "evidence_urls": []
  }
}

6. Respostas

202 Accepted
{ "ok": true, "submission_id": "uuid", "status": "pending" }

401 Missing/Invalid API key
403 Key not allowed to submit type "..."
422 Invalid payload (com detalhes do erro)

7. Exemplo cURL

curl -X POST https://observatoriouapbrasil.com.br/api/public/webhooks/ingest \
  -H "Authorization: Bearer whk_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"type":"news","data":{"title":"Teste","content":"..."}}'