Assinaturas e compras agendadas
Consulta se um produto pode ser assinado, cria uma assinatura ou compra agendada, lista e cancela as do cliente.
Dois tipos de compra recorrente, os mesmos da loja online (a mini-loja é só outra porta para o mesmo módulo, então o que nasce no WhatsApp aparece em "Minhas assinaturas" no site e o contrário também):
kind | O que é |
|---|---|
subscription (assinatura) | Cobra e entrega sozinha a cada ciclo, com o desconto da assinatura. |
scheduled (compra agendada) | Só a entrega programada a cada ciclo. |
O ciclo é um número de dias (cycle_days) entre os que a loja oferece para o produto: semanal (7), quinzenal (14), mensal (30), bimestral (60), trimestral (90), quadrimestral (120), semestral (180) e anual (365). O preço nunca vem do cliente: o servidor calcula o preço com o desconto da assinatura.
Tudo isso depende do módulo de pagamentos recorrentes estar ligado na loja. Desligado, as leituras respondem 200 com enabled: false e as escritas respondem 403 module_disabled.
Ver se o produto pode ser assinado
/api/v1/storefront/wa-coex/recurring/{token}/product/{productID}PúblicaCiclos e descontos de assinatura de um produto
É o que a ficha do produto lê para decidir se mostra "Assine e economize".
Parâmetros de caminho
tokenstringobrigatórioproductIDuuidobrigatórioResposta
{
"enabled": true,
"plan": {
"options": [
{ "cycle_days": 15, "frequency": "quinzenal", "discount_percent": 5 },
{ "cycle_days": 30, "frequency": "mensal", "discount_percent": 10 }
]
}
}{ "enabled": false }Campos da resposta
enabledbooleanfalse quando o módulo está desligado, o produto não está à venda neste canal ou ele não pode ser assinado.planobjectPresente quando enabled é true.
optionsarraycycle_days, frequency (o nome do ciclo, como mensal) e discount_percent (desconto da assinatura, omitido quando não há).Um produto sem tabela de desconto, mas assinável, devolve um único ciclo mensal sem desconto.
Listar as do cliente
/api/v1/storefront/wa-coex/recurring/{token}PúblicaAssinaturas e compras agendadas do cliente
Parâmetros de caminho
tokenstringobrigatórioResposta
{
"enabled": true,
"items": [
{
"id": "7d1f2a60-5c1e-4f51-b6b2-6d2c3a1e9f20",
"kind": "subscription",
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"product_name": "Café Especial 500g",
"image_url": "/uploads/exemplo/cafe.png",
"status": "active",
"cycle_days": 30,
"price_cents": 4590,
"next_at_unix": 1794336000
}
]
}{ "enabled": true, "account_required": true, "items": [] }Campos da resposta
enabledbooleanfalse e items: [].account_requiredbooleantrue) quando o módulo está ligado mas o token não tem conta identificada. Sem conta não há assinatura.itemsarrayAssinaturas e compras agendadas.
idstringkindstringsubscriptionscheduledproduct_iduuidproduct_name e image_url vêm do catálogo.statusstringcycle_daysintegerprice_centsintegernext_at_unixintegerCriar uma assinatura ou compra agendada
/api/v1/storefront/wa-coex/recurring/{token}PúblicaCria uma assinatura ou uma compra agendada para um produto
Exige cliente com conta identificada e o módulo ligado. O produto precisa estar à venda no canal e ser assinável.
Parâmetros de caminho
tokenstringobrigatórioCorpo da requisição
product_iduuidobrigatóriokindstringpadrão: scheduledsubscriptionscheduledsubscription cria assinatura. Qualquer outro valor (inclusive ausente) cria compra agendada.cycle_daysintegerplan.options. Ausente usa o ciclo mais curto. Valor que a loja não oferece é recusado.O corpo aceita no máximo 4 KB.
Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/wa-coex/recurring/$TOKEN" \
-H "Content-Type: application/json" \
-d '{"kind":"subscription","product_id":"c3f92551-9dda-4fc7-b518-353d1c4e4035","cycle_days":30}'Resposta
{ "created": true }A resposta não devolve o item. Releia a lista para obter o id.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo ilegível, maior que 4 KB ou sem product_id. | {"error":"invalid_body"} |
| 403 | O módulo de pagamentos recorrentes está desligado na loja. | {"error":"module_disabled","module":"recurring-payments"} |
| 404 | A loja não tem o módulo ligado (detectado pelo token). | {"error":"recurring_disabled"} |
| 404 | O produto não está à venda no canal. | {"error":"product_not_found","message":"Produto indisponível"} |
| 200 | O token não tem conta identificada. Nada é criado. | {"enabled":true,"account_required":true,"items":[]} |
| 422 | O produto não pode ser assinado. | {"error":"not_subscribable"} |
| 422 | cycle_days que a loja não oferece para o produto. | {"error":"invalid_cycle"} |
| 503 | Falha ao criar. | {"error":"recurring_unavailable"} |
Cancelar
/api/v1/storefront/wa-coex/recurring/{token}/{kind}/{id}/cancelPúblicaCancela uma assinatura ou compra agendada do cliente
Cancela o item do cliente. O servidor confere que o id é mesmo do cliente antes de cancelar: id de outra pessoa responde 404 not_found, igual a um id que não existe.
Parâmetros de caminho
tokenstringobrigatóriokindstringobrigatóriosubscriptionscheduledkind da listagem.idstringobrigatórioid do item.Corpo da requisição
reasonstringResposta
{ "cancelled": true }Erros
| Status | Quando | Corpo |
|---|---|---|
| 403 | O módulo de pagamentos recorrentes está desligado na loja. | {"error":"module_disabled","module":"recurring-payments"} |
| 404 | O módulo está desligado (detectado pelo token). | {"error":"recurring_disabled"} |
| 404 | O item não existe ou não é do cliente. | {"error":"not_found"} |
| 200 | O token não tem conta identificada. | {"enabled":true,"account_required":true,"items":[]} |
| 503 | Falha ao cancelar. | {"error":"recurring_unavailable"} |