- Receber o fato financeiro — webhook do Stripe → ingestão (assinatura criada, cobrança, estorno, cancelamento).
- Saber o afiliado — colocar o id do clique (
repass_cid=clk_…) na metadata do checkout/assinatura, ou usar fallbacks (visitante, e-mail identificado, cupom).
200 com outcome: unmatched e nada é gravado.
Pré-requisitos
Antes do primeiro webhook útil:- Programa ativo com regra de comissão vigente
- Afiliado aprovado com link rastreável
- (Recomendado) tracker client-side no seu site, para capturar
repass_cid/repass_vidda URL após o redirect/t/{token}
Passo 1: conectar o Stripe
No painel da Repass, em Configurações → Integrações:- Conectar Stripe (OAuth) — configura webhook e credenciais em um passo, ou
- Configurar manualmente — aponte um webhook no Stripe para:
invoice.paid(ouinvoice.payment_succeeded)checkout.session.completedcharge.refundedcustomer.subscription.deletedcharge.dispute.created(só tem efeito se você gravar também a secret keysk_…)
whsec_…) no painel. A secret key da API (sk_…) é opcional: habilita chargebacks, taxas de gateway e resolução de cupom Stripe → atribuição por cupom.
Só BRL é suportado. Eventos em outra moeda são ignorados (
unsupported_currency).Passo 2: capturar o clique no seu site
Quando o visitante clica no link do afiliado (GET /t/{token}), a Repass redireciona para o seu destino com repass_cid e repass_vid na query. Persista esses valores até o checkout (a tag /t.js faz isso automaticamente).
No signup/login, associe o visitante ao e-mail (Repass.identify(...)) para atribuição cross-device.
Passo 3: injetar a metadata no Stripe (obrigatório para atribuição explícita)
A Repass lê dois campos da metadata:
Valor sem o prefixo é descartado em silêncio.
Assinatura (Checkout mode: subscription)
A conversão canônica vem de invoice.paid com billing_reason = subscription_create. O checkout.session.completed em modo subscription é ignorado de propósito (evita duplicar). Coloque a metadata na subscription:
repass_cid / repass_pid na metadata da invoice, do line item e do subscription_details (incluindo o layout da API Stripe 2025+).
Compra avulsa (Checkout mode: payment)
Coloque a metadata na session:
Payment Intents / Subscriptions via API
Mesma ideia: graverepass_cid (e opcionalmente repass_pid) na metadata do objeto que o webhook traduz.
O que cada evento vira
Depois da primeira conversão atribuída, renovações e estornos amarram pelo
customerId do Stripe — você não precisa reenviar repass_cid em cada ciclo.
Desfechos (outcome)
O webhook responde 200 sempre que a assinatura é válida. O corpo traz o desfecho real:
Fallbacks sem metadata
Se o cliente passou por um link rastreado e você identificou o e-mail (/track/identify), a Repass ainda pode atribuir pela cascata visitorId → emailHash → fingerprint. A metadata continua sendo o caminho explícito e mais confiável, especialmente quando o checkout não herda cookies do site.
Cupons sincronizados com o Stripe também atribuem quando a secret key está configurada (promotion code → couponCode).
Alternativas ao webhook Stripe
Próximos passos
Ingestão
Contrato normalizado, HMAC e configuração do webhook.
Tracker client-side
Capturar repass_cid no browser sem backend.
Conversões S2S
Enviar conversões pelo seu backend.
Refund e clawback
Como estornos viram comissões negativas.