Vender com afiliado

Credite a venda ao afiliado certo enviando affiliate_identifier na cobrança, e saiba quando o código é recusado ou ignorado.

Um afiliado divulga o seu produto e recebe comissão pelas vendas que traz. No checkout da PagPolar, o link do afiliado cuida disso sozinho. Quando a venda é feita pela API, é você que informa o afiliado.

Use este guia quando o seu sistema sabe qual afiliado trouxe o cliente. A venda em si segue o guia do meio de pagamento. Aqui você só acrescenta um campo: affiliate_identifier.

Visão geral

O diagrama mostra como a API decide se a venda fica com o afiliado.

Os detalhes de cada pergunta estão em Quando o código é ignorado.

Antes de começar

  • Um produto com o programa de afiliados ligado no painel e pelo menos um afiliado aprovado.
  • Uma oferta desse produto. Veja Criar produto e oferta.
  • Uma cobrança funcionando sem afiliado. Veja o Início rápido.
  • Um token de acesso. Veja Autenticação; os exemplos em Node.js assumem a variável accessToken.

Rotas que aceitam o código

O campo affiliate_identifier é opcional e vale nestas quatro rotas:

RotaO que faz
POST /payments/pixVenda por PIX.
POST /payments/boletoVenda por boleto.
POST /payments/credit-cardVenda no cartão.
POST /plans/offer/{id}/subscribeAssinatura.

Passo a passo

Consiga o código do afiliado

O código do afiliado tem o formato PAO seguido de 10 dígitos, como PAO0123456789. Cada afiliação tem um código próprio. Um afiliado de dois produtos tem dois códigos diferentes.

O afiliado encontra o código no painel dele:

  1. Ele abre Afiliação → Minhas afiliações.
  2. Abre a afiliação do seu produto.
  3. Na seção Meus links de divulgação, cada link termina com ?ref= seguido do código.

Tela da afiliação no painel do afiliado, com a seção Meus links de divulgação e um link de checkout terminado em ?ref= seguido do código do afiliado

O código é o valor depois de ref=.

A lista de afiliados não mostra o código

Na sua tela Afiliação → Afiliados, cada afiliado aparece com nome e e-mail, sem o código. Peça o código ao afiliado, ou leia do link de divulgação dele.

Pela API não existe cookie nem regra de primeiro ou último clique. Vale o código que você enviar. Decidir qual afiliado creditar é tarefa do seu sistema.

Envie affiliate_identifier na cobrança

Acrescente o campo no corpo da cobrança. O exemplo usa PIX. Nas outras três rotas, o campo é o mesmo.

curl -X POST "https://api.pagpolar.com/v1/payments/pix" \
  -H "Authorization: Bearer <SEU_TOKEN_DE_ACESSO>" \
  -H "Idempotency-Key: 8d3f1a2b-5c6d-4e7f-9a0b-1c2d3e4f5a6b" \
  -H "Content-Type: application/json" \
  -d '{
    "offer_identifier": "<CODIGO_DA_OFERTA>",
    "affiliate_identifier": "<CODIGO_DO_AFILIADO>",
    "external_reference": "PEDIDO-2001",
    "customer": {
      "name": "Maria Silva",
      "email": "cliente@exemplo.com",
      "document": "<CPF_DO_CLIENTE>",
      "phone": "<TELEFONE_DO_CLIENTE>"
    }
  }'
import { randomUUID } from 'node:crypto';

