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
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çalho | Valor |
|---|---|
Authorization | Bearer whk_… (o Token de autenticação da fonte) |
Content-Type | application/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.
| Campo | Tipo | Obrigatório | Limite | Significado |
|---|---|---|---|---|
key | string | Só em status: "resolved" | 255 | Identidade 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. |
host | string | Não | 255 | Equipamento ou origem do problema. Aparece como Host no card e entra na identidade de recorrência junto com a key. |
title | string | Só em status: "problem" | 512 | Nome do incidente, exibido no card. Pode mudar entre envios da mesma key. |
severity | inteiro 0–5 | Não (padrão 0) | 0 a 5 | Severidade na escala do Zabbix. Fora da faixa é 400. Mapeamento abaixo. |
message | string | Não | 20000 | Texto 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. |
comment | string | Não | 2048 | Comentá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
severity | Rótulo no app |
|---|---|
| 5 | Desastre |
| 4 | Alta |
| 3 | Média |
| 2 | Atenção |
| 1 | Informação |
| 0 | Não classificado |
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
}
| Campo | Significado |
|---|---|
success | Sempre true em 202. |
status | O desfecho do evento (tabela abaixo). Não é o status que você enviou. |
key | Eco da key enviada. null quando você não mandou key. |
recurrence_count | Número do episódio desta key neste host (1 = primeiro). Só aparece em problemas com key. |
siren_listener | Só aparece, com valor true, quando o alerta está coberto por um ouvinte com urgência Sirene. |
Valores de status na resposta
status | Quando acontece | Efeito no app |
|---|---|---|
new | Primeira 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. |
active | A key já tem um incidente ativo. | Atualiza título, mensagem, severidade e Duração atual. Não notifica de novo. |
recurrence | A 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. |
resolved | Você 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. |
queued | O 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. |
status da resposta é calculado no instante da aceitação.Erros
| HTTP | Corpo | Causa 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}.