Toda transação processada pelo DL Pay Acquirer é governada por dois planos distintos, que juntos decidem quanto do valor o vendedor efetivamente fica:

Plano de tarifas do adquirente

O cronograma de tarifas do adquirente. Define o MDR cobrado, dividido por tipo de pagamento, quantidade de parcelas e bandeira do cartão. Lado adquirente.

SplitPlan

O template de comissionamento. Define como a margem restante é distribuída entre agente, distribuidores, desenvolvedor e a conta administrativa da plataforma. Lado plataforma.
Um vendedor pode ter apenas um SplitPlan ativo (vinculado via unified.Split), e esse plano referencia exatamente um plano de tarifas do adquirente. Quando uma transação é capturada, a plataforma compila as duas tabelas juntas para produzir as regras finais de split que serão enviadas ao adquirente.

Plano de tarifas do adquirente

Um plans.Plan (frequentemente chamado de “plano de tarifas” no painel) espelha um recurso /plans/<id> no adquirente. O cronograma de tarifas vive no campo JSON fee_details — uma entrada por combinação de (payment_type, installments, card_brand, capture_mode), cada uma com um percent_amount. O modelo expõe duas funções auxiliares usadas em todos os pontos onde tarifas são cotadas: Há duas regras importantes de capture_mode:
  • Tarifas barcode são sempre incluídas, independentemente do filtro — referem-se a PIX e boleto e não têm variante online/offline distinta.
  • Tarifas opf_initiator são ignoradas (tarifas de Open Finance são tratadas separadamente).
Um plano de tarifas é criado via Criar plano de tarifas e listado em Listar planos de tarifas.

SplitPlan — o template de comissionamento

O plans.SplitPlan define, para cada combinação de (payment_type, installments, card_brand), quem recebe uma fatia da transação e quanto. Ele se relaciona um-para-muitos com unified.Account via unified.Split. Cada SplitPlan carrega duas tabelas JSON armazenadas como texto: E mais um booleano:

Anatomia de split_details e split_details_online

O JSON tem o mesmo formato em ambos os campos:
Concretamente, um plano real se parece com:
Algumas regras a ter em mente:

Lógica de busca

A busca dos splits para um dado (type, installment, brand, is_online) é o ponto único de entrada. PIX e boleto ignoram a flag is_online — são sempre offline, com installment="1" e a bandeira sintética. Para crédito, escolhe-se o lado correto entre split_details e split_details_online.

Tabela compilada de totais

Para simulações e para a tabela de parcelamento na página de pagamento, há uma função que percorre cada (type, installment, brand) do plano de tarifas correspondente e produz a tarifa total que o comprador (ou vendedor) vê. Esse total é a soma de: O parâmetro de descarte de splits muito altos ignora qualquer participante configurado acima de 70% (uma proteção contra linhas-fantasma que existem apenas para planos de redirecionamento de chargeback). A tabela compilada alimenta duas visões:
  • Simular tarifas — dado um valor, retorna o preço a cargo do comprador e o a cargo do vendedor para cada parcela e bandeira.
  • A própria página de pagamento, ao renderizar o seletor de parcelas.

Atribuição padrão

Quando um vendedor é criado sem link de convite, a plataforma seleciona o plano padrão (configurado por ambiente; o valor padrão é "Plano Pro Padrão") e cria uma linha unified.Split com is_system_managed=true:
Quando o vendedor é criado a partir de um link de convite, o agent, n1_distributor, n2_distributor e o plan são copiados do link (com recuo para o split do próprio criador do link). Veja Links de convite. is_system_managed=true significa: o job de auto-split pode enviar novas regras de split ao adquirente para este vendedor. Defina como false (ou troque o plano manualmente) para sair — a plataforma ainda computa o split hipotético para fins de relatório, mas marca as transações como ALREADY_PROCESSED em vez de enviar.

Anatomia de unified.Split

Split é a linha por conta que liga o plano às contas destinatárias reais:

automatic_developer_fee

