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:
| Rota | O que faz |
|---|---|
POST /payments/pix | Venda por PIX. |
POST /payments/boleto | Venda por boleto. |
POST /payments/credit-card | Venda no cartão. |
POST /plans/offer/{id}/subscribe | Assinatura. |
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:
- Ele abre Afiliação → Minhas afiliações.
- Abre a afiliação do seu produto.
- Na seção Meus links de divulgação, cada link termina com
?ref=seguido do código.

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());| Campo | Obrigatório | O que é |
|---|---|---|
affiliate_identifier | Não | Có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.

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ê envia | Resposta |
|---|---|
PAO0123456789 | Aceito. |
" 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 |
null | 400 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ção | O 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
offercria 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
offerreaproveita 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.