Transferência via Pix

stable

As transações de pagamentos/transferências de valores via Pix, ou Pix cash-out, podem ocorrer das seguintes maneiras:

  • Manual;
  • Por chave PIX;
  • Por QR Code (estático ou dinâmico).

🚧

Importante

O Pix cash-out possui limite de valor definido durante a operação, de acordo com a necessidade do parceiro. Esse limite pode ser alterado a qualquer momento. Em caso de dúvidas, consulte o Farmer ou o Partner Lead.

📘

Nota

Em caso de pessoa física, não existe limite noturno para transações entre mesma titularidade.

Requisição

Requisição HTTP

 POST 'https://api-mtls.sandbox.bankly.com.br/pix/cash-out'
--location --request POST 'https://api-mtls.sandbox.bankly.com.br/pix/cash-out' \ 
--header 'Accept: application/json' \ 
--header 'Content-Type: application/json' \ 
--header 'api-version: 1.0' \ 
--header 'x-correlation-id: {{GUID}}' \
--header 'Authorization: {{token}}  
--data-raw '{
    "amount": 23.00, 
    "description": "Description", 
    "initializationType": "Manual" ,  
    "sender": { 
        "documentNumber": "47742663023", 
        "name": "Nísia Floresta",
        "account": { 
            "branch": "0001", 
            "number": "15164"
        }, 
        "bank": { 
        }
    }, 
    "recipient": { 
        "documentNumber": "09992220074", 
        "name": "Maria Quitéria de Jesus" ,
        "account": { 
          "branch": "0001", 
          "number": "540108", 
          "type": "PAYMENT" 
        }, 
        "bank": { 
           "ispb": "13140088"
        }
    }
}'

Autorização

Para garantir a segurança nas requisições, todos os endpoints do Bankly utilizam scopes como parte do seu fluxo de autorização.
Esta requisição requer o scope descrito a seguir:

ScopeDescrição
pix.cashout.createConcede acesso para iniciar um pagamento via Pix.

Cabeçalhos (Headers)

NomeDescrição
api-versionObrigatório. Versão da API. Atualmente estamos na versão 1.0.
AuthorizationObrigatório. Token de autorização do tipo Bearer.
x-correlation-idSe desejar, informe um GUID v4, sendo um novo cada requisição.

Parâmetros da rota (Path)

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

Corpo da requisição (Body)

Tanto para operações manuais, quanto por chave pix ou por QR Code, deve-se enviar os seguintes campos comuns em formato JSON:

NomeTipoDescrição
senderobjectObrigatório. Objeto que contém os dados do pagador.
sender.accountobjectObrigatório. Objeto que contém informações sobre a conta do pagador.
sender.account.branchstringObrigatório. Número da agência.
sender.account.numberstringObrigatório. Número da conta.
sender.account.typestringObrigatório. Tipo de conta, o qual pode ser "CHECKING" para conta corrente, "SALARY" para conta salário, "SAVINGS" para conta poupança e "PAYMENT" para conta de pagamento.
sender.documentNumberstringObrigatório. Número do documento do pagador.
sender.namestringObrigatório. Nome do pagador.
amountnumberObrigatório. Valor a ser enviado.
initializationTypestringObrigatório. Modo pelo qual se dará a transação: "key", no caso de chave de endereçamento Pix, "staticQrCode" ou "dynamicQrCode", no caso de QR Codes, e "manual".
descriptionstringCampo que pode ser utilizado pelo usuário para enviar mensagens ao destinatário da transferência com informações sobre a transação. O texto pode conter no máximo 140 caracteres e não aceita nenhum caractere especial (exceto hífen).

🚧

Importante

Para recuperar as informações da instituição financeira de destino (ISPB e code), basta consultar nosso serviço de listagem de participantes do Pix.

Veja a seguir as especificidades de cada modalidade de Pix cash-out.

Manual

Para realizar uma transferência via Pix manual, além dos campos comuns, envie os seguintes campos no body da requisição:

