Assinaturas e compras programadas
Como funcionam as cobranças recorrentes da loja, os ciclos de cobrança, as novas tentativas e as regras de desconto por frequência.
Algumas compras se repetem: o café que chega todo mês, a ração a cada 30 dias, o insumo toda semana. A plataforma tem dois modelos para isso, e estas rotas do administrador da loja cuidam dos dois:
- Assinatura (subscription): o cliente autoriza uma cobrança recorrente de um produto, a cada N dias, no cartão que deixou guardado. Cada ciclo é uma cobrança.
- Compra programada (scheduled purchase): o cliente agenda a reposição de um produto numa frequência (semanal, mensal...) e ganha um desconto por frequência. Cada data gera um pedido de verdade.
Uma rotina em segundo plano (o worker de ciclo) cobra o que venceu, cria os pedidos e tenta de novo quando a cobrança falha. Aqui você enxerga tudo, age sobre cada item e define as regras.
Como funciona
O ciclo de uma assinatura ou compra programada
status | Significado |
|---|---|
active | Vai ser cobrada na data de next_date. |
paused | Parada. Não é cobrada até ser retomada. |
suspended | As novas tentativas se esgotaram. Para de cobrar até um administrador pedir nova tentativa. |
cancelled | Encerrada. Estado final. |
Um item active com retry_count maior que zero teve uma cobrança que falhou e está em nova tentativa (inadimplente): ele continua active até as tentativas acabarem.
Novas tentativas de cobrança
Quando uma cobrança falha (cartão recusado, por exemplo), o item não é cancelado: o worker tenta de novo uma vez por dia, até o limite de tentativas da loja (3 por padrão, configurável de 1 a 10 no módulo). Esgotado o limite, o item vira suspended. Um administrador pode então pedir uma nova tentativa à mão, que dá exatamente mais uma chance (veja Assinaturas). Enquanto há falha, retry_count mostra quantas tentativas já falharam e last_charge_error traz o motivo.
Frequências e descontos
A compra programada tem um desconto por frequência. As frequências são fixas:
| Chave | Ciclo |
|---|---|
semanal | 7 dias |
quinzenal | 14 dias |
mensal | 30 dias |
bimestral | 60 dias |
trimestral | 90 dias |
quadrimestral | 120 dias |
semestral | 180 dias |
anual | 365 dias |
O desconto de cada chave é uma porcentagem inteira de 0 a 99. Quem decide o desconto é uma cascata: o que estiver configurado no produto vale primeiro, depois a categoria, depois o seller (veja Regras de desconto).
Termos de aceite
Para assinar, o cliente aceita um termo (texto legal). A plataforma guarda quem aceitou, qual versão, quando, de que IP e um resumo (hash) do texto aceito. Editar um termo cria uma nova versão; as aceitações antigas continuam apontando para a versão que o cliente de fato viu.
Endpoints
| Método e caminho | Para que serve | Auth | Página |
|---|---|---|---|
GET /api/v1/admin/recurring/dashboard | Indicadores da loja | admin | Painel |
GET /api/v1/admin/recurring/subscriptions | Lista assinaturas | admin | Assinaturas |
GET /api/v1/admin/recurring/subscriptions/export.csv | Exporta assinaturas em CSV | admin | Assinaturas |
GET /api/v1/admin/recurring/subscriptions/{id} | Detalha uma assinatura | admin | Assinaturas |
POST /api/v1/admin/recurring/subscriptions/{id}/cancel | Cancela | admin | Assinaturas |
POST /api/v1/admin/recurring/subscriptions/{id}/pause | Pausa | admin | Assinaturas |
POST /api/v1/admin/recurring/subscriptions/{id}/resume | Retoma | admin | Assinaturas |
POST /api/v1/admin/recurring/subscriptions/{id}/retry | Pede nova tentativa de cobrança | admin | Assinaturas |
GET /api/v1/admin/recurring/scheduled | Lista compras programadas | admin | Compras programadas |
GET /api/v1/admin/recurring/scheduled/upcoming | Entregas dos próximos dias | admin | Compras programadas |
GET /api/v1/admin/recurring/scheduled/{id} | Detalha uma compra programada | admin | Compras programadas |
POST /api/v1/admin/recurring/scheduled/{id}/cancel | Cancela | admin | Compras programadas |
POST /api/v1/admin/recurring/scheduled/{id}/pause | Pausa | admin | Compras programadas |
POST /api/v1/admin/recurring/scheduled/{id}/resume | Retoma | admin | Compras programadas |
POST /api/v1/admin/recurring/scheduled/{id}/skip | Pula a próxima entrega | admin | Compras programadas |
POST /api/v1/admin/recurring/scheduled/{id}/retry | Pede nova tentativa de cobrança | admin | Compras programadas |
GET /api/v1/admin/recurring/charges | Lista tentativas de cobrança | admin | Cobranças |
POST /api/v1/admin/recurring/charges/{id}/retry | Refaz uma cobrança que falhou | admin | Cobranças |
POST /api/v1/admin/recurring/process-due | Roda o ciclo de cobrança agora | admin | Cobranças |
GET /api/v1/admin/recurring/terms | Lista termos | admin | Termos |
POST /api/v1/admin/recurring/terms | Cria um termo | admin | Termos |
GET /api/v1/admin/recurring/terms/{id} | Detalha um termo | admin | Termos |
PUT /api/v1/admin/recurring/terms/{id} | Publica nova versão de um termo | admin | Termos |
GET /api/v1/admin/recurring/terms/acceptances | Lista aceites | admin | Termos |
GET /api/v1/admin/recurring/sellers/{vendorId} | Lê a regra do seller | admin | Regras de desconto |
PUT /api/v1/admin/recurring/sellers/{vendorId} | Grava a regra do seller | admin | Regras de desconto |
PUT /api/v1/admin/recurring/categories/{id} | Grava a regra da categoria | admin | Regras de desconto |
PUT /api/v1/admin/recurring/products/{id} | Grava a regra do produto | admin | Regras de desconto |
Erros comuns
- Usar o UUID puro no caminho. As rotas de assinatura e compra programada recebem a referência com prefixo (
sub:...,sch:...,app:...). Um UUID sem prefixo devolve404 not found. - Misturar os tipos. Uma referência
sub:numa rota de compra programada (e o contrário) devolve404. - Agir no estado errado. Pausar uma pausada, retomar uma ativa ou mexer numa cancelada devolve
409 action not allowed in the current status. - Pedir nova tentativa num item saudável. A nova tentativa só vale para item
activeoususpendedque já teve uma falha de cobrança (retry_countmaior que zero); senão volta409. - Pular entrega de assinatura. Só compras programadas têm
skip; numa assinatura a ação não existe. - Esperar que cancelar estorne. Cancelar só impede cobranças futuras; não devolve nada já cobrado.
- Configurar produto como assinatura e compra programada ao mesmo tempo. A regra de desconto
customdo produto é recusada com422 mutually_exclusivese o produto já é assinatura.