Webhooks
Eventos
Tipos de evento, quando cada um é emitido e o formato do payload.
Tipos de evento
| Evento | Quando é emitido |
|---|---|
script.created | Um roteiro foi criado, inclusive se já nasceu como Pronto. |
script.updated | Título, texto ou status de um roteiro ativo mudou. |
script.status_changed | O status de um roteiro existente mudou. Traz o status anterior. |
script.trashed | O roteiro foi para a lixeira. |
script.restored | O roteiro saiu da lixeira. |
webhook.test | Teste solicitado na área logada, com dados sintéticos. |
Regras de emissão:
- Uma mudança de status emite dois eventos,
script.updatedescript.status_changed, com IDs distintos e a mesma revisão. - Criar já como Pronto emite apenas
script.created. - Lixeira e restauração emitem somente seus eventos específicos.
- Gravações sem mudança real, conflitos de revisão e transações desfeitas não emitem eventos.
- Não há eventos de leitura ou consulta.
Filtro por status
Ao assinar script.status_changed, você pode escolher um status de destino. Com o filtro Pronto, o destino só recebe as transições para ready, o que reduz disparos desnecessários.
Estrutura do payload
{
"id": "evt_550e8400e29b41d4a716446655440000",
"type": "script.status_changed",
"timestamp": "2026-10-30T15:00:00.000Z",
"api_version": "2026-10-30",
"environment": "production",
"data": {
"script": {
"id": "67a92051-1245-4126-b9b4-2c532084ae16",
"revision": 4,
"status": "ready",
"deletedAt": null
},
"changes": {
"fields": ["status"],
"previousStatus": "draft"
}
}
}Identificador único do evento (evt_…). É o mesmo valor do header webhook-id e não muda entre tentativas.
Um dos tipos da tabela acima.
Momento da alteração que gerou o evento.
Versão do contrato do payload. Atualmente 2026-10-30.
production, staging ou development.
id, revision, status e deletedAt do roteiro no momento do evento.
Campos alterados em script.updated e script.status_changed: title, content e/ou status. Vazio nos demais eventos.
Status anterior. Presente apenas em script.status_changed.
O payload não traz o texto
Por segurança, os eventos carregam apenas metadados: nada de título, texto, e-mail ou tokens. Para obter o conteúdo, busque o roteiro com uma chave de leitura:
curl 'https://livetp.app/api/v1/scripts/67a92051-1245-4126-b9b4-2c532084ae16' \
-H "Authorization: Bearer $LIVETP_API_KEY"A leitura devolve a versão atual, que pode ser posterior ao evento. Compare revision e status antes de agir. Veja Por que o payload não traz o texto.
Evento de teste
{
"id": "evt_0b7d3c6c2f8a4a3e9d1f5e2a7c4b9d10",
"type": "webhook.test",
"timestamp": "2026-10-30T15:00:00.000Z",
"api_version": "2026-10-30",
"environment": "production",
"data": {
"challenge": "4f6c1a3e-8d2b-4c7a-9e5f-1b2d3c4e5f60",
"message": "Teste de conexão LiveTP. Nenhum roteiro real foi enviado."
}
}Responda 200 com {"challenge": "<data.challenge>"} para confirmar o destino.
Ordem e duplicatas
- A entrega é pelo menos uma vez: o mesmo evento pode chegar mais de uma vez. Deduplique por
environment+id. - A ordem de chegada não é garantida. Use
data.script.revisionpara identificar eventos antigos. - Para estados completos, prefira a revisão mais recente. Para transições de status, registre cada ID sem descartar transições intermediárias.
Os schemas completos estão na seção webhooks da especificação OpenAPI.