Saques e repasses
Pedir saque do saldo e consultar os repasses pagos ao seller.
Há duas coisas com nomes parecidos. O pedido de saque é o que o seller faz: "quero retirar R$ X do meu saldo". O repasse é o que a loja gera depois: o lote de pagamento de um período. Esta página cobre as duas rotas que criam o pedido e as duas que listam repasses.
Pedir saque
Cria um pedido de saque. Ele fica O (aberto) até a loja aprovar, processar e pagar. O valor pedido fica reservado no saldo (reserved_cents) enquanto o pedido estiver aberto. Só pode existir um pedido aberto por seller.
/api/v1/vendor/commissions/payout-requestSellerPedir saque do saldo disponível
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
amount_centsintegerpadrão: 00 saca tudo que está disponível.bank_infoobjectDestino do pagamento. Não é validado pela API; envie certo.
methodstringpixbank_transferpix_keystringpix_typestringcpfcnpjemailphonerandombank_codestringagencystringaccountstringholder_namestringholder_docstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/commissions/payout-request" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount_cents": 125000,
"bank_info": {
"method": "pix",
"pix_key": "12345678909",
"pix_type": "cpf",
"holder_name": "Maria Souza",
"holder_doc": "123.456.789-09"
}
}'Resposta
{
"id": "7039e362-9ea6-4cdd-9b5e-07b9973cf99c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount_cents": 125000,
"status": "O",
"bank_info": {
"method": "pix",
"pix_key": "12345678909",
"pix_type": "cpf",
"holder_name": "Maria Souza",
"holder_doc": "123.456.789-09"
},
"admin_notes": "",
"transaction_ref": "",
"requested_at": "2026-10-11T12:00:00Z"
}Campos da resposta
iduuidvendor_iduuidamount_centsinteger0.statusstringOAPCRO aberto, A aprovado, P em processamento, C concluído (pago), R recusado.bank_infoobject|nullnull se não enviou.admin_notesstringtransaction_refstringrequested_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | amount_cents negativo, JSON inválido ou saldo insuficiente (o texto de detail vem em inglês). | {"error":"failed to create payout request","detail":"insufficient balance: available 0, requested 0"} |
| 409 | Já existe um pedido de saque aberto (O, A ou P). Só um por vez. | {"error":"there is already an open payout request","detail":"open_request_exists"} |
| 422 | A loja exige KYC (verificação de identidade) para sacar e o seller ainda não foi verificado. | {"error":"kyc verification required before requesting payouts","detail":"kyc_required"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios financeiro (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_financial","vendor_view_financial"]} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Pedir saque (rota antiga)
Faz exatamente o mesmo que /commissions/payout-request (mesmo serviço, mesma tabela). A diferença é que aqui qualquer valor menor ou igual a zero significa "sacar tudo", inclusive negativo, e saldo zero responde 400 no available balance to withdraw. Em integração nova prefira a outra rota.
/api/v1/vendor/payouts/requestSellerMesmo pedido de saque, rota alternativa
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
amount_centsintegerpadrão: 00 saca tudo que está disponível.bank_infoobjectDestino do pagamento. Não é validado pela API; envie certo.
methodstringpixbank_transferpix_keystringpix_typestringcpfcnpjemailphonerandombank_codestringagencystringaccountstringholder_namestringholder_docstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/payouts/request" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount_cents": 125000,
"bank_info": {
"method": "pix",
"pix_key": "12345678909",
"pix_type": "cpf",
"holder_name": "Maria Souza",
"holder_doc": "123.456.789-09"
}
}'Resposta
{
"id": "7039e362-9ea6-4cdd-9b5e-07b9973cf99c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount_cents": 125000,
"status": "O",
"bank_info": {
"method": "pix",
"pix_key": "12345678909",
"pix_type": "cpf",
"holder_name": "Maria Souza",
"holder_doc": "123.456.789-09"
},
"admin_notes": "",
"transaction_ref": "",
"requested_at": "2026-10-11T12:00:00Z"
}Campos da resposta
iduuidvendor_iduuidamount_centsinteger0.statusstringOAPCRO aberto, A aprovado, P em processamento, C concluído (pago), R recusado.bank_infoobject|nullnull se não enviou.admin_notesstringtransaction_refstringrequested_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Saldo zero, JSON inválido ou saldo insuficiente. | {"error":"no available balance to withdraw"} |
| 409 | Já existe um pedido de saque aberto (O, A ou P). Só um por vez. | {"error":"there is already an open payout request","detail":"open_request_exists"} |
| 422 | A loja exige KYC (verificação de identidade) para sacar e o seller ainda não foi verificado. | {"error":"kyc verification required before requesting payouts","detail":"kyc_required"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios financeiro (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_financial","vendor_view_financial"]} |
Listar repasses
Lista os repasses: lotes de pagamento por período que a loja gera para o seller. Não confunda com o pedido de saque (o que o seller pede e que as duas rotas acima criam). Só page e per_page são aceitos e a ordem é sempre a mais recente primeiro.
/api/v1/vendor/payoutsSellerRepasses (pagamentos) gerados para o seller
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de consulta
pageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/payouts?page=1&per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"payouts": [
{
"id": "e8ac32c6-98f3-423e-90da-cdbadb9f70ab",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount": 99816,
"commission": 0,
"net_amount": 99816,
"status": "O",
"payout_method": "pix",
"reference": null,
"period_start": "2026-07-01T00:00:00Z",
"period_end": "2026-07-31T00:00:00Z",
"created_at": "2026-07-13T22:34:24Z"
}
],
"total": 4,
"page": 1,
"per_page": 20,
"total_pages": 1
}Campos da resposta
payoutsobject[]Repasses da página. Pode vir null quando não há nenhum.
iduuidvendor_iduuidamountintegercommissionintegernet_amountintegerstatusstringO pendente, P em processamento, C concluído, F falhou.payout_methodstringpix ou bank_transfer.referencestring|nullperiod_startstringperiod_endstringnotesstringcreated_atstringcompleted_atstringtotalintegerpageintegerper_pageintegertotal_pagesintegerErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios financeiro (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_financial","vendor_view_financial"]} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Ver um repasse
Devolve um repasse do seller pelo id.
/api/v1/vendor/payouts/{id}SellerDetalhe de um repasse
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/vendor/payouts/e8ac32c6-98f3-423e-90da-cdbadb9f70ab" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": "e8ac32c6-98f3-423e-90da-cdbadb9f70ab",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount": 99816,
"commission": 0,
"net_amount": 99816,
"status": "O",
"payout_method": "pix",
"reference": null,
"period_start": "2026-07-01T00:00:00Z",
"period_end": "2026-07-31T00:00:00Z",
"created_at": "2026-07-13T22:34:24Z"
}Campos da resposta
iduuidvendor_iduuidamountintegercommissionintegernet_amountintegerstatusstringO pendente, P em processamento, C concluído, F falhou.payout_methodstringpix ou bank_transfer.referencestring|nullperiod_startstringperiod_endstringnotesstringcreated_atstringcompleted_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 404 | Não existe repasse com esse id. | {"error":"payout not found"} |
| 403 | O repasse existe, mas é de outro seller. | {"error":"access denied"} |
| 500 | id não é um UUID válido. Hoje volta 500 em vez de 400; a mensagem está em detail. | {"error":"failed to get payout","detail":"o valor \"xyz\" não é um uuid válido. Envie o identificador completo, com os 36 caracteres e os hífens. Corrija o campo e reenvie."} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | Sub-conta do seller sem nenhum dos privilégios financeiro (a lista completa vem em privilege_required_any; o exemplo está cortado). O dono da loja passa sempre. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_financial","vendor_view_financial"]} |