Skip to main content

Visão Geral

O Pix Recorrente permite que você configure cobranças periódicas automáticas usando Pix como meio de pagamento. Seus clientes autorizam a recorrência uma única vez e os pagamentos subsequentes são processados automaticamente.

Autorização Única

Cliente autoriza uma vez via QR Code

Cobranças Automáticas

Pagamentos processados automaticamente

Gestão Simplificada

Sem necessidade de novo QR Code a cada cobrança

Benefícios

  • Redução de inadimplência - Cobranças automáticas sem ação do cliente
  • Melhor experiência - Cliente autoriza apenas uma vez
  • Flexibilidade - Suporte para trial, cobranças mensais, anuais, etc.
  • Menor custo - Taxas Pix geralmente menores que cartão de crédito

Como Funciona

Fluxo de Autorização Inicial:
  1. Você cria uma assinatura via API com payment_method: pix_recurring
  2. API retorna um QR Code Pix para autorização
  3. Cliente escaneia o QR Code com app bancário
  4. Cliente autoriza a recorrência (e paga primeira cobrança se sem trial)
  5. Sistema processa e armazena token de recorrência
  6. Pronto! Cobranças futuras serão automáticas
Fluxo de Cobranças Recorrentes:
  1. Sistema agenda cobrança 3 dias antes da data
  2. Sistema processa a cobrança 2 dias antes da data
  3. Gateway processa cobrança na data agendada
  4. Webhook notifica sucesso ou falha da cobrança
A Autorizou gerencia automaticamente todo o ciclo de vida das cobranças: agendamento, processamento, retentativas e notificações via webhook.

Jornadas de Pagamento

O Pix Recorrente suporta duas jornadas distintas:

Journey 2 (J2) - Com Período de Trial

Para assinaturas que oferecem período de teste gratuito:
1

Criar assinatura com trial_days

Configure trial_days no endpoint de criação de assinatura
2

Cliente autoriza recorrência

Cliente escaneia QR Code - sem pagamento imediato
3

Período de trial inicia

Assinatura muda para status TRIAL_STARTED automaticamente
4

Primeira cobrança ao fim do trial

Sistema processa primeiro pagamento após trial_days
5

Cobranças periódicas

Pagamentos subsequentes processados automaticamente
Exemplo: Assinatura com 7 dias de trial
Dia 0: Cliente autoriza (sem pagar) → TRIAL_STARTED
Dia 7: Primeira cobrança automática → PAYMENT_APPROVED
Dia 37: Segunda cobrança (mensal) → PAYMENT_APPROVED
...

Journey 3 (J3) - Sem Trial (Pagamento Imediato)

Para assinaturas que cobram imediatamente:
1

Criar assinatura sem trial_days

Configure trial_days como 0
2

Cliente autoriza e paga

Cliente escaneia QR Code - pagamento imediato
3

Primeira cobrança confirmada

Assinatura muda para PAYMENT_APPROVED após webhook
4

Cobranças periódicas

Pagamentos subsequentes processados automaticamente
Exemplo: Assinatura mensal sem trial
Dia 0: Cliente paga primeira cobrança → PAYMENT_APPROVED
Dia 30: Segunda cobrança automática → PAYMENT_APPROVED
Dia 60: Terceira cobrança automática → PAYMENT_APPROVED
...

Status do Ciclo de Vida

Status da Subscription

StatusSignificadoQuando Ocorre
PAYMENT_PENDINGAguardando autorização do clienteApós criação, antes do cliente escanear QR Code
TRIAL_STARTEDPeríodo de trial ativoApós autorização em J2 (com trial)
PAYMENT_APPROVEDAssinatura ativa e em diaApós confirmação de pagamento
PAYMENT_REFUSEDÚltima cobrança falhouApós falha em cobrança recorrente
TRIAL_ENDEDTrial finalizadoAo fim do período de trial
CANCELEDAssinatura canceladaApós chamada ao endpoint de cancelamento

Status do Payment

StatusSignificadoQuando Ocorre
SCHEDULEDPagamento agendado, ainda não enviadoCriado pelo sistema inicialmente na J2 e 3 dias antes da cobrança na J3
WAITING_PAYMENTAguardando confirmação do gatewayApós envio para gateway (2 dias antes) ou QR Code J3
AUTHORIZEDPagamento confirmado e concluídoApós confirmação via webhook
REFUSEDPagamento recusadoApós falha na cobrança

Fluxo de Status - Journey 2 (Com Trial)