NomeTipoDescriçãoEspecificação
recipientobjectObrigatório. Objeto que contém os dados do recebedor do pagamento.
recipient.accountobjectObrigatório. Objeto que contém informações sobre a conta do recebedor.
recipient.account.branchstringObrigatório. Número da agência.
recipient.account.numberstringObrigatório. Número da conta.
recipient.account.typestringObrigatório. Tipo de conta, o qual pode ser "CHECKING" para conta corrente, "SALARY" para conta salário, "SAVINGS" para conta poupança e "PAYMENT" para conta de pagamento.
recipient.bankobjectObrigatório. Objeto com os dados do banco recebedor.
recipient.bank.ispbstringObrigatório. ISPB da instituição recebedora do pagamento
recipient.documentNumberstringObrigatório. Número do documento do recebedor.
recipient.namestringObrigatório. Nome do recebedor.Este campo não aceita caracteres especiais ou com acentos, como por exemplo ã, é, ó, ç.

📘

Nota

No tipo manual, não é necessário informar o endToEndId.

Por chave Pix

Os pagamentos ou transferências via chave Pix podem ser feitos para todos os tipos de chaves (CPF, CNPJ, telefone, e-mail e chave aleatória - EVP).

Antes de realizar uma transação cash-out por chave Pix, o parceiro deve fazer a consulta da chave junto ao DICT para verificar a sua validade.

Recordamos que o retorno da consulta de chaves trará o endToEndId, que será utilizado no momento da transação de cash-out. Esse identificador deve ser usado no período máximo de 15 minutos.

Para realizar uma transferência por chave Pix, além dos campos comuns, envie os seguintes campos no body da requisição:

NomeTipoDescrição
endToEndIdstringObrigatório. Valor de endToEndId retornado na consulta de chave.

Por QR Code (estático e dinâmico)

Para realizar uma transação cash-out por QR Code estático ou dinâmico, é preciso recuperar o endToEndId retornado na decodificação do QR Code.

Para realizar uma transferência/pagamento por QR Code, além dos campos comuns, envie os seguintes campos no body da requisição:

NomeTipoDescrição
endToEndIdstringObrigatório. Valor de endToEndId retornado na decodificação do QR Code.
conciliationIdstringObrigatório. Campo de preenchimento obrigatório no caso de pagamento de QR Codes dinâmicos. Nele, deve ser informado o valor do conciliationId retornado na leitura do QR Code.
changeAmountstringCampo obrigatório em caso de Pix Troco. Informe o valor do troco (quantia que se deseja obter em espécie).
--location --request POST 'https://api-mtls.sandbox.bankly.com.br/pix/cash-out' \ 
--header 'Accept: application/json' \ 
--header 'Content-Type: application/json' \ 
--header 'api-version: 1.0' \ 
--header 'x-correlation-id: {{correlationId}}' \
--header 'x-bkly-pix-user-id: {{clientDocument}}'\
--header 'Authorization: {{token}}' \  
--data-raw '{
    "amount": 23.00, 
    "description": "Description", 
    "initializationType": "Manual" ,  
    "sender": { 
        "documentNumber": "47742663023", 
        "name": "Nísia Floresta",
        "account": { 
            "branch": "0001", 
            "number": "15164"
        }, 
        "bank": { 
        }
    }, 
    "recipient": { 
        "documentNumber": "09992220074", 
        "name": "Maria Quitéria de Jesus" ,
        "account": { 
          "branch": "0001", 
          "number": "540108", 
          "type": "PAYMENT" 
        }, 
        "bank": { 
           "ispb": "13140088"
        }
    }
}'
--location --request POST 'https://api.sandbox.bankly.com.br/pix/cash-out' \ 
--header 'Accept: application/json' \ 
--header 'Content-Type: application/json' \ 
--header 'api-version: 1.0' \ 
--header 'x-correlation-id: {{correlationId}}' \ 
--header 'x-bkly-pix-user-id: {{clientDocument}}'\
--header 'Authorization: {{token}}' \ 
--data-raw '{ 
    "sender": { 
        "account": { 
            "branch": "0001", 
            "number": "111929", 
            "type": "PAYMENT" 
        }, 
        "bank": { 
        }, 
        "documentNumber": "12345678902", 
        "name": "Peter Parker" 
        }, 
    "amount": 1, 
    "description": "Pix cashout via Key", 
    "initializationType": "Key", 
    "endToEndId": "E1314008820211019140822078594881" 
    }'
