Enviar eventos de lead e venda pelo seu servidor
Registre um cadastro e uma compra no clique que os gerou — corpos das requisições, o ID do clique, valores em centavos e idempotência.

Duas requisições fazem o serviço inteiro: uma quando a pessoa se identifica, outra quando ela paga. As duas rodam no seu servidor, com uma chave de API secreta, e as duas citam o ID do clique que trouxe a pessoa.
Disponibilidade
- Plano: Pro ou superior, ou o teste de 14 dias.
- Onde: no seu backend. Crie a chave em Configurações → Chaves de API.
Antes de começar
- O monitoramento de conversão precisa estar ligado no link ou QR code — Configurar o rastreamento de conversão no seu site.
- Tenha o ID do clique em mãos. Ele chega como
?cq_id=…na sua URL de destino e fica no cookiecq_id. - Escolha um identificador estável para cada cliente no seu sistema. É ele que liga a venda ao lead depois.
Registrar um lead
Chame quando o visitante se torna identificável — cadastro, formulário, início de teste.
curl -X POST https://api.codeqr.io/track/lead \
-H "Authorization: Bearer codeqr_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"clickId": "qcdyQHsX1oajEock",
"eventName": "Sign up",
"customerExternalId": "user_123",
"customerName": "Ada Lovelace",
"customerEmail": "ada@example.com"
}'A resposta confirma o clique e devolve o cliente que a CodeQR passou a conhecer:
{
"click": { "id": "qcdyQHsX1oajEock" },
"customer": {
"id": "cmszcuwyr0003fdlpmoy3814u",
"name": "Ada Lovelace",
"email": "ada@example.com",
"externalId": "user_123",
"country": "BR"
}
}clickId— leia do cookiecq_idou do parâmetro na URL. Vazio é aceito: a CodeQR procura um cliente com o mesmocustomerExternalIde reaproveita o clique dele.eventName— texto livre, até 255 caracteres. Também é o apelido que uma venda posterior pode apontar.customerExternalId— obrigatório, o seu próprio ID. Tudo que o cliente fizer depois se prende a ele.
Registrar uma venda
curl -X POST https://api.codeqr.io/track/sale \
-H "Authorization: Bearer codeqr_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"customerExternalId": "user_123",
"amount": 4990,
"currency": "usd",
"eventName": "Purchase",
"paymentProcessor": "stripe",
"invoiceId": "INV-001"
}'{
"eventName": "Purchase",
"customerId": "user_123",
"amount": 4990,
"paymentProcessor": "stripe",
"invoiceId": "INV-001",
"currency": "usd",
"metadata": null
}amountvai na menor unidade da moeda —4990é US$ 49,90. É o erro mais comum e ele é silencioso: uma venda enviada como49.90registra 49 centavos.paymentProcessoraceitastripe,shopify,polar,paddle,revenuecat,customemanual.invoiceIdtorna a chamada idempotente. Enviar a mesma fatura duas vezes devolve a mesma resposta e não conta em dobro — o que importa, porque webhook de pagamento repete.leadEventNameprende a venda a um lead específico, em vez do mais recente.
Vendas que chegam antes do lead
Não é preciso enviar em ordem. Uma venda de um cliente que a CodeQR nunca viu cria o lead implicitamente, desde que ela traga como achar o clique — o customerExternalId já usado antes, ou um clickId.
Verifique se funcionou
Pergunte os contadores ao link alguns segundos depois:
curl -sS "https://api.codeqr.io/links/info?domain=go.example.com&key=verao" \ -H "Authorization: Bearer codeqr_xxxxxxxxxxxxxxxxxxxxxxxx"
{ "key": "verao", "clicks": 1, "leads": 1, "sales": 1, "saleAmount": 4990 }Depois abra Clientes e selecione a pessoa: o painel mostra o clique, o lead e a venda em ordem, com o valor.
Solução de problemas
A chamada devolve 404
O clickId não existe ou expirou. Confira o valor lido do cookie e lembre que, sem o monitoramento de conversão, o ID do clique vive só uma hora.
A chamada devolve 200 e nada é registrado
Um lead com clickId vazio e sem cliente correspondente é aceito e descartado — não há a que atribuir. Envie o ID do clique, ou um customerExternalId que a CodeQR já conheça.
A receita ficou cem vezes menor
amount é em centavos. 4990, não 49.90.
A mesma venda contou duas vezes
As duas chamadas usaram invoiceId diferentes, ou nenhum. A idempotência é por esse campo e vale por sete dias.
A venda não aparece na aba Events
A listagem de eventos de venda está falhando hoje. Use Clientes ou os contadores do link; os dois estão corretos.