Pagamentos J2:
Payment #1: SCHEDULED → WAITING_PAYMENT → AUTHORIZED
Payment #2: SCHEDULED → WAITING_PAYMENT → AUTHORIZED
...

Fluxo de Status - Journey 3 (Sem Trial)

Pagamentos J3:
Payment #1: WAITING_PAYMENT → AUTHORIZED
Payment #2: SCHEDULED → WAITING_PAYMENT → AUTHORIZED
...

Criando Assinatura com Pix Recorrente

Endpoint

POST /api/v1/subscriptions

Parâmetros Principais

mcc
string
required
Merchant Category Code - Código de categoria do estabelecimento
code
string
required
Código identificador único da assinatura (gerado pelo seu sistema)
description
string
Descrição da assinatura
notification_url
string
URL para recebimento de webhooks
plan_id
string
ID do plano (opcional - use null se não usar planos)
interval
string
required
Intervalo de cobrançaValores: weekly, monthly, yearlyNota: Autorizou suporta apenas esses três intervalos. Não há suporte para interval_count ou intervalos customizados.
trial_days
integer
default:0
Dias de trial gratuito (0 = sem trial, J3)Journey 2: trial_days > 0Journey 3: trial_days = 0
customer
object
required
Objeto com dados do cliente
payment
object
required
Objeto com dados do pagamento

Exemplo: Assinatura Mensal com 7 dias de Trial (J2)

cURL
curl --request POST \
  --url https://zeus-sandbox.autorizou.dev/api/v1/subscriptions \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "mcc": "5734",
    "code": "PIX_AUTO_J2_20251114_001",
    "description": "Plano Pro - Mensal com Trial",
    "notification_url": "https://seu-webhook.com/autorizou/notifications",
    "plan_id": null,
    "interval": "monthly",
    "trial_days": 7,
    "customer": {
      "id": "123e4567-e89b-12d3-a456-426614174000"
    },
    "payment": {
      "amount": 0,
      "currency": "BRL",
      "payment_method": "pix_recurring",
      "installments": 1,
      "pix_recurring": {
        "recurring_statement": "Plano Pro",
        "recurring_amount": 4990,
        "starts_at": "2025-11-21",
        "ends_at": null,
        "retry_policy": true
      }
    }
  }'

Exemplo: Assinatura Mensal sem Trial (J3)

cURL
curl --request POST \
  --url https://zeus-sandbox.autorizou.dev/api/v1/subscriptions \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "mcc": "5734",
    "code": "PIX_AUTO_J3_20251114_001",
    "description": "Plano Pro - Mensal",
    "notification_url": "https://seu-webhook.com/autorizou/notifications",
    "plan_id": null,
    "interval": "monthly",
    "trial_days": 0,
    "customer": {
      "id": "123e4567-e89b-12d3-a456-426614174000"
    },
    "payment": {
      "amount": 4990,
      "currency": "BRL",
      "payment_method": "pix_recurring",
      "installments": 1,
      "pix_recurring": {
        "recurring_statement": "Plano Pro",
        "recurring_amount": 4990,
        "starts_at": "2025-12-14",
        "ends_at": null,
        "retry_policy": true
      }
    }
  }'