--location --request POST 'https://api.sandbox.bankly.com.br/pix/cash-out' \ 
--header 'Accept: application/json' \ 
--header 'Content-Type: application/json' \ 
--header 'api-version: 1.0' \ 
--header 'x-correlation-id: {{correlationId}}' \ 
--header 'x-bkly-pix-user-id: {{clientDocument}}'\
--header 'Authorization: {{token}}' \
--data-raw '{ 
    "sender": { 
        "account": { 
            "branch": "0001", 
            "number": "15164", 
        }, 
        "bank": { 
        }, 
        "documentNumber": "47742663023", 
        "name": "Nísia Floresta", 
    }, 
    "amount": 1, 
    "description": "payment", 
    "initializationType": "StaticQrCode", 
    "endToEndId": "E1314008820210628213443832702790" 
}'
--location --request POST 'https://api.sandbox.bankly.com.br/pix/cash-out' \ 
--header 'Accept: application/json' \ 
--header 'Content-Type: application/json' \ 
--header 'api-version: 1.0' \ 
--header 'x-correlation-id: {{correlationId}}' \ 
--header 'x-bkly-pix-user-id: {{clientDocument}}'\
--header 'Authorization: {{token}}' \ 
--data-raw'{ 
    "amount": 187.55,   
    "changeAmount": 593.11,  
    "description": "change", 
    "sender":{ 
        "name": "Nísia Floresta", 
        "documentNumber": "47742663023", 
        "account":{ 
            "branch": "0001",
            "number": "15164", 
            "type": "CHECKING" 
    	  } 
   }, 
   "initializationType": "staticQrCode", 
   "endToEndId": "E131400882022131132132515238664"
}'

Resposta (Response)

O status code 202 indicará sucesso na transação.
Sendo bem-sucedido, o retorno irá trazer os seguintes campos em formato JSON:

NomeTipoDescrição
amountnumberValor enviado.
withdrawalAmountnumberValor do saque. Campo retornado apenas em caso pagamento por QR Code para Pix Saque.
changeAmountnumberValor do troco. Campo retornado apenas em caso pagamento por QR Code para Pix Troco.
descriptionstringCampo que pode ser utilizado pelo usuário para enviar mensagens ao destinatário da transferência com informações sobre a transação. O texto pode conter no máximo 140 caracteres e não aceita nenhum caractere especial (exceto hífen).
senderobjectObjeto que contém os dados do pagador.
sender.documentTypestringTipo de documento do pagador (CPF ou CNPJ).
sender.documentNumberstringNúmero do documento do recebedor.
senderNamestringNome do recebedor. Esse campo retornará o nome do documento de cadastro, e não o nome social.
sender.accountobjectObjeto que contém informações sobre a conta do pagador.
sender.account.branchstringNúmero da agência.
sender.account.numberstringNúmero da conta.
sender.account.typestringTipo de conta, o qual pode ser CHECKING para conta corrente, SALARY para conta salário, SAVINGS para conta poupança e PAYMENT para conta de pagamento.
sender.bankobjectObjeto com os dados do banco do pagador.
sender.bank.ispbstringISPB do banco.
sender.bank.compestringCódigo do banco.
sender.bank.namestringNome do banco.
recipientobjectObjeto que contém os dados do recebedor.
recipient.documentTypestringTipo de documento do recebedor (CPF ou CNPJ).
recipient.documentNumberstringNúmero do documento do recebedor.
recipient.namestringNome do recebedor. Esse campo retornará o nome do documento de cadastro, e não o nome social.
recipient.accountobjectObjeto que contém informações sobre a conta do recebedor.
recipient.account.branchstringNúmero da agência.
recipient.account.numberstringNúmero da conta.
recipient.account.typestringTipo de conta, o qual pode ser CHECKING para conta corrente, SALARY para conta salário, SAVINGS para conta poupança e PAYMENT para conta de pagamento.
recipient.bankobjectObjeto com os dados do banco recebedor.
recipient.bank.ispbstringISPB da instituição recebedora do pagamento
recipient.bank.compestringCódigo do banco.
recipient.bank.namestringNome do banco.
authenticationCodestringCódigo de autenticação da transação. O valor desse campo é utilizado para verificar os status da transação no endpoint de consulta de status.

📘

Nota

Para obter o valor exato movimentado em transações de Pix Troco, deve-se somar os valores retornados nos campos amount e changeAmount.