const response = await fetch('https://api.pagpolar.com/v1/payments/pix', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${accessToken}`,
    'Idempotency-Key': randomUUID(),
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    offer_identifier: '<CODIGO_DA_OFERTA>',
    affiliate_identifier: '<CODIGO_DO_AFILIADO>',
    external_reference: 'PEDIDO-2001',
    customer: {
      name: 'Maria Silva',
      email: 'cliente@exemplo.com',
      document: '<CPF_DO_CLIENTE>',
      phone: '<TELEFONE_DO_CLIENTE>',
    },
  }),
});

console.log(response.status, await response.json());
CampoObrigatórioO que é
affiliate_identifierNãoCódigo do afiliado: PAO em letras maiúsculas, seguido de exatamente 10 dígitos. Espaços no começo e no fim são removidos.

A resposta é igual à de uma venda sem afiliado, como em Vender com PIX ou boleto. Contrato completo: POST /payments/pix, POST /payments/boleto, POST /payments/credit-card e POST /plans/offer/{id}/subscribe.

A API não avisa se o afiliado foi creditado

Se o código não se aplica, a venda é criada assim mesmo, sem afiliado e sem erro. A resposta da cobrança, GET /sales/{identifier} e os webhooks não trazem dados do afiliado. Para conferir, use o painel, como no próximo passo.

Confira no painel

Abra Afiliação → Afiliados e a aba Vendas. Ela lista as vendas feitas por afiliados, com o afiliado e a comissão.

Tela Afiliação, Afiliados, aba Vendas, com os indicadores de vendas afiliadas e comissão e a lista de vendas com o afiliado e a comissão de cada uma

Se a venda não aparece ali, o código foi ignorado. Veja os motivos na próxima seção.

Quando o código é recusado

A API confere o formato antes de tudo. Se o formato está errado, a resposta é 400 e nada é criado: nem venda, nem registro da Idempotency-Key. Corrija e envie de novo com a mesma chave.

Você enviaResposta
PAO0123456789Aceito.
" PAO0123456789 " (com espaços nas pontas)Aceito. Os espaços são removidos.
pao0123456789 (letras minúsculas)400 invalid_request com message vazia
PAO123 (menos de 10 dígitos)400 invalid_request com message vazia
null400 invalid_request com message vazia
"" (texto vazio)400 invalid_request com O campo affiliate_identifier não pode estar vazio

Venda sem afiliado? Não envie o campo. Os outros erros da cobrança não mudam com o afiliado: veja os erros comuns a todas as rotas e o guia do meio de pagamento.

Quando o código é ignorado

Com o formato certo, a API procura o afiliado. Em qualquer uma das situações abaixo, a venda é criada normalmente, sem afiliado, e a resposta continua 201:

SituaçãoO que conferir
O código não existe.Copie o código de novo do link de divulgação.
O código é de uma afiliação de outro produto.O código vale só para o produto da afiliação. Use o código do afiliado para o produto desta oferta.
A afiliação não está ativa: pendente ou recusada.Aprove o afiliado no painel.
A afiliação foi encerrada e o prazo de carência já venceu.Depois de banir ou remover um afiliado, o código ainda gera comissão durante a carência. Por padrão, a carência é de 3 dias. Depois dela, não gera mais.
O programa de afiliados do produto está desligado.Ligue o programa na aba Afiliados da configuração do produto.
O código é de uma afiliação da sua própria conta.Uma conta não recebe comissão das próprias vendas.
O afiliado não tem conta de recebimento criada, ou a verificação de identidade dele foi recusada.O afiliado precisa concluir o cadastro para receber.
A comissão do afiliado está zerada.Ajuste a comissão no painel.
A oferta não está liberada para o afiliado.Libere a oferta para o afiliado, ou libere todas as ofertas do produto.
Falha interna ao consultar o afiliado.A venda nunca falha por causa do afiliado. Confira no painel e fale com o suporte informando o request_id.

Oferta informada na hora e comissão

Você pode cobrar sem criar a oferta antes, enviando offer no lugar de offer_identifier. Veja Ofertas, planos e ofertas ocultas.

Com afiliado, cuidado:

  • Se offer cria uma oferta nova, ela não está na lista de ofertas liberadas de ninguém. A comissão só vale se o afiliado puder divulgar todas as ofertas do produto.
  • Se offer reaproveita uma oferta que já existe e já está liberada para o afiliado, a comissão vale.

Afiliado com lista de ofertas: crie a oferta antes

Crie a oferta antes com POST /offers, libere para o afiliado no painel e cobre com offer_identifier.

Comissão na assinatura

Em POST /plans/offer/{id}/subscribe, o afiliado recebe a comissão da primeira cobrança. Nas renovações, ele só continua recebendo se a afiliação estiver com todas as recorrências ligada. Sem essa opção, depois do primeiro ciclo a parte dele volta para você.

Eventos de webhook deste fluxo

Não existe evento próprio de afiliado. Os eventos da venda chegam como numa venda sem afiliado, como TRANSACTION_CREATED e TRANSACTION_PAID.

Na venda criada pela API, source.channel é API, com ou sem afiliado. O valor AWARD é outra coisa: uma venda gerada como prêmio para o afiliado. Veja Canal da venda.

Próximos passos