Resposta J2 (Com Trial):
{
  "id": "7de7f055-47db-4249-ae09-d23a0e7475ad",
  "hash": null,
  "status": "payment_pending",
  "plan_id": null,
  "interval": "monthly",
  "next_charge_amount": 2990,
  "installments": 1,
  "next_charge_at": "2025-11-21 00:00:00",
  "start_at": "2025-11-14",
  "end_at": null,
  "trial_days": 7,
  "current_cycle": 0,
  "payment": {
    "id": "7de7f055-47db-4249-ae09-d23a0e7475ad",
    "status": "scheduled",
    "payment_method": "pix_recurring",
    "amount": 0,
    "currency": "BRL",
    "description": "PIX Automático - Journey 2 (Trial)",
    "metadata": {
      "action": {
        "paymentMethodType": "pix",
        "type": "qrCode",
        "qrCodeData": "00020126180014br.gov.bcb.pix..."
      }
    },
    "pix_recurring": {
      "qr_code": "00020126180014br.gov.bcb.pix5204000053039865802BR...",
      "expires_at": null,
      "charge_code": null,
      "recurring_statement": "Assinatura Premium",
      "starts_at": "2025-11-14",
      "ends_at": null,
      "retry_policy": true,
      "recurring_amount": 2990,
      "acquirer_reference": "Q966DNR2M6ZDKQV5"
    },
    "created_at": "2025-11-14 09:29:29"
  },
  "fee": {
    "fixed_fee_amount": 100,
    "platform_fee_percentage": 2.99,
    "platform_fee_amount": 0
  },
  "customer": {
    "id": "ae03951a-c789-45f5-8fb0-77b35639785e",
    "name": "teste pix",
    "email": "testepix1@autorizou.com.br"
  }
}
Resposta J3 (Sem Trial):
{
  "id": "ae8ca40e-e4b2-441b-838b-df71369fd8ba",
  "hash": null,
  "status": "payment_pending",
  "plan_id": null,
  "interval": "monthly",
  "next_charge_amount": 2890,
  "installments": 1,
  "next_charge_at": "2025-12-14 00:00:00",
  "start_at": "2025-11-14",
  "end_at": null,
  "trial_days": 0,
  "current_cycle": 1,
  "payment": {
    "id": "ae8ca40e-e4b2-441b-838b-df71369fd8ba",
    "status": "waiting_payment",
    "payment_method": "pix_recurring",
    "amount": 2890,
    "currency": "BRL",
    "description": "PIX Automático - Journey 3 (Pagamento Imediato)",
    "metadata": {
      "action": {
        "paymentMethodType": "pix",
        "type": "qrCode",
        "qrCodeData": "00020101021226970014br.gov.bcb.pix..."
      }
    },
    "pix_recurring": {
      "qr_code": "00020101021226970014br.gov.bcb.pix2575pix-qrcode.gateway.com/location/...",
      "expires_at": null,
      "charge_code": null,
      "recurring_statement": "Assinatura Premium",
      "starts_at": "2025-11-14",
      "ends_at": null,
      "retry_policy": true,
      "recurring_amount": 2890,
      "acquirer_reference": "BLML9LR2M6ZDKQV5"
    },
    "created_at": "2025-11-14 09:25:12"
  },
  "fee": {
    "fixed_fee_amount": 100,
    "platform_fee_percentage": 2.99,
    "platform_fee_amount": 87
  },
  "customer": {
    "id": "ae03951a-c789-45f5-8fb0-77b35639785e",
    "name": "teste pix",
    "email": "testepix1@autorizou.com.br"
  }
}
QR Code: O QR Code para autorização inicial está disponível em payment.pix_recurring.qr_code. Cliente deve escanear para autorizar a recorrência.

Diferenças entre J2 e J3

CampoJourney 2 (Trial)Journey 3 (Sem Trial)
trial_days7 (ou > 0)0
current_cycle01
payment.statusscheduledwaiting_payment
payment.amount02890 (valor real)
fee.platform_fee_amount0 (sem cobrança no trial)87 (taxa sobre valor)
Campos importantes da resposta:
  • id - ID da assinatura (UUID)
  • status - Status atual (payment_pending, trial_started, payment_approved, etc.)
  • trial_days - Dias de trial (0 = J3, >0 = J2)
  • current_cycle - Ciclo atual (0 = ainda não cobrou, 1+ = já cobrou)
  • next_charge_at - Data/hora da próxima cobrança
  • payment.status - scheduled (J2) ou waiting_payment (J3)
  • payment.amount - 0 (J2) ou valor real (J3)
  • payment.pix_recurring.qr_code - QR Code para o cliente escanear
  • payment.pix_recurring.charge_code - Token de recorrência (preenchido após autorização)
  • payment.pix_recurring.acquirer_reference - Referência do gateway de pagamento
  • fee - Informações de taxas da plataforma

Timing de Processamento

A Autorizou processa cobranças Pix Recorrente seguindo janelas específicas para garantir conformidade com requisitos do gateway de pagamento:

Constantes de Timing

DAYS_BEFORE_TO_CREATE_SCHEDULED = 3 dias
DAYS_BEFORE_TO_PROCESS = 2 dias
MIN_DAYS_BEFORE_DUE = 2 dias
MAX_DAYS_BEFORE_DUE = 10 dias

Linha do Tempo de Processamento

Exemplo para cobrança agendada para 10 de Novembro:
┌────────────────┬──────────────────────────────────────────────────────┐
│ Data           │ Evento                                               │
├────────────────┼──────────────────────────────────────────────────────┤
│ 07 Nov (D-3)   │ Sistema agenda Payment com status SCHEDULED         │
│ 08 Nov (D-2)   │ Sistema processa e envia → WAITING_PAYMENT          │
│ 10 Nov (D-Day) │ Gateway processa cobrança → AUTHORIZED              │
└────────────────┴──────────────────────────────────────────────────────┘

Processamento Automatizado

