Listar assinaturas
Retorna uma lista paginada das suas assinaturas, com filtros por status, cliente, referência externa e intervalo de datas. Use esta operação para painéis de cobrança recorrente, conciliação e acompanh
Retorna uma lista paginada das suas assinaturas, com filtros por status, cliente, referência externa e intervalo de datas. Use esta operação para painéis de cobrança recorrente, conciliação e acompanhamento de MRR e churn — sem precisar consultar uma a uma.
GET /v1/subscriptions
Como funciona
A listagem devolve um objeto paginado (não um array cru): no nível raiz vêm os metadados de paginação (offset, limit, total, hasMore, page), o array data, o objeto merchant e os links HATEOAS (_links). A estrutura de paginação é a mesma de todas as listas da API — veja Paginação.
Cada item de data é uma projeção leve (do inglês, um resumo): traz os campos de identificação e agenda de cobrança da assinatura, mas não os blocos pesados como customer completo, billing.address, items, splits, discount ou currentCycle. Para o objeto completo de uma assinatura, use Consultar.
Importante
A projeção da lista expõe a agenda de cobrança via frequency e frequencyCount (ex.: monthly + 1 = mensal). Ela não inclui amount nem as datas do ciclo vigente — esses campos vivem em currentCycle, que só aparece no objeto completo via Consultar.
Os filtros se combinam (lógica E): por exemplo, status=active junto com customerid=cus_01hqzvabc retorna apenas as assinaturas ativas daquele cliente. Filtros e paginação podem ser usados juntos na mesma requisição.
Quando usar
- Montar painéis e relatórios de cobrança recorrente (carteira de assinantes, inadimplência, churn).
- Reconciliar assinaturas do seu sistema com a Selectwin via
externalreference. - Listar todas as assinaturas de um cliente específico com
customerid. - Auditar criações/alterações dentro de um intervalo de datas.
Quando NÃO usar: não use a listagem em laço (polling) para detectar mudanças de status. Reaja aos webhooks subscription.* em tempo real — veja Proibição de Polling. Para o detalhe completo de uma assinatura conhecida, use Consultar, que é mais barato que filtrar a lista.
Requisição
Headers
| Cabeçalho | Obrigatório | Descrição |
|---|---|---|
SelectKey | Sim | Sua chave de API (sl_live_... em produção, sl_test_... em sandbox). Veja Autenticação. |
Esta é uma operação de leitura (GET), sem corpo — não precisa de Content-Type nem de X-Idempotency-Key.
Parâmetros de consulta (query)
Todos os parâmetros são opcionais. Os de paginação (limit, offset, sort) são comuns a todas as listas; os demais são filtros específicos de assinaturas.
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
limit | integer | 10 | Itens por página (faixa: 1–100). |
offset | integer | 0 | Quantidade de itens a pular (faixa: ≥ 0). |
sort | string | descending | Ordenação por data de criação. Enum: ascending, descending. |
status | string | — | Filtra por status. Enum: active, pending, trialing, paused, pastdue, unpaid, canceled. |
customerid | string | — | Filtra pelo ID do cliente (ex.: cus_01hqzvabc). |
externalreference | string | — | Filtra pela sua referência externa (ex.: SUB-1001). |
daterange | string | — | Filtra por um único dia de calendário; a API expande o valor para o início e o fim daquele dia. |
daterangegt | string | — | Limite inferior exclusivo: registros com data estritamente após o valor. |
daterangegte | string | — | Limite inferior inclusivo: registros com data igual ou após o valor. |
daterangelt | string | — | Limite superior exclusivo: registros com data estritamente antes do valor. |
daterangelte | string | — | Limite superior inclusivo: registros com data igual ou antes do valor. |
Nota
Os nomes dos filtros de data e de cliente são em minúsculas e sem separador (customerid, externalreference, daterangegte) — diferente do camelCase dos campos no corpo das respostas. Os valores de data seguem ISO 8601 em UTC (ex.: 2026-01-01T00:00:00Z). Para um período, combine um limite inferior (daterangegte) com um superior (daterangelte).
Exemplo curl
Listagem simples, 20 por página, mais recentes primeiro:
curl -X GET "https://api.selectwin.io/v1/subscriptions?limit=20&offset=0&sort=descending" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Filtrando por status e cliente, dentro de um intervalo de datas:
curl -X GET "https://api.selectwin.io/v1/subscriptions?status=active&customerid=cus_01hqzvabc&daterangegte=2026-04-01T00:00:00Z&daterangelte=2026-04-30T23:59:59Z" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Resposta 200 OK
{
"offset": 0,
"limit": 20,
"total": 50,
"page": {
"offset": { "first": 0, "prev": null, "next": 20, "last": 40 },
"current": 1,
"total": 3
},
"data": [
{
"id": "subs_01hqzvabc",
"customerId": "cus_01hqzvabc",
"name": "Plano Premium Mensal",
"status": "active",
"method": "credit",
"type": "prepaid",
"currency": "BRL",
"frequency": "monthly",
"frequencyCount": 1,
"freeTrialDays": 0,
"endDate": null,
"exactDay": null,
"manualBilling": false,
"externalReference": null,
"metadata": { "source": "website" },
"updatedAt": "2026-04-12T17:56:33.000Z",
"createdAt": "2026-04-12T17:56:33.000Z"
}
],
"hasMore": true,
"merchant": {
"name": "Seller Name",
"merchantId": "bus_1234567890",
"isSubAccount": false
},
"_links": {
"self": { "href": "https://api.selectwin.io/v1/subscriptions", "method": "GET", "description": "List all subscriptions." },
"create": { "href": "https://api.selectwin.io/v1/subscriptions", "method": "POST", "description": "Create a new subscription." }
}
}Campos de cada item de data
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID da assinatura (subs_...), opaco. |
customerId | string | ID do cliente associado (cus_...). |
name | string | Nome/rótulo da assinatura. |
status | string | Status atual (active, pending, trialing, paused, pastdue, unpaid, canceled). |
method | string | Método de pagamento das cobranças (ex.: credit, pix, billet). |
type | string | Tipo de cobrança da assinatura (ex.: prepaid). |
currency | string | Moeda ISO 4217 (BRL). |
frequency | string | Frequência do ciclo (ex.: monthly). |
frequencyCount | integer | Multiplicador da frequência (ex.: frequency=monthly + frequencyCount=3 = a cada 3 meses). |
freeTrialDays | integer | Dias de período de teste (trial) antes da primeira cobrança. |
endDate | string | null | Data de término da assinatura, se houver (null = sem fim definido). |
exactDay | integer | null | Dia fixo do mês para cobrança, se configurado. |
manualBilling | boolean | Se a cobrança de ciclos é disparada manualmente. |
externalReference | string | null | Sua referência externa, se enviada na criação. |
metadata | object | Metadados livres associados à assinatura. |
createdAt | string | Criação, ISO 8601 UTC. |
updatedAt | string | Última atualização, ISO 8601 UTC. |
Os campos pesados (
customercompleto,billing,items,splits,discount,callback,currentCycle) não vêm na lista. Para eles, consulte o objeto individual em Consultar.
Para o significado de offset, limit, total, hasMore e page.*, veja Paginação. Prefira navegar usando os valores de page.offset.next/prev em vez de calcular offsets na mão.
Erros
Tabela com os códigos transversais aplicáveis a esta operação de leitura. Trate sempre pelo error.code, nunca pela message — veja o Catálogo de Códigos de Erro e Tratamento de Erros.
error.code | HTTP | Quando ocorre |
|---|---|---|
invalidParameters | 400 | Parâmetro de consulta inválido (ex.: status fora do enum, limit acima de 100, data malformada). Detalhes em error.params. |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para listar assinaturas. |
notFound | 404 | Rota/recurso não encontrado. |
unprocessableEntity | 422 | Combinação de filtros não processável. |
tooManyRequests | 429 | Limite de requisições excedido; respeite error.retryAfterMinutes. Veja API Limits. |
serverError | 500 | Erro interno; repita com backoff. |
Atenção
Os filtros de assinatura não geram erros específicos do recurso (como billingNotAcceptedInStripeStrict) — esses pertencem à criação. Na listagem, um filtro inválido cai em invalidParameters (400).
Boas práticas
- Pagine com
page.offset.next. Use os valores retornados empage.offset.*para navegar; pare quandohasMoreforfalse(oupage.offset.nextfornull). - Filtre no servidor, não no cliente. Combine
status,customeride osdaterange*para reduzir o volume trafegado em vez de buscar tudo e filtrar localmente. - Use
daterangegte+daterangeltepara janelas (ex.: "criadas em abril"); reservedaterangepara um único dia. - Correlacione por
externalReference. Grave sua referência na criação e recupere a assinatura depois viaexternalreference— evita guardar osubs_...de cada uma. - Não use a lista como polling. Para reagir a
active,pastdue,canceled, etc., assine os webhookssubscription.*— veja Visão Geral e Proibição de Polling. - Trate IDs como opacos. Não faça parsing de
id/customerId; armazene a string inteira (veja Convenções). - Respeite os limites de taxa. Ao iterar muitas páginas, espace as requisições para não atingir o
429.
Veja também
- Visão Geral — modelo do objeto, status e ciclo de vida.
- Criar — cria uma nova assinatura (modelo Stripe-strict).
- Consultar — objeto completo de uma assinatura.
- Cancelar — encerra uma assinatura.
- Ciclos · Itens · Splits — sub-recursos.
- Paginação · Convenções · Códigos de Erro
How is this guide?