Atribuição de receita
Receita liga um checkout ao vídeo em que a pessoa clicou. Vendas aprovadas aparecem em Analytics → Receita, no dashboard e no vídeo. Os números são as vendas que voltaram pelo webhook, não uma estimativa.
Onde encontrar
- Relatório: abra Analytics e selecione Receita.
- Configuração: abra Integrações e APIs e selecione Receita.
O relatório mostra a receita do mês, a receita total, a receita por reprodução, as vendas, os reembolsos, a receita ao longo do tempo, a receita por fonte de tráfego e os principais vídeos. A configuração não fica no relatório. Use Configurar receita no relatório para abrir a tela de conexão.
Conectar um checkout
Em Integrações e APIs → Receita:
- Confirme a moeda de relatório. Vendas novas são convertidas para essa moeda no total. Workspaces em português começam em BRL. Os demais começam em USD. Você pode mudar. Vendas já gravadas mantêm a taxa do dia da cobrança.
- Escolha o checkout: AtomicPay, Hotmart, Kiwify, Cartpanda, Stripe ou Personalizado.
- Escolha o parâmetro em que a chave de clique é gravada:
src,sck,xcode,xcod,sid,subid,vtidousub1. O formulário começa no parâmetro que o checkout documenta. A Stripe não usa essa lista. - Em um checkout personalizado, informe o host do link de compra, como
pay.example.com. Os checkouts nomeados já conhecem os hosts. - Selecione Conectar, leia os passos no cartão e copie a URL do webhook nesse checkout. A URL contém um token secreto. Trate-a como uma senha.
A moeda de relatório é uma lista: USD, BRL, EUR, GBP, MXN ou JPY. São as moedas que o total consegue converter. Cada pedido continua gravado na moeda em que foi cobrado.
AtomicPay
Assine o webhook em centavos de compra aprovada, reembolso concluído e chargeback concluído. Use sck. O AtomicPay devolve esse valor na compra.
Hotmart
Na Hotmart, abra Ferramentas → Webhook (API e notificaç ões) e cadastre a URL. Selecione Compra aprovada, Compra reembolsada e Chargeback. Use src. A Hotmart devolve esse valor em purchase.origin.src no webhook de compra. O id do pedido é purchase.transaction. O valor é purchase.full_price.value na unidade maior. Um pedido de reembolso não é um reembolso. Espere PURCHASE_REFUNDED. Como cadastrar o webhook.
Kiwify
Na Kiwify, abra Apps → Webhooks e crie um webhook. Selecione Compra aprovada, Compra reembolsada e Chargeback. Use src. A Kiwify devolve esse valor em TrackingParameters. O id do pedido é order_id. Eventos do webhook.
Cartpanda
Na Cartpanda, abra Admin → Notificações → Webhooks. Envie order.paid e order.refunded para a URL. Use src. A Cartpanda guarda src e sck no link de checkout, inclusive lojas em mycartpanda.com. Parâmetros do checkout. Eventos do webhook.
Stripe
Payment Links da Stripe (buy.stripe.com) não guardam src nem os outros parâmetros de rastreamento. A Stripe só guarda client_reference_id, e esse valor volta em checkout.session.completed. O player grava esse parâmetro.
No endpoint de webhook da Stripe, envie:
checkout.session.completedpara a venda. É o evento que traz a chave do clique.charge.refundederefund.createdpara reembolso total. A Stripe também enviacharge.refundedem reembolso parcial. O parcial permanece na receita. O total sai da receita líquida.charge.dispute.createdpara uma disputa.charge.dispute.closedcom statuswondevolve essa cobrança à receita.
payment_intent.succeeded tem valor e moeda na menor unidade, mas não inclui client_reference_id. Esse evento pode gravar a cobrança e não consegue atribuí-la a um vídeo. Na API atual da Stripe, invoice.paid não inclui o PaymentIntent. Uma venda salva só com o id da fatura não casa com um reembolso, que chega com o id do PaymentIntent. O valor usado é a moeda da cobrança no PaymentIntent ou na Checkout Session, não o valor de apresentação do Adaptive Pricing que o cliente viu.
Uma Checkout Session criada pela API da Stripe precisa definir client_reference_id na própria API. Acrescentar o parâmetro em checkout.stripe.com não altera uma sessão que já existe. Um pagamento que já terminou sem client_reference_id não pode ser atribuído depois. Faça um novo pagamento depois da atualização do player. Uma venda aprovada sem chave de clique aparece na lista de configuração e fica fora da receita.
Checkouts personalizados
Checkouts nomeados têm o próprio parser. O personalizado não tem. Ele existe para um checkout que você controla, ou para uma plataforma que não está na lista. Ele precisa enviar este JSON para a URL do webhook:
{
"order_id": "order_123",
"order_amount_cents": 9700,
"currency": "USD",
"conversion_key": "ap1_chave_do_link",
"product_name": "Curso",
"category": "initial_sale",
"occurred_at": "2026-09-28T12:00:00Z"
}
order_amount_cents é um inteiro na menor unidade. 9700 é 97,00 USD. conversion_key precisa ser a chave que o player adicionou ao link. category pode ser refund, chargeback, upsell ou subscription_renewal. Qualquer outro payload é recusado, porque cada plataforma usa nomes de campo diferentes. Se a plataforma não conseguir mapear o webhook para esses campos, ela não pode ser conectada como personalizada.
Envie uma venda de teste para confirmar o webhook. A venda de teste entra na receita e pode ser removida.
Standard e Scale podem conectar um checkout e ver a receita. Free e Starter veem a configuração, mas a conexão fica bloqueada até o plano incluir o recurso.
Como uma venda é atribuída
O player adiciona uma chave de clique nos links de compra da página e nos botões dentro do vídeo, somente quando o host do link corresponde a um checkout conectado. Uma chave que já existe é mantida.
A venda vai para o último clique nos 30 dias antes da cobrança. Uma venda aprovada sem chave, com chave desconhecida ou com clique expirado não é receita. Ela fica na lista de configuração para mostrar que o webhook chegou, e fica fora do total, do gráfico e de cada vídeo.
Um reembolso ou chargeback atualiza esse pedido e o tira da receita líquida. Uma aprovação posterior não transforma um pedido reembolsado em venda de novo.
O que os números são
O total é uma moeda: a moeda de relatório do workspace. Uma venda cobrada em outra moeda é convertida com a taxa da data da venda e não é reescrita quando o câmbio muda. Receita por reprodução é esse total dividido pelas reproduções.
Isso não é atribuição multi-touch, receita de pixel de anúncio, CPA nem ROAS.
Documentos relacionados
Perguntas frequentes
Onde conecto Hotmart, Kiwify, Cartpanda, Stripe ou AtomicPay?
Abra Integrações e APIs e selecione Receita. Cole a URL do webhook no checkout. A guia Receita do Analytics é o relatório, não o formulário de conexão.
Por que a Stripe ignorou o parâmetro src?
Payment Links da Stripe só guardam client_reference_id, e só checkout.session.completed devolve esse valor. payment_intent.succeeded tem o valor e não tem a chave do clique. Adicione esse evento e faça um novo pagamento de teste.
O que um webhook genérico precisa enviar?
order_id, order_amount_cents como inteiro na menor unidade, currency e conversion_key com a chave do clique do link de compra. Outros formatos de JSON são recusados.
Qual clique recebe a venda?
O último clique nos 30 dias antes da cobrança. Só links cujo host corresponde a um checkout conectado recebem a chave.
Reembolsos ficam no total?
Não. Um reembolso concluído ou chargeback sai da receita líquida e aparece em reembolsos. Um pedido de reembolso que ainda não foi concluído não é um reembolso.
Por que o total não é a soma das linhas de vídeo?
Uma venda aprovada sem clique correspondente entra no total e não em um vídeo. As linhas de vídeo são só vendas com correspondência.