O booleano vive no SplitPlan e funciona como um piso:
  • true (padrão): toda transação recebe pelo menos 0,1% para a conta de desenvolvedor. Se o bucket correspondente declarar "Programador": 0.5, esse valor prevalece; se declarar "Programador": 0.05 ou omitir a chave, o piso de 0,1% se aplica.
  • false: apenas entradas explícitas de Programador são honradas. Não há piso automático.
A flag é exposta em Listar/recuperar split plans e em Criar/atualizar split plan, mas o serializer de criação é somente leitura sobre ela — o serializer de criação não a lista entre seus campos, então o valor fica travado no padrão true no momento da criação e só pode ser alterado pelo formulário do painel administrativo ou diretamente via o endpoint Atualizar split plan se o campo tiver sido adicionado ao serializer de criação. Trate o campo como somente leitura na criação, salvo confirmação em contrário no ambiente de execução.

Exemplo prático — PIX de R$ 100

Considere uma transação PIX de R$ 100,00 contra um vendedor cujo split plan se parece com:
O plano de tarifas associado tem uma tarifa barcode de 0.00% para PIX (as tarifas de PIX do adquirente são configuradas por uma alíquota fixa de PIX, neste caso 0,79%, exposta via a entrada Administrador acima em vez da tabela de tarifas do adquirente). A busca segue:
1

Normalizar a chave

A busca para ('pix', '1', None) é reescrita para ('debit', '1', 'PIX') e ignora is_online.
2

Encontrar o bucket

Retorna {"Agente": 0.50, "Distribuidor N1": 0.30, "Programador": 0.10, "Administrador": 0.79}.
3

Calcular os valores por destinatário

O auto-split multiplica cada percentual pelo valor da transação.
O resultado: O job de auto-split arredonda cada valor para 2 casas decimais e substitui qualquer zero por R$ 0,01 para garantir que o adquirente aceite a regra de split. Um mecanismo de proteção é acionado quando o MDR (soma dos splits + tarifas do adquirente) excede o valor da transação: o maior split é reduzido até o total caber. Esse evento é registrado no campo auto_split_error da transação.

Sobrescritas por transação

Não existe um botão de sobrescrita na requisição de criação da transação. O split plan é resolvido inteiramente a partir da conta recebedora:
Dois pontos a notar:
  • Se a transação unificada tem um receiver_account distinto do acquirer_account (um redirecionamento de Ponto de Venda, por exemplo) e esse recebedor tem seu próprio split configurado, o split do recebedor prevalece. Caso contrário, é usado o split da conta do adquirente.
  • Após o fato, ainda é possível adicionar ou remover regras de split manualmente no adquirente usando Permissão de split na transação — métodos no registro unificado encaminham para os métodos correspondentes do registro específico, que conversam com /transactions/{id}/split_rules. Essas operações são reservadas a administradores (permissão split_transaction).
Se você precisa de uma taxa de comissão por checkout, o caminho canônico é redirecionar o comprador por uma subconta cujo Split carregue o plano desejado.

Edição de splits

Split plans são templates mutáveis — podem ser alterados via:
Veja Atualizar split plan. Os campos que você pode alterar via o serializer de criação são name, zoop_tax_plan, split_details e split_details_online. Para alternar automatic_developer_fee, vá pelo formulário do painel administrativo ou exponha o campo explicitamente no serializer de criação. O que propaga e o que não propaga: Se você realmente precisa retro-corrigir os splits de uma transação existente, use os endpoints administrativos por transação (criar/remover split) — essa é a saída manual suportada.

Referência de status do auto-split

Toda transação unificada mantém um auto_split_status para auditar o resultado da aplicação do split: Os splits são executados via um comando de longa duração que varre as linhas em WAITING e também podem ser disparados sob demanda para transações individuais.

Páginas relacionadas

Fluxo de transação

O ciclo de vida que produz as transações sobre as quais esses splits são aplicados.

Contas unificadas

As contas que carregam a linha Split e atuam como agente / distribuidor / desenvolvedor / administrador.

Simular tarifas

Cote o preço para comprador e vendedor para qualquer valor, detalhado por parcelas e bandeira.

API de split plans

Crie, edite e exclua registros de SplitPlan.