Skip to main content
No Pix Automático, o pagador autoriza o débito recorrente uma vez, no app do banco, lendo um QR code. A partir daí, o banco do pagador debita cada ciclo e a Pagou informa o resultado pelos webhooks de assinatura.

Como funciona

  1. Crie o cliente com POST /v2/customers, informando CPF ou CNPJ.
  2. Crie a assinatura com payment_method: "pix_automatic". Não há token de cartão.
  3. Mostre authorization.qr_code ao pagador.
  4. O pagador autoriza o débito recorrente no app do banco.
  5. O banco do pagador debita cada ciclo. Acompanhe autorização, pagamentos, falhas e cancelamento pelos webhooks de assinatura.
O que muda em relação à assinatura com cartão:

Pré-requisitos

  • Assinaturas precisam estar habilitadas na sua conta (403 se não estiverem), e o Pix Automático também (422 se não estiver). Veja Erros.
  • O cliente precisa existir em /v2/customers com CPF ou CNPJ em document. Endereço e telefone são opcionais.
  • currency precisa ser BRL.

Criar assinatura sem período de teste

Sem trial_end, o mesmo QR code autoriza o débito recorrente e paga o primeiro ciclo.
Resposta 201:
A assinatura fica 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

Envie trial_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:
Resposta 201:
Quando o pagador aprova a autorização, a assinatura passa para 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 bloco authorization 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

  • id da assinatura
  • id do cliente
  • status atual
  • authorization.qr_code, enquanto a autorização está pendente
  • recurringAuthorization.status
  • latest_transaction.id dos 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 webhooks transaction.* 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 pelo id que você guardou, ou leia paymentMethod com GET /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ê recebe subscription.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_cancel a assinatura passa para past_due e você recebe subscription.past_due. Num ciclo seguinte, um débito pago depois a devolve para active e envia subscription.renewed.
  • Um débito com falha não cria transação nova. Em subscription.payment_failed e subscription.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_policy no 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 é canceled e recurringAuthorization.status é canceled.
  • Aguardando confirmação: status mantém o valor atual e recurringAuthorization.status é cancel_pending. A assinatura passa para canceled quando o cancelamento é confirmado, e aí você recebe subscription.canceled.
Nos dois casos, trate 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} com product_id retorna 422 e o plano não muda: PLAN_CHANGE_UNAVAILABLE_FOR_PAYMENT_METHOD quando a assinatura está vinculada a um plano do catálogo, ou SUBSCRIPTION_HAS_NO_CATALOG_PLAN / PRODUCT_NOT_FOUND quando 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:
A resposta é 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 pay paga 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 409 com SUBSCRIPTION_SIMULATION_NOT_APPLICABLE e não muda nada: por exemplo, pay antes de authorize, ou authorize duas vezes.
  • authorization.qr_code tem 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, use authorize. expires_at é null e a autorização nunca expira sozinha: use reject para simular uma autorização recusada.
  • O sandbox aceita trial_end sem conferir as datas com billing_day_of_month, e o 1º débito acontece quando você envia pay. 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 × 1 e month × 1, 6 ou 12. month × 3 é recusado, assim como um valor abaixo de 100.
  • 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.

Leia a seguir