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.
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
Umplans.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
barcodesão sempre incluídas, independentemente do filtro — referem-se a PIX e boleto e não têm variante online/offline distinta. - Tarifas
opf_initiatorsão ignoradas (tarifas de Open Finance são tratadas separadamente).
SplitPlan — o template de comissionamento
Oplans.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:
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:
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.05ou omitir a chave, o piso de 0,1% se aplica.false: apenas entradas explícitas deProgramadorsão honradas. Não há piso automático.
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: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 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:- Se a transação unificada tem um
receiver_accountdistinto doacquirer_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ãosplit_transaction).
Split carregue o plano desejado.
Edição de splits
Split plans são templates mutáveis — podem ser alterados via: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 umauto_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.