Navegar na documentação

Referência do payload

Referência completa do endpoint de ingestão: cabeçalhos, campos do corpo, resposta e códigos de erro. Serve para quem está escrevendo o script ou configurando a ferramenta que vai enviar alertas para uma Fonte de Dados.

Endpoint

POST/api/v1/alerts

URL completa: https://app.flowbix.com/api/v1/alerts. A mesma URL atende todas as fontes de todas as empresas; o que identifica a sua fonte é o token.

CabeçalhoValor
AuthorizationBearer whk_… (o Token de autenticação da fonte)
Content-Typeapplication/json

O corpo é um objeto JSON de até 256 KiB. Corpo maior é recusado com 400.

Campos do corpo

O payload não tem campo de empresa, de fonte nem de id de evento: os dois primeiros vêm do token e o terceiro é gerado pelo servidor. Você só descreve o problema.

CampoTipoObrigatórioLimiteSignificado
keystringSó em status: "resolved"255Identidade estável do problema. Mesma key = mesmo problema: agrupa ocorrências, conta recorrência e permite resolver. Sem key, o POST vira um alerta avulso. Veja Ciclo de vida do alerta e a key.
hoststringNão255Equipamento ou origem do problema. Aparece como Host no card e entra na identidade de recorrência junto com a key.
titlestringSó em status: "problem"512Nome do incidente, exibido no card. Pode mudar entre envios da mesma key.
severityinteiro 0–5Não (padrão 0)0 a 5Severidade na escala do Zabbix. Fora da faixa é 400. Mapeamento abaixo.
messagestringNão20000Texto detalhado, mostrado no detalhe do incidente. Pode mudar entre envios da mesma key.
status"problem" ou "resolved"Não (padrão problem)problem abre ou atualiza o incidente; resolved fecha o incidente da key informada.
commentstringNão2048Comentário da própria fonte. Vira uma linha no Histórico de ACKs do incidente, com autor webhook. Não altera o estado. Ignorado quando status é resolved.

Espaços no início e no fim de key, host, title e comment são removidos. Campos desconhecidos são ignorados.

Mapeamento de severidade

severityRótulo no app
5Desastre
4Alta
3Média
2Atenção
1Informação
0Não classificado
Sirene exige severity 5. Se o alerta for coberto por um ouvinte com urgência Sirene e regra Manual, um problema com severity menor que 5 é recusado com 422. Envie 5 (Desastre) ou troque a urgência do ouvinte. Resoluções passam sempre. Detalhes em Sirene: o alerta máximo.

Resposta

Alerta aceito responde 202 Accepted. O corpo diz o que vai acontecer com o alerta:

{
  "success": true,
  "status": "new",
  "key": "disco-cheio",
  "recurrence_count": 1
}
CampoSignificado
successSempre true em 202.
statusO desfecho do evento (tabela abaixo). Não é o status que você enviou.
keyEco da key enviada. null quando você não mandou key.
recurrence_countNúmero do episódio desta key neste host (1 = primeiro). Só aparece em problemas com key.
siren_listenerSó aparece, com valor true, quando o alerta está coberto por um ouvinte com urgência Sirene.

Valores de status na resposta

statusQuando aconteceEfeito no app
newPrimeira vez que esta key (com este host) chega por esta fonte, ou qualquer alerta sem key.Incidente novo. Dispara notificação para quem tem ouvinte cobrindo o alerta.
activeA key já tem um incidente ativo.Atualiza título, mensagem, severidade e Duração atual. Não notifica de novo.
recurrenceA key estava resolvida e voltou.Reabre o mesmo incidente, soma 1 em Recorrências e zera o reconhecimento. Pode notificar como recorrência, conforme o ouvinte.
resolvedVocê enviou status: "resolved".O incidente ativo da key é marcado como Resolvido e sai da lista de ativos. Se não havia nada ativo, nada muda.
queuedO alerta foi aceito, mas o servidor não conseguiu consultar o estado da key no momento.O processamento segue normalmente; só a resposta ficou neutra.
202 significa "na fila", não "gravado". O endpoint valida, coloca o evento numa fila e responde. Um worker grava o incidente e dispara as notificações em seguida, normalmente em menos de um segundo. O status da resposta é calculado no instante da aceitação.

Erros

HTTPCorpoCausa e o que fazer
400{"error":"payload inválido: …"}JSON malformado, campo acima do limite, severity fora de 0–5, status diferente de problem/resolved ou corpo maior que 256 KiB. Corrija o payload; não reenvie igual.
400{"success":false,"message":"resolução exige key — sem ela não sei qual problema fechar"}status: "resolved" sem key. Envie a mesma key do problema aberto.
400{"success":false,"message":"title é obrigatório para um alerta de problema"}Problema sem title. Preencha o título.
401{"error":"token inválido"}Cabeçalho Authorization ausente, sem o prefixo Bearer, ou token de uma fonte que não existe mais. Copie o token de novo em Fontes de Dados.
422{"success":false,"siren_listener":true,"error":"este alerta está direcionado a um ouvinte com urgência SIRENE, exclusiva de incidentes críticos — envie severity: 5 (Desastre) ou mude a urgência do ouvinte"}Contrato da Sirene. Envie severity: 5 ou altere o ouvinte.
503{"error":"fila indisponível, tente novamente"}A fila não aceitou o evento. Reenvie o mesmo payload após alguns segundos.
500{"error":"erro interno"}Falha no servidor. Reenvie após alguns segundos; se persistir, avise a Flowbix por Sugestões e relatos.

Retentativa e idempotência

Reenviar um problema com key é seguro: se o incidente já está ativo, o reenvio só atualiza os campos (active). Reenviar uma resolução também é seguro: se já estava resolvido, nada muda. Por isso trate 503, 500 e falhas de rede com nova tentativa, de preferência com espera crescente. Já um alerta sem key gera uma linha nova a cada POST, então reenviar cria duplicata.

Horários

O payload não tem campo de data. O servidor carimba o momento em que recebeu o evento, em UTC, e é esse horário que alimenta Duração atual e o histórico. Um alerta enviado com atraso aparece com a hora da chegada, não a do fato.

Exemplos com curl

Abrir um problema:

curl -sS -X POST https://app.flowbix.com/api/v1/alerts \
  -H "Authorization: Bearer whk_SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "disco-cheio",
    "host": "SRV-WEB-01",
    "title": "Disco / acima de 90%",
    "severity": 4,
    "message": "Uso em 92% — limpar /var/log",
    "status": "problem"
  }'

Fechar o mesmo problema (só a key e o host importam):

curl -sS -X POST https://app.flowbix.com/api/v1/alerts \
  -H "Authorization: Bearer whk_SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"key": "disco-cheio", "host": "SRV-WEB-01", "status": "resolved"}'

Alerta avulso, sem key (não agrupa nem resolve; só sai da lista com Descartar alerta):

curl -sS -X POST https://app.flowbix.com/api/v1/alerts \
  -H "Authorization: Bearer whk_SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"host": "backup-01", "title": "Backup noturno falhou", "severity": 3}'

Resposta esperada do último exemplo: {"success":true,"status":"new","key":null}.

Veja também