Consultar um saque
Recupera todos os detalhes de um saque específico a partir do seu identificador (cash…): valor, status atual, método de transferência, taxa aplicada e os carimbos de tempo de criação, aprovação e paga
Recupera todos os detalhes de um saque específico a partir do seu identificador (cash_…): valor, status atual, método de transferência, taxa aplicada e os carimbos de tempo de criação, aprovação e pagamento. Use quando precisar confirmar em que ponto do fluxo um repasse está — por exemplo, depois de criar o saque ou ao responder a uma dúvida sobre uma transferência.
GET /v1/withdrawals/{withdrawalId}
Como funciona
Um saque (withdrawal) é a transferência de fundos disponíveis da sua conta Selectwin para uma carteira bancária (wall_…). Ele nasce com POST /v1/withdrawals e, a partir daí, avança por uma sequência de estados até ser pago, falhar ou ser cancelado. Este endpoint é a forma de ler o estado atual de um saque já existente.
A operação é uma leitura simples (idempotente e sem efeitos colaterais): você informa o withdrawalId na URL e recebe o objeto completo do saque. Diferente da listagem — que devolve uma projeção leve de cada item —, a leitura individual traz o objeto inteiro, incluindo o walletId de destino, o bloco merchant e os links _links (HATEOAS) para navegar até as operações relacionadas.
O campo mais importante na resposta é o status, que reflete a etapa do ciclo de vida do saque:
| Status | Significado |
|---|---|
pending | Saque criado, aguardando processamento. |
approved | Aprovado, mas ainda não enviado para a transferência. |
processing | Em processamento junto ao banco/adquirente. |
paid | Concluído — os fundos foram transferidos. Carimbo em paidAt. |
failed | Falhou (ex.: carteira inválida) — estado final. |
canceled | Cancelado — estado final. |
O ID é opaco: armazene a string
cash_…inteira e não tente interpretá-la. Veja Convenções.
Quando usar (e quando não usar)
Use para:
- Confirmar o resultado logo após criar um saque com Criar Saque.
- Buscar os detalhes completos de um item que apareceu na listagem — a lista omite alguns campos (como
walletId). - Atender suporte/auditoria: mostrar a um cliente em que estado a transferência dele está.
Não use para vigiar um saque em busca de mudança de status. Repetir esta chamada em laço (polling) gasta seu limite de requisições e é desencorajado. Para reagir a mudanças de estado em tempo real, assine os webhooks de saque (withdrawal.processing, withdrawal.confirmed, withdrawal.refused, …) — veja Proibição de Polling. Esta leitura serve para uma conferência pontual, não para acompanhamento contínuo.
Requisição
Headers
| Cabeçalho | Obrigatório | Descrição |
|---|---|---|
SelectKey | Sim | Sua chave de API. Em produção começa com sl_live_; em sandbox, com sl_test_. Veja Autenticação. |
Por ser uma leitura (GET), não há corpo nem Content-Type, e idempotência não se aplica.
Atenção
Autentique-se sempre pelo header SelectKey. A API não usa Authorization: Bearer nem Basic.
Parâmetros de caminho
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
withdrawalId | string | Sim | Identificador único do saque a consultar, no formato cash_… (ex.: cash_01hqzvabc). |
Exemplo de requisição
curl https://api.selectwin.io/v1/withdrawals/cash_01hqzvabc \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Resposta
Em caso de sucesso, a API responde com 200 OK e o objeto completo do saque.
{
"id": "cash_01hqzvabc",
"walletId": "wall_01hqzvabc",
"amount": 100000,
"status": "pending",
"method": "bankTransfer",
"currency": "BRL",
"fee": 15,
"transferCode": null,
"paidAt": null,
"approvedAt": null,
"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 da resposta
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador do saque (cash_…). |
walletId | string | Carteira de destino dos fundos (wall_…). Presente na leitura e na criação; omitido nos itens da listagem. |
amount | integer | Valor do saque em centavos (100000 = R$ 1.000,00). |
status | string | Estado atual: pending, approved, processing, paid, failed ou canceled (ver tabela acima). |
method | string | Método da transferência (ex.: bankTransfer, pix). |
currency | string | Moeda ISO 4217 — atualmente BRL. |
fee | integer | Taxa aplicada ao saque, em centavos. |
transferCode | string | null | Código de referência da transferência; null enquanto não houver. |
paidAt | string | null | Data-hora do pagamento (ISO 8601 UTC) ou null se ainda não pago. |
approvedAt | string | null | Data-hora da aprovação (ISO 8601 UTC) ou null se ainda não aprovado. |
updatedAt | string | Última atualização (ISO 8601 UTC). |
createdAt | string | Criação do saque (ISO 8601 UTC). |
merchant | object | Dados do estabelecimento dono do saque. |
merchant.name | string | Nome do estabelecimento. |
merchant.merchantId | string | Identificador do estabelecimento. |
merchant.isSubAccount | boolean | Indica se é uma subconta. |
_links | object | Links HATEOAS (self, create, list) para navegar às operações relacionadas. |
Importante
Campos monetários (amount, fee) são inteiros em centavos — divida por 100 só na exibição. Todos os carimbos de tempo são ISO 8601 em UTC (sufixo Z). Veja Convenções.
Erros
Em caso de falha, a API retorna o status HTTP correspondente e um envelope com error.code estável. Trate sempre pelo error.code, nunca pela message — veja Tratamento de Erros.
error.code | HTTP | Quando ocorre |
|---|---|---|
withdrawalIdIsInvalid | 400 | O withdrawalId é malformado (não segue o padrão cash_…). |
invalidParameters | 400 | Falha de validação genérica do parâmetro de caminho. |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para ler este saque. |
notFound | 404 | Nenhum saque com esse ID na sua conta. |
withdrawalNotReadable | 422 | O saque existe, mas não pode ser lido no estado atual. |
tooManyRequests | 429 | Limite de requisições excedido (respeite error.retryAfterMinutes). |
serverError | 500 | Erro interno — repita com backoff. |
Exemplo de resposta de erro (ID malformado):
{
"error": {
"code": "withdrawalIdIsInvalid",
"statusCode": 400,
"category": "validation",
"message": "Withdrawal ID is invalid"
}
}A lista completa de códigos por recurso está no Catálogo de Códigos de Erro.
Boas práticas
- Cacheie estados finais. Uma vez que o saque chegue a
paid,failedoucanceled, ele não muda mais — guarde o resultado e evite reler. Releia apenas o que estiver empending/approved/processing. - Prefira webhooks ao polling. Em vez de reler para detectar mudança de status, assine os eventos de saque e atualize seu sistema quando eles chegarem. Veja Proibição de Polling.
- Confirme a transferência por
paidAtetransferCode. Considere o saque efetivamente pago só quandostatusforpaidepaidAtestiver preenchido; usetransferCodepara reconciliar com o extrato bancário. - Trate o ID como opaco. Armazene a string
cash_…inteira; não a interprete nem reconstrua. - Distinga 404 de 403.
notFoundindica ID inexistente na sua conta;forbiddenindica falta de permissão — tratar os dois da mesma forma esconde problemas de chave de API. - Lembre da projeção da lista. Se um campo (ex.:
walletId) aparece vazio ao iterar a listagem, busque o objeto completo aqui.
Veja também
- Visão Geral de Saques — o objeto de saque, ciclo de vida e eventos de webhook.
- Criar Saque — solicitar um novo saque.
- Listar Saques — listar e filtrar saques.
- Convenções · Tratamento de Erros · Proibição de Polling
How is this guide?