Erros
Todo erro da AI Web Push API tem o mesmo formato, seja qual for o status HTTP: um JSON com um único campo message, em inglês, descrevendo o problema.
{ "message": "..." }
Quando mais de um campo está errado na mesma chamada, as mensagens vêm juntas separadas por vírgula:
{ "message": "Title is required, Link is required, TTL must be between 0 and 28 days in seconds" }
O que cada status significa
| Status | Significado | O que fazer |
|---|---|---|
400 | Algum dado da chamada está errado | Leia o message, corrija o campo e tente de novo |
403 | Chave ausente ou inválida, ou operação não liberada para a conta | Confira o header Authorization e o plano |
404 | A campanha não existe ou não é do seu site | Confira o ID e a chave usada |
409 | A campanha já foi enviada e não pode ser excluída | Nada a fazer, o envio é definitivo |
500 | Falha do nosso lado | Tente novamente; se persistir, fale com o suporte |
Como tratar no código
- Não repita chamadas que deram
4xx. O problema está na requisição (dado, chave ou ID); repetir igual devolve o mesmo erro. Corrija e chame de novo. - Repita com cuidado em
500. Espere alguns segundos entre tentativas. Se criou uma campanha e recebeu500, confira comPOST /campaignsantes de criar outra, para não duplicar o envio. - Guarde o
messageno log. Ele já diz qual campo falhou; é o que o suporte vai pedir. - Trate
409como sucesso do envio. Ele só aparece noDELETEde uma campanha já enviada.
Se um 500 persistir, mande o horário, o método chamado e o message para contato@aiwebpush.com ou pela página de contato.
Mensagens de validação (400)
Na criação da campanha:
| Mensagem | Causa |
|---|---|
Title is required | Faltou o título |
Title must be between 3 and 100 characters | Título curto ou longo demais |
Body is required | Faltou o texto |
Body must be between 3 and 300 characters | Texto curto ou longo demais |
Link is required | Faltou o link de destino |
At least one topic or country must be specified | Nenhum público informado |
Call to action must not exceed 20 characters | Texto do botão longo demais |
Icon must be a valid URL / Image must be a valid URL | A URL precisa começar com https:// |
Invalid campaign status | Use published, draft ou failed |
Invalid schedule mode | Use now ou scheduled |
Schedule date is required for schedule mode | Faltou a data no agendamento |
Invalid schedule date format. Use ISO format (e.g. 2025-05-02T18:30:00Z) | Data fora do formato UTC |
TTL must be between 0 and 28 days in seconds | TTL fora da faixa permitida |
Na listagem e na consulta:
| Mensagem | Causa |
|---|---|
limit must be a positive number | limit precisa ser maior que zero |
Invalid startDate format. Use ISO format (e.g. 2025-05-02T18:30:00Z) | startDate fora do formato UTC |
Invalid endDate format. Use ISO format (e.g. 2025-05-02T18:30:00Z) | endDate fora do formato UTC |
startDate must be less than or equal to endDate | O intervalo está invertido |
dateField must be createdAt or scheduleDate | Valor não permitido em dateField |
Invalid status values: foo. Allowed: draft, scheduled, sent, failed | Status desconhecido no filtro |
cursor must be a non-empty string | O cursor veio vazio ou não é texto |
Invalid pagination cursor | O cursor foi alterado ou veio de outro site |
campaignId is required | Faltou o ID na URL |
Invalid JSON body | O corpo enviado não é um JSON válido |
As regras de cada campo estão em Limites.