VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa

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.

Pontos-chave
  • Exige o módulo recurring-payments ligado na loja. Desligado, as rotas respondem 403 com {"error":"module_disabled","module":"recurring-payments"}.
  • Ler exige manage_content ou view_content. Alterar exige manage_content.
  • Os itens são identificados por uma referência com prefixo, não pelo UUID puro: sub:<uuid> (assinatura), sch:<uuid> (compra programada nativa) e app:<número> (compra programada criada pelo app do cliente). Use sempre a referência devolvida pelas listagens.
  • Valores em dinheiro vêm em centavos (price_cents) e também formatados (price_formatted, R$ 49,90).
  • O lojista (seller) tem as próprias rotas, em /api/v1/vendor/recurring, restritas aos produtos dele. As deste grupo enxergam a loja inteira.

Como funciona

O ciclo de uma assinatura ou compra programada

Ativa→Pausada→Ativa
statusSignificado
activeVai ser cobrada na data de next_date.
pausedParada. Não é cobrada até ser retomada.
suspendedAs novas tentativas se esgotaram. Para de cobrar até um administrador pedir nova tentativa.
cancelledEncerrada. 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:

ChaveCiclo
semanal7 dias
quinzenal14 dias
mensal30 dias
bimestral60 dias
trimestral90 dias
quadrimestral120 dias
semestral180 dias
anual365 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 caminhoPara que serveAuthPágina
GET /api/v1/admin/recurring/dashboardIndicadores da lojaadminPainel
GET /api/v1/admin/recurring/subscriptionsLista assinaturasadminAssinaturas
GET /api/v1/admin/recurring/subscriptions/export.csvExporta assinaturas em CSVadminAssinaturas
GET /api/v1/admin/recurring/subscriptions/{id}Detalha uma assinaturaadminAssinaturas
POST /api/v1/admin/recurring/subscriptions/{id}/cancelCancelaadminAssinaturas
POST /api/v1/admin/recurring/subscriptions/{id}/pausePausaadminAssinaturas
POST /api/v1/admin/recurring/subscriptions/{id}/resumeRetomaadminAssinaturas
POST /api/v1/admin/recurring/subscriptions/{id}/retryPede nova tentativa de cobrançaadminAssinaturas
GET /api/v1/admin/recurring/scheduledLista compras programadasadminCompras programadas
GET /api/v1/admin/recurring/scheduled/upcomingEntregas dos próximos diasadminCompras programadas
GET /api/v1/admin/recurring/scheduled/{id}Detalha uma compra programadaadminCompras programadas
POST /api/v1/admin/recurring/scheduled/{id}/cancelCancelaadminCompras programadas
POST /api/v1/admin/recurring/scheduled/{id}/pausePausaadminCompras programadas
POST /api/v1/admin/recurring/scheduled/{id}/resumeRetomaadminCompras programadas
POST /api/v1/admin/recurring/scheduled/{id}/skipPula a próxima entregaadminCompras programadas
POST /api/v1/admin/recurring/scheduled/{id}/retryPede nova tentativa de cobrançaadminCompras programadas
GET /api/v1/admin/recurring/chargesLista tentativas de cobrançaadminCobranças
POST /api/v1/admin/recurring/charges/{id}/retryRefaz uma cobrança que falhouadminCobranças
POST /api/v1/admin/recurring/process-dueRoda o ciclo de cobrança agoraadminCobranças
GET /api/v1/admin/recurring/termsLista termosadminTermos
POST /api/v1/admin/recurring/termsCria um termoadminTermos
GET /api/v1/admin/recurring/terms/{id}Detalha um termoadminTermos
PUT /api/v1/admin/recurring/terms/{id}Publica nova versão de um termoadminTermos
GET /api/v1/admin/recurring/terms/acceptancesLista aceitesadminTermos
GET /api/v1/admin/recurring/sellers/{vendorId}Lê a regra do selleradminRegras de desconto
PUT /api/v1/admin/recurring/sellers/{vendorId}Grava a regra do selleradminRegras de desconto
PUT /api/v1/admin/recurring/categories/{id}Grava a regra da categoriaadminRegras de desconto
PUT /api/v1/admin/recurring/products/{id}Grava a regra do produtoadminRegras de desconto

Erros comuns

  1. 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 devolve 404 not found.
  2. Misturar os tipos. Uma referência sub: numa rota de compra programada (e o contrário) devolve 404.
  3. Agir no estado errado. Pausar uma pausada, retomar uma ativa ou mexer numa cancelada devolve 409 action not allowed in the current status.
  4. Pedir nova tentativa num item saudável. A nova tentativa só vale para item active ou suspended que já teve uma falha de cobrança (retry_count maior que zero); senão volta 409.
  5. Pular entrega de assinatura. Só compras programadas têm skip; numa assinatura a ação não existe.
  6. Esperar que cancelar estorne. Cancelar só impede cobranças futuras; não devolve nada já cobrado.
  7. Configurar produto como assinatura e compra programada ao mesmo tempo. A regra de desconto custom do produto é recusada com 422 mutually_exclusive se o produto já é assinatura.

Próximos passos

Painel
Indicadores de receita e churn.
Assinaturas
Listar, pausar, cancelar e recobrar.
Cobranças
Histórico e nova tentativa.
Regras de desconto
Cascata seller, categoria e produto.
Anterior
Sub-lojistas Braspag
Próxima
Painel de assinaturas
Nesta página
  • Como funciona
  • O ciclo de uma assinatura ou compra programada
  • Novas tentativas de cobrança
  • Frequências e descontos
  • Termos de aceite
  • Endpoints
  • Erros comuns
  • Próximos passos