Como funciona
- Crie o cliente com
POST /v2/customers, informando CPF ou CNPJ. - Crie a assinatura com
payment_method: "pix_automatic". Não há token de cartão. - Mostre
authorization.qr_codeao pagador. - O pagador autoriza o débito recorrente no app do banco.
- O banco do pagador debita cada ciclo. Acompanhe autorização, pagamentos, falhas e cancelamento pelos webhooks de assinatura.
Pré-requisitos
- Assinaturas precisam estar habilitadas na sua conta (
403se não estiverem), e o Pix Automático também (422se não estiver). Veja Erros. - O cliente precisa existir em
/v2/customerscom CPF ou CNPJ emdocument. Endereço e telefone são opcionais. currencyprecisa serBRL.
Criar assinatura sem período de teste
Semtrial_end, o mesmo QR code autoriza o débito recorrente e paga o primeiro ciclo.
201:
incomplete até o pagador autorizar e o primeiro débito ser pago. Nesse momento ela passa para active e você recebe subscription.started com previous_status: "incomplete". Este fluxo não envia subscription.created.
Criar assinatura com período de teste
Envietrial_end (ISO 8601, no futuro) e o QR code só autoriza o débito recorrente. Nada é cobrado antes do fim do teste.
O período de teste depende da configuração da sua conta. Quando não está disponível, a requisição retorna 422 com PIX_AUTOMATIC_TRIAL_NOT_SUPPORTED e nada é criado.
Onde o período de teste está disponível, envie também billing_day_of_month. O primeiro débito é agendado para a primeira ocorrência desse dia a partir da data do cadastro, e essa data precisa cair em trial_end ou depois e pelo menos 3 dias completos (72 horas) depois do momento do cadastro. Sem billing_day_of_month, o dia de cobrança é o dia do cadastro, então o primeiro débito cairia antes do fim do teste e a requisição é recusada. Quando as datas não se encaixam, a requisição retorna 422 com PIX_AUTHORIZATION_FAILED e um detail explicando o motivo.
Neste exemplo a assinatura é criada em 23 de setembro, com trial_end em 7 de outubro e billing_day_of_month: 10, então o primeiro débito fica agendado para 10 de outubro:
201:
trialing e você recebe subscription.created (com latest_transaction: null). Três dias antes de trial_end você recebe subscription.trial_will_end, se a assinatura já estiver trialing nesse momento. O primeiro débito depois do teste leva a assinatura para active e envia subscription.started.
Campos da requisição
Intervalos de cobrança
Qualquer outra combinação, ou uma que a sua conta não suporte, retorna
422 com PIX_AUTHORIZATION_FAILED e um detail dizendo que o intervalo não é suportado.
Exibir o QR code
O blocoauthorization traz o que o pagador precisa:
GET /v2/subscriptions/{id} só devolve authorization enquanto a autorização está pendente. Depois que o pagador aprova ou recusa, o bloco some.
Se o pagador nunca autorizar, o resultado depende da configuração da sua conta: a assinatura fica incomplete, ou é cancelada quando o código expira e você recebe subscription.canceled. Para parar de esperar, cancele você mesmo (veja Cancelamento).
recurringAuthorization.status diz em que ponto a autorização está: pending, approved, rejected, cancel_pending ou canceled. No GET por id, recurringAuthorization.lastDebit mostra a tentativa de débito mais recente.
O que armazenar
idda assinaturaiddo clientestatusatualauthorization.qr_code, enquanto a autorização está pendenterecurringAuthorization.statuslatest_transaction.iddos webhooks, quando existir
Status e webhooks
Ao tratar esses eventos:
- As cobranças do Pix Automático são informadas só por eventos
subscription.*. Você não recebe webhookstransaction.*para elas. latest_transaction.methodé"pix". O payload não diz qual meio de pagamento a assinatura usa, então identifique as assinaturas de Pix Automático peloidque você guardou, ou leiapaymentMethodcomGET /v2/subscriptions/{id}.failure_reasoné informativo. Não crie lógica sobre valores específicos.
Débitos com falha
O banco do pagador pode tentar um débito mais de uma vez. Essas tentativas intermediárias não geram eventos. Quando não restam tentativas, você recebesubscription.payment_failed com attempt_number e failure_reason.
- Se foi o primeiro débito de uma assinatura sem período de teste, a assinatura continua
incomplete. - Nos outros casos (o primeiro débito depois do teste, ou um ciclo seguinte), com
failure_policy: retry_then_cancela assinatura passa parapast_duee você recebesubscription.past_due. Num ciclo seguinte, um débito pago depois a devolve paraactivee enviasubscription.renewed. - Um débito com falha não cria transação nova. Em
subscription.payment_failedesubscription.past_due,latest_transactioné a transação mais recente da assinatura, normalmente a do ciclo pago anterior. retry_offsets_daysé aceito, mas não tem efeito: o intervalo entre tentativas segue as regras do Pix Automático e não é configurável.- Qualquer outro efeito de
failure_policyno Pix Automático depende da configuração da sua conta.subscription.canceledé a única confirmação de que a assinatura terminou.
Cancelamento
POST /v2/subscriptions/{id}/cancel funciona enquanto a assinatura está incomplete, trialing, active ou past_due. No Pix Automático o cancelamento é imediato: nunca fica para o fim do período, o status nunca passa por cancel_scheduled e o webhook é subscription.canceled, não subscription.updated.
A resposta vem em uma de duas formas, dependendo da configuração da sua conta:
- Já cancelada:
statusécancelederecurringAuthorization.statusécanceled. - Aguardando confirmação:
statusmantém o valor atual erecurringAuthorization.statusécancel_pending. A assinatura passa paracanceledquando o cancelamento é confirmado, e aí você recebesubscription.canceled.
subscription.canceled como a fonte da verdade.
Repetir a chamada numa assinatura canceled, ou com cancelamento aguardando confirmação, retorna 200 sem mudança. Duas chamadas simultâneas na mesma assinatura podem retornar 409 com SUBSCRIPTION_CANCEL_IN_PROGRESS; tente de novo depois de alguns instantes.
Limitações
- Troca de plano indisponível.
PATCH /v2/subscriptions/{id}comproduct_idretorna422e o plano não muda:PLAN_CHANGE_UNAVAILABLE_FOR_PAYMENT_METHODquando a assinatura está vinculada a um plano do catálogo, ouSUBSCRIPTION_HAS_NO_CATALOG_PLAN/PRODUCT_NOT_FOUNDquando não está. Para levar o pagador a outro plano, cancele a assinatura e crie uma nova, que exige nova autorização. - Intervalos de cobrança limitados à tabela em Campos da requisição.
- Período de teste depende da configuração da sua conta.
- Espaçamento das retentativas não é configurável:
retry_offsets_daysé ignorado. - A data do débito não é garantida. Acompanhe os webhooks em vez de esperar cobrança num dia fixo.
Erros
Quando o Pix Automático não está habilitado ou configurado, fale com o suporte para habilitá-lo na sua conta.
Sandbox
No sandbox (https://api.sandbox.pagou.ai) não existe banco do pagador do outro lado: ninguém escaneia o QR code e nada é debitado sozinho. Você faz o papel do banco do pagador com POST /v2/subscriptions/{id}/simulate. A assinatura muda exatamente como mudaria em produção, e você recebe os mesmos webhooks.
Crie o cliente e a assinatura como descrito acima, com o seu token de sandbox. Depois envie um evento por chamada:
200 com a assinatura atualizada, no mesmo formato de GET /v2/subscriptions/{id}.
Depois de
fail, com failure_policy: retry_then_cancel a assinatura passa a past_due e você recebe subscription.past_due; num ciclo seguinte, um pay a deixa active de novo com subscription.renewed. Com immediate_cancel ela passa a canceled e você recebe subscription.canceled. Com trial, um fail antes de o primeiro débito ser pago deixa a assinatura past_due e nenhum pay a recupera: cancele e crie outra para continuar testando.
O que saber sobre o sandbox:
- Uma chamada é um evento. Cada
paypaga um ciclo na hora, qualquer que seja o intervalo de cobrança. - A assinatura só muda quando você chama o endpoint. Não conte com eventos disparados por tempo, como
subscription.trial_will_end, no sandbox. - Um evento que não cabe na autorização ou no status atual responde
409comSUBSCRIPTION_SIMULATION_NOT_APPLICABLEe não muda nada: por exemplo,payantes deauthorize, ouauthorizeduas vezes. authorization.qr_codetem o formato do Pix, mas não cria uma autorização recorrente de verdade: não escaneie esse código com um app de banco, useauthorize.expires_aténulle a autorização nunca expira sozinha: userejectpara simular uma autorização recusada.- O sandbox aceita
trial_endsem conferir as datas combilling_day_of_month, e o 1º débito acontece quando você enviapay. Em produção, o período de teste depende da configuração da sua conta e as datas precisam se encaixar (veja Criar assinatura com período de teste). - Os intervalos de cobrança são
week×1emonth×1,6ou12.month×3é recusado, assim como um valor abaixo de100. - O cancelamento responde já
canceled. - Não use
PUT /v2/transactions/{id}numa cobrança do Pix Automático: ele muda a transação, mas não a assinatura. - Os valores de Pix da página Dados de teste (documentos e o valor
7300) não valem para o Pix Automático. - A rota só existe no sandbox. Em produção ela responde
404.

