Pular para o conteúdo
Abrir o Leadz

API de eventos

Envie eventos do seu sistema para o Leadz com uma chave pessoal, em um formato fixo de JSON.

No Leadz:ContaConfiguraçõesAPI Sparkle Leadz Abrir esta tela
Nesta página

A API de eventos é o caminho para quem programa: o seu sistema avisa o Leadz de um cadastro, uma compra ou um cancelamento, e o Leadz cria ou atualiza o contato. Diferente do webhook, aqui não há mapeamento de campos. O formato é fixo, com uma lista fechada de tipos de evento, e cada chamada leva uma chave.

Esta página é técnica. Se você não programa, use um webhook de entrada.

#Antes de começar

  • A API precisa estar no seu plano. Sem ela, a tela mostra «API não ativa no seu plano».
  • Seu cargo precisa ter acesso a Configurações e a Integrações no workspace (a conta da sua empresa dentro do Leadz).

#Gerar a chave

  1. Abra Configurações e clique em API Sparkle Leadz.
  2. Em Seu token da API, clique em Gerar token.
  3. Copie o token com Copiar token e guarde em lugar seguro. A tela avisa: «Token gerado. Copie agora, ele não aparece de novo.»
Configurações, na seção API Sparkle Leadz. Dados fictícios.

O que saber sobre a chave:

  • Ela é sua e vale só para o workspace em que foi gerada. Cada usuário tem a própria.
  • Regenerar token cria uma chave nova e invalida a anterior na hora.
  • A tela mostra só o começo da chave e a data do último uso.
  • Nunca coloque a chave em código que roda no navegador nem em repositório público.

#Endereço

O endereço completo aparece na tela, no campo Endpoint. Use sempre o que a tela mostrar. O caminho termina assim:

POST https://SEU-ENDERECO/api/v1/events

A lista de eventos em JSON, sem precisar de chave:

GET https://SEU-ENDERECO/api/v1/events/catalog

#Autenticação

Envie a chave no cabeçalho Authorization:

Authorization: Bearer SEU_TOKEN
Content-Type: application/json

#Corpo da requisição

Campo Tipo Obrigatório Para que serve
type texto Sim O tipo do evento, da lista abaixo.
event_id texto Não Identificador do evento no seu sistema. Evita processar o mesmo evento duas vezes.
contact objeto Depende do evento Quem é a pessoa.
data objeto Depende do evento Os dados do evento.

Campos de contact:

Campo Observação
firstName, lastName Nome e sobrenome.
email E-mail.
phone, whatsapp Só dígitos, com o código do país. Exemplo: 5511999990000.
phones, emails Listas com telefones e e-mails adicionais, o principal primeiro. Até 10 de cada.
tags Lista de tags a aplicar.
customFields Objeto com campos personalizados, no formato "chave": "valor". Valor vazio é ignorado.

#Como o contato é encontrado

O Leadz procura um contato existente pelo e-mail, pelo telefone ou pelo data.external_id (o identificador da pessoa no seu sistema). Achou, atualiza. Não achou, cria, desde que o evento traga contact.firstName.

Nos eventos que criam contato (user.created, lead.created), contact.firstName é obrigatório. Nos demais, envie pelo menos contact.email, contact.phone ou data.external_id.

#Eventos aceitos

A lista completa, com os campos de cada evento, fica na tela, em Eventos disponíveis. Cada item abre um exemplo de JSON.

type O que faz Campos obrigatórios Tags aplicadas
user.created Registra um contato novo contact.firstName novo-usuario
user.updated Atualiza um contato existente e-mail, telefone ou data.external_id —
lead.created Registra um lead novo contact.firstName lead-novo
lead.scored Registra pontuação no histórico do contato data.score —
purchase.completed Registra uma compra data.order_id, data.amount cliente, comprou
purchase.refunded Registra um reembolso data.order_id reembolso
subscription.started Registra o início de uma assinatura contact.email, data.subscription_id assinante
subscription.canceled Registra o cancelamento contact.email, data.subscription_id cancelou-assinatura
tag.applied Aplica uma tag a um contato existente data.tag a tag enviada
contact.note Acrescenta uma observação ao contato contact.email, data.note —

A tela lista também os eventos lead.group_*, lead.dm_1x1 e tracker.custom. Eles são usados pela ligação com o Sparkle Tracker e não aplicam tags.

Todo evento aceito aparece no histórico da ficha do contato.

#Registrar a negociação de uma compra

O evento de compra só grava uma negociação no contato quando você diz a situação dela em data.negotiation_status:

Valor Negociação
open Em aberto
won Concluída
lost Perdida
refunded Reembolsada

