Autorização - Jornada 4

Jornadas 4

Jornada 4 : Autorização de Recorrência via QR Code (sem cobrança vinculada)


Nesta jornada, o usuário pagador realiza ou agenda um pagamento via QR Code, e, após a conclusão dessa operação, é ofertada a possibilidade de autorizar o Pix Automático como forma de pagamento para futuras cobranças. A autorização da recorrência será solicitada somente após o pagamento .A aceitação da recorrência é obrigatória para dar continuidade ao processo de autorização.




Passos para Integrar

Fase 1: Pagamento ou Agendamento Inicial via QR Code

  1. Cliente inicia um pagamento e realiza a leitura de um QR Code (Passo no seu sistema).
  2. Realizar autenticação na API (para decodificação do QR Code) - [API Reference]
  3. Realizar a decodificação/consulta dos dados do QR Code via API - [API Reference]
  4. Exibir os detalhes do pagamento ao cliente para confirmação (Passo no seu sistema).
  5. Cliente confirma a intenção de realizar o pagamento (Passo no seu sistema).
  6. Realizar o pagamento do QR Code via API - [API Reference]
  7. Receber Webhook com o status do pagamento (Evento: XX)

Fase 2: Oferta e Autorização do Pix Automático para Futuras Cobranças

  1. Após a confirmação de conclusão bem-sucedida do pagamento/agendamento inicial (conforme Webhook do Passo 7): Ofertar ao cliente a opção de autorizar o Pix Automático para futuras cobranças do mesmo recebedor/serviço (Passo no seu sistema).
  2. Cliente analisa a oferta e decide se aceita ou recusa a autorização do Pix Automático (Passo no seu sistema).
  3. Comunicar a decisão do cliente à Celcoin:
    1. Se autorizado pelo cliente: Enviar a autorização da recorrência - [API Reference]
      ou
    2. Se recusado pelo cliente: Enviar a recusa da recorrência - [API Reference]
  4. Receber Webhook com o resultado do processamento da recorrência (Evento: XX) - [API Reference]

Caso seja necessário, você pode consultar o status da recorrência manualmente:



Fluxo de Integração


Consulta de QR Code EMV

O usuário inicia a jornada escaneando o QR Code . Seu sistema deve enviar esse dado para o endpoint de decodificação do QR Code:

Exemplo /emv

{
    "emv": "00020126180014br.gov.bcb.pix5204000053039865802BR5913Fulano de Tal6008BRASILIA62070503***80950014br.gov.bcb.pix2573qr-h.sandbox.pix.bcb.gov.br/rest/api/rec/420e49420b1b469ab628c3a51430d4d56304E09F"
}

Resposta

