curl e Python porque são fáceis de ler; qualquer linguagem com HTTP e JSON serve. Todos os tipos e campos estão na referência do esquema.
1. Sincronizar as assinaturas com o seu warehouse
Objetivo: manter no BigQuery, Snowflake, Postgres ou numa planilha uma cópia das assinaturas que se atualiza sozinha, sem trazer tudo a cada vez. Como: a primeira execução traz tudo; as seguintes pedem só o que mudou desde a última, comupdatedAfter e ordenação por UPDATED_AT. Guarde a data da última execução e o endCursor para o caso de uma página falhar no meio.
- Peça
first: 100(o máximo) e não aninheordersdentro desubscriptions: 100 × 100 ultrapassa o teto de nós por request. Traga os pedidos numa segunda consulta (receita 2). updatedAtmuda com qualquer edição, cobrança, pausa ou cancelamento, então uma assinatura cancelada entra sozinha na próxima execução.- Com 2000 requests por minuto por chave, uma loja com 50.000 assinaturas sincroniza inteira em menos de um minuto; o ritmo é do seu warehouse, não da API.
2. Conciliar os pedidos do mês com a contabilidade
Objetivo: uma lista de todas as cobranças de assinatura do mês, com o número do pedido na Shopify e o ID do pagamento no Mercado Pago, para cruzar com a liquidação do MP.typedistingue a primeira cobrança (FIRST) das renovações (RENEWAL); o desconto de primeiro pedido vale só para a primeira.- Um pedido combinado (auto-merge) aparece uma vez por assinatura com o mesmo
shopifyOrderId: cada linha é uma cobrança do Mercado Pago, então a soma deamountbate com o cobrado mesmo que o pedido da Shopify seja um só. - Se a sua contabilidade precisa do imposto, cada assinatura traz
tax { amount rate title included }.
3. Um bot de suporte que pausa, pula e cancela
Objetivo: deixar a sua equipe de atendimento (ou um agente de IA) resolver «me pausa por um mês» ou «cancela a minha assinatura» pela própria ferramenta, com as mesmas regras do portal. Como: busque a assinatura pelo email, execute a mutation com umIdempotency-Key e mostre o userError como veio, se houver.
- Use como
Idempotency-Keyalgo que identifique a intenção (o ID do ticket mais a ação): se a sua ferramenta tentar de novo, a API devolve a mesma resposta sem pausar duas vezes. MIN_CYCLESquer dizer que o plano tem um compromisso mínimo que o cliente não cumpriu. É a mesma regra que ele vê no portal: decida no seu bot se o agente pode pulá-la comoverrideMinCycles: true(age como o lojista).- Para cancelar, peça ao agente um motivo da lista (
TOO_EXPENSIVE,DELIVERY_PROBLEMS…) e passe o texto livre emnote: ele aparece na análise de cancelamentos do dashboard. - O histórico da assinatura mostra «API (nome da chave)», então dê à chave o nome da ferramenta («Zendesk bot»).
3b. Um bot que monta o checkout pronto para o cliente
Objetivo: seu bot de vendas (WhatsApp, CRM) fecha a conversa com um link em que o cliente só revisa, informa o cartão e paga — produtos, quantidades e os dados dele já no lugar. Como: monte o link comcheckoutLinkCreate — uma linha por produto com seu planId (liste-os com plans) — passando os dados do cliente e a sua referência:
- A resposta traz a URL pronta para enviar e
expiresAt. A URL não leva nenhum dado pessoal — só um código opaco; os dados vivem no Reval, vencem em 30 dias e são apagados ao serem usados. - Os planos podem ter frequências diferentes: o cliente paga uma vez e cada frequência vira a sua própria assinatura.
- Quando o cliente completa a compra, o seu
externalRefaparece emSubscription.externalRefe comoexternal_refno webhooksubscription.created— é aí que o bot fecha o ciclo com a conversa dele. - O link é de uso único: para uma nova compra, gere outro. Um link sem
customernemexternalReftambém funciona e é permanente. - Os erros voltam por
userErrorsnomeando a linha (lines[1]: …): plano inativo (PLAN_UNAVAILABLE), bundle ou produto-caixa (REJECTED), input inválido (INVALID_INPUT). Um link morto nunca é gerado.
4. Alertas de cobranças recusadas no Slack (ou onde quiser)
Objetivo: saber na hora quando o Mercado Pago recusa uma renovação, com o motivo em palavras, para falar com o cliente antes de a assinatura ser cancelada. Como: um endpoint inscrito só emsubscription.payment_failed. O payload traz reason_text pronto para colar numa mensagem.
- Responda 200 antes de fazer qualquer coisa lenta; se o Slack demorar mais de 10 segundos, a Reval conta a tentativa como falha e tenta de novo.
- O Mercado Pago tenta a cobrança de novo por conta própria; se depois aprovar, você recebe
subscription.chargedpara a mesma assinatura. - Para ver o estado atual sem esperar o próximo evento, consulte
subscription(id) { lastPaymentFailedAt lastPaymentFailReason status }.
5. Webhooks no Zapier, Make ou n8n, sem escrever código
Objetivo: cada cancelamento adicionar uma linha no Google Sheets, ou cada nova assinatura criar um contato no seu CRM.- Na sua ferramenta, crie um trigger do tipo Webhook / Catch hook e copie a URL que ela dá (é
https, então a Reval aceita). - Em Reval → Integrações → Webhooks, adicione um endpoint com essa URL e marque só os eventos de que precisa (por exemplo
subscription.cancelled). - Clique em Enviar teste: a sua ferramenta recebe um evento
testcom o mesmo formato de um real, e com ele você mapeia os campos (data.customer_email,data.product_names,data.reason…). - Salve o fluxo. A partir daí, cada evento real o dispara.
- Essas ferramentas respondem 2xx na hora, que é o que a Reval espera. Não precisa verificar a assinatura para começar; se quiser, Make e n8n têm passos de HMAC com os quais você replica a verificação.
- Use
data.subscription_idcomo chave na sua planilha ou CRM para não duplicar linhas quando a Reval tenta uma entrega de novo.
6. Email de retenção com link direto para o portal
Objetivo: mandar a um cliente que cancelou (ou que teve uma cobrança recusada) um email com um botão que abre a assinatura dele no portal, já autenticado, para reativar ou trocar o cartão.- O link é assinado e expira: gere-o na hora de enviar o email, não o guarde.
- Trate-o como uma credencial: quem o tiver entra no portal desse cliente. Não o envie por canais onde possa ficar exposto.
- Se você usa o Klaviyo, os eventos que a Reval envia já incluem
portal_subscription_url, que abre a assinatura no portal com o login normal do cliente;subscriptionPortalLinké para quando você precisa do acesso direto a partir de outra ferramenta.