Cobranças recorrentes
Lista as tentativas de cobrança de assinaturas e compras programadas, refaz uma que falhou e roda o ciclo de cobrança sob demanda.
Cada vez que a plataforma tenta cobrar um ciclo, ela registra uma tentativa de cobrança: quanto, de quem, se foi paga ou falhou e por quê. Estas rotas mostram esse histórico e deixam você refazer uma cobrança que falhou ou disparar o ciclo à mão. Exigem o módulo recurring-payments; ler exige manage_content ou view_content e agir exige manage_content.
Listar cobranças
Devolve as tentativas, das mais novas para as mais antigas, com paginação.
/api/v1/admin/recurring/chargesAdminLista as tentativas de cobrança recorrente
Parâmetros de consulta
statusstringpaidcapturedfailedpendingpaid é o status de assinatura e captured o de compra programada.refstringsub:..., sch:..., app:...).product_iduuidcustomer_iduuidqstringdate_fromstringYYYY-MM-DD.date_tostringYYYY-MM-DD.pageintegerpadrão: 1per_pageintegerpadrão: 25Exemplo de requisição
curl "$BASE_URL/api/v1/admin/recurring/charges?status=failed&per_page=25" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"items": [
{
"id": "hist:7c1d9e22-5b3a-4f68-8a10-2d4e6a3c1b99",
"ref": "sub:5f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10",
"kind": "subscription",
"customer_name": "Maria Souza",
"product_name": "Café Especial 500g",
"amount_cents": 4200,
"amount_formatted": "R$ 42,00",
"status": "failed",
"billing_date": "2026-10-20",
"attempt": 2,
"error": "card_declined",
"gateway_charge_id": "ch_Z1dxXYKcNWcnw547",
"gateway_order_id": "or_zOoLYy3HZf58m1Rj",
"created_at": "2026-10-21T05:00:07Z",
"can_retry": true
}
],
"pagination": { "page": 1, "per_page": 25, "total": 1, "total_pages": 1 }
}Campos da resposta
itemsarraypaginationobjectpage, per_page, total e total_pages.idstringhist: (assinatura) ou spc: (compra programada). É o que a nova tentativa recebe.refstringsub:..., sch:..., app:...).kindstringsubscriptionscheduledcustomer_namestringproduct_namestringamount_centsintegeramount_formattedstringR$ 42,00).statusstringpaidcapturedfailedpendingpaid e captured são dinheiro recebido.billing_datestringYYYY-MM-DD.attemptintegererrorstringorder_numberstringorder_iduuidgateway_charge_idstringch_...). Ausente quando a tentativa nem chegou ao gateway.gateway_order_idstringor_...).created_atstringcan_retrybooleantrue quando dá para refazer esta cobrança.Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token | {"error":"missing authorization header"} |
| 403 | Sem privilégio ou módulo desligado | {"error":"module_disabled","module":"recurring-payments"} |
| 500 | Falha de consulta | {"error":"failed to load recurring data"} |
Refazer uma cobrança que falhou
Reenfileira o item cobrado e roda o ciclo uma vez. Atenção ao que não acontece: a tentativa antiga não é reexecutada. O ciclo faz uma tentativa nova, com o número seguinte, e a antiga continua no histórico como failed. A tentativa informada precisa estar com status failed.
/api/v1/admin/recurring/charges/{id}/retryAdminRefaz uma cobrança recorrente que falhou
Parâmetros de caminho
idstringobrigatóriohist:<uuid> (assinatura) ou spc:<número> (compra programada).Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/recurring/charges/hist:7c1d9e22-5b3a-4f68-8a10-2d4e6a3c1b99/retry" \
-H "Authorization: Bearer $TOKEN"Resposta
{ "ok": true, "queued": true }Campos da resposta
okbooleantrue quando o pedido foi aceito.queuedbooleantrue: o item foi reenfileirado. O resultado da cobrança aparece depois na listagem, como uma tentativa nova.Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Referência sem prefixo hist: ou spc:, ou com sufixo inválido | {"error":"invalid reference"} |
| 404 | A tentativa não existe | {"error":"not found"} |
| 409 | A tentativa não está failed, ou o item não tem falha para recobrar | {"error":"action not allowed in the current status"} |
Rodar o ciclo de cobrança agora
Executa uma passada do mesmo processo automático que cobra o que venceu, só para esta loja. É seguro apertar duas vezes ou sobrepor ao agendamento: o ciclo usa travas por tentativa e no máximo uma nova tentativa por dia para itens com falha, então um ciclo nunca é cobrado em dobro.
/api/v1/admin/recurring/process-dueAdminRoda o ciclo de cobrança recorrente agora
Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/recurring/process-due" \
-H "Authorization: Bearer $TOKEN"Resposta
{ "ok": true }A resposta só confirma que a passada rodou. O resultado de cada cobrança aparece na listagem. A rota registra a ação no histórico de atividade da loja.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 503 | O processo de cobrança não está disponível neste servidor | {"error":"cycle worker unavailable"} |
| 500 | Falha na passada | {"error":"failed to process"} |