Listar transações
Recupere uma página de transações da sua conta, filtrando por status, método de pagamento, cliente, período e outros critérios. É a principal visão de vendas e pagamentos: use-a para montar relatórios
Recupere uma página de transações da sua conta, filtrando por status, método de pagamento, cliente, período e outros critérios. É a principal visão de vendas e pagamentos: use-a para montar relatórios, telas de histórico, conciliação financeira e painéis de acompanhamento.
GET /v1/transactions
Como funciona
Este endpoint retorna uma lista paginada de transações, ordenada da mais recente para a mais antiga por padrão. A resposta não é um array simples: é um envelope de paginação com metadados (offset, limit, total, hasMore, page), o array data com as transações, o bloco merchant (sua conta) e _links (HATEOAS).
Dois detalhes importantes sobre o comportamento:
- Projeção leve. Cada item de
dataé uma versão resumida da transação — traz os campos essenciais (id, valor, status, método, cliente, datas), mas omite blocos pesados comotimeline,receivables,splitse o objeto completo decustomer/billing. Para o objeto completo, consulteGET /v1/transactions/{id}. - Paginação por offset. Você avança nos resultados deslocando a janela com
offsetelimit. O servidor calcula os deslocamentos de cada página para você empage.offset(não monte essa lógica do zero). Veja Paginação.
Os filtros são combináveis: enviar vários parâmetros de query funciona como um E lógico (todos precisam casar). Filtros muito restritivos podem retornar data: [] com total: 0 — isso é uma resposta válida, não um erro.
Nota
Listagens são uma fotografia do momento da consulta. Para reagir a mudanças de status (uma transação que foi aprovada, estornada ou disputada), use webhooks — não fique relendo a lista em loop. Veja Proibição de polling.
Quando usar
- Use para histórico, relatórios, telas de busca, conciliação e exportações pontuais.
- Use com filtros de período (
daterange*) para fechamentos diários/mensais. - Não use para descobrir "se uma transação específica mudou" — para isso assine os eventos
transaction.*via webhook. - Não use como fonte de verdade de um único pedido em tela — para detalhe completo, leia a transação por ID em Read.
Requisição
Headers
| Cabeçalho | Obrigatório | Valor |
|---|---|---|
SelectKey | Sim | Sua chave de API (sl_live_... em produção; sl_test_... em sandbox). Veja Autenticação. |
Nunca use Authorization: Bearer ou Basic — a autenticação é sempre pelo header SelectKey. Como GET não tem corpo, não envie Content-Type nem X-Idempotency-Key aqui.
Parâmetros de query
Todos são opcionais. Sem nenhum filtro, você recebe as transações mais recentes paginadas.
| Parâmetro | Tipo | Faixa / formato | Descrição |
|---|---|---|---|
limit | integer | 1–50 | Tamanho da página (máximo 50). |
offset | integer | ≥ 0 | Quantos registros pular (deslocamento da paginação). |
sort | string | ascending | descending | Ordem cronológica dos resultados. Padrão: do mais recente para o mais antigo. |
status | string | enum (ver abaixo) | Filtra pelo status atual da transação. |
method | string | credit | billet | pix | nupay | Filtra pelo método de pagamento. |
id | string | ^tra_... | Filtra por um ID de transação específico. |
referenceid | string | — | Filtra pelo seu identificador externo (externalReference). |
customid | string | 1–20 caracteres | Filtra pelo customId da transação. |
customerid | string | ^cus_... | Filtra pelas transações de um cliente. |
customeremail | string | Filtra pelo e-mail do cliente. | |
source | string | — | Filtra pela origem da transação. |
ipaddress | string | IPv4 ou IPv6 | Filtra pelo IP exato do cliente. |
daterange | string | ISO 8601 UTC | Restringe a um único dia; a API expande para o início e o fim daquele dia. |
daterangegt | string | ISO 8601 UTC | Limite inferior exclusivo (estritamente depois). |
daterangegte | string | ISO 8601 UTC | Limite inferior inclusivo (a partir de). |
daterangelt | string | ISO 8601 UTC | Limite superior exclusivo (estritamente antes). |
daterangelte | string | ISO 8601 UTC | Limite superior inclusivo (até). |
Atenção
A ordenação (sort) só aceita ascending ou descending — não existe ordenação por campo arbitrário (ex.: createdAt:desc ou amount:asc não são válidos). Para uma janela de tempo, combine os limites daterangegte e daterangelte.
Valores de status
| Valor | Significado |
|---|---|
pre-authorized | Pré-autorizada (valor reservado, ainda não capturado). |
pending | Pendente (aguardando pagamento, ex.: Pix/boleto). |
awaiting | Aguardando processamento. |
analyzing | Em análise. |
fraud-review | Em análise antifraude. |
approved | Aprovada / paga. |
refused | Recusada pelo emissor/adquirente. |
unauthorized | Não autorizada. |
failed | Falhou no processamento. |
canceled | Cancelada. |
refunded | Reembolsada. |
dispute | Em disputa. |
chargeback | Com chargeback. |
Para o ciclo de vida completo dos status e suas transições, veja Visão geral de Transações.
Exemplos curl
Transações aprovadas no cartão de crédito, página de 50, mais recentes primeiro:
curl "https://api.selectwin.io/v1/transactions?status=approved&method=credit&limit=50&sort=descending" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Transações de um cliente específico:
curl "https://api.selectwin.io/v1/transactions?customerid=cus_01hqzvabc" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Conciliação de um intervalo de datas (1 a 30 de abril de 2026, inclusive):
curl "https://api.selectwin.io/v1/transactions?daterangegte=2026-04-01T00:00:00Z&daterangelte=2026-04-30T23:59:59Z&limit=50" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Segunda página de resultados (pulando os 20 primeiros):
curl "https://api.selectwin.io/v1/transactions?limit=20&offset=20" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Resposta
Sucesso (200 OK)
{
"offset": 0,
"limit": 20,
"total": 142,
"hasMore": true,
"page": {
"current": 1,
"total": 8,
"offset": { "first": 0, "prev": null, "next": 20, "last": 140 }
},
"data": [
{
"id": "tra_01hqzvabc",
"customId": "PEDIDO-1042",
"customerId": "cus_01hqzvabc",
"cardBrand": "visa",
"amount": 1500,
"originalAmount": 1500,
"status": "approved",
"method": "credit",
"currency": "BRL",
"fees": 45,
"approvedAt": "2026-04-12T17:56:33.000Z",
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2026-04-12T17:56:32.000Z",
"images": ["https://cdn.example.com/product.png"]
}
],
"merchant": {
"name": "Seller Name",
"merchantId": "bus_1234567890",
"isSubAccount": false
},
"_links": {
"self": {
"href": "https://api.selectwin.io/v1/transactions",
"method": "GET",
"description": "List all transactions."
}
}
}Envelope de paginação
| Campo | Tipo | Descrição |
|---|---|---|
offset | integer | Deslocamento aplicado nesta consulta. |
limit | integer | Tamanho da página retornado. |
total | integer | Total de registros que casam com os filtros. |
hasMore | boolean | true se existem mais resultados além desta página. |
page.current | integer | Número da página atual (1-based). |
page.total | integer | Total de páginas para os filtros atuais. |
page.offset.first | integer | Offset da primeira página. |
page.offset.prev | integer | null | Offset da página anterior (null na primeira). |
page.offset.next | integer | null | Offset da próxima página (null na última). |
page.offset.last | integer | Offset da última página. |
data | array | Transações (projeções leves). |
merchant | object | Conta dona da listagem (name, merchantId, isSubAccount). |
_links | object | Links HATEOAS (ex.: self). |
Item de data[] (projeção leve)
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID da transação (tra_*). Trate como opaco. |
customId | string | Identificador legível atribuído pela plataforma/seller. |
customerId | string | ID do cliente associado (cus_*). |
cardBrand | string | Bandeira do cartão (em pagamentos com cartão; pode ser null). |
amount | integer | Valor atual da transação, em centavos. |
originalAmount | integer | Valor original (antes de descontos/ajustes), em centavos. |
status | string | Status atual (ver enum acima). |
method | string | Método de pagamento. |
currency | string | Moeda ISO 4217 — sempre BRL. |
fees | integer | Total de taxas aplicadas, em centavos. |
approvedAt | string | null | Data/hora da aprovação (ISO 8601 UTC), ou null. |
createdAt | string | Data/hora de criação (ISO 8601 UTC). |
updatedAt | string | Data/hora da última atualização (ISO 8601 UTC). |
images | array | URLs de imagens associadas (pode vir vazio). |
Importante
Os itens da lista são projeções leves: blocos como payment completo, timeline, receivables, splits, refunds e disputes não vêm aqui. Quando precisar deles, faça GET /v1/transactions/{id} para a transação desejada.
Erros
Trate sempre pelo error.code (estável), não pela message. Veja o Catálogo de Códigos de Erro e o envelope de erro.
error.code | HTTP | Quando ocorre |
|---|---|---|
invalidParameters | 400 | Parâmetro de query inválido (ex.: limit fora de 1–50, status/method fora do enum, data malformada). Veja error.params. |
transactionIdIsInvalid | 400 | O filtro id não está no formato tra_*. |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Chave sem permissão para listar transações. |
notFound | 404 | Rota inexistente (a listagem em si não retorna 404 por filtros sem resultado — isso devolve data: []). |
unprocessableEntity | 422 | Combinação de filtros não processável. |
tooManyRequests | 429 | Limite de requisições excedido — respeite error.retryAfterMinutes e aplique backoff. Veja API Limits. |
serverError | 500 | Erro interno — repita com backoff; se persistir, contate o suporte. |
Boas práticas
- Filtre no servidor, não no cliente. Use
status,method,customeride osdaterange*para reduzir o volume — é mais rápido e barato do que baixar tudo e filtrar localmente. - Pagine pelos offsets da resposta. Use
page.offset.next/page.offset.prev(ouhasMore) para navegar, em vez de calcular offsets manualmente. - Respeite o teto de 50 por página. Para conjuntos grandes, itere as páginas com backoff leve entre chamadas em vez de aumentar o
limit. - Use limites inclusivos/exclusivos com cuidado. Para fechamentos, prefira
daterangegte+daterangelte; combine comstatus=approvedpara conciliar apenas o que foi pago. - Não dependa da lista para detalhes. Itens são projeções leves — busque o objeto completo via Read quando precisar de
timeline,receivablesousplits. - Não faça polling. Para saber quando uma transação muda de estado, assine os eventos
transaction.*por webhook. - Trate
429/5xxcom backoff exponencial e correlacione transações com o seu sistema porreferenceid/customId.
Veja também
- Visão geral de Transações — modelo do objeto e ciclo de vida dos status.
- Criar transação — como gerar uma nova cobrança.
- Ler transação — objeto completo por ID.
- Capturar e Reembolsar — operações sobre uma transação.
- Abrir disputa — registrar contestação/chargeback.
- Paginação · Convenções · Proibição de polling
How is this guide?