Decodificação de QR Codes

O endpoint de decodificação do Bankly está preparado para ler QR Codes estáticos e dinâmicos gerados por qualquer instituição financeira.

📘

Nota

Os QR Codes dinâmicos podem destinar-se a pagamentos imediatos e futuros (com vencimento).

Ao decodificar um QR Code Pix, você obterá:

  • O endToEndId, um identificador único gerado pelo Bacen que deve ser informado ao realizar o pagamento do QR Code;
  • A chave Pix;
  • O valor do pagamento, caso ele tenha sido adicionado em na geração do QR Code. No Bankly, o valor poderá ser alterado pelo pagador no momento de efetuar da transação.
⚠️

Importante

Para fazer a leitura de um QR Code de pagamento, obrigatoriamente, o conteúdo deve ser enviado em base64.

Requisição (Request)

Requisição HTTP

POST https://sandbox.hiperbanco.com.br/pix/qrCode/decode
--request POST 'https://sandbox.hiperbanco.com.br/pix/qrCode/decode' \
--header 'version: cutting-edge' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{token}}' \
--data-raw '{
  "code": "{{yourEncode}}"
}'

Cabeçalhos (Headers)

NomePropriedadeDescrição
versioncutting-edgeEssa propriedade garante que o response da API seja retornado no formato JSON
AuthorizationBearer tokenObrigatório. Token de autorização do tipo Bearer.

Parâmetros da rota (Path)

Não é necessário enviar parâmetros no path desta requisição.

Corpo da requisição (Body)

No body, envie o seguinte campo em formato JSON:

NomeTipoDescrição
codestringObrigatório. Conteúdo do QR Code em base64.
cityCodestringObrigatório. Código de município do usuário pagador no IBGE.
{
  "code": "{{encodedValue}}",
  "cityCode": "3550308"
}

Resposta (Response)

Os status code 200 indica que a solicitação foi aceita e que a decodificação do QR Code foi realizada com sucesso.

Sendo bem-sucedido, o retorno irá trazer os seguintes campos em formato JSON:

NomeTipoDescrição
endToEndIdstringIdentificador único gerado pelo Bacen que deve ser informado ao realizar o pagamento do QR Code.
conciliationIdstringIdentificador utilizado para conciliação dos pagamentos. Importante: este campo somente será retornado caso ele tenha sido enviado no momento da emissão do QR Code.
addressingKeyobjectObjeto que contém informações sobre a chave de endereçamento.
addressingKey.typestringTipo de chave, que pode ser "CPF", "CNPJ", "PHONE", "EMAIL" ou "EVP".
addressingKey.valuestringValor da chave.
qrCodeTypestringInforma se o QR Code é estático ("staticQrCode") ou dinâmico ("dynamicQrCode").
payerobjectObjeto que contém informações sobre o pagador da transação. Este campo retorna apenas em caso de leitura de QR Code dinâmico.
payer.typestringTipo de cliente pagador, que pode ser "CUSTOMER" ou "BUSINESS".
payer.namestringNome do pagador da transação.
payer.documentobjectObjeto que contém informações sobre o documento do pagador da transação.
payer.document.valuestringNúmero do documento.
payer.document.typestringTipo do documento do pagador da transação, que pode ser "CPF" ou "CNPJ".
holderobjectObjeto que contém informações sobre o titular da conta a ser utilizada na transação.
holder.typestringTipo de titular, que pode ser "CUSTOMER" ou "BUSINESS".
holder.namestringNome do titular.
holder.tradingNamestringNome fantasia (nome comercial) do titular. (Em caso do holder ser BUSINESS)
holder.documentobjectObjeto que contém informações sobre o documento do titular.
holder.document.valuestringNúmero do documento.
holder.document.typestringTipo de documento do titular da conta, que pode ser "CPF" ou "CNPJ".
bankobjectObjeto que contém informações sobre o banco ao qual a conta pertence.
bank.ispbstringISPB (Identificador de Sistema de Pagamentos Brasileiro) do banco. Este campo retorna apenas em caso de leitura de QR Code dinâmico.
bank.namestringNome do banco. Este campo retorna apenas em caso de leitura de QR Code estático.
paymentobjectObjeto que contém informações sobre o pagamento a ser realizado.
payment.baseValuenumberValor de base.
payment.interestValuenumberValor de juros.
payment.penaltyValuenumberValor de multa.
payment.discountValuenumberValor do desconto.
payment.reductionValuenumberValor do abatimento.
payment.totalValuenumberIndica o valor do total da compra ou transferência.
payment.dueDatestringData de vencimento do pagamento, no formato ISO 8601 - UTC.
payment.changeValuenumberIndica o valor do troco em espécie. Este campo somente é retornado em caso de decodificação de QR Code para Pix Troco.
payment.withdrawalValuenumberIndica o valor do saque em espécie. Este campo somente é retornado em caso de decodificação de QR Code para Pix Saque.
Caso não seja Pix Saque, este valor será 0
payment.isSinglePaymentbooleanIndica se o pagamento é único (true) ou pode ser parcelado (false).
payment.qrCodeChangeAmountTypestringIndica a possibilidade de alteração do valor do QR Code. Se esse campo retornar "ALLOWED", será permitido alterar o valor. Caso o retorno seja "NOT_ALLOWED", não será permitido realizar a alteração do valor trazido pelo QR Code.
locationobjectObjeto que contém informações sobre a localidade do recebedor da transação.
location.citystringNome da cidade do recebedor da transação.
location.zipCodestringCódigo postal do recebedor da transação. Este campo retorna apenas na leitura de QR Codes dinâmicos.
qrCodePurposestringRazão da emissão do QR Code, que pode ser "PURCHASE_OR_TRANSFER" (compra ou transferência), "CHANGE" (para Pix Troco) ou "WITHDRAWAL" (para Pix Saque).
⚠️

