Webhooks

Eventos

Tipos de evento, quando cada um é emitido e o formato do payload.

Tipos de evento

EventoQuando é emitido
script.createdUm roteiro foi criado, inclusive se já nasceu como Pronto.
script.updatedTítulo, texto ou status de um roteiro ativo mudou.
script.status_changedO status de um roteiro existente mudou. Traz o status anterior.
script.trashedO roteiro foi para a lixeira.
script.restoredO roteiro saiu da lixeira.
webhook.testTeste solicitado na área logada, com dados sintéticos.

Regras de emissão:

  • Uma mudança de status emite dois eventos, script.updated e script.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"
    }
  }
}
idstring

Identificador único do evento (evt_…). É o mesmo valor do header webhook-id e não muda entre tentativas.

typestring

Um dos tipos da tabela acima.

timestampstring (date-time)

Momento da alteração que gerou o evento.

api_versionstring

Versão do contrato do payload. Atualmente 2026-10-30.

environmentstring

production, staging ou development.

data.scriptobject

id, revision, status e deletedAt do roteiro no momento do evento.

data.changes.fieldsstring[]

Campos alterados em script.updated e script.status_changed: title, content e/ou status. Vazio nos demais eventos.

data.changes.previousStatusstring

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.revision para 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.