SelectwinDOCS
Saques

Listar saques

Recupera, de forma paginada, o histórico de saques (repasses bancários) da sua conta, com filtros por status, método de pagamento, período e identificador. Use este endpoint para acompanhar repasses,

Recupera, de forma paginada, o histórico de saques (repasses bancários) da sua conta, com filtros por status, método de pagamento, período e identificador. Use este endpoint para acompanhar repasses, conciliar com o extrato bancário e construir relatórios financeiros.

GET /v1/withdrawals

Como funciona

Um saque (recurso withdrawal, prefixo de ID cash_) é uma ordem de transferência do saldo disponível da sua conta para uma carteira bancária (wallet) cadastrada. Cada saque tem um ciclo de vida assíncrono: nasce como pending, é aprovado e, então, liquidado (pago) ou rejeitado.

Este endpoint devolve uma lista paginada desses saques. Alguns pontos do mecanismo que vale entender antes de integrar:

  • Projeção leve. Os itens em data[] são versões resumidas do objeto. Em particular, o campo walletId não vem na listagem. Para obter o objeto completo de um saque (incluindo walletId), use Consultar saque com o id.
  • Paginação por offset. A resposta carrega offset, limit, total, hasMore e um bloco page com a página atual e os offsets de navegação (first/prev/next/last). Veja Paginação para o padrão completo.
  • HATEOAS. O bloco _links traz links navegáveis (self, create) já prontos com método e URL absoluta — útil para descobrir as próximas ações sem montar URLs à mão.
  • Somente leitura. A listagem não altera nada. Não precisa de chave de idempotência.

O status exato segue o ciclo de vida do saque. Para mudanças de estado em tempo real, prefira webhooks a ficar consultando esta lista em loop — veja Por que não fazer polling.

Quando usar

  • Conciliação bancária: cruzar os saques liquidados com as entradas do seu extrato.
  • Relatórios e auditoria: montar um histórico financeiro filtrando por período.
  • Painéis e monitoramento: listar saques pending ou approved para acompanhar repasses em andamento.

Quando não usar:

  • Para os detalhes completos de um saque (com walletId), use Consultar saque — é mais barato e traz o objeto inteiro.
  • Para reagir a uma mudança de status (ex.: saque foi pago), use webhooks em vez de re-listar periodicamente.

Requisição

Headers

CabeçalhoObrigatórioValor
SelectKeySimSua chave de API: sl_live_… (produção) ou sl_test_… (sandbox). Veja Autenticação.

Esta é uma requisição GET sem corpo, portanto não envia Content-Type. Autentique sempre pelo header SelectKey — a API não usa Authorization: Bearer nem Basic.

Parâmetros de query

Todos são opcionais. Combine-os para refinar a busca.

ParâmetroTipoDescrição
limitinteger (1–100)Máximo de itens por página. Padrão da API quando omitido.
offsetinteger (≥ 0)Quantos itens pular (paginação).
sortstringOrdem dos resultados. Enum: ascending, descending.
methodstringFiltra pelo método de repasse (ex.: pix, bankTransfer).
statusstringFiltra pelo status do saque (ex.: pending, approved, paid).
idstringFiltra por um ID de saque específico (ex.: cash_abc123).
daterangestring (ISO 8601)Restringe a um único dia do calendário; a API expande para o início e fim daquele dia.
daterangegtstring (ISO 8601)Limite inferior exclusivo: somente registros estritamente após esta data.
daterangegtestring (ISO 8601)Limite inferior inclusivo: registros nesta data ou depois.
daterangeltstring (ISO 8601)Limite superior exclusivo: somente registros estritamente antes desta data.
daterangeltestring (ISO 8601)Limite superior inclusivo: registros nesta data ou antes.

Sobre os filtros de data

Use daterange para um único dia. Para um intervalo, combine daterangegte (a partir de) com daterangelte (até). As datas seguem ISO 8601 em UTC (2026-04-12T00:00:00Z) — veja Convenções.

Exemplo curl

# Listar os 20 saques pendentes mais recentes via Pix em abril de 2026
curl -G "https://api.selectwin.io/v1/withdrawals" \
  -H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  --data-urlencode "limit=20" \
  --data-urlencode "sort=descending" \
  --data-urlencode "status=pending" \
  --data-urlencode "method=pix" \
  --data-urlencode "daterangegte=2026-04-01T00:00:00Z" \
  --data-urlencode "daterangelte=2026-04-30T23:59:59Z"

Resposta

200 OK com o objeto paginado. Cada item de data[] é uma projeção leve do saque (sem walletId).