A negociação é identificada por data.negotiation_key ou, se ele não vier, por data.order_id. Envie a mesma chave no checkout (open) e na compra (won) para que os dois eventos sejam a mesma negociação. Sem negotiation_status, o evento atualiza o contato e o histórico, mas não cria negociação.

#Exemplo em cURL

curl -X POST "https://SEU-ENDERECO/api/v1/events" \
  -H "Authorization: Bearer SEU_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "purchase.completed",
    "event_id": "pedido_9988_aprovado",
    "contact": {
      "firstName": "Ana",
      "email": "ana@exemplo.com",
      "phone": "5511999990000"
    },
    "data": {
      "order_id": "pedido_9988",
      "amount": 197.0,
      "currency": "BRL",
      "product_name": "Curso Exemplo",
      "negotiation_status": "won"
    }
  }'

#Respostas

Evento aceito, com o código 202:

{
  "ok": true,
  "id": "identificador-do-evento",
  "type": "purchase.completed",
  "outcome": "processed",
  "message": "Evento aceite",
  "contact_id": null,
  "contact_display_id": null,
  "request_id": "identificador-da-requisicao"
}

O 202 quer dizer que o evento foi recebido. O contato é criado ou atualizado logo em seguida, em segundo plano. Por isso contact_id volta vazio.

Quando o event_id já foi recebido, a resposta é 200 com "outcome": "duplicate" e nada é processado de novo.

Os erros têm este formato:

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Token API inválido",
    "request_id": "identificador-da-requisicao"
  }
}
Código HTTP Quando acontece O que fazer
400 Falta o type, o tipo não existe ou falta um campo obrigatório. A mensagem diz qual. Corrija o corpo.
401 Sem o cabeçalho Authorization, com chave inválida ou com chave revogada. Confira a chave ou gere outra.
403 A API não está no plano ou a conta está desativada. Fale com o suporte.
429 Limite por minuto ou limite diário atingido. Espere e reenvie.

Guarde o request_id das respostas de erro. Ele ajuda o suporte a encontrar a chamada.

#Limites

  • Por dia. O total de eventos por dia depende do seu plano. A tela mostra o consumo em Uso hoje. Ao passar do limite, a resposta é 429 com «Limite diário da API atingido».
  • Por minuto. Cada chave tem um limite de chamadas por minuto. Ao passar, a resposta é 429 com «Limite de requisições da API excedido. Aguarde um minuto e tente de novo.»
  • Sem chave válida. Chamadas sem chave, ou com chave fora do formato, ficam limitadas a 120 por minuto por origem.
  • Chave recusada. Uma chave recusada recebe 401 direto por até 5 minutos, antes de ser conferida de novo. Não adianta insistir com a mesma chave nesse intervalo.
  • Tamanho. O corpo pode ter até 1 MB.
  • Histórico. O Leadz guarda os 200 eventos mais recentes de cada workspace. A proteção contra event_id repetido vale enquanto o evento estiver guardado.

#Usar os eventos em um funil

Um evento enviado pela API pode iniciar um funil pelo gatilho Evento do Sparkle Tracker, o mesmo usado pela ligação com o Tracker. No campo Evento do Tracker, escolha Compra concluída, Reembolso ou Qualquer evento do Tracker. O gatilho aparece no editor quando o Tracker está conectado ou quando você tem uma chave gerada.

#Problemas comuns

A resposta é 401 com «Token API inválido»

A chave está errada, incompleta ou é de outro workspace. Confira se o cabeçalho está no formato Authorization: Bearer SEU_TOKEN, sem aspas nem espaços sobrando.

A resposta é 401 dizendo que a chave foi revogada

Alguém clicou em Regenerar token, e a chave antiga parou de valer. Atualize o seu sistema com a chave nova.

A resposta é 400 com «Campos obrigatórios ausentes»

A mensagem lista os campos que faltam, como contact.firstName ou data.order_id. Compare o seu corpo com o exemplo do evento em Eventos disponíveis.

O evento deu 202, mas o contato não apareceu

O evento foi aceito, mas não trouxe como identificar a pessoa. Em eventos que não criam contato, como tag.applied, o contato precisa existir antes. Confira o e-mail e o telefone enviados.

A compra chegou, mas não criou negociação

Faltou data.negotiation_status. Envie "won" para compra concluída.

O mesmo evento aparece duas vezes no histórico do contato

Faltou o event_id. Envie sempre um identificador único por evento, igual nas tentativas de reenvio. Assim o reenvio volta como duplicate e não é processado de novo.

#Veja também

Este artigo ajudou?

Mais em Integrações

Ver os 8 artigos