Criar um webhook
const url = 'https://dattacrm.com.br/api/v1/webhooks';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"targetUrl":"example","events":["lead.created"],"filters":{"additionalProperty":{"additionalProperty":["example"]}},"name":"example","ignoreOwnChanges":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://dattacrm.com.br/api/v1/webhooks \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "targetUrl": "example", "events": [ "lead.created" ], "filters": { "additionalProperty": { "additionalProperty": [ "example" ] } }, "name": "example", "ignoreOwnChanges": true }'Cria um webhook: o CRM passa a avisar a URL informada a cada evento escolhido, no formato padrão. Devolve o webhook e o segredo de assinatura, que aparece só nesta resposta. Por padrão o webhook ignora o que esta mesma chave causar, para o n8n não se disparar em laço; isso cobre só as mudanças feitas diretamente pela chave: o que uma automação do CRM fizer depois, em reação a essa mudança (ex.: etiqueta ou etapa aplicada por automação depois de uma venda), continua chegando. O webhook para de receber quando a chave que o criou é revogada (fica desligado) ou vence. Cada conta tem no máximo 50 webhooks, somando os da tela; acima disso a resposta é 409 conflict.
Authorizations
Seção intitulada “Authorizations ”Request Body required
Seção intitulada “Request Body required ”object
URL que recebe os avisos. Precisa ser https://, na porta 443, sem usuário e senha e sem ? nem # (ex.: https://n8n.exemplo.com/webhook/abc).
Eventos que disparam o webhook, de 1 a 22, sem repetir. Veja os aceitos em GET /webhooks/events.
Filtros por evento, ex.: { “sale.paid”: { “productId”: [“abc”] } }. Cada evento aceita só os filtros listados em GET /webhooks/events; filtro que o evento não aceita, ou de evento não assinado, é descartado sem erro.
object
Filtros deste evento, por nome de filtro.
object
Valores aceitos para o filtro, até 200.
Nome do webhook, de 1 a 80 caracteres. Sem ele, usa “API · ” seguido do nome da chave.
Quando verdadeiro (padrão), o webhook não avisa sobre o que esta mesma chave de API causar, evitando que um fluxo do n8n se dispare sozinho em laço.
Responses
Seção intitulada “ Responses ”Sucesso.
object
Webhook criado e seu segredo.
object
Webhook da conta: um endereço que o CRM avisa quando acontecem os eventos assinados.
object
Identificador do webhook.
Nome do webhook, como aparece na tela de destinos.
URL https que recebe o aviso de cada evento.
Eventos que disparam o webhook.
Filtros por evento. Vazio quando o webhook dispara para todo evento assinado.
object
Filtros do evento, por nome de filtro.
object
Valores aceitos para o filtro.
Situação: active (entregando), paused (pausado depois de falhas seguidas) ou disabled (desligado).
Verdadeiro quando o webhook não avisa sobre o que a própria chave que o criou causou.
Quando o webhook foi criado.
Segredo de assinatura (48 caracteres hexadecimais), usado para conferir o cabeçalho x-crm-signature de cada aviso. Aparece só nesta resposta: guarde agora.
Example
{ "data": { "webhook": { "id": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f", "createdByApiKeyId": "0b6f3c1e-8a4d-4f5b-9c2e-1a2b3c4d5e6f", "createdAt": "2026-10-19T12:00:00.000Z" } }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Máximo de requisições por janela de 60 segundos para esta chave.
Requisições restantes na janela atual.
Fim da janela atual, em milissegundos desde a época Unix (epoch ms).
Dados inválidos na requisição (validation_error), lead novo sem lista (list_required), campo que mudou de lugar (field_moved) ou chave enviada na URL (api_key_in_url).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Chave ausente, inválida (invalid_api_key), vencida (api_key_expired) ou revogada (api_key_revoked).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
A chave é somente leitura e a operação grava dados (insufficient_scope).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Conflito com o estado atual (conflict), contato oculto, cujo negócio não muda (lead_hidden), ou limite do plano atingido (plan_limit).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
O corpo da requisição passa de 256 KB (payload_too_large).
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Limite de requisições atingido (rate_limited). Aguarde Retry-After segundos.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Máximo de requisições por janela de 60 segundos para esta chave.
Requisições restantes na janela atual.
Fim da janela atual, em milissegundos desde a época Unix (epoch ms).
Segundos até poder tentar de novo.
Erro interno (internal_error). Informe o requestId ao suporte.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
O CRM está em modo somente leitura durante uma migração (maintenance). Tente de novo depois de Retry-After segundos.
Formato de erro da API.
object
object
Código estável do erro, ex.: validation_error.
Mensagem legível em português.
Detalhes extras, ex.: lista de campos inválidos.
Identificador da requisição, para suporte.
Example generated
{ "error": { "code": "example", "message": "example", "details": "example", "requestId": "example" }}Headers
Seção intitulada “Headers ”Identificador da requisição, para suporte.
Segundos até poder tentar de novo.