SelectwinSelectwin

Itens da Assinatura

Os itens são as linhas recorrentes de uma assinatura, cada uma referenciando uma variante (var_...). Você pode adicionar, listar, consultar, atualizar (quantidade) e remover itens. Os IDs de item usam o prefixo sit_ (também aceitamos o legado item_).

OperaçãoMétodoEndpointRetorna
AdicionarPOST/v1/subscriptions/{id}/itemsitem criado (201)
ListarGET/v1/subscriptions/{id}/itemslista paginada de itens
ConsultarGET/v1/subscriptions/{id}/items/{itemId}item
AtualizarPATCH/v1/subscriptions/{id}/items/{itemId}item
RemoverDELETE/v1/subscriptions/{id}/items/{itemId}confirmação de remoção

Adicionar item

POST /v1/subscriptions/{subscriptionId}/items

Shell
curl -X POST "https://api.selectwin.io/v1/subscriptions/subs_01hqzvabc/items" \
  -H "SelectKey: sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  -H "Content-Type: application/json" \
  -d '{
    "variantId": "var_abc123",
    "quantity": 1,
    "description": "Add-on de suporte",
    "externalReference": "line-2",
    "metadata": { "sku": "SKU-1" }
  }'
CampoTipoObrigatórioDescrição
variantIdstringSimID da variante recorrente (var_...; aceita prv_... legado)
quantityintegerNãoQuantidade (1–999999, default 1)
descriptionstringNãoAnotação (máx. 2048)
externalReferencestringNãoSua referência
metadataobjectNãoPares chave-valor

A resposta 201 Created retorna o item criado (não a assinatura inteira).


Listar itens

GET /v1/subscriptions/{subscriptionId}/items

JSON
{
  "offset": 0, "limit": 20, "total": 1, "hasMore": false,
  "page": { "current": 1, "total": 1, "offset": { "first": 0, "prev": null, "next": null, "last": 0 } },
  "data": [
    {
      "id": "sit_01hqzvabc",
      "name": "Premium Plan",
      "description": "Monthly access",
      "enabled": true,
      "pricingSchema": "recurring",
      "unitPrice": 9900,
      "quantity": 1,
      "currency": "BRL",
      "images": null,
      "metadata": null,
      "externalReference": "var-premium",
      "updatedAt": "2026-04-12T17:56:33.000Z",
      "createdAt": "2026-04-12T17:56:33.000Z"
    }
  ],
  "merchant": { "name": "Seller Name", "merchantId": "bus_1234567890", "isSubAccount": false },
  "_links": { "self": { "href": "https://api.selectwin.io/v1/subscriptions/subs_01hqzvabc/items", "method": "GET" } }
}

Consultar item

GET /v1/subscriptions/{subscriptionId}/items/{itemId} — retorna o objeto do item:

JSON
{
  "id": "sit_01hqzvabc",
  "name": "Premium Plan",
  "description": "Monthly access",
  "enabled": true,
  "pricingSchema": "recurring",
  "unitPrice": 9900,
  "quantity": 1,
  "currency": "BRL",
  "images": null,
  "metadata": null,
  "externalReference": "var-premium",
  "updatedAt": "2026-04-12T17:56:33.000Z",
  "createdAt": "2026-04-12T17:56:33.000Z",
  "merchant": { "name": "Seller Name", "merchantId": "bus_1234567890", "isSubAccount": false },
  "_links": { "self": { "href": "https://api.selectwin.io/v1/subscriptions/subs_01hqzvabc/items/sit_01hqzvabc", "method": "GET" } }
}

Atualizar item (quantidade)

PATCH /v1/subscriptions/{subscriptionId}/items/{itemId}

A atualização é apenas de quantidade (preço e agenda são snapshots imutáveis da variante). A próxima cobrança já sai com a quantidade nova — e o ajuste proporcional do resto do período em curso entra nela (ver Ajuste proporcional).

Shell
curl -X PATCH "https://api.selectwin.io/v1/subscriptions/subs_01hqzvabc/items/sit_01hqzvabc" \
  -H "SelectKey: sk_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ" \
  -H "Content-Type: application/json" \
  -d '{ "quantity": 2 }'
CampoTipoObrigatórioDescrição
quantityintegerSimNova quantidade (1–999999)

Retorna o objeto do item atualizado (200 OK).


Remover item

DELETE /v1/subscriptions/{subscriptionId}/items/{itemId}

Remove o item indicado. Retorna uma confirmação de remoção:

JSON
{ "id": "sit_01hqzvabc", "resource": "item", "deleted": true }

Ajuste proporcional

A assinatura é cobrada adiantada: cada cobrança paga o período que começa nela. Quando você muda a quantidade, adiciona ou remove um item no meio do período, o período em curso já foi pago na quantidade antiga — então a diferença do resto dele é calculada na hora da mudança e entra na próxima cobrança, junto com o período seguinte já na quantidade nova:

Texto
ajuste = (valor da linha na quantidade nova − na antiga) × (tempo que falta do período ÷ duração do período)
  • Aumento (mais unidades, item novo ou troca por um plano mais caro): o ajuste é somado à próxima cobrança. Ex.: plano de R$ 10 por unidade, de 2 para 4 unidades no meio do mês → a próxima cobrança é R$ 40 (4 unidades) + R$ 10 (2 unidades × meio período) = R$ 50.
  • Redução (menos unidades, item removido ou troca por um plano mais barato): o ajuste é um crédito abatido da próxima cobrança. Um crédito maior que a cobrança zera a cobrança e o que sobra fica para a seguinte — nunca vira dinheiro devolvido, nunca se perde.
  • Uma vez só. O ajuste é consumido quando a cobrança que o levou é aprovada. Uma cobrança recusada não consome: a retentativa leva o mesmo ajuste, e a cobrança seguinte à aprovada já não o traz. Duas mudanças simultâneas na mesma quantidade não geram dois ajustes.
  • Trocar de plano é adicionar o item novo e remover o antigo: o resultado é a diferença entre os dois, proporcional.
  • O cupom recorrente da assinatura não desconta o ajuste — ele corrige um período que já passou.
  • Só há ajuste em assinatura active, dentro do período em curso, e em linhas de preço unitário por quantidade (licensed). Em teste (trialing), em atraso (pastdue), não paga, pausada ou em linhas medidas por uso (metered) e escalonadas (tiered/package), a mudança vale a partir da próxima cobrança, sem ajuste.
  • O valor que a próxima cobrança vai levar, com o ajuste, aparece em expectedAmount do ciclo em aberto na lista de ciclos.

Erros

error.codeHTTPQuando
subscriptionNotFound404Assinatura inexistente
itemNotFound404Item inexistente
variantNotFound404Variante inexistente (ao adicionar)
variantNotRecurring422Variante não recorrente (ao adicionar)
subscriptionRequiresItem422Tentativa de remover o último item
subscriptionNotModifiable422A assinatura está cancelada

Atualizado em 17 de outubro de 2026

Preferências de cookies

Hoje o site usa só cookies essenciais: nenhuma ferramenta de medição ou de anúncios está ligada, e nada é compartilhado com terceiros. Se isso mudar, você decide aqui antes de qualquer coisa ser carregada.

  • Mantêm o site funcionando: segurança, a sua escolha sobre cookies e preferências como a versão da documentação. Não dependem de consentimento.

    Sempre ativos