Visão geral
Um saque (withdrawal) transfere o dinheiro disponível do seu saldo na Selectwin para uma carteira bancária (wallet) que você cadastrou previamente. Use este recurso para resgatar o que vendeu: você so
Um saque (withdrawal) transfere o dinheiro disponível do seu saldo na Selectwin para uma carteira bancária (wallet) que você cadastrou previamente. Use este recurso para resgatar o que vendeu: você solicita o valor, a plataforma valida o saldo e processa o repasse de forma assíncrona, notificando cada mudança de estado por webhook. Esta página explica o modelo do objeto, o ciclo de vida e todas as operações disponíveis.
O que é o recurso
Saque é o passo final do fluxo financeiro: o dinheiro de uma venda entra como pendente, é liberado e vira disponível no seu saldo e, então, você pode sacá-lo para uma carteira. Pontos-chave:
- O valor sai do seu saldo disponível e vai para a carteira indicada por
walletId. Cadastre e gerencie carteiras no recurso Wallets antes de sacar. - O processamento é assíncrono: a criação devolve um saque em
pending(HTTP201) e o repasse evolui em segundo plano. Acompanhe pelos webhooks (recomendado) ou consultando o saque (GET /v1/withdrawals/{withdrawalId}). - Todos os valores são inteiros em centavos (
45000= R$ 450,00) e os timestamps seguem ISO 8601 UTC. Veja Convenções.
Nota
Saque automático (auto-cashout): regras recorrentes de saque existem na plataforma, mas não fazem parte da API pública — são configuradas pelo painel. Esta referência cobre apenas os saques manuais via /v1/withdrawals.
Modelo do objeto
O exemplo abaixo é a resposta completa de um saque (retornada por criar e consultar). Em listagens, cada item é uma projeção leve: não inclui walletId, merchant nem _links por item.
{
"id": "cash_01hqzvabc", // ID do saque (prefixo cash_), opaco
"walletId": "wall_01hqzvabc", // carteira de destino (ausente nos itens de lista)
"amount": 45000, // valor em centavos = R$ 450,00
"status": "pending", // estado atual do saque
"method": "bankTransfer", // método do repasse (ex.: bankTransfer, pix)
"currency": "BRL", // ISO 4217
"fee": 15, // taxa do saque, em centavos
"transferCode": null, // código da transferência (preenchido após processar)
"paidAt": null, // quando foi pago (null = ainda não pago)
"approvedAt": null, // quando foi aprovado (null = ainda não aprovado)
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2026-04-12T17:56:33.000Z",
"merchant": {
"name": "Seller Name",
"merchantId": "bus_1234567890",
"isSubAccount": false
},
"_links": {
"self": {
"href": "https://api.selectwin.io/v1/withdrawals/cash_01hqzvabc",
"method": "GET",
"description": "Read a withdrawal."
},
"create": { "href": "https://api.selectwin.io/v1/withdrawals", "method": "POST", "description": "Make a withdrawal." },
"list": { "href": "https://api.selectwin.io/v1/withdrawals", "method": "GET", "description": "List withdrawals." }
}
}Campos do saque
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do saque, prefixo cash_. Trate como opaco (não faça parsing). |
walletId | string | Carteira de destino (wall_...). Presente em criar e consultar; omitido nos itens de listagem. |
amount | integer | Valor do saque em centavos. |
status | string | Estado atual do saque (veja Ciclo de vida). |
method | string | Método do repasse (ex.: bankTransfer, pix). Definido a partir da carteira. |
currency | string | Moeda ISO 4217 — atualmente sempre BRL. |
fee | integer | Taxa cobrada pelo saque, em centavos. Definida pelo seu plano de taxas. |
transferCode | string | null | Código de referência da transferência. null até o repasse ser processado. |
paidAt | string | null | Data-hora (ISO 8601 UTC) do pagamento; null enquanto não pago. |
approvedAt | string | null | Data-hora (ISO 8601 UTC) da aprovação; null enquanto não aprovado. |
createdAt | string | Data-hora de criação (ISO 8601 UTC). |
updatedAt | string | Data-hora da última atualização (ISO 8601 UTC). |
merchant | object | Dados da conta dona do saque (name, merchantId, isSubAccount). |
_links | object | Links HATEOAS (self, create, list) para navegar pela API. |
Os campos
transferCode,paidAteapprovedAtnascemnulle são preenchidos conforme o saque avança. Use isso para distinguir um saque recém-criado de um já liquidado.
Ciclo de vida
O status é uma string que reflete o estágio do repasse. Você não muda o status por chamadas — quem o move é a plataforma, e cada transição dispara um webhook. Acompanhe pelos eventos, nunca por polling (veja Proibição de polling).
| Status | Significado |
|---|---|
pending | Saque criado, aguardando processamento. |
analysis | Em análise antifraude/risco antes da aprovação. |
approved | Aprovado; ainda não enviado ao banco. |
processing | Repasse em processamento junto ao banco. |
paid | Concluído: dinheiro creditado na carteira. |
refused | Recusado (ex.: carteira não registrada). |
canceled | Cancelado antes da conclusão. |
O conjunto exato de estados intermediários pode variar; trate qualquer status desconhecido como "ainda em andamento" e reaja aos estados terminais (
paid,refused,canceled).
Operações
| Método | Caminho | O que faz | Página |
|---|---|---|---|
POST | /v1/withdrawals | Solicita um novo saque para uma carteira | Criar saque |
GET | /v1/withdrawals/{withdrawalId} | Consulta um saque específico | Consultar saque |
GET | /v1/withdrawals | Lista saques com filtros e paginação | Listar saques |
Base URL: https://api.selectwin.io/v1. Autentique toda requisição com o header SelectKey (nunca Authorization: Bearer/Basic) — em produção a chave começa com sl_live_; em sandbox, com sl_test_. Veja Autenticação.
Criar um saque (resumo)
A criação aceita apenas dois campos no corpo:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
amount | integer (centavos, ≥ 1) | Sim | Valor a sacar, em centavos. |
walletId | string (^[a-z]+_[A-Za-z0-9]+$) | Sim | Carteira de destino (wall_...). |
curl -X POST https://api.selectwin.io/v1/withdrawals \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
-H "Content-Type: application/json" \
-H "X-Idempotency-Key: $(uuidgen)" \
-d '{
"amount": 50000,
"walletId": "wall_abc123"
}'A resposta é 201 Created com o saque em status: "pending". Use X-Idempotency-Key para evitar saques duplicados em caso de retry — veja Idempotência. Detalhes completos em Criar saque.
Eventos de webhook
Cada transição do saque emite um evento. Configure um endpoint de webhook e reaja a estes eventos em vez de consultar repetidamente a API:
| Evento | Disparado quando |
|---|---|
withdrawal.created | O saque é criado. |
withdrawal.pending | O saque fica pendente, aguardando processamento. |
withdrawal.analysis | O saque entra em análise. |
withdrawal.processing | O repasse entra em processamento. |
withdrawal.confirmed | A transferência é confirmada (paga). |
withdrawal.canceled | O saque é cancelado. |
withdrawal.refused | O saque é recusado por algum problema/falha. |
Sempre verifique a assinatura do webhook antes de confiar no payload — veja Verificando Assinaturas de Webhook.
Erros
Trate sempre pelo error.code (estável), não pela message. Códigos específicos de saques:
error.code | HTTP | Quando ocorre |
|---|---|---|
withdrawalIdIsInvalid | 400 | ID de saque malformado na consulta/filtro. |
withdrawalInvalid | 400 | Dados do saque inválidos. |
withdrawalAmountLessThanMinimum | 422 | Valor abaixo do mínimo permitido pelo seu plano. |
withdrawalCreateNotProcessable | 422 | Saque não pode ser criado (regra de negócio). |
withdrawalStatusNotAcceptable | 422 | Status atual do saque não permite a operação. |
withdrawalProcessFailedByWalletNotRegistered | 422 | Falha: a carteira de destino não está registrada. |
withdrawalNotProcessed | 422 | O saque não foi processado. |
withdrawalNotReadable | 422 | O saque não pôde ser lido. |
withdrawalNotDeletable | 422 | O saque não pode ser removido. |
Pode ocorrer também balanceIsInsufficient (422) quando o saldo disponível não cobre o valor. E os códigos transversais: unauthorized (401), forbidden (403), invalidParameters (400), unprocessableEntity/tooManyRequests (422/429) e serverError (500). Veja o Catálogo de Códigos de Erro e Tratamento de Erros.
Boas práticas
- Confirme o saldo disponível antes de sacar. Saque consome o saldo
available; valores acima dele resultam embalanceIsInsufficient. Consulte seu saldo no recurso de Finanças. - Respeite o valor mínimo do seu plano. Abaixo dele a API retorna
withdrawalAmountLessThanMinimum. Calcule também afeeao planejar quanto sacar. - Cadastre e valide a carteira antes. Carteiras não registradas falham com
withdrawalProcessFailedByWalletNotRegistered. Gerencie carteiras no recurso Wallets. - Use
X-Idempotency-Keyna criação. Em retries de rede, garante que o mesmo saque não seja solicitado duas vezes. - Reaja a webhooks, não a polling. Acompanhe
withdrawal.*para saber quando o saque foi confirmado, recusado ou cancelado, em vez de consultar a API em laço. - Sempre envie valores em centavos (
45000) e nunca em reais com ponto decimal. TrateidewalletIdcomo strings opacas. - Para conciliação, busque o objeto completo. Itens de lista omitem
walletId/merchant; quando precisar desses campos, façaGET /v1/withdrawals/{withdrawalId}.
Veja também
- Criar saque — solicitar um novo repasse.
- Consultar saque — ver status e detalhes de um saque.
- Listar saques — filtrar e paginar o histórico.
- Convenções · Autenticação · Idempotência · Catálogo de Códigos de Erro
How is this guide?