Cada evento de webhook que o Steel envia, com o momento em que dispara, o corpo completo de exemplo e o significado de cada campo do data.
Nesta página
Todo evento chega com o mesmo envelope; muda só o data. Esta página mostra o
corpo completo de cada tipo, com os dados de exemplo que o steel trigger
também usa. Para receber e conferir as entregas, veja
Receber os webhooks do Steel.
O envelope
Campo
Tipo
O que é
id
texto
Id do evento (evt_...). O mesmo em todas as tentativas e no cabeçalho Steel-Webhook-Id: use para não processar duas vezes
type
texto
O tipo, como nas seções abaixo
createdAt
data ISO 8601 (UTC)
Quando o evento aconteceu no Steel. Use para ordenar: a ordem de chegada não é garantida
workspaceId
texto
O workspace de origem
data
objeto
O conteúdo do tipo
Regras do data, as mesmas da API v1:
campos novos e opcionais podem aparecer a qualquer momento (ignore o que não
conhece); nada é removido, muda de tipo ou passa a ser obrigatório sem um tipo
de evento novo e aviso prévio. Datas vêm sempre em UTC. Os campos actorId
são o id do usuário que fez a ação, ou null quando foi o sistema (uma
automação, o SLA, um canal externo).
O catálogo vivo, com os tipos dos módulos do seu token, está em
GET /api/v1/webhooks/events e em steel webhooks events.
Id, número e código com o prefixo do workspace (INC-000123)
title
Título
type
INCIDENT, SERVICE_REQUEST, CHANGE ou PROBLEM
channel
Por onde chegou: AGENT, PORTAL, EMAIL, WHATSAPP, PHONE, AI ou API
phase
Fase atual (id, name, category: NEW, IN_PROGRESS, WAITING, RESOLVED, CLOSED ou CANCELED)
priority
{ id, name } ou null
departmentId, assigneeId, requesterId
Ids, ou null
createdAt, updatedAt
Datas ISO 8601
Para o chamado completo (SLA, campos personalizados, descrição), busque
GET /api/v1/servicedesk/tickets/{ticketId} com o data.ticket.id.
servicedesk.ticket.updated
Chamado alterado. Mesmo ticket do evento de abertura, já com os valores
novos, e change diz o que mudou: fields (campos), assigned (responsável)
ou phase (fase).
Uma mudança de responsável também gera servicedesk.ticket.assigned; uma
resolução, servicedesk.ticket.resolved. Assine só o que o seu sistema usa
para não tratar o mesmo fato duas vezes.
Avisos do chamado
Os tipos abaixo têm o mesmo formato: uma referência curta ao chamado
(id, number, code, title), o actorId e um summary com o título e o
texto da notificação, em português. O summary é feito para mostrar a uma
pessoa (num canal do Teams, num SMS); não faça o seu código depender dele.
Tipo
Quando
summary.title de exemplo
summary.body de exemplo
servicedesk.ticket.assigned
Chamado atribuído a um atendente.
Chamado atribuído a você
INC-000123 — Impressora do financeiro sem conexão
servicedesk.ticket.message
Nova mensagem pública no chamado.
Nova mensagem no chamado
A impressora voltou a funcionar, obrigado!
servicedesk.ticket.resolved
Chamado resolvido.
Chamado resolvido
INC-000123 foi resolvido.
servicedesk.ticket.reopened
Chamado reaberto.
Chamado reaberto
INC-000123 foi reaberto pelo solicitante.
servicedesk.ticket.escalated
Chamado escalonado por regra ou manualmente.
Chamado escalonado
INC-000123 foi escalonado para o nível 2.
servicedesk.ticket.csat
Solicitante avaliou o atendimento (CSAT).
Avaliação recebida
Nota 5 de 5.
servicedesk.sla.at_risk
SLA do chamado em risco.
SLA em risco
Faltam 30 minutos para vencer a resolução.
servicedesk.sla.breached
SLA do chamado violado.
SLA violado
O prazo de resolução venceu.
servicedesk.approval.requested
Aprovação solicitada no chamado.
Aprovação solicitada
A mudança aguarda a sua aprovação.
servicedesk.approval.responded
Aprovação respondida (aprovada ou recusada).
Aprovação respondida
A mudança foi aprovada.
Exemplo, servicedesk.sla.at_risk:
{
"id": "evt_cm2x7k3p0000abcd",
"type": "servicedesk.sla.at_risk",
"createdAt": "2026-10-18T12:00:00.000Z",
"workspaceId": "cm2ws0001",
"data": {
"ticket": {
"id": "cm2tkt000000example",
"number": 123,
"code": "INC-000123",
"title": "Impressora do financeiro sem conexão"
},
"actorId": "cm2usr000000example",
"summary": {
"title": "SLA em risco",
"body": "Faltam 30 minutos para vencer a resolução."
}
}
}
CRM
crm.lead.created
Novo lead, por qualquer canal: aplicativo, formulário, API de integração,
API v1, importação ou IA.
Dono escolhido pelas regras de roteamento, ou null
Oportunidade mudou de etapa
Tipo crm.opportunity.stage_changed. A oportunidade mudou de etapa (no quadro,
pela API v1 ou pela IA). category da etapa é OPEN, WON ou LOST.
fromStage vem null quando a etapa anterior não existe mais.
Negócio ganho ou perdido. source diz de onde veio: lead (um lead fechado
como ganho ou perdido) ou opportunity (uma oportunidade que entrou numa etapa
de categoria WON ou LOST). Uma oportunidade que vai para uma etapa de ganho
gera os dois eventos: crm.opportunity.stage_changed e crm.deal.won. Andar
entre duas etapas de ganho não gera um segundo crm.deal.won.
amount é o valor do negócio, ou null quando não foi informado.
Comunicação
communication.message.received
Mensagem de WhatsApp recebida de um contato numa conexão da Comunicação.
Mensagens que chegam por uma conexão ligada ao ServiceDesk viram mensagens do
chamado e não geram este evento.
O texto, ou a legenda da mídia; null quando não há
message.providerMessageId
Id da mensagem no provedor (wamid... na Meta)
contact.waId
Número do WhatsApp só com dígitos (DDI + DDD + número)
connectionId
A conexão que recebeu
A mídia não vem no evento. Abra a conversa no Steel pelo conversationId.
communication.conversation.waiting
Uma conversa da Comunicação entrou na fila, aguardando um atendente:
aberta, não arquivada e sem responsável — a mesma regra de
GET /api/v1/whatsapp/conversations/waiting.
O evento sai uma vez por entrada na fila, não a cada mensagem nova de uma
conversa que já está nela.
new: o contato abriu uma conversa nova; reopened: uma conversa fechada foi reaberta (pelo contato ou por um atendente) sem responsável; returned_to_queue: o responsável saiu (devolvida para a fila, ou um botão de resposta a moveu para a fila de uma equipe)
conversation.teamId
Fila da equipe em que a conversa espera; null = fila geral
conversation.aiActive
true quando a IA está respondendo enquanto ninguém assume
actorId
Quem devolveu ou reabriu; null quando foi o contato ou uma automação
Conversas de conexões ligadas ao ServiceDesk viram chamados e não geram
este evento. Uma conversa nova aberta do lado da empresa (por um atendente, no
Steel ou pelo celular, ou por um envio da API) também não gera, mesmo sem
responsável: o evento avisa quando um contato passa a esperar.
Steel Agents
agents.approval.pending
Um Steel Agent terminou uma execução e propôs ações que esperam a decisão de
alguém. count é quantas ações estão esperando.
O evento do botão Enviar teste (e de POST /api/v1/webhooks/endpoints/{id}/test).
Vai só para aquele endpoint, nunca entra numa assinatura e não conta para a
desativação automática.
{
"id": "evt_cm2x7k3p0000abcd",
"type": "steel.ping",
"createdAt": "2026-10-18T12:00:00.000Z",
"workspaceId": "cm2ws0001",
"data": {
"message": "Teste de webhook do Steel"
}
}
Responda 2xx ao steel.ping como a qualquer outro evento: é assim que o
teste confirma que a URL e a assinatura estão certas.