{
  "offset": 0,
  "limit": 20,
  "total": 1,
  "page": {
    "offset": { "first": 0, "prev": null, "next": null, "last": 0 },
    "current": 1,
    "total": 1
  },
  "data": [
    {
      "id": "cash_01hqzvabc",
      "amount": 45000,
      "status": "pending",
      "method": "bankTransfer",
      "currency": "BRL",
      "fee": 0,
      "transferCode": null,
      "paidAt": null,
      "approvedAt": null,
      "updatedAt": "2026-04-12T17:56:33.000Z",
      "createdAt": "2026-04-12T17:56:33.000Z"
    }
  ],
  "hasMore": false,
  "merchant": {
    "name": "Seller Name",
    "merchantId": "bus_1234567890",
    "isSubAccount": false
  },
  "_links": {
    "self": {
      "href": "https://api.selectwin.io/v1/withdrawals",
      "method": "GET",
      "description": "List withdrawals."
    },
    "create": {
      "href": "https://api.selectwin.io/v1/withdrawals",
      "method": "POST",
      "description": "Make a withdrawal."
    }
  }
}

Campos do envelope paginado

CampoTipoDescrição
offsetintegerPosição inicial dos resultados retornados.
limitintegerMáximo de itens nesta página.
totalintegerTotal de saques disponíveis para o filtro aplicado.
hasMorebooleantrue se há mais registros além dos retornados.
page.currentintegerNúmero da página atual.
page.totalintegerTotal de páginas.
page.offset.first / prev / next / lastinteger | nullOffsets para navegar (prev/next são null quando não existem).
dataarrayProjeções leves de saques (sem walletId).
merchantobjectIdentificação da conta: name, merchantId, isSubAccount.
_linksobjectLinks HATEOAS (self, create).

Campos de cada saque (data[])

CampoTipoDescrição
idstringIdentificador do saque (cash_…). Trate como opaco.
amountintegerValor do saque em centavos (45000 = R$ 450,00).
statusstringEstado atual do saque (ex.: pending, approved, paid).
methodstringMétodo de repasse (ex.: bankTransfer, pix).
currencystringMoeda ISO 4217 — atualmente BRL.
feeintegerTarifa do saque em centavos.
transferCodestring | nullCódigo da transferência bancária, quando disponível.
paidAtstring | nullData-hora da liquidação (ISO 8601 UTC) ou null se ainda não pago.
approvedAtstring | nullData-hora da aprovação ou null.
updatedAtstringÚltima atualização (ISO 8601 UTC).
createdAtstringCriação do saque (ISO 8601 UTC).

Diferença entre listar e consultar

Na listagem, cada saque é uma projeção e não inclui walletId. Para a carteira de destino e o objeto completo, chame Consultar saque. Veja a regra de projeções leves em Convenções.

Erros

Trate sempre pelo error.code (estável), nunca pela message. Veja Tratamento de Erros e o Catálogo de Códigos de Erro.

error.codeHTTPQuando ocorre
invalidParameters400Parâmetro de query inválido (ex.: limit fora de 1–100, data malformada). Veja error.params.
withdrawalIdIsInvalid400O id informado no filtro não tem formato válido.
unauthorized401SelectKey ausente, inválida ou revogada.
forbidden403Chave sem permissão para listar saques.
unprocessableEntity422Combinação de filtros não processável (regra de negócio).
tooManyRequests429Limite de requisições excedido — respeite error.retryAfterMinutes e use backoff. Veja API Limits.
serverError500Erro interno — tente novamente; se persistir, contate o suporte.

Boas práticas

  • Pagine sempre. Use limit (até 100) e offset; pare quando hasMore for false em vez de assumir um total fixo. Para listagens grandes, prefira _links e os offsets de page para navegar.
  • Filtre no servidor, não no cliente. Restringir por status, method e o intervalo daterangegte/daterangelte reduz dados trafegados e custo de processamento — mais eficiente do que baixar tudo e filtrar localmente.
  • Datas em UTC. Envie os filtros de data em ISO 8601 com sufixo Z; converta para o fuso do usuário apenas na exibição.
  • Valores em centavos. amount e fee são inteiros em centavos; divida por 100 só para exibir.
  • Não construa IDs. Use o id retornado como string opaca; passe-o direto para Consultar saque quando precisar dos detalhes.
  • Não faça polling para acompanhar status. Para saber quando um saque foi pago ou recusado, assine os webhooks em vez de re-listar em loop — veja Por que não fazer polling.
  • Concilie pelo período correto. Para fechamento, combine daterangegte/daterangelte cobrindo o ciclo e cruze transferCode com o extrato bancário.

Veja também

How is this guide?

On this page