Pagamentos Automáticos

Pré requisitos para implementação:

Possuir uma chave api da Celcoin, para mais informações acessar esse link

O que é

O Pix Automático é uma modalidade de pagamento recorrente do Open Finance Brasil que permite ao usuário autorizar, com um único consentimento, múltiplas cobranças futuras iniciadas pelo recebedor (ex: assinaturas, mensalidades, contas de consumo). Diferente do Sweeping Accounts, o pagador e o recebedor são pessoas distintas.

A ITP (Instituição de Pagamento Transmissora) atua criando o consentimento recorrente e orquestrando cada ciclo de pagamento, enquanto a detentora de conta do pagador é responsável pela liquidação no SPI.

Características principais

  • Consentimento único para múltiplos pagamentos futuros
  • Configuração de intervalo: DIARIO, SEMANAL, MENSAL, SEMESTRAL, ANUAL
  • Suporte a valor fixo (fixedAmount) ou variável (minimumVariableAmount / maximumVariableAmount)
  • Mecanismo de retentativas intradia e extradia com controle de endToEndId
  • Suporte a alçada dupla (PARTIALLY_ACCEPTED)
  • Cancelamento por qualquer parte: pagador, recebedor ou ITP

Diferenças entre os produtos de pagamento recorrente

CaracterísticaPix AutomáticoSweeping Accounts
Relação pagador / recebedorPessoas distintasMesma pessoa (mesmo CPF)
Quem inicia a cobrançaRecebedor (via ITP)O próprio titular
Caso de usoAssinaturas, mensalidades, contasTransferências entre contas próprias
Modalidade localInstrumentAUTOMANU, DICT etc.
Limites periódicos no consentimento
Retentativas intradia/extradia

Fluxo Resumido

sequenceDiagram
    participant ITP
    participant Detentora as Detentora (ASPSP)
    participant Usuário

    ITP->>Detentora: POST /automatic-payments/payment-initiation
    Detentora-->>ITP: { authorizationUrl, id }

    ITP->>Usuário: Redireciona para authorizationUrl
    Usuário->>Detentora: Login + Approve
    Detentora->>Usuário: callback?code&state

    Usuário->>ITP: Retorna com code, state, id_token
    ITP->>Detentora: POST /payment-initiation/callback
    Detentora-->>ITP: { consentId, status: AUTHORISED }

    loop A cada ciclo de pagamento
        ITP->>Detentora: POST /payment-initiation/:id/payments
        Detentora-->>ITP: { recurringPaymentId, status: RCVD }
        Detentora->>ITP: Webhook: status ACSC ou RJCT
    end

Etapas da Jornada

#EtapaEndpoint
1Autenticação da aplicaçãoPOST /v5/token
2Buscar instituições disponíveisGET /baas/v1/open/itp/participants/brands?type=PAYMENT
3Criar consentimento recorrentePOST /baas/v1/open/itp/automatic-payments/payment-initiation
4Redirecionar usuário para authorizationUrl
5Login na detentora (sandbox)POST /interactions/:id/login
6Aprovação do consentimento (sandbox)POST /interactions/:id/consent
7Processar callbackPOST /baas/v1/open/itp/payment-initiation/callback
8Executar pagamento Pix recorrentePOST /baas/v1/open/itp/automatic-payments/payment-initiation/:id/payments
9Retentativa de pagamentoPOST /automatic-payments/v2/pix/recurring-payments/:id/retry
10Consultar consentimento / pagamentosGET /baas/v1/open/itp/automatic-payments/payment-initiation
11Cancelar consentimentoPATCH /baas/v1/open/itp/automatic-payments/v2/payment-initiation/:id

Pontos de Atenção

⚠️

startDateTime e referenceStartDate exigem D+2: A data de início do consentimento e a primeira data de referência de pagamento devem ser no mínimo 2 dias úteis após a criação. Datas inválidas retornam 422.

⚠️

fixedAmount é exclusivo: Quando informado, os campos minimumVariableAmount e maximumVariableAmount são ignorados. Use um ou o outro, nunca ambos.

⚠️

isRetryAccepted: Controla se a ITP aceita retentativas automáticas em caso de falha. Quando false, nenhuma retentativa intradia ou extradia será realizada pela detentora.

⚠️

localInstrument deve ser AUTO: Para Pix Automático, a modalidade de iniciação é sempre AUTO. Outros valores causam rejeição.

⚠️

Consentimento ≠ Pagamento: O consentimento (AUTHORISED) autoriza a série de pagamentos futuros. Cada pagamento individual tem seu próprio ciclo de vida e recurringPaymentId.

⚠️

Liquidação assíncrona: O pagamento é recebido com RCVD e a liquidação final (ACSC ou RJCT) é notificada via webhook ou polling.