Emissão de boleto
stable
Este endpoint permite que o parceiro Bankly emita boletos de depósito (Deposit) ou cobrança (Levy).
Importante
Para que seja possível utilizar o boleto emitido (gerar o pdf, realizar cancelamento, pagamento etc) , é necessário verificar se o status do boleto é Registered por meio do endpoint Consulta por authenticationCode.
Pré-requisito
Para que seja possível utilizar este endpoint, é necessário que:
- O parceiro Bankly aguarde no mínimo 10 minutos após a criação da conta, para que ela esteja apta a emitir boletos.
Requisição
Requisição HTTP
POST https://api-mtls.sandbox.bankly.com.br/bankslip
--location --request POST 'https://api-mtls.sandbox.bankly.com.br/bankslip' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'api-version: 1.0' \
--header 'Authorization: Bearer {{Token}} '
--data-raw
'{
"account": {
"number": "15164",
"branch": "0001"
},
"documentNumber": "47742663023",
"amount": 20,
"minimumAmount": 5,
"dueDate": "2022-02-15",
"closePayment": "2022-03-15",
"type": "levy",
"alias": "Boleto da compra dos livros",
"payer": {
"document": "47742663023",
"tradeName": "Editora Nísia Floresta",
"name": "Editora Nísia Floresta",
"address": {
"addressLine": "Rua 6 de Março",
"city": "Santarém",
"state": "PA",
"zipCode": "68060100"
}
},
"interest": {
"startDate": "2022-03-12",
"value": 0.50,
"type": "AmountPerCalendaryDay"
},
"fine": {
"startDate": "2022-03-12",
"value": 10,
"type": "FixedAmount"
},
"discounts": {
"limitDate": "2022-03-10",
"value": 10,
"type": "FixedAmountUntilLimitDate"
}
}'
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:
Scope | Descrição |
---|---|
boleto.create | Concede acesso para emitir um boleto. |
Cabeçalhos (Headers)
Nome | Descrição |
---|---|
api-version | Obrigatório. Versão da API. Atualmente estamos na versão 1.0. |
Authorization | Obrigatório. Token de autorização do tipo Bearer. |
Parâmetros da rota (Path)
Não é necessário enviar campos no path desta requisição.
Corpo da requisição (Body)
No body, envie os seguintes campos em formato JSON:
Nome | Tipo | Descrição |
---|---|---|
account | object | Obrigatório. Objeto que contém informações sobre a conta do emissor do boleto. |
account.number | object | Obrigatório. Número da conta. |
account.branch | string | Obrigatório. Número da agência. |
documentNumber | string | Obrigatório. Número do documento (CPF ou CNPJ) do emissor. |
amount | number | Obrigatório. Valor do boleto. |
minimumAmount | number | Valor mínimo do pagamento do boleto (específico e obrigatório para boletos de cartão de crédito). |
dueDate | string | Obrigatório. Data de vencimento do boleto, no formato yyyy-MM-dd. |
closePayment | string | Data limite (yyyy-MM-dd) para o pagamento do boleto após o seu vencimento. Esse campo é de preenchimento obrigatório para a aplicação de juros e/ou multas. Em caso de juros, o valor informado nesse campo corresponde à data em que os juros param de incidir sobre o valor do boleto. |
type | string | Tipo de boleto, o qual pode ser "Deposit" (boleto de depósito), "Levy" (boleto de cobrança) ou "Invoice" (boleto de cartão de crédito). Caso o campo type não seja especificado, nosso sistema gerará um boleto de depósito (deposit) e vai desconsiderar as informações do pagador, assim como os campos referentes a juros e multas. |
alias | string | Nome para identificar o boleto externamente. |
payer | object | Objeto que contém informações sobre o pagador, que devem ser preenchidas obrigatoriamente na emissão de boleto de cobrança (Levy). Somente nesse caso os dados são considerados. |
payer.document | string | Número do documento (CPF ou CNPJ) do pagador. |
payer.tradeName | string | Nome fantasia do pagador. |
payer.name | string | Nome do pagador. |
payer.address | object | Objeto que contém informações sobre o endereço do pagador. |
payer.address.addressLine | string | Endereço do pagador. |
payer.address.city | string | Nome da cidade. Deve-se evitar acentos e outros caracteres especiais. |
payer.address.state | string | Nome do estado Deve-se respeitar o formato proposto pela ISO 3166-2:BR. Exemplo: SP. |
payer.address.zipCode | string | Código postal do endereço. |
interest | object | Objeto que contém informações sobre o juros aplicado no boleto de cobrança (Levy). Este objeto somente é obrigatório para especificações da incidência de juros após o vencimento. Caso esse objeto não seja preenchido, considera-se que não há incidência de juros no boleto. |
interest.startDate | string | Data de início para cálculo dos juros (yyyy-MM-dd). Os juros serão aplicados a pagamentos realizados a partir da data informada nesse campo. |
interest.value | number | Valor monetário ou percentual dos juros, dependendo da configuração do campo interest.type . |
interest.type | string | Regra para cálculo dos juros. Confira as possíveis regras referentes a juros na tabela abaixo. |
fine | object | Objeto que contém informações sobre a multa aplicada no boleto de cobrança (Levy). Este objeto somente é obrigatório para especificações da incidência de multa após vencimento. Caso esse objeto não seja preenchido, considera-se que não há incidência de multa no boleto. |
fine.startDate | string | Data de início para cálculo da multa (yyyy-MM-dd). A multa será aplicada a pagamentos realizados a partir da data informada nesse campo. |
fine.value | number | Valor monetário ou percentual da multa, dependendo da configuração do campo fine.type . |
fine.type | string | Tipo da regra aplicada a multa. Confira as possíveis regras referentes a multa na tabela abaixo. |
discounts | object | Objeto que contém informações sobre os descontos aplicados no boleto de cobrança (Levy). Este objeto somente é obrigatório para especificações da incidência de descontos para pagamento em até um dia antes da data de vencimento. Caso esse objeto não seja preenchido, considera-se que não há incidência de descontos no boleto. |
discounts.limitDate | string | Data limite (yyyy-MM-dd) para incidência de desconto (considera-se desde a data de emissão até um dia antes do vencimento). |
discounts.value | number | Valor monetário ou percentual do desconto, dependendo da configuração do campo discounts.type . |
discounts.type | string | Tipo da regra para cálculo do desconto. Confira as possíveis regras referentes a descontos na tabela abaixo. |
Nota
É possível aplicar juros e multa ao mesmo título.
{
"account": {
"number": "15164",
"branch": "0001"
},
"documentNumber": "47742663023",
"amount": 20,
"minimumAmount": 5,
"dueDate": "2022-02-15",
"closePayment": "2022-03-15",
"type": "levy",
"alias": "Boleto da compra dos livros",
"payer": {
"document": "47742663023",
"tradeName": "Editora Nísia Floresta",
"name": "Editora Nísia Floresta",
"address": {
"addressLine": "Rua 6 de Março",
"city": "Santarém",
"state": "PA",
"zipCode": "68060100"
}
},
"interest": {
"startDate": "2022-03-12",
"value": 0.50,
"type": "AmountPerCalendaryDay"
},
"fine": {
"startDate": "2022-03-12",
"value": 10,
"type": "FixedAmount"
},
"discounts": {
"limitDate": "2022-03-10",
"value": 10,
"type": "FixedAmountUntilLimitDate"
}
}
Importante
Se o boleto não possuir juros ou multa, o campo
closePayment
será preenchido automaticamente com o valor da data de vencimento (dueDate
).
Nota
Caso a data informada nos campos
closePayments
,startDate
ouLimitDate
corresponda a um dia de final de semana ou feriado, ela será alterada automaticamente para o primeiro dia útil subsequente.
Regras de juros, multa e descontos
Juros (Interest) | Multa (Fine) | Descontos (Discounts) |
---|---|---|
AmountPerCalendaryDay: valor monetário por dia corrido (sem distinção de fins de semana e feriados). Esse campo aceita apenas números inteiros. | FixedAmount: valor monetário fixo. | FixedAmountUntilLimitDate: valor fixo até a data limite |
PercentPerMonth: percentual ao mês. | Percent: percentual sobre o valor do título. | FixedPercentUntilLimitDate: percentual fixo até a data limite. |
Free: indica a não incidência de juros no boleto. | Free: indica a não incidência de multa. | Free: indica que não há incidência de desconto no boleto. |
AmountPerBusinessDay: valor monetário por dia útil. | --- | --- |
PercentPerMonthBusinessDay: percentual ao mês (considerando apenas os dias úteis). | --- | --- |
Resposta (Response)
O status code 202 indicará que o boleto foi emitido com sucesso.
Sendo bem-sucedido, o retorno irá trazer os seguintes campos em formato JSON:
Nome | Tipo | Descrição |
---|---|---|
account | object | Objeto que contém informações sobre a conta do pagador. |
account.number | string | Número da conta. |
account.branch | string | Número da agência. |
authenticationCode | string | Identificador único do boleto. |
{
"account": {
"number": "string",
"branch": "string"
},
"authenticationCode": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}
Após a solicitação da emissão de um boleto, em background, ocorrerá o processo de registro que demora cerca de 10 segundos. Inicialmente o status do boleto será Processed.
Importante
Enquanto o boleto não estiver com o status Registered (registrado), não será possível efetuar seu pagamento, emitir o pdf ou realizar seu cancelamento.
Portanto, é preciso consultar o status do boleto para dar continuidade ao processo de emissão.
Dica
Para simular uma requisição nesse endpoint, acesse o API Reference.
Consulta de status
Como explicitado anteriormente, somente é possível dar continuidade ao processo de emissão quando o boleto apresentar o status Registered (registrado).
Realize a consulta do status por meio do endpoint consulta por authenticationCode
Erros
Este endpoint pode retornar erros específicos, conforme a tabela a seguir:
Status code | Código | Mensagem | Descrição |
---|---|---|---|
400 | ACCOUNT_VALIDATE | --- | Agência ou conta inválida. |
400 | REGISTEREDNAME_INVALID | --- | Nome de cadastro incorreto. |
400 | ADDRESS_INVALID | --- | Esse erro retorna quando o emissor não tem endereço cadastrado previamente. |
400 | ACCOUNT_INTERNAL_ERROR | --- | Há algum erro na requisição. Verifique o preenchimento dos campos. |
400 | SCOUTER_QUANTITY | --- | Limite de boletos emitidos excedido. |
400 | SCOUTER_MAXIMUM_AMOUNT | --- | Valor acima do máximo permitido para boleto. |
400 | SCOUTER_MINIMUM_AMOUNT | --- | Valor abaixo do mínimo permitido para boleto. |
400 | INVALID_PARAMETER | Close Payment must be greater than or equal to 'dd/mm/aaaa 00:00:00. | A data limite de pagamento precisa ser maior ou igual à data de vencimento. A mensagem de erro trará a data de vencimento somada a um dia. |
400 | INVALID_PARAMETER | Close Payment must be greater than or equal to 'dd/mm/aaaa 00:00:00. | A data limite de pagamento precisa ser maior que a data de início de aplicação dos juros. |
400 | INVALID_PARAMETER | Close Payment must be greater than or equal to 'dd/mm/aaaa 00:00:00. | A data limite de pagamento precisa ser maior que a data de início de aplicação da multa. |
400 | INVALID_PARAMETER | Fine. Start Date' must be greater than or equal to 'dd/mm/aaaa 00:00:00. | A data de início de aplicação da multa precisa ser maior que a data de vencimento. |
400 | INVALID_PARAMETER | Fine. Value' must be greater than 0. | O valor da multa não pode ser negativo. |
400 | INVALID_PARAMETER | Fine. Value' must be between 0 and 100. You entered XXX. | O percentual da multa não pode ser maior que 100. |
400 | INVALID_PARAMETER | Interest. Start Date' must be greater than or equal to 'dd/mm/aaaa 00:00:00, | A data de início de aplicação dos juros precisa ser maior que a data de vencimento. |
400 | INVALID_PARAMETER | Interest.Value' must be greater than 0. | O valor dos juros não pode ser negativo. |
400 | INVALID_PARAMETER | Interest. Value' must be between 0 and 100. You entered XXX. | O percentual dos juros não pode ser maior que 100. |
400 | INVALID_PARAMETER | Discounts. Limit Date' must be less than or equal to 'dd/mm/aaaa 00:00:00. | A data limite de desconto precisa ser inferior à data de vencimento. |
400 | INVALID_PARAMETER | Discounts. Value' must be less than or equal to 'XXX. | O valor do desconto precisa ser menor que o valor do boleto. |
400 | INVALID_PARAMETER | Discounts. Value' must be between 0 and 100. You entered XXX. | O percentual do desconto não pode ser maior que 100. |
400 | INVALID_PARAMETER | Minimum Amount' must be less than or equal to X | Valor mínimo do boleto de cartão de crédito deve ser menor que o valor do boleto. |
400 | INVALID_PARAMETER | Minimum Amount' must be equal to '0' | Boleto de depósito ou cobrança não deve ter valor mínimo (ou deve ser igual a zero). |
400 | INVALID_PARAMETER | Minimum Amount' must be greater than '0' | Boleto de cartão de crédito deve ter valor mínimo maior que zero. |
400 | INVALID_PARAMETER | Fine. 'Type' must be equal to 'Free' | Boleto de depósito não permite multa. |
400 | INVALID_PARAMETER | Interest. Type' must be equal to 'Free' | Boleto de depósito não permite juros. |
400 | INVALID_PARAMETER | Discounts. Type' must be equal to 'Free' | Boleto de depósito não permite desconto. |
400 | INVALID_PARAMETER | 'Payer' must not be empty. | Boleto de cobrança e boleto de cartão de crédito precisam de informação do pagador. |
400 | BNF_NOT_FOUND | --- | Beneficiário não encontrado. |
401 | BANKSLIP_UNAUTHORIZED | --- | Acesso não autorizado. |
403 | BLOCKED_BY_RISK_ANALYSIS | --- | Bloqueio por análise de fraude. |
403 | BLOCKED_BY_BNF | --- | Houve um bloqueio devido a beneficiário inativo ou excluído. |
Válido lembrar que a API também poderá retornar erros comuns entre todos os endpoints.
Eventos
Caso o parceiro deseje receber mensagens referentes aos eventos relacionados a esse endpoint, é preciso configurar o webhook. Os eventos são:
Nome do evento (name ) | Descrição |
---|---|
BOLETO_WAS_REGISTERED | O boleto está apto para pagamento. |
Updated 18 days ago