A Autorizou executa três processos automatizados diariamente:
Responsabilidade: Criar pagamentos SCHEDULED 3 dias antes da cobrançaO que faz:
  • Busca assinaturas com next_charge_at em 3 dias
  • Verifica se já existe payment SCHEDULED para aquela data
  • Se não existe, cria novo payment com status SCHEDULED
  • Se já existe, não faz nada (rede de segurança)
Responsabilidade: Enviar payments SCHEDULED para gateway 2 dias antesO que faz:
  • Busca payments com status SCHEDULED e billing_date em 2 dias
  • Valida que subscription ainda está ativa
  • Muda status: SCHEDULEDWAITING_PAYMENT
  • Envia requisição para o gateway de pagamento
  • Aguarda confirmação via webhook
Responsabilidade: Retentar payments com status REFUSEDO que faz:
  • Busca payments REFUSED de Pix Recorrente
  • Verifica se retry_attempts < 3
  • Cria novo payment SCHEDULED com nova data
  • Aguarda processamento pelos outros processos automatizados
  • Máximo de 3 tentativas em 7 dias

Webhooks

A Autorizou envia webhooks para notificar eventos importantes do ciclo de vida das assinaturas:

Eventos de Subscription

EventoQuando OcorreDados Incluídos
subscription.createdAssinatura criadasubscription completa
subscription.updatedAssinatura atualizadasubscription + campos alterados
subscription.inactivatedAssinatura inativadasubscription + motivo
subscription.deletedAssinatura deletadasubscription + deleted_at

Eventos de Payment

EventoQuando OcorreDados Incluídos
payment.scheduledPayment agendadopayment + scheduled_for
payment.authorizedPagamento confirmadopayment + paid_at
payment.refusedPagamento recusadopayment + refusal_reason
payment.retry_scheduledRetry agendado após falhapayment + retry_attempt

Exemplo de Payload

{
  "event": "subscription.updated",
  "timestamp": "2025-11-13T10:00:00Z",
  "data": {
    "subscription": {
      "id": "sub_abc123",
      "status": "payment_approved",
      "interval": "monthly",
      "next_charge_amount": 4990,
      "next_charge_at": "2025-12-13T00:00:00Z"
    }
  }
}
Para configurar e testar webhooks, consulte a documentação completa de webhooks.

Gerenciando Assinaturas

Cancelar Assinatura

Para cancelar uma assinatura ativa: Endpoint: POST /api/v1/subscriptions/cancel
cURL
curl --request POST \
  --url https://zeus-sandbox.autorizou.dev/api/v1/subscriptions/cancel \
  --header 'Authorization: Bearer SEU_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "subscription_id": "sub_abc123"
  }'
Comportamento:
  • Define canceled_at com timestamp atual
  • Interrompe processamento de cobranças futuras
  • Payments SCHEDULED não são mais processados
  • Envia webhook subscription.deleted
Cancelamento é irreversível. Cliente precisará criar nova assinatura para reativar.

Consultar Assinatura

Endpoint: GET /api/v1/subscriptions/{subscription_id}
cURL
curl --request GET \
  --url https://zeus-sandbox.autorizou.dev/api/v1/subscriptions/sub_abc123 \
  --header 'Authorization: Bearer SEU_TOKEN'

Listar Pagamentos de uma Assinatura

Endpoint: GET /api/v1/subscriptions/{subscription_id}/payments
cURL
curl --request GET \
  --url https://zeus-sandbox.autorizou.dev/api/v1/subscriptions/sub_abc123/payments \
  --header 'Authorization: Bearer SEU_TOKEN'

Tratamento de Falhas

Política de Retry

Quando uma cobrança falha:
  1. Payment muda para status REFUSED
  2. Subscription muda para PAYMENT_REFUSED
  3. Sistema agenda retry automático
  4. Máximo 3 tentativas em janela de 7 dias
  5. Após 3 falhas, assinatura permanece PAYMENT_REFUSED

Motivos Comuns de Falha

MotivoCausaAção Recomendada
INSUFFICIENT_FUNDSSaldo insuficienteAguardar retry automático
EXPIRED_TOKENToken de recorrência expirouCliente deve criar nova assinatura
ACCOUNT_BLOCKEDConta bloqueadaCliente deve verificar com banco
DAILY_LIMIT_EXCEEDEDLimite diário excedidoRetry no dia seguinte

Verificando Falhas via Webhook

{
  "event": "payment.refused",
  "data": {
    "payment": {
      "id": "pay_xyz789",
      "status": "refused",
      "refusal_reason": "INSUFFICIENT_FUNDS"
    }
  }
}

