Pedidos de saque
A fila de saques que os sellers pedem: aprovar, recusar, acompanhar o processamento e concluir com o comprovante.
Um pedido de saque nasce quando o seller, no painel dele, pede para sacar parte do saldo confirmado (cada seller tem um único pedido ativo por vez). Daí em diante o financeiro conduz o pedido por aberto > aprovado > em processamento > pago, ou o recusa enquanto está aberto. As rotas abaixo são o lado do administrador.
Listar pedidos de saque
Lista os pedidos de saque, do mais recente ao mais antigo. É a fila de trabalho do financeiro: cada linha é um seller pedindo para receber parte do saldo confirmado.
/api/v1/admin/payout-requestsAdminLista os pedidos de saque dos sellers
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (as escritas exigem manage_vendors). Requer o módulo commissions ativo.
Parâmetros de consulta
vendor_iduuid500.statusstringpendingapprovedprocessingcompletedrejectedOAPCRpending (ou open), approved, processing, completed (ou paid), rejected, ou a letra O, A, P, C, R.pageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição
curl "$BASE_URL/api/v1/admin/payout-requests?status=pending" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"requests": [
{
"id": "7039e362-9ea6-4cdd-9b5e-07b9973cf99c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount_cents": 10000,
"status": "O",
"bank_info": {
"method": "pix",
"pix_key": "financeiro@lojaotavio.example.com",
"pix_type": "email",
"holder_name": "Loja Otávio LTDA",
"holder_doc": "12.345.678/0001-95"
},
"admin_notes": "",
"transaction_ref": "",
"requested_at": "2026-07-19T11:00:20.216784Z"
}
],
"total": 1,
"page": 1,
"per_page": 20,
"total_pages": 1
}Campos da resposta
requestsarrayrequests[].iduuidrequests[].vendor_iduuidrequests[].amount_centsintegerrequests[].statusstringOAPCRO aberto, A aprovado, P em processamento, C pago, R recusado.requests[].bank_infoobject | nullmethod (pix ou bank_transfer), pix_key, pix_type (cpf, cnpj, email, phone, random), bank_code, agency, account, holder_name, holder_doc. Os campos vazios são omitidos.requests[].admin_notesstringrequests[].transaction_refstringrequests[].requested_atstringrequests[].approved_atstringrequests[].paid_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":"commissions"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 500 | vendor_id que não é UUID ou falha na consulta | {"error":"failed to list payout requests","detail":"..."} |
Aprovar pedido
Passa o pedido de O (aberto) para A (aprovado) e registra a data. O corpo é opcional. Aprovar não paga nem reserva saldo novo: o valor já estava reservado desde que o seller pediu.
/api/v1/admin/payout-requests/{id}/approveAdminAprova um pedido de saque
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (as escritas exigem manage_vendors). Requer o módulo commissions ativo.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
admin_notesstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/payout-requests/d5ccd9e1-dd21-458c-90a5-4a7f3c2b9e10/approve" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"admin_notes": "Conferido com o financeiro"
}'Resposta
{
"id": "7039e362-9ea6-4cdd-9b5e-07b9973cf99c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount_cents": 10000,
"status": "A",
"bank_info": {
"method": "pix",
"pix_key": "financeiro@lojaotavio.example.com",
"pix_type": "email",
"holder_name": "Loja Otávio LTDA",
"holder_doc": "12.345.678/0001-95"
},
"admin_notes": "Conferido com o financeiro",
"transaction_ref": "",
"requested_at": "2026-07-19T11:00:20.216784Z",
"approved_at": "2026-07-19T18:40:20.833988Z"
}Campos da resposta
iduuidvendor_iduuidamount_centsintegerstatusstringOAPCRO aberto, A aprovado, P em processamento, C pago, R recusado.bank_infoobject | nullmethod (pix ou bank_transfer), pix_key, pix_type (cpf, cnpj, email, phone, random), bank_code, agency, account, holder_name, holder_doc. Os campos vazios são omitidos.admin_notesstringtransaction_refstringrequested_atstringapproved_atstringpaid_atstringErros
| 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":"commissions"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 400 | Pedido inexistente, id que não é UUID, ou pedido que não está aberto | {"error":"failed to approve payout request","detail":"payout request ... not found or not in pending status"} |
Recusar pedido
Passa o pedido de O (aberto) para R (recusado). Só pedidos abertos podem ser recusados; um já aprovado precisa seguir até o fim. O saldo reservado volta a ficar disponível para o seller.
/api/v1/admin/payout-requests/{id}/rejectAdminRecusa um pedido de saque
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (as escritas exigem manage_vendors). Requer o módulo commissions ativo.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
admin_notesstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/payout-requests/d5ccd9e1-dd21-458c-90a5-4a7f3c2b9e10/reject" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"admin_notes": "Dados bancários divergentes do cadastro"
}'Resposta
{
"id": "7039e362-9ea6-4cdd-9b5e-07b9973cf99c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount_cents": 10000,
"status": "R",
"bank_info": {
"method": "pix",
"pix_key": "financeiro@lojaotavio.example.com",
"pix_type": "email",
"holder_name": "Loja Otávio LTDA",
"holder_doc": "12.345.678/0001-95"
},
"admin_notes": "Dados bancários divergentes do cadastro",
"transaction_ref": "",
"requested_at": "2026-07-19T11:00:20.216784Z"
}Campos da resposta
iduuidvendor_iduuidamount_centsintegerstatusstringOAPCRO aberto, A aprovado, P em processamento, C pago, R recusado.bank_infoobject | nullmethod (pix ou bank_transfer), pix_key, pix_type (cpf, cnpj, email, phone, random), bank_code, agency, account, holder_name, holder_doc. Os campos vazios são omitidos.admin_notesstringtransaction_refstringrequested_atstringapproved_atstringpaid_atstringErros
| 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":"commissions"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 400 | Pedido inexistente, id inválido ou pedido que não está aberto | {"error":"failed to reject payout request","detail":"payout request ... not found or not in pending status"} |
Marcar como em processamento
Passa de A (aprovado) para P (em processamento). Use quando a transferência foi enviada ao banco e ainda não confirmada. Não tem corpo.
/api/v1/admin/payout-requests/{id}/processAdminMarca um pedido aprovado como em processamento
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (as escritas exigem manage_vendors). Requer o módulo commissions ativo.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/payout-requests/d5ccd9e1-dd21-458c-90a5-4a7f3c2b9e10/process" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": "7039e362-9ea6-4cdd-9b5e-07b9973cf99c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount_cents": 10000,
"status": "P",
"bank_info": {
"method": "pix",
"pix_key": "financeiro@lojaotavio.example.com",
"pix_type": "email",
"holder_name": "Loja Otávio LTDA",
"holder_doc": "12.345.678/0001-95"
},
"admin_notes": "",
"transaction_ref": "",
"requested_at": "2026-07-19T11:00:20.216784Z",
"approved_at": "2026-07-19T18:40:20.833988Z"
}Campos da resposta
iduuidvendor_iduuidamount_centsintegerstatusstringOAPCRO aberto, A aprovado, P em processamento, C pago, R recusado.bank_infoobject | nullmethod (pix ou bank_transfer), pix_key, pix_type (cpf, cnpj, email, phone, random), bank_code, agency, account, holder_name, holder_doc. Os campos vazios são omitidos.admin_notesstringtransaction_refstringrequested_atstringapproved_atstringpaid_atstringErros
| 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":"commissions"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 400 | Pedido inexistente, id inválido ou fora do estado aprovado | {"error":"failed to process payout request","detail":"payout request ... not found or not in approved status"} |
Concluir pedido
Fecha o ciclo: passa de P (em processamento) para C (pago), grava o comprovante e liquida o saldo do seller. Tudo ocorre numa única transação: as entradas confirmadas mais antigas do seller são marcadas como liquidadas até cobrir o valor do pedido, e um registro imutável entra no histórico de repasses. Se faltar saldo confirmado, nada é gravado.
/api/v1/admin/payout-requests/{id}/completeAdminConclui um pedido de saque em processamento
Autenticação: Authorization: Bearer <token> de um administrador com view_vendors ou manage_vendors (as escritas exigem manage_vendors). Requer o módulo commissions ativo.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
transaction_refstringobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/payout-requests/d5ccd9e1-dd21-458c-90a5-4a7f3c2b9e10/complete" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"transaction_ref": "E00038166202610111200abc123"
}'Resposta
{
"id": "7039e362-9ea6-4cdd-9b5e-07b9973cf99c",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"amount_cents": 10000,
"status": "C",
"bank_info": {
"method": "pix",
"pix_key": "financeiro@lojaotavio.example.com",
"pix_type": "email",
"holder_name": "Loja Otávio LTDA",
"holder_doc": "12.345.678/0001-95"
},
"admin_notes": "",
"transaction_ref": "E00038166202610111200abc123",
"requested_at": "2026-07-19T11:00:20.216784Z",
"approved_at": "2026-07-19T18:40:20.833988Z",
"paid_at": "2026-07-19T21:11:24.855283Z"
}Campos da resposta
iduuidvendor_iduuidamount_centsintegerstatusstringOAPCRO aberto, A aprovado, P em processamento, C pago, R recusado.bank_infoobject | nullmethod (pix ou bank_transfer), pix_key, pix_type (cpf, cnpj, email, phone, random), bank_code, agency, account, holder_name, holder_doc. Os campos vazios são omitidos.admin_notesstringtransaction_refstringrequested_atstringapproved_atstringpaid_atstringErros
| 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":"commissions"} / {"error":"insufficient privileges","required":"manage_vendors"} |
| 400 | transaction_ref ausente, pedido inexistente ou fora de processamento, ou saldo confirmado insuficiente | {"error":"transaction_ref is required"} / {"error":"failed to complete payout request","detail":"insufficient available commission entries to settle payout: have 8000, need 10000"} |