{
    "type": "3",
    "collection": null,
    "payloadFormatIndicator": null,
    "merchantAccountInformation": {
        "url": "bx.com.br/JDPI/U0VHUkVET1RPVEFMTUVOVEVBTEVBVE9SSU8=",
        "gui": "br.gov.bcb.pix",
        "key": null,
        "additionalInformation": null,
        "withdrawalServiceProvider": null
    },
    "merchantCategoryCode": 0,
    "transactionCurrency": 0,
    "transactionAmount": 0,
    "countryCode": null,
    "merchantName": null,
    "merchantCity": null,
    "postalCode": null,
    "initiationMethod": null,
    "transactionIdentification": null,
    "recorrency": {
      "id":"RR0435879820240605njua7shf40o",
      "journeyType":2,
        "interval": {
            "start": "2024-01-10",
            "end": "2026-01-10",
            "frequencyType": "MONTHLY"
        },
        "amount": 0,
        "maxValueFloor": 550,
        "creditParty": {
            "ispb": 4358798,
            "taxId": "61695227000193",
            "name": "Enel"
        },
        "debtor": {
            "taxId": "4623217035",
            "name": "Ciclano da Silva",
            "personType": "NATURAL_PERSON"
        },
        "contract": {
            "number": "1234567890ABC",
            "description": "Conta de energia"
        }
    }

Na resposta o qrcode terá o type 3 e o objeto de recorrência

Exemplo /emv/full

{
    "emv": "00020126180014br.gov.bcb.pix5204000053039865802BR5913Fulano de Tal6008BRASILIA62070503***80950014br.gov.bcb.pix2573qr-h.sandbox.pix.bcb.gov.br/rest/api/rec/420e49420b1b469ab628c3a51430d4d56304E09F"
}

Resposta

{
   "version":"1.0.0",
   "status":200,
   "body":{
      "type":"COMPOSED",
      "merchantAccountInformation":{
         "url":"ex.com.br/U0VHUkVET1RPVEFMTUVOVEVBTEVBVE9SSU8",
         "gui":"br.gov.bcb.pix",
         "merchantCategoryCode":"0000",
         "additionaldata":"Obrigado por comprar",
         "withdrawalServiceProvider":"13935893",
         "merchantName":"Empresa S.A.",
         "merchantCity":"Barueri",
         "postalCode":"20770000"
      },
      "key":null,
      "amount":null,
      "transactionIdentification":null,
      "payload":null,
      "recorrency":{
         "id":"RR0435879820240605njua7shf40o",
         "journeyType":2,
         "interval":{
            "start":"2024-01-10",
            "end":"2026-01-10",
            "frequencyType":"MONTHLY"
         },
         "amount":0,
         "maxValueFloor":550,
         "creditParty":{
            "ispb":4358798,
            "taxId":"61695227000193",
            "name":"Enel"
         },
         "debtor":{
            "taxId":"4623217035",
            "name":"Ciclano da Silva",
            "personType":"NATURAL_PERSON"
         },
         "contract":{
            "number":"1234567890ABC",
            "description":"Conta de energia"
         }
      }
   }
}

Na resposta o qrcode terá o type COMPOSED

Após identificar o qrcode como qrcode de Jornada 2 deve exibir essas informações ao usuário pagador.




Exibição da Solicitação e Coleta da Decisão do Cliente Final 🙋‍♂️❓

Essa exibição deve incluir:

  • Nome do recebedor (Nome Fantasia ou Razão Social).
  • Valor e periodicidade da cobrança .
  • Data de início da cobrança.
  • Validade da autorização (data-limite para aceitação).
  • Identificador único da solicitação de recorrência (ID).

O usuário pagador deve, então, decidir se deseja autorizar ou recusa a cobrança futura automática via Pix.

Para isso, o sistema integrador deve:

  • Garantir que a decisão do usuário seja tomada de forma ativa e autenticada (ex: PIN, biometria, senha etc).
  • Enviar essa decisão para a Celcoin utilizando um dos endpoints dedicados:


Envio da Resposta da Autorização via API 🚀

Aceite:

PATCH: /recurrencies/authorization/{id}/accept
Parâmetro: id

{  
  "maxAmount": 100  //Valor máximo aceitável para a recorrência especificada.
}

Exemplo de resposta de Sucesso

{  
  "status": 200,  
  "version": "1.0",  
  "body": {  
    "id": "RR0435879820240920njua7shf40o",  
    "deniedReason": "CREDIT_PARTY_IS_NOT_KNOWN",  
    "cancellingReason": "ACCOUNT_CANCELLATION",  
    "status": "PENDING_CREDIT_PARTY",  
    "journeys": [  
      {  
        "status": "ACCEPTED",  
        "type": 1,  
        "accepetedDate": "2025-05-10T10:15:00Z",  
        "denyDate":null  
      }  
    ],  
    "interval": {  
      "start": "2025-06-01T00:00:00Z",  
      "end": "2025-12-01T00:00:00Z",  
      "frequencyType": "MONTHLY"  
    },  
    "frequencyType": "MONTHLY",  
    "amount": 50,  
    "creditParty": {  
      "taxId": "12345678000199",  
      "name": "Loja Virtual Ltda"  
      "bank":"13935893"  
    },  
    "debitParty": {  
      "personType": "NATURAL_PERSON",  
      "taxId": "98765432100",  
      "bank": "13935893",  
      "branch":"4444",  
      "branch":"0001",  
      "account": "12345-6",  
      "stateCode": "SP"  
    },  
    "debtor": {  
      "personType": "NATURAL_PERSON",  
      "taxId": "98765432100",  
      "name": "João da Silva"  
    },  
    "contract": {  
      "number": "CONTR-2025-PIX-001",  
      "description": "Assinatura mensal do plano premium"  
    },  
    "cancellation": null,  
    "createDate": "2025-05-01T08:00:00Z",  
    "updateDate": "2025-05-15T10:30:00Z",  
    "deleteDate": "2025-05-20T00:00:00Z",  
    "cancelledDate": "2025-05-16T15:03:07.709Z"  
  }  
}


Recusa:

PATCH /recurrencies/authorization/{id}/deny

Parâmetro: id

{
  "deniedReason": "CREDIT_PARTY_IS_NOT_KNOWN"
}

Tipo de rejeição:

ValorDescrição
CREDIT_PARTY_IS_NOT_KNOWNO usuário pagador não reconhece o usuário recebedor ou não tem qualquer tipo de relacionamento ativo com ele
NOT_INTERESTEDO usuário pagador não tem interesse no uso do Pix Automático para pagar as cobranças referentes àquele usuário recebedor
NOT_OFFERED_TO_LEGAL_PERSONNão oferecido para pessoa jurídica

Exemplo de resposta de Sucesso (revisar contrato)

{  
  "status": 200,  
  "version": "1.0",  
  "body": {  
    "id": "RR0435879820240920njua7shf40o",  
    "deniedReason": "CREDIT_PARTY_IS_NOT_KNOWN",  
    "cancellingReason": "ACCOUNT_CANCELLATION",  
    "status": "PENDING_CREDIT_PARTY",  
    "journeys": [  
      {  
        "status": "ACCEPTED",  
        "type": 1,  
        "accepetedDate": "2025-05-10T10:15:00Z",  
        "denyDate":null  
      }  
    ],  
    "interval": {  
      "start": "2025-06-01T00:00:00Z",  
      "end": "2025-12-01T00:00:00Z",  
      "frequencyType": "MONTHLY"  
    },  
    "frequencyType": "MONTHLY",  
    "amount": 50,  
    "creditParty": {  
      "taxId": "12345678000199",  
      "name": "Loja Virtual Ltda"  
      "bank":"13935893"  
    },  
    "debitParty": {  
      "personType": "NATURAL_PERSON",  
      "taxId": "98765432100",  
      "bank": "13935893",  
      "branch":"4444",  
      "branch":"0001",  
      "account": "12345-6",  
      "stateCode": "SP"  
    },  
    "debtor": {  
      "personType": "NATURAL_PERSON",  
      "taxId": "98765432100",  
      "name": "João da Silva"  
    },  
    "contract": {  
      "number": "CONTR-2025-PIX-001",  
      "description": "Assinatura mensal do plano premium"  
    },  
    "cancellation": null,  
    "createDate": "2025-05-01T08:00:00Z",  
    "updateDate": "2025-05-15T10:30:00Z",  
    "deleteDate": "2025-05-20T00:00:00Z",  
    "cancelledDate": "2025-05-16T15:03:07.709Z"  
  }  
}

Estrutura do JSON


Estrutura do JSON

CampoTipoDescrição
statusintCódigo de status da resposta.
versionstringVersão do payload.
bodyobjectDados principais do recurso.

Estrutura do objeto Body

CampoTipoDescrição
id*stringIdentificador único da recorrencia
deniedReasonENUM (CREDIT_PARTY_IS_NOT_KNOWN, NOT_INTERESTED, NOT_OFFERED_TO_LEGAL_PERSON)Motivo da recusa, se aplicável.
cancellingReasonENUM (ACCOUNT_CANCELLATION, CREDIT_PARTY_END_OF_ACTIVITIES, PAYER_DEAD, CONFIRMATION_ERROR, FRAUD, CONFIRMED_IN_OTHER_JOURNEY, CREDIT_PARTY_REQUEST, DEBIT_PARTY_REQUEST, TIMEOUT)Motivo do cancelamento, se aplicável
status*ENUM (PENDING_DEBIT_PARTY, PENDING_CREDIT_PARTY, CONFIRMED, CANCELLATION_REQUEST, CANCELLING, CANCELLED, EXPIRED, ERROR)status da recorrencia
journeys*array de objetosLista de jornadas requisitadas para a recorrencia
interval*objetoInformações de intervalo da recorrência
frequencyType*Enum( WEEKLY,MONTHLY,QUARTER,SEMESTER,YEARLY)Frequência da recorrência
amountdecimalValor do pagamento recorrente
creditParty*objetoDados do Recebedor
debitParty*objetoDados do pagador
debtorobjetoPessoa ou empresa devedora.
contract*Dados do contrato associado à cobrança
cancellationobjetoDados do cancelamento, se houver
createDate*string (ISO 8601)Data de criação da recorrencia
updateDatestring (ISO 8601)Data da última atualização
deleteDatestring (ISO 8601)Data de exclusão, se houver
cancelledDatestring (ISO 8601)Data em que foi cancelada.


Envio da confirmação da Autorização via API 🚀

A instituição recebedora, após validar a decisão do cliente final, nos envia um webhook com a confirmação e todos os dados da solicitação. Essas informações, constituindo o comprovante da operação, são então encaminhadas por nós a você.

Exemplo de Contrato do Webhook de Confirmação Final:

{  
  "status": 200,  
  "version": "1.0",  
  "body": {  
    "id": "RR0435879820240920njua7shf40o",  
    "deniedReason": "CREDIT_PARTY_IS_NOT_KNOWN",  
    "cancellingReason": "ACCOUNT_CANCELLATION",  
    "status": "PENDING_CREDIT_PARTY",  
    "journeys": [  
      {  
        "status": "ACCEPTED",  
        "type": 1,  
        "accepetedDate": "2025-05-10T10:15:00Z",  
        "denyDate":null  
      }  
    ],  
    "interval": {  
      "start": "2025-06-01T00:00:00Z",  
      "end": "2025-12-01T00:00:00Z",  
      "frequencyType": "MONTHLY"  
    },  
    "frequencyType": "MONTHLY",  
    "amount": 50,  
    "creditParty": {  
      "taxId": "12345678000199",  
      "name": "Loja Virtual Ltda"  
      "bank":"13935893"  
    },  
    "debitParty": {  
      "personType": "NATURAL_PERSON",  
      "taxId": "98765432100",  
      "bank": "13935893",  
      "branch":"4444",  
      "branch":"0001",  
      "account": "12345-6",  
      "stateCode": "SP"  
    },  
    "debtor": {  
      "personType": "NATURAL_PERSON",  
      "taxId": "98765432100",  
      "name": "João da Silva"  
    },  
    "contract": {  
      "number": "CONTR-2025-PIX-001",  
      "description": "Assinatura mensal do plano premium"  
    },  
    "cancellation": null,  
    "createDate": "2025-05-01T08:00:00Z",  
    "updateDate": "2025-05-15T10:30:00Z",  
    "deleteDate": "2025-05-20T00:00:00Z",  
    "cancelledDate": "2025-05-16T15:03:07.709Z"  
  }  
}