IDs de programa têm o prefixo
prog_ seguido de um ULID (ex.: prog_01J9Z…). Regras de comissão usam cmrl_ e tiers usam tier_. Veja IDs e recursos.O programa
Um programa concentra a configuração de comportamento de todo o ciclo de vida do afiliado e da comissão.string
required
Nome do programa (1 a 120 caracteres).
string
default:"BRL"
Moeda de comissões e payouts. Atualmente aceita apenas
"BRL". Imutável após a criação: o campo currency não pode ser alterado via PATCH.string
default:"active"
Ciclo de vida do programa:
active, paused ou archived. Programas nascem active. Só muda pelos endpoints de ação (pause / activate / archive), nunca pelo PATCH.string
default:"manual"
Como novos afiliados entram:
automatic: aprovado direto (approved).manual: ficapendingaguardando revisão.domain_whitelist: aprovado se o domínio do e-mail estiver naapprovalDomainWhitelist(case-insensitive); caso contrário,pending.
string
default:"last_click"
Modelo de atribuição de cliques:
first_click, last_click, linear, time_decay ou position_based. Detalhes e fórmulas em Atribuição.integer
default:30
Janela de atribuição (1 a 365 dias): define a validade do clique e o
max-age do cookie (dias × 86 400 s). Veja Tracking.integer
default:30
Carência (0 a 90 dias) até a comissão
pending virar approved. O hold conta a partir de conversion.occurredAt, não da data de registro. Veja Comissões.string[]
default:"null"
Domínios aprovados automaticamente no modo
domain_whitelist (até 50). Normalizados para minúsculas com deduplicação na escrita. No PATCH: omitido = inalterado, null = limpa, lista = substitui por inteiro.integer
default:50
Limite de links ativos por afiliado (1 a 1000). Veja Links e cupons.
string
default:"coupon_wins"
Desempate cupom × clique na conversão:
coupon_wins, click_wins ou split_50_50.string
default:"gross"
Base de cálculo da comissão:
gross (valor bruto) ou net_of_gateway_fees (líquido de taxas do gateway).string
default:"null"
URL de destino padrão e fallback de links arquivados.
boolean
default:false
Permite cadastro público de afiliados.
Criar um programa
Programas nascem com statusactive.
Atualizar a configuração
PATCH /programs/:programId aplica mudanças parciais: campo omitido permanece inalterado. currency e status não são editáveis aqui. Um PATCH sem mudança efetiva responde 200 com o estado vigente e não emite evento.
cURL
PATCH emite program.updated com um diff (before/after) contendo apenas as chaves efetivamente alteradas.
Ciclo de vida do programa
Cada transição emite o evento indicado (com payload{ before, after }). Transições fora do diagrama, incluindo repetir o status atual (active → active) e qualquer saída de archived, são rejeitadas com 409 conflict. archived é terminal.
Arquivar bloqueia a operação (cliques, conversões, afiliados), não a administração: o
PATCH de configuração e as mutações de tier (criar/renomear/reordenar/arquivar) continuam funcionando em programas arquivados.cURL
Regras de comissão
Uma regra de comissão define quanto o afiliado ganha. As regras são versionadas e imutáveis por dono: cada dono tem sua própria sequência independente de versões. Existem dois tipos de dono: a regra padrão do programa (programTierId: null) e cada tier (programTierId preenchido). Cada criação gera a versão max + 1 daquele dono, atribuída atomicamente. Versões anteriores permanecem consultáveis para sempre: não há endpoints de edição ou exclusão. A regra “corrente” de cada dono é sempre a de maior versão daquele dono.
A regra padrão vive em /programs/:programId/commission-rules (+ /current); a regra própria de um tier vive em /programs/:programId/tiers/:tierId/commission-rules (+ /current). Um tier sem regra própria cai na regra padrão do programa (ver Precedência de regras).
Tipos de regra
A Repass suporta três tipos:- percentage
- fixed
- tiered
Percentual sobre o valor da cobrança. O
percentage é informado de 0 a 100 com precisão de 0,01 (ex.: 20.5), e a resposta o devolve no mesmo formato.applicableProductIds (lista opcional com ≥ 1 ID). Uma conversão de produto fora da lista não gera comissão.
No cálculo, uma regra tiered escolhe a faixa de maior minCount ≤ total de conversões aprovadas do afiliado. Por isso a faixa-base minCount: 0 é o piso para qualquer volume.
Recorrência
O camporecurrence controla por quais ciclos de cobrança a comissão é paga. O default é { "kind": "one_time" }.
Quando a recorrência é
decreasing, os steps definem a taxa e se sobrepõem ao type da regra, inclusive às faixas de uma regra tiered. Combine tiered com decreasing com cautela.Criar uma versão de regra
cURL
Resposta
GET /programs/:programId/commission-rules, a versão corrente via GET /programs/:programId/commission-rules/current e uma versão específica via GET /programs/:programId/commission-rules/:ruleId. Veja a aba Referência da API para o detalhamento.
Tiers (níveis)
Tiers são uma lista ordenada de níveis (ex.: bronze / prata / ouro) que agrupam afiliados e podem ter uma regra de comissão própria. Cada tier tem umname (1 a 60 caracteres, único entre tiers ativos do programa) e uma position (≥ 0, única entre ativos). O nome do tier casa com o campo tier do afiliado. Cada tier mantém seu próprio histórico versionado de regra de comissão (em /programs/:programId/tiers/:tierId/commission-rules); um tier sem regra própria cai na regra padrão do programa.
Os tiers são geridos individualmente: criar, renomear, reposicionar, reordenar e arquivar (soft-delete). Não há mais substituição da lista inteira nem vínculo direto do tier a um ID de regra (o tier passa a ter seu próprio histórico de regras).
Criar
Renomear / reposicionar
Reordenar
Arquivar (soft-delete, idempotente)
archivedAt preenchido): o tier some da lista ativa preservando seu histórico e as conversões passadas, e os afiliados daquele tier voltam à regra padrão do programa. Os índices de unicidade de name/position valem apenas entre tiers ativos, então um nome/posição liberado por arquivamento pode ser reutilizado. As mutações de tier exigem papel owner ou admin. Veja Afiliados para a relação afiliado ↔ tier.
Para publicar / consultar a regra própria de um tier use POST/GET /programs/:programId/tiers/:tierId/commission-rules (e /current). A regra criada terá programTierId igual ao ID do tier.
Precedência de regras
Para cada conversão, a regra efetiva é resolvida nesta ordem e o resultado é snapshotado na conversão com a marcaçãoprecedence:
A precedência é custom → tier → padrão. Um afiliado sem tier, com tier arquivado, ou cujo tier ainda não publicou regra própria cai na regra padrão do programa (precedence: default).
O cálculo da comissão usa sempre o snapshot, nunca a regra viva: mudanças futuras não afetam conversões passadas. Veja Conversões e antifraude e Comissões.
Erros comuns
Todos seguem o envelope{ error: { type, code, message, param? } }. Veja Erros.
Próximos passos
Afiliados
Cadastro, aprovação, tiers e regras custom por afiliado.
Comissões
Como o hold, a base de cálculo e o snapshot da regra geram cada comissão.
Atribuição
Modelos de atribuição e a janela de validade do clique.
Reprocessamento
Aplique uma nova versão de regra retroativamente.