Divisão do pagamento
Como o valor de um pedido de vários sellers é dividido entre cada seller e a loja, e o acompanhamento de cada fatia.
Em um marketplace, um único pagamento do cliente cobre itens de sellers diferentes. A divisão (split) registra quanto de cada pagamento pertence a cada seller e quanto fica com a loja de comissão. As rotas abaixo servem para o financeiro conferir e dar baixa nas fatias.
Listar divisões
Quando um pedido tem itens de sellers diferentes, o pagamento é dividido: uma fatia por seller e uma para a loja. Esta rota lista essas fatias, uma linha por destinatário.
/api/v1/admin/payment-splitsAdminLista as divisões do pagamento entre seller e loja
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (a escrita exige manage_vendors). Requer o módulo direct-payments ativo.
Parâmetros de consulta
statusstringpendingprocessingcompletedfailedrefundedpending, processing, completed, failed ou refunded. processing e pending retornam as mesmas linhas.vendor_iduuidorder_iduuidsearchstringpageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição
curl "$BASE_URL/api/v1/admin/payment-splits?status=pending&per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"splits": [
{
"id": "e596dfec-f18d-4946-9950-9199b26e5516",
"order_id": "a8a3c7a3-5f15-45a8-a385-4f20fbf8b722",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"vendor_name": "Loja Seller Teste",
"order_number": "PEDIDO-20261010-0004",
"recipient_type": "vendor",
"amount": 27300,
"commission_amount": 2700,
"status": "pending",
"payment_method": "pix",
"created_at": "2026-10-11T02:56:38.077512Z",
"updated_at": "2026-10-11T02:56:38.077512Z"
}
],
"total": 75296,
"page": 1,
"per_page": 20,
"total_pages": 3765
}Campos da resposta
splitsarraysplits[].iduuidsplits[].order_iduuidsplits[].vendor_iduuidsplits[].vendor_namestringsplits[].order_numberstringsplits[].recipient_typestringvendormarketplacevendor (fatia de um seller) ou marketplace (fatia da loja).splits[].amountintegersplits[].commission_amountintegersplits[].statusstringpendingcompletedfailedrefundedpending, completed, failed ou refunded. Na leitura nunca aparece processing: ele é gravado junto com pending.splits[].payment_methodstringsplits[].payment_refstringsplits[].error_messagestringsplits[].processed_atstringsplits[].created_atstringsplits[].updated_atstringtotalintegerpageintegerper_pageintegertotal_pagesintegerErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido | {"error":"missing authorization header"} |
| 403 | Sem o privilégio exigido, ou módulo desligado | {"error":"module_disabled","module":"direct-payments"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 500 | vendor_id/order_id que não é UUID, ou falha na consulta | {"error":"failed to list payment splits","detail":"..."} |
Estatísticas das divisões
Totais agregados das fatias, da loja inteira ou de um seller.
/api/v1/admin/payment-splits/statsAdminTotais das divisões de pagamento
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (a escrita exige manage_vendors). Requer o módulo direct-payments ativo.
Parâmetros de consulta
vendor_iduuidExemplo de requisição
curl "$BASE_URL/api/v1/admin/payment-splits/stats?vendor_id=94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"total_splits": 75296,
"pending_splits": 0,
"completed_splits": 0,
"failed_splits": 0,
"total_amount": 4822665587,
"total_commission": 253823873
}Campos da resposta
total_splitsintegerpending_splitsinteger0 (veja o aviso).completed_splitsinteger0.failed_splitsinteger0.total_amountintegertotal_commissionintegerErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido | {"error":"missing authorization header"} |
| 403 | Sem o privilégio exigido, ou módulo desligado | {"error":"module_disabled","module":"direct-payments"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 500 | vendor_id que não é UUID ou falha na consulta | {"error":"failed to get split stats","detail":"..."} |
Alterar o estado de uma divisão
Registra o andamento do repasse de uma fatia: concluída (com o comprovante) ou falha (com o motivo). Só atualiza o registro; não movimenta dinheiro. Não há validação de transição: qualquer estado válido pode ir para qualquer outro.
/api/v1/admin/payment-splits/{id}/statusAdminAltera o estado de uma divisão de pagamento
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (a escrita exige manage_vendors). Requer o módulo direct-payments ativo.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
statusstringobrigatóriopendingprocessingcompletedfailedrefundedpayment_refstringerror_messagestringExemplo de requisição
curl -X PATCH "$BASE_URL/api/v1/admin/payment-splits/d5ccd9e1-dd21-458c-90a5-4a7f3c2b9e10/status" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"status": "completed",
"payment_ref": "E00038166202610111200abc123"
}'Resposta
{
"message": "split status updated",
"split_id": "e596dfec-f18d-4946-9950-9199b26e5516",
"status": "completed"
}Campos da resposta
messagestringsplit_iduuidstatusstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido | {"error":"missing authorization header"} |
| 403 | Sem o privilégio exigido, ou módulo desligado | {"error":"module_disabled","module":"direct-payments"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 400 | Corpo inválido ou status ausente | {"error":"status is required"} |
| 500 | status fora da lista, divisão inexistente ou id que não é UUID | {"error":"failed to update split status","detail":"invalid split status: \"done\""} |