Eventos disponíveis para webhooks
Eventos de webhook definem quais ações na evob disparam notificação para o sistema externo.
Onde acessar
Plataforma > Configurações > Webhooks > [webhook] > EventosLista completa de eventos
Aluno
| Evento | Quando dispara | |---|---| | `student.created` | Novo aluno criou conta na loja | | `student.updated` | Dados do aluno foram alterados |
Matrícula
| Evento | Quando dispara | |---|---| | `enrollment.created` | Matrícula criada (por compra ou manualmente) | | `enrollment.cancelled` | Matrícula cancelada pelo admin ou por reembolso | | `enrollment.completed` | Aluno marcou todos os módulos como concluídos |
Compras e cobranças
| Evento | Quando dispara | |---|---| | `purchase.completed` | Pagamento aprovado (cartão, Pix, boleto compensado) | | `purchase.refunded` | Reembolso processado | | `charge.failed` | Cobrança recusada (cartão ou renovação de assinatura) | | `chargeback.created` | Chargeback iniciado pelo banco |
Assinatura
| Evento | Quando dispara | |---|---| | `subscription.created` | Nova assinatura criada | | `subscription.cancelled` | Assinatura cancelada | | `subscription.renewed` | Renovação de assinatura aprovada | | `subscription.suspended` | Acesso suspenso por inadimplência |
Conteúdo
| Evento | Quando dispara | |---|---| | `course.completed` | Aluno concluiu o curso | | `certificate.issued` | Certificado gerado e disponível | | `nps.answered` | Aluno respondeu ao NPS | | `comment.posted` | Aluno postou comentário em aula |
Estrutura do payload
Todos os eventos seguem a mesma estrutura base:
```json { "event": "purchase.completed", "event_id": "evt_a1b2c3d4e5f6", "timestamp": "2026-05-07T14:30:00Z", "store_id": 123, "data": { // dados específicos do evento } } ```
O campo `event_id` é único por disparo — use-o para implementar idempotência (ignorar duplicatas).
Dados incluídos por evento
`purchase.completed`
```json { "transaction_id": 456789, "student": { "id": 111, "name": "João Silva", "email": "joao@email.com" }, "offer": { "id": 22, "name": "Curso Completo", "price": 29700 }, "payment_method": "credit_card", "installments": 3, "coupon_code": null } ```
`enrollment.created`
```json { "enrollment_id": 789, "student": { "id": 111, "name": "João Silva", "email": "joao@email.com" }, "course": { "id": 5, "name": "Curso Completo" }, "classroom": { "id": 9, "name": "Turma 2026.1" }, "created_by": "purchase" } ```
Boas práticas
✅ Faça
- Assine apenas os eventos que o seu sistema vai consumir — receber todos os eventos quando você só usa `purchase.completed` gera tráfego desnecessário e aumenta o risco de erro
- Use o `event_id` para deduplicação no receptor — o mesmo evento pode ser entregue mais de uma vez em cenário de retry; o receptor deve ignorar duplicatas
- Documente internamente quais eventos cada webhook da loja está assinando — sem documentação, fica difícil saber o que desligar quando uma integração for desativada
❌ Não faça
- Ouvir `student.updated` para sincronizar CRM sem filtrar o que mudou — esse evento dispara em qualquer alteração de dados do aluno (inclusive internas); verifique o campo alterado antes de processar
- Usar `enrollment.created` como confirmação de pagamento — matrícula manual não gera `purchase.completed`; para confirmação financeira, use `purchase.completed`
- Ignorar o evento `charge.failed` em assinaturas — sem esse evento, o CRM não saberá que o aluno está inadimplente e continuará recebendo comunicações de cliente ativo
Erros comuns
"Não encontro o evento que preciso na lista"
A lista de eventos disponíveis pode variar por plano ou por configuração da plataforma. Se precisar de um evento que não está disponível, entre em contato com o suporte para verificar o roadmap.
"O evento `purchase.completed` não dispara para compras via boleto"
Para boleto, o evento dispara quando o boleto é compensado (1–3 dias úteis após o pagamento). Imediatamente após a geração do boleto, nenhum evento de compra é disparado.
"Recebi `enrollment.created` mas não recebi `purchase.completed`"
Pode ser matrícula manual (admin matriculou sem compra) ou cortesia. Nesse caso, `enrollment.created` é disparado mas não há transação financeira, portanto `purchase.completed` não ocorre.
"Quero filtrar eventos por curso ou oferta específicos"
Filtragem por curso/oferta no disparo não está disponível — o webhook recebe todos os eventos do tipo assinado. O filtro deve ser implementado no receptor, verificando o `course.id` ou `offer.id` no payload.
Próximos passos
- 📖 Webhooks — conceito e funcionamento
- 📖 Configurar e testar um webhook
- 📖 Retry e depuração de webhooks
- 📖 Segurança e autenticação de webhooks (HMAC)
Foi útil este artigo? 👍 👎 Falar com CS (em produção) · Pergunte ao Vob 🤖 (em produção) Última atualização: 2026-05-07