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:

ScopeDescrição
boleto.createConcede acesso para emitir um boleto.

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.

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:

NomeTipoDescrição
accountobjectObrigatório. Objeto que contém informações sobre a conta do emissor do boleto.
account.numberobjectObrigatório. Número da conta.
account.branchstringObrigatório. Número da agência.
documentNumberstringObrigatório. Número do documento (CPF ou CNPJ) do emissor.
amountnumberObrigatório. Valor do boleto.
minimumAmountnumberValor mínimo do pagamento do boleto (específico e obrigatório para boletos de cartão de crédito).
dueDatestringObrigatório. Data de vencimento do boleto, no formato yyyy-MM-dd.
closePaymentstringData 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.
typestringTipo 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.
aliasstringNome para identificar o boleto externamente.
payerobjectObjeto 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.documentstringNúmero do documento (CPF ou CNPJ) do pagador.
payer.tradeNamestringNome fantasia do pagador.
payer.namestringNome do pagador.
payer.addressobjectObjeto que contém informações sobre o endereço do pagador.
payer.address.addressLinestringEndereço do pagador.
payer.address.citystringNome da cidade. Deve-se evitar acentos e outros caracteres especiais.
payer.address.statestringNome do estado Deve-se respeitar o formato proposto pela ISO 3166-2:BR. Exemplo: SP.
payer.address.zipCodestringCódigo postal do endereço.
interestobjectObjeto 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.startDatestringData 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.valuenumberValor monetário ou percentual dos juros, dependendo da configuração do campo interest.type.
interest.typestringRegra para cálculo dos juros. Confira as possíveis regras referentes a juros na tabela abaixo.
fineobjectObjeto 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.startDatestringData 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.valuenumberValor monetário ou percentual da multa, dependendo da configuração do campo fine.type.
fine.typestringTipo da regra aplicada a multa. Confira as possíveis regras referentes a multa na tabela abaixo.
discountsobjectObjeto 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.limitDatestringData limite (yyyy-MM-dd) para incidência de desconto (considera-se desde a data de emissão até um dia antes do vencimento).
discounts.valuenumberValor monetário ou percentual do desconto, dependendo da configuração do campo discounts.type.
discounts.typestringTipo 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 ou LimitDate 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:

NomeTipoDescrição
accountobjectObjeto que contém informações sobre a conta do pagador.
account.numberstringNúmero da conta.
account.branchstringNúmero da agência.
authenticationCodestringIdentificador ú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 codeCódigoMensagemDescrição
400ACCOUNT_VALIDATE---Agência ou conta inválida.
400REGISTEREDNAME_INVALID---Nome de cadastro incorreto.
400ADDRESS_INVALID---Esse erro retorna quando o emissor não tem endereço cadastrado previamente.
400ACCOUNT_INTERNAL_ERROR---Há algum erro na requisição. Verifique o preenchimento dos campos.
400SCOUTER_QUANTITY---Limite de boletos emitidos excedido.
400SCOUTER_MAXIMUM_AMOUNT---Valor acima do máximo permitido para boleto.
400SCOUTER_MINIMUM_AMOUNT---Valor abaixo do mínimo permitido para boleto.
400INVALID_PARAMETERClose 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.
400INVALID_PARAMETERClose 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.
400INVALID_PARAMETERClose 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.
400INVALID_PARAMETERFine. 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.
400INVALID_PARAMETERFine. Value' must be greater than 0.O valor da multa não pode ser negativo.
400INVALID_PARAMETERFine. Value' must be between 0 and 100. You entered XXX.O percentual da multa não pode ser maior que 100.
400INVALID_PARAMETERInterest. 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.
400INVALID_PARAMETERInterest.Value' must be greater than 0.O valor dos juros não pode ser negativo.
400INVALID_PARAMETERInterest. Value' must be between 0 and 100. You entered XXX.O percentual dos juros não pode ser maior que 100.
400INVALID_PARAMETERDiscounts. 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.
400INVALID_PARAMETERDiscounts. Value' must be less than or equal to 'XXX.O valor do desconto precisa ser menor que o valor do boleto.
400INVALID_PARAMETERDiscounts. Value' must be between 0 and 100. You entered XXX.O percentual do desconto não pode ser maior que 100.
400INVALID_PARAMETERMinimum Amount' must be less than or equal to XValor mínimo do boleto de cartão de crédito deve ser menor que o valor do boleto.
400INVALID_PARAMETERMinimum 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).
400INVALID_PARAMETERMinimum Amount' must be greater than '0'Boleto de cartão de crédito deve ter valor mínimo maior que zero.
400INVALID_PARAMETERFine. 'Type' must be equal to 'Free'Boleto de depósito não permite multa.
400INVALID_PARAMETERInterest. Type' must be equal to 'Free'Boleto de depósito não permite juros.
400INVALID_PARAMETERDiscounts. Type' must be equal to 'Free'Boleto de depósito não permite desconto.
400INVALID_PARAMETER'Payer' must not be empty.Boleto de cobrança e boleto de cartão de crédito precisam de informação do pagador.
400BNF_NOT_FOUND---Beneficiário não encontrado.
401BANKSLIP_UNAUTHORIZED---Acesso não autorizado.
403BLOCKED_BY_RISK_ANALYSIS---Bloqueio por análise de fraude.
403BLOCKED_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_REGISTEREDO boleto está apto para pagamento.