Importante

Para fazer um pagamento Pix por QR Code, você precisará repassar os valores dos campos endToEndId e conciliationId retornados nesta API. O conciliationId será requerido para pagamento de QR Code dinâmico.

{
    "endToEndId": "E123456782025071601239C9876E0FF8",
    "conciliationId": "X9YTuvDgwaBbYzK78zd8n9eyHmmrf",
    "addressingKey": {
        "type": "EVP",
        "value": "a123bcd4-5678-9123-4567-8e9f0a1b2c3d"
    },
    "qrCodeType": "dynamicQrCode",
    "payer": {
        "type": "CUSTOMER",
        "name": "Editora Floresta",
        "document": {
            "value": "34183937000161",
            "type": "CNPJ"
        }
    },
    "holder": {
        "type": "BUSINESS",
        "name": "98765432 Tech Solutions Ltda",
        "tradingName": "98765432 Tech Solutions",
        "document": {
            "value": "98765432000121",
            "type": "CNPJ"
        }
    },
    "bank": {
        "ispb": "12345678",
        "name": "Fintech Pagamentos S.A. - Instituição De Pagamento"
    },
    "payment": {
        "baseValue": 1250.50,
        "interestValue": 25.75,
        "penaltyValue": 10.00,
        "discountValue": 50.25,
        "reductionValue": 0,
        "totalValue": 1236.00,
        "dueDate": "2025-11-15T14:30:00.000",
        "changeValue": 0,
        "withdrawalValue": 0,
        "isSinglePayment": true,
        "qrCodeChangeAmountType": "NOT_ALLOWED"
    },
    "location": {
        "city": "São Paulo",
        "zipCode": "01311000"
    },
    "qrCodePurpose": "PURCHASE_OR_TRANSFER"
}
{
    "endToEndId": "E00000000202507152359XYZ12345678",
    "conciliationId": "a1b2c3d4EfGhIjKlMnOpQrStUv",
    "addressingKey": {
        "type": "EVP",
        "value": "12345678-abcd-1234-efgh-56789abcdef0"
    },
    "qrCodeType": "staticQrCode",
    "holder": {
        "type": "BUSINESS",
        "name": "Empresa Fictícia Ltda",
        "tradingName": "EmpFictícia",
        "document": {
            "value": "12345678000199",
            "type": "CNPJ"
        }
    },
    "bank": {
        "ispb": "00000000",
        "name": "Banco de Testes S.A. - Instituição de Pagamento"
    },
    "payment": {
        "baseValue": 150.75,
        "interestValue": 0,
        "penaltyValue": 0,
        "discountValue": 10.75,
        "reductionValue": 0,
        "totalValue": 140.00,
        "changeValue": 0,
        "withdrawalValue": 0,
        "isSinglePayment": true,
        "qrCodeChangeAmountType": "NOT_ALLOWED"
    },
    "location": {
        "city": "Cidade Teste",
        "zipCode": "00000-000"
    },
    "additionalData": [
        {
        }
    ],
    "qrCodePurpose": "PURCHASE_OR_TRANSFER"
}

Erros

Este endpoint pode retornar alguns erros específicos, conforme a tabela a seguir:

Status CodeCódigoMensagemDescrição
400QRCODE_CANNOT_BE_DECODEDThe QrCodePayload is invalid or cannot be decoded. Check it out with the PSP.O QR Code não pode ser decodificado.
400QRCODE_PAYLOAD_LOCATION_REMOVEDThe QrCodePayload location was removed by PSP.O QR Code não está mais disponível para leitura por ter sido removido pela PSP do recebedor.
400REQUEST_NOT_ALLOWED_OUT_OF_BUSINESS_PERIODRequest not allowed out of business period.Não está disponível fora do horário comercial.
400ENTRY_NOT_FOUNDEntry not found.A chave que está sendo usada para gerar o QR Code não existe.
400CASHOUT_LIMIT_NOT_ENOUGHSender does not have sufficient cash out limit.A transação excede o limite de valor da transferência.
408REQUEST_TIMEOUTTransaction exceeded request limit timeout.A requisição excedeu o tempo limite da solicitação.

Recordamos que esta API também poderá retornar erros comuns entre todos os endpoints que acompanham os erros 400 (se houver).

Eventos

Este endpoint não possui eventos relacionados a ele.


Did this page help you?