Ambiente de Testes

Sandbox

Use o ambiente sandbox para testar todo o fluxo: Base URL: https://zeus-sandbox.autorizou.dev/api/v1 Como testar:
  1. Use o endpoint POST /api/v1/subscriptions conforme documentado acima
  2. No campo payment.payment_method, use o valor "pix_recurring"
  3. A API retornará o QR Code em payment.pix_recurring.qr_code
# Exemplo de requisição em sandbox
curl --request POST \
  --url https://zeus-sandbox.autorizou.dev/api/v1/subscriptions \
  --header 'Authorization: Bearer SEU_TOKEN_SANDBOX' \
  --header 'Content-Type: application/json' \
  --data '{
    "mcc": "5734",
    "code": "PIX_TEST_001",
    "interval": "monthly",
    "trial_days": 0,
    "customer": {
      "id": "{{CUSTOMER_UUID}}"
    },
    "payment": {
      "amount": 1000,
      "currency": "BRL",
      "payment_method": "pix_recurring",
      "installments": 1,
      "pix_recurring": {
        "recurring_statement": "Teste Assinatura",
        "recurring_amount": 1000,
        "starts_at": "2025-12-14",
        "retry_policy": true
      }
    }
  }'

QR Code de Teste

Em sandbox, o QR Code retornado aponta para ambiente de testes. Portanto, ele não vai funcionar no seu aplicativo bancário.
Dica de Teste: Para simular falhas, você pode usar metadados específicos na criação da assinatura. Entre em contato com o suporte para detalhes.

Troubleshooting

QR Code não gera pagamento

Causa: Cliente pode ter escaneado mas não confirmou no app bancário Solução:
  1. Verifique se QR Code ainda está válido (30 minutos)
  2. Peça ao cliente para confirmar autorização no app
  3. Aguarde webhook de confirmação (pode levar alguns segundos)

Subscription fica em PAYMENT_PENDING

Causa: Cliente não escaneou o QR Code ou autorização não foi processada Solução:
  1. Verifique se cliente escaneou o QR Code
  2. Confirme que QR Code não expirou
  3. Se expirou, crie nova assinatura
  4. Verifique logs de webhook para erros

Payment fica em WAITING_PAYMENT

Causa: Aguardando confirmação do gateway via webhook Solução:
  1. Normalmente resolve em alguns segundos
  2. Verifique se webhooks estão configurados corretamente
  3. Consulte status via GET /api/v1/payments/{payment_id}
  4. Se persistir por mais de 5 minutos, contate suporte

Cobranças não processam automaticamente

Causa: Processos automatizados não estão executando Solução:
  1. Isso é gerenciado pela Autorizou (SaaS)
  2. Se detectar atrasos, contate suporte imediatamente
  3. Verifique se subscription está ativa (canceled_at deve ser null)

Campos Importantes

Campos principais retornados pela API:
CampoDescrição
payment.acquirer_referenceID único do pagamento no gateway
subscription.charge_codeToken de recorrência armazenado
customer.uuidIdentificador único do cliente
payment.pix_recurring.qr_codeQR Code para autorização inicial

Recursos Adicionais

Criar Assinatura

Documentação completa do endpoint

Cancelar Assinatura

Como cancelar assinaturas

Webhooks

Configurar notificações em tempo real

Consultar Pagamento

Verificar status de pagamentos

Checklist de Implementação

Configuração Inicial

  • Conta Autorizou configurada para Pix Recorrente
  • Credenciais de API obtidas (sandbox e produção)
  • Webhooks configurados para receber notificações

Integração Backend

  • Endpoint de criação de assinatura implementado
  • Endpoint de cancelamento implementado
  • Recebimento de webhooks configurado
  • Tratamento de eventos de pagamento implementado
  • Logs e monitoramento configurados

Testes

  • Testado criação de assinatura J2 (com trial)
  • Testado criação de assinatura J3 (sem trial)
  • Testado fluxo de autorização via QR Code
  • Testado recebimento de webhooks
  • Testado cancelamento de assinatura
  • Testado falhas e retries

Produção

  • Testado com transações reais em produção
  • Monitoramento de falhas configurado
  • Processo de suporte ao cliente definido
  • Documentação interna criada

Próximos Passos

Após implementar Pix Recorrente:
  1. Configurar webhooks para notificações
  2. Monitorar pagamentos em tempo real
  3. Implementar dashboard para gestão de assinaturas
  4. Processar reembolsos quando necessário