Listar produtos
A API oferece duas formas de listar produtos:
A API oferece duas formas de listar produtos:
| Endpoint | Formato | Uso |
|---|---|---|
GET /v1/products | paginado (envelope) | Listagens com paginação/filtros |
GET /v1/products/listall | array direto (sem paginação) | Carregar o catálogo inteiro de uma vez (ex.: selects) |
Ambos exigem o escopo products:list e retornam produtos completos (com variants).
Filtros (querystring)
Aceitos por ambos os endpoints:
| Parâmetro | Tipo | Descrição |
|---|---|---|
id | string | Filtra por id do produto (prd_... / pro_...) |
slug | string | Filtra por slug (1–100 caracteres) |
name | string | Filtra por nome (1–40 caracteres) |
language | string | Filtra por idioma |
category | string | Filtra por categoria |
enabled | boolean | Filtra por ativo/inativo |
externalreference | string | Filtra por referência externa |
daterange (e daterangegt/gte/lt/lte) | string | Filtra por intervalo de datas |
Paginação (GET /v1/products): limit default 20, máx. 100; offset default 0. Em
listall, limit default é 999999 e há sort (ascending | descending, default ascending).
Lista paginada
GET /v1/products
curl -X GET "https://api.selectwin.io/v1/products?limit=20&offset=0" \
-H "SelectKey: sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"{
"offset": 0,
"limit": 20,
"total": 1,
"page": { "offset": { "first": 0, "prev": 0, "next": 0, "last": 0 }, "current": 1, "total": 1 },
"hasMore": false,
"data": [
{
"id": "prd_01hqzvabc",
"name": "Plano Premium",
"slug": "plano-premium",
"salesPage": "https://example.com/sales",
"description": "Full access plan",
"language": "pt-BR",
"enabled": true,
"salesQty": 42,
"type": "digital",
"category": "saas",
"externalReference": null,
"warrantyDays": 7,
"images": ["https://example.com/img1.png"],
"imageAssetIds": null,
"createdAt": "2026-04-12T17:56:33.000Z",
"updatedAt": "2026-04-12T17:56:33.000Z",
"variants": [
{
"id": "var_01hqzvabc",
"productId": "prd_01hqzvabc",
"name": "Mensal",
"slug": "mensal",
"description": "Monthly billing",
"sku": "SKU-M",
"primary": true,
"enabled": true,
"pricing": { "unitPrice": 9900, "oldPrice": null, "costPerItem": null, "currency": "BRL", "schema": "unit", "type": "recurring", "billingType": "prepaid", "billingFrequency": "monthly", "billingFrequencyCount": 1 },
"images": null,
"metadata": null,
"attributes": null,
"externalReference": null,
"checkoutUrl": null,
"createdAt": "2026-04-12T17:56:33.000Z",
"updatedAt": "2026-04-12T17:56:33.000Z"
}
]
}
]
}Cada item de
dataé o produto completo (incluindovariants) — o mesmo objeto de Consultar. A lista paginada de produtos não incluimerchant/_links. Os campos depage.offset(first,prev,next,last) são sempre inteiros (nuncanull). Mais detalhes em Paginação.
Lista completa (array direto)
GET /v1/products/listall
Retorna um array com todos os produtos (sem envelope de paginação), cada item com o objeto
completo do produto (incluindo variants):
[
{
"id": "prd_01hqzvabc",
"name": "Plano Premium",
"slug": "plano-premium",
"salesPage": "https://example.com/sales",
"description": "Full access plan",
"language": "pt-BR",
"enabled": true,
"salesQty": 42,
"type": "digital",
"category": "saas",
"externalReference": null,
"warrantyDays": 7,
"images": ["https://example.com/img1.png"],
"imageAssetIds": null,
"createdAt": "2026-04-12T17:56:33.000Z",
"updatedAt": "2026-04-12T17:56:33.000Z",
"variants": [ /* ... */ ]
}
]
listallé sempre um array no nível raiz — não háoffset/limit/total/data. Use-o para popular seletores ou caches locais; para volumes grandes, prefira a lista paginada.
How is this guide?