Listar cupons
Liste os cupons da sua conta com paginação e filtros (nome, código, tipo de desconto, status e intervalo de datas). Use esta operação para popular telas de administração, montar relatórios de campanha
Liste os cupons da sua conta com paginação e filtros (nome, código, tipo de desconto, status e intervalo de datas). Use esta operação para popular telas de administração, montar relatórios de campanha ou localizar um cupom específico antes de lê-lo, editá-lo ou removê-lo.
GET /v1/coupons
Como funciona
A listagem devolve um objeto paginado: um envelope com metadados de paginação (offset, limit, total, page, hasMore) e um array data com os cupons. Cada item de data é uma projeção leve do cupom — traz os campos de identificação e vigência (id, name, code, type, value, enabled, initDate, endDate, createdAt, updatedAt), mas omite os campos de regras de uso (minCartAmount, usageLimit, allowedItemIds, etc.). Para o cupom completo, faça um Read pelo id.
"Projeção leve" = a lista entrega só o suficiente para você decidir qual cupom abrir; os detalhes vêm no recurso individual.
O servidor aplica os filtros que você enviar como parâmetros de query (combinados com E lógico) e ordena pelo campo de data de criação, na direção que você pedir. A paginação é por offset/limit: você pede uma "janela" de resultados e avança movendo o offset.
Para o padrão completo de janelas, hasMore e como percorrer todas as páginas, veja Paginação.
Quando usar
- Telas de administração / busca: liste e filtre cupons por
name,codeoustatus. - Relatórios de campanha: combine
type,statuse o intervalodaterange*para recortar cupons criados em uma janela. - Localizar antes de agir: encontre o
idde um cupom para depois chamar Read, Update ou Delete.
Quando NÃO usar:
- Se você já tem o
id, vá direto ao Read — é mais barato que listar e filtrar. - Se precisa de todos os cupons da conta de uma vez (sem montar paginação), use a variante
GET /v1/coupons/listall, que retorna um array direto. Veja List all abaixo.
Requisição
Headers
| Cabeçalho | Obrigatório | Valor |
|---|---|---|
SelectKey | Sim | Sua chave de API (sl_live_… em produção, sl_test_… em sandbox) |
Autentique sempre pelo header SelectKey — nunca Authorization: Bearer/Basic. Detalhes em Autenticação. Como é uma leitura (GET), não há corpo nem Content-Type.
Parâmetros de query
Todos opcionais; combine-os à vontade.
| Parâmetro | Tipo | Faixa / enum | Descrição |
|---|---|---|---|
limit | number | 1..50 | Máximo de itens por página (ex.: 20) |
offset | number | 0.. | Quantos itens pular antes de começar (ex.: 0) |
sort | string | ascending | descending | Ordenação dos resultados |
dir | string | ascending | descending | Direção da ordenação |
daterangegte | string (ISO 8601) | — | Criado em ou após (inclusivo) |
daterangegt | string (ISO 8601) | — | Criado após (exclusivo) |
daterangelt | string (ISO 8601) | — | Criado antes (exclusivo) |
daterangelte | string (ISO 8601) | — | Criado em ou antes (inclusivo) |
id | string | ^[a-z]+_[A-Za-z0-9]+$ | Filtra por um ID de cupom específico (ex.: dis_01hqzvabc) |
name | string | — | Busca por nome do cupom (ex.: Summer Sale) |
code | string | — | Filtra pelo código de checkout (ex.: SUMMER2026) |
type | string | flat | percentage | Filtra pelo tipo de desconto |
status | string | active | inactive | Filtra pelo status do cupom |
Nota
O tipo de desconto é flat (valor fixo em centavos) ou percentage (percentual). Não existe o valor percent. Datas dos filtros daterange* são ISO 8601 em UTC (sufixo Z); veja Convenções.
Exemplo de requisição
curl -G "https://api.selectwin.io/v1/coupons" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
--data-urlencode "status=active" \
--data-urlencode "type=percentage" \
--data-urlencode "limit=20" \
--data-urlencode "offset=0" \
--data-urlencode "sort=descending"Resposta
200 OK — objeto paginado. O array data traz a projeção leve de cada cupom.
{
"offset": 0,
"limit": 20,
"total": 12,
"page": {
"offset": {
"first": 0,
"prev": null,
"next": null,
"last": 0
},
"current": 1,
"total": 1
},
"data": [
{
"id": "dis_01hqzvabc",
"name": "Black Friday 25%",
"code": "BLACKFRIDAY25",
"type": "percentage",
"value": 25,
"enabled": true,
"initDate": "2026-04-01T00:00:00.000Z",
"endDate": "2026-04-30T23:59:59.000Z",
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2026-04-12T17:56:33.000Z"
}
],
"hasMore": false
}Campos do envelope
| Campo | Tipo | Descrição |
|---|---|---|
offset | integer | Deslocamento aplicado nesta resposta |
limit | integer | Tamanho da janela usado nesta resposta |
total | integer | Total de cupons que casam com o filtro |
page.current | integer | Número da página atual |
page.total | integer | Total de páginas |
page.offset.first / prev / next / last | integer | null | Offsets para navegar (null quando não há página naquele sentido) |
hasMore | boolean | true se ainda há itens após esta janela |
data | array | Itens (projeção leve) |
Campos de cada item (data[])
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID do cupom (prefixo dis_), opaco |
name | string | Nome de exibição |
code | string | Código usado no checkout |
type | string | flat ou percentage |
value | integer | Valor do desconto: centavos (flat) ou pontos percentuais (percentage) |
enabled | boolean | Se o cupom está ativo |
initDate | string (date-time) | Início da vigência (ISO 8601 UTC) |
endDate | string (date-time) | Fim da vigência (ISO 8601 UTC) |
createdAt | string (date-time) | Criação |
updatedAt | string (date-time) | Última atualização |
Importante
Quando type é flat, value é um valor monetário em centavos (500 = R$ 5,00). Quando é percentage, value é o número de pontos percentuais (25 = 25%). Trate o id como string opaca — não faça parsing do prefixo. Veja Convenções.
Listar tudo (/listall)
GET /v1/coupons/listall
Variante que retorna todos os cupons da conta como um array direto (sem o envelope de paginação). Útil para exportações e sincronizações em lote, quando você quer o conjunto inteiro sem percorrer páginas.
curl "https://api.selectwin.io/v1/coupons/listall" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"[
{
"id": "dis_01hqzvabc",
"name": "Black Friday 25%",
"code": "BLACKFRIDAY25",
"type": "percentage",
"value": 25,
"enabled": true,
"initDate": "2026-04-01T00:00:00.000Z",
"endDate": "2026-04-30T23:59:59.000Z",
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2026-04-12T17:56:33.000Z"
}
]Atenção
/listall devolve a coleção inteira de uma vez. Em contas com muitos cupons, prefira GET /v1/coupons com limit/offset para não carregar tudo em memória.
Erros
O corpo de erro segue o envelope padrão com error.code estável — trate sempre pelo code, não pela message. Veja Tratamento de Erros e o Catálogo de Códigos de Erro.
error.code | HTTP | Quando ocorre |
|---|---|---|
invalidParameters | 400 | Parâmetro de query inválido (ex.: limit fora de 1..50, type/status fora do enum, data malformada) |
couponIdIsInvalid | 400 | O filtro id não bate com o formato prefixo_valor |
unauthorized | 401 | SelectKey ausente, inválida ou revogada |
forbidden | 403 | Chave sem permissão para listar cupons |
unprocessableEntity | 422 | Combinação de filtros não processável |
tooManyRequests | 429 | Limite de requisições excedido — respeite o backoff (error.retryAfterMinutes) |
serverError | 500 | Erro interno — repita com backoff |
Boas práticas
- Filtre no servidor, não no cliente. Para grandes volumes, restrinja com
status,type,codeedaterange*em vez de baixar tudo e filtrar localmente. - Pagine sempre. Use
limit(máx.50) e avance ooffset; pare quandohasMoreforfalse. Veja Paginação. - Busca por código. Quer um cupom por código de checkout? Use
code=SUMMER2026— costuma retornar um único item. - Lista é leve. Não confie na lista para regras de uso (
usageLimit,minCartAmount,allowedItemIds): esses campos só vêm no Read individual. - Recortes por data. Combine
daterangegte/daterangelte(inclusivos) oudaterangegt/daterangelt(exclusivos) para janelas precisas — sempre em ISO 8601 UTC. /listallcom parcimônia. Reserve para exportações pontuais; para UI paginada, fique noGET /v1/coupons.
Veja também
How is this guide?