- Fechamento:
POST /payouts/run, manual, com dry-run por padrão. Cria os payoutsschedulede reserva as comissões. - Execução: liquida os payouts
scheduledvia PIX, em lote.
IDs de payout usam o prefixo
pay_ (ULID): pay_01J9X.... Valores monetários são sempre inteiros em centavos (amountCents) na moeda BRL.Ciclo de vida
Um payout nascescheduled no fechamento, é promovido a processing quando a execução inicia e termina em completed ou failed. O operador pode cancelar (scheduled) ou reagendar (failed).
Um payout só pode ser cancelado enquanto está
scheduled. Se a execução já o tiver promovido para processing, o cancel falha com 409. Isso evita que um cancelamento aconteça depois que o pagamento já começou.Fechamento de ciclo
O fechamento agrega o saldo de cada afiliado e decide quem é elegível. UsePOST /payouts/preview (ou POST /payouts/run com dryRun: true) para inspecionar o resultado sem persistir nada. As duas chamadas retornam exatamente o mesmo resumo. Para efetivar, chame POST /payouts/run com dryRun: false.
Cada elegível da prévia traz também destination (chave PIX/método atual do afiliado), para você conferir “quem recebe onde” antes de efetivar.
Lote do fechamento (histórico de ciclos)
Um fechamento real cria um lote (payout_batch, prefixo cyc_) que agrupa os payouts daquele run. É o histórico de ciclos: liste com GET /payout-batches e abra um com GET /payout-batches/:id (expand=payouts,invoices). O status do lote é derivado dos payouts-membro: processing enquanto algum estiver agendado/processando, completed quando todos liquidam, partial se houver falha/cancelamento. Para a contabilidade, GET /payouts/accounting-report?from=…&to=… devolve uma linha por payout liquidado no período (afiliado, valor, comprovante, situação da NF).
Agregação líquida
O payout soma todas as comissõesapproved, sem payout associado e fora de revisão de fraude, incluindo clawbacks (comissões negativas). O amountCents é o líquido e precisa ser > 0 para o payout ser criado.
Resposta (run dryRun=false)
Threshold mínimo e política
A política de payout fica na configuração da organização, consultável emGET /settings/payout-policy e ajustável via PUT /settings/payout-policy (vale para os próximos ciclos).
string
default:"monthly"
monthly, biweekly ou manual. Hoje serve como configuração de referência: o fechamento é sempre disparado manualmente via POST /payouts/run.integer
default:"1"
Dia de fechamento (1 a 28). Também serve como configuração de referência.
integer
default:"5000"
Valor mínimo de saque em centavos. Saldo abaixo disso bloqueia com
below_minimum e acumula para o próximo ciclo. Default 5000 (R$ 50,00).string
default:"pix"
Método de pagamento padrão sugerido para novos afiliados.
Reserva (sem dupla cobrança)
No fechamento real, a criação de cada payout reserva as comissões incluídas. Se alguma comissão deixou de ser pagável entre o cálculo e a criação (refund, ban, outro run concorrente), o fechamento é abortado com409 conflict. Basta re-rodar. Reexecutar o run não duplica: comissões já reservadas saem do conjunto pagável, então um segundo run não encontra nada elegível.
Bloqueios
Um afiliado é excluído do ciclo (aparece emblocked, sem payout criado) por um destes motivos:
A nota fiscal do próprio ciclo nunca se bloqueia: o cálculo de elegibilidade roda antes da criação da invoice, então só NFs de payouts anteriores não resolvidas geram
pending_invoice. NF cancelada (junto com o payout) não conta como pendência.Snapshot do destino
No fechamento, o payout congela odestination: { method, pixKey?, pixKeyType? }, copiado do perfil do afiliado.
Trocar a chave PIX do afiliado depois não afeta payouts já criados. Os métodos pix, bank_transfer, wise e paypal são aceitos e congelados no snapshot; atualmente, apenas PIX tem caminho de liquidação disponível.
Nota fiscal antes do pagamento
Quando a política fiscal exige NF (nfMode: "affiliate_uploads"), o fechamento cria uma invoice pending junto do payout, e a execução só liquida depois que a NF fica validated. Enquanto a NF não é validada, a execução pula o payout (permanece scheduled).
Veja Fiscal para o detalhe da política nfMode, do upload e da validação da NF.
Execução em lote (PIX)
A execução processa os payoutsscheduled em lote. Para cada payout liquidado, marca todas as comissões incluídas como paid, com um paidAt único.
Uma falha (
failed) mantém as comissões reservadas (associadas ao payout, não pagas, não liberadas) até um retry ou cancel. Não há cobrança ao afiliado em saldo não positivo: o débito rola para o próximo ciclo.Operações do payout
Todas as rotas exigem autenticação via API key (Authorization: Bearer rstr_...). As operações que mudam estado (run, retry, cancel e o PUT /settings/payout-policy) exigem papel owner ou admin; preview, listagens e detalhe estão abertos a qualquer membro. As rotas POST aceitam Idempotency-Key (replays retornam a resposta armazenada com Idempotent-Replay: true).
1
Listar e inspecionar
GET /payouts lista com paginação por cursor e filtros affiliate_id, status, method. GET /payouts/:payoutId traz o detalhe e aceita expand[]=commissions (anexa até 100 comissões do payout).2
Cancelar
POST /payouts/:payoutId/cancel só é permitido em scheduled. Libera as comissões (voltam a approved não pago) e cancela a invoice associada. Qualquer outro estado retorna 409 conflict.3
Reagendar
POST /payouts/:payoutId/retry só é permitido em failed. Limpa failureReason/failedAt e repõe o status scheduled para uma nova tentativa de liquidação. O retry é sempre disparado manualmente.4
Comprovante
GET /payouts/:payoutId/receipt retorna o comprovante do provedor apenas quando o payout está completed e há providerReceiptUrl; caso contrário, 404 resource_not_found.Erros comuns
Veja o envelope completo em Erros.
Eventos de domínio
Cada mudança de estado emite eventos. O ciclo completo gera, na ordem:
Assine esses eventos via Webhooks ou consulte o histórico no Event store.
Próximos passos
Comissões
O que entra no saldo de um payout e como clawbacks afetam o líquido.
Fiscal
Política
nfMode, upload de NF e o gate de validação antes da liquidação.Refund e clawback
Como estornos reduzem o saldo a pagar nos próximos ciclos.
Catálogo de eventos
Payloads dos eventos
payout.* e commission.paid.