{
    "amount": 1,
    "description": "DESCRIÇÃO",
    "sender": {
       "documentType": "CPF",
       "documentNumber": "47742663023",
       "name": "Nísia Floresta",
       "account": {
          "branch": "0001",
          "number": "15164",
          "type": "CHECKING"
       },
       "bank": {
          "ispb": "13140088",
          "compe": "332",
          "name": "Acesso Soluções de Pagamento S.A."
       },
    },
    "recipient": {
       "documentType": "CPF",
       "documentNumber": "09992220074",
       "name": "Maria Quitéria de Jesus",
       "account": {
          "branch": "0001",
          "number": "540108",
          "type": "CHECKING"
       },
       "bank": {
          "ispb": "13140088",
          "compe": "332",
          "name": "Acesso Soluções De Pagamento S.A."
       },
    },
    "authenticationCode": "fc6470ac-6d1b-4c84-8c61-00de2b8888d4"
 }
{
   "amount": 1,
   "description": "DESCRIÇÃO",
   "sender": {
      "documentType": "CPF",
      "documentNumber": "47742663023",
      "name": "Nísia Floresta",
      "account": {
         "branch": "0001",
         "number": "187470",
         "type": "CHECKING"
      },
      "bank": {
         "ispb": "13140088",
         "compe": "332",
         "name": "Acesso Soluções de Pagamento S.A."
      },
   },
   "recipient": {
      "documentType": "CPF",
      "documentNumber": "09992220074",
      "name": "Maria Quitéria de Jesus",
      "account": {
         "branch": "0551",
         "number": "1085867",
         "type": "CHECKING"
      },
      "bank": {
         "ispb": "00000000",
         "compe": "001",
         "name": "Banco Do Brasil S.A."
      },
   },
   "authenticationCode": "dd648881-f837-46ca-a9ee-79cb7e5c7ef3"
}
{
   "amount": 1,
   "description": "DESCRIÇÃO",
   "sender": {
      "documentType": "CPF",
      "documentNumber": "47742663023",
      "name": "Nísia Floresta",
      "account": {
         "branch": "0001",
         "number": "187470",
         "type": "CHECKING"
      },
      "bank": {
         "ispb": "13140088",
         "compe": "332",
         "name": "Acesso Soluções de Pagamento S.A."
      },
   },
   "recipient": {
      "documentType": "CNPJ",
      "documentNumber": "34183937000161",
      "name": "Editora Nísia Floresta",
      "account": {
         "branch": "0001",
         "number": "219568",
         "type": "CHECKING"
      },
      "bank": {
         "ispb": "13140088",
         "compe": "332",
         "name": "Acesso Soluções De Pagamento S.A."
      },
   },
   "authenticationCode": "65411a0d-06af-4c4d-b61e-e0f0cb91c9ff"
}
{
   "amount": 187.55,
   "withdrawalAmount": 0,
   "changeAmount": 593.11,
   "description": "change",
   "sender": {
      "documentType": "CPF",
      "documentNumber": "47742663023",
      "name": "Nísia Floresta",
      "account": {
         "branch": "0001",
         "number": "15164",
         "type": "PAYMENT"
      },
      "bank": {
         "ispb": "13140088",
         "compe": "332",
         "name": "Acesso Soluções de Pagamentos S.A"
      },
   },
   "recipient": {
      "documentType": "CNPJ",
      "documentNumber": "34183937000161",
      "name": "Editora Nísia Floresta",
      "account": {
         "branch": "0001",
         "number": "422316",
         "type": "CHECKING"
      },
      "bank": {
         "ispb": "13140088"
      },
   },
   "authenticationCode": "a020a1a-7133-4b49-a62d-e1daf38da54d"
}

👍

Dica

Para simular uma requisição nesse endpoint, acesse o API Reference.

Reprovação no processo de transferência

Embora haja sucesso na requisição, é possível que o processo de transferência via Pix não seja completado.

Nesses casos, o valor retornará para a conta pagadora e o parceiro receberá o evento PIX_CASHOUT_WAS_CANCELED e/ou o evento PIX_CASHOUT_WAS_UNDONE, que indicarão no campo refusalReason a razão pela qual a transferência não pôde ocorrer.

Erros

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

