Receitas
Fluxos completos da AI Web Push API, do jeito que aparecem numa integração real: cada receita mostra a chamada em curl, o JSON enviado e o que volta. Os payloads são os mesmos da Referência; troque SUA_CHAVE pela chave do site.
Descobrir o público antes de criar a campanha
Os nomes de tópico e de país precisam existir no site. Consulte-os primeiro:
curl https://api.aiwebpush.com/v2/topics \
-H "Authorization: SUA_CHAVE"
[
{ "name": "tecnologia", "users": 1840 },
{ "name": "esportes", "users": 920 },
{ "name": "religião", "users": 310 }
]
curl https://api.aiwebpush.com/v2/countries \
-H "Authorization: SUA_CHAVE"
[
{ "name": "country__brazil", "users": 2100 },
{ "name": "country__desconhecido", "users": 45 }
]
Use o name exatamente como veio — os dois endpoints devolvem tudo em minúsculas, e os países com o prefixo country__. Tópicos vão no campo topics da campanha, países no campo countries. Referência: Listar tópicos, Listar países.
Enviar uma notificação agora
status: published + scheduleMode: now coloca a campanha na fila de envio imediato.
curl -X POST https://api.aiwebpush.com/v2/campaign/create \
-H "Authorization: SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"title": "Nova oferta da semana",
"body": "Confira as melhores ofertas com até 50% off",
"link": "https://example.com/ofertas",
"topics": ["esportes"],
"status": "published",
"scheduleMode": "now",
"callToAction": "Saiba mais",
"utmSource": "auto_push",
"utmMedium": "push",
"utmCampaign": "push_notification"
}'
{ "id": "abc12--987654" }
Guarde o id: é com ele que você consulta ou exclui a campanha depois. Referência: Criar campanha.
Agendar para uma data
scheduleMode: scheduled + scheduleDate em UTC. Aqui o público combina um tópico e um país, e a notificação vale por 24 horas (ttl: 86400) para quem estiver offline.
curl -X POST https://api.aiwebpush.com/v2/campaign/create \
-H "Authorization: SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"title": "Black Friday começa agora",
"body": "Descontos de até 70% só hoje",
"link": "https://example.com/black-friday",
"topics": ["tecnologia"],
"countries": ["country__brazil"],
"status": "published",
"scheduleMode": "scheduled",
"scheduleDate": "2026-11-27T12:00:00Z",
"icon": "https://cdn.example.com/icon.png",
"image": "https://cdn.example.com/banner.jpg",
"callToAction": "Ver ofertas",
"ttl": 86400
}'
Atenção ao fuso: 2026-11-27T12:00:00Z é meio-dia em UTC, 9h em Brasília. Referência: Criar campanha.
Salvar um rascunho (sem enviar)
status: draft guarda a campanha sem disparar. Serve para revisar no painel ou para testar a integração sem notificar ninguém.
curl -X POST https://api.aiwebpush.com/v2/campaign/create \
-H "Authorization: SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"title": "Rascunho da campanha de natal",
"body": "Texto ainda em revisão",
"link": "https://example.com/natal",
"topics": ["decoração"],
"status": "draft",
"scheduleMode": "scheduled",
"scheduleDate": "2026-12-20T15:00:00Z"
}'
Consultar uma campanha e seus resultados
curl https://api.aiwebpush.com/v2/campaign/abc12--987654 \
-H "Authorization: SUA_CHAVE"
A resposta traz os campos da campanha e o bloco analytics:
{
"id": "abc12--987654",
"title": "Nova oferta da semana",
"status": "published",
"scheduleMode": "now",
"scheduleDate": "2025-08-23T10:40:00Z",
"createdAt": "2025-08-22T10:40:00Z",
"totalUsers": 12500,
"analytics": {
"clicks": 320,
"impressions": 8400,
"ctr": 3.81,
"its": 67.2,
"totalUsers": 12500
}
}
(Resposta abreviada; a lista completa de campos está em Obter campanha.) ctr é cliques ÷ impressões e its é impressões ÷ base alcançada, ambos em percentual — definições no Glossário.
Listar as campanhas enviadas em um período
Corpo vazio ({}) devolve as 10 criadas mais recentemente. Para um relatório mensal, filtre por data de envio e status sent:
curl -X POST https://api.aiwebpush.com/v2/campaigns \
-H "Authorization: SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{
"startDate": "2025-08-01T00:00:00Z",
"endDate": "2025-08-31T23:59:59Z",
"dateField": "scheduleDate",
"status": ["sent"],
"limit": 10
}'
Cada item vem com analytics, então dá para somar cliques e impressões do mês direto da resposta. Referência: Listar campanhas.
Percorrer todas as páginas com cursor
A listagem é paginada por cursor. Repita os mesmos filtros e o mesmo limit, passando o nextCursor da resposta anterior, até hasMore vir false. (Respostas abreviadas; cada item de items tem os campos completos de Listar campanhas.)
Passo 1 — primeira página, sem cursor:
curl -X POST https://api.aiwebpush.com/v2/campaigns \
-H "Authorization: SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"dateField":"createdAt","limit":2}'
{
"items": [ "...2 campanhas..." ],
"limit": 2,
"hasMore": true,
"nextCursor": "eyJrIjoiY2FtcGFpZ24tMTAiLCJkIjoxNzU1ODU5MjAwfQ=="
}
Passo 2 — próxima página, com o cursor recebido:
curl -X POST https://api.aiwebpush.com/v2/campaigns \
-H "Authorization: SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"dateField":"createdAt","limit":2,"cursor":"eyJrIjoiY2FtcGFpZ24tMTAiLCJkIjoxNzU1ODU5MjAwfQ=="}'
{
"items": [ "...campanhas restantes..." ],
"limit": 2,
"hasMore": false,
"nextCursor": null
}
Copie o cursor exatamente como veio: cursor alterado, ou gerado com a chave de outro site, responde 400 Invalid pagination cursor.
Cancelar um agendamento ou apagar um rascunho
DELETE exclui rascunhos e cancela campanhas agendadas que ainda não foram enviadas.
curl -X DELETE https://api.aiwebpush.com/v2/campaign/abc12--987654 \
-H "Authorization: SUA_CHAVE"
{ "id": "abc12--987654", "deleted": true }
Se a campanha já foi enviada, nada é excluído e a resposta é 409 com { "message": "Cannot delete a campaign that has already been sent" }. Referência: Excluir campanha.
Próximos passos
- Todos os campos e regras: Limites.
- O que cada erro significa e como tratar: Erros.
- Dúvidas rápidas: Perguntas frequentes.