Status codeCódigoMensagemDescrição
400O valor do changeAmount precisa ser o mesmo do informado pelo QR Code.
400SENDER_ACCOUNT_STATUS_NOT_ALLOW_CASH_OUTSender account status does not allow cash out.O status da conta pagadora não permite o cash-out.
400RECIPIENT_ACCOUNT_STATUS_NOT_ALLOW_CASH_INRecipient account status does not allow cash in.O status da conta recebedora não permite cash-in.
400INVALID_RECIPIENT_ACCOUNTSender and recipient account must not be the same.A conta do pagador e do recebedor não podem ser a mesma.
400SENDER_ACCOUNT_NOT_FOUNDSender account not found for fund transfer.Conta do pagador não encontrada para a realização da transferência.
400RECIPIENT_ACCOUNT_NOT_FOUNDRecipient account not found for internal transfer.Conta do recebedor não encontrada para transferência interna.
400CASHOUT_LIMIT_NOT_ENOUGHSender does not have sufficient cash out limit.A transação excede o limite de valor da transferência.
400TIMEOUTTransaction exceeded request limit timeout.A requisição excedeu o tempo máximo para completar essa transação.
400INVALID_BANK_BRANCHInvalid bank branch.Agência bancária inválida.
400INVALID_BANK_ACCOUNTInvalid bank account.Conta bancária inválida.
400RECIPIENT_ACCOUNT_DOES_NOT_MATCH_THE_DOCUMENTRecipient account does not match with the document informed.O documento informado não pertence à conta do recebedor.
400SENDER_ACCOUNT_DOES_NOT_MATCH_THE_DOCUMENTSender account does not match with the document informed.O documento informado não pertence à conta do pagador.
400INSUFFICIENT_BALANCECustomer does not have sufficient balance.O cliente não possui saldo suficiente para a transação.
400TRANSFER_WAS_REPROVEDPix transfer was reproved.A transferência não foi aprovada.
400TRANSFER_AMOUNT_NOT_RESERVEDPix transfer amount not reserved.Erro ao reservar dinheiro para transferência.
400TRANSFER_ORDER_NOT_PROCESSEDPix transfer order not processed.A transferência não foi processada.
400INTERNAL_TRANSFER_NOT_COMPLETEDPix transfer order not processedA transferência interna de Pix não foi completada.
400SCHEDULE_NOT_ALLOWEDAgendamento não permitido.
400INVALID_END_TO_END_IDendToEndId inválido.
400END_2_END_ID_ALREADY_USEDThe EndToEnd informed already been used by another transaction.O endToEndId informado já está sendo utilizado em outra transação.
400INVALID_PARAMETERSThe QR Code is expired. Payment after its expiration date is not allowed.Não é permitido realizar pagamentos após a expiração do QR Code.
404ACCOUNT_NOT_FOUNDAccount not found for fund transfer.Conta não encontrada.

Recordamos que esta API também poderá retornar erros comuns entre todos os endpoints. Portanto, recomendamos a consulta da documentação de erros, onde é possível encontrar as mensagens comuns em inglês que acompanham os erros 400 (se houver).

Eventos

Caso o parceiro deseje receber mensagens referentes aos eventos relacionados a esse endpoint, é preciso configurar o webhook. Os eventos são:

EventoDescrição
PIX_CASHOUT_WAS_COMPLETEDPagamento via Pix finalizado.
PIX_CASHOUT_WAS_CANCELEDA reserva de valor para a transação (hold) não foi concluída com sucesso, resultando no cancelamento da transação.
PIX_CASHOUT_WAS_UNDONEEmbora a reserva de valor para a transação (hold) tenha sido realizada com sucesso (o status do saldo foi modificado de 'available' para 'in-process'), a etapa de verificação antifraude resultou em reprovação, levando à reversão do status do saldo de 'in_process' para 'available' novamente.

📘

Nota

Se a reserva de valor para a transação (hold) for realizada com sucesso (o saldo foi atualizado para o status in-process), e a etapa de verificação antifraude for aprovada, mas ocorrer uma falha durante o processo, a transação será cancelada e o saldo retornará ao status "available" novamente. Neste cenário, o parceiro receberá dois eventos: PIX_CASHOUT_WAS_CANCELED e PIX_CASHOUT_WAS_UNDONE.