Pular para o conteúdo principal
Pagar um boleto é um fluxo de etapas separadas. Você cria o pagamento a partir do código de barras do boleto, o que consulta o boleto no banco e informa quem você está pagando e o valor; define os detalhes, se faltar algum; e então o confirma — só aí o dinheiro é movimentado. Se as políticas de negócio da sua organização exigirem aprovação para o pagamento, você o envia para aprovação em vez de confirmá-lo — veja Políticas de negócio e aprovações.

Fluxo

Etapa 1: Criar o pagamento

Envie a linha digitável do boleto (47 dígitos para um boleto bancário, 48 para uma conta de consumo ou guia de tributo) ou o seu código de barras (44 dígitos) em barcode. Envie só os dígitos; os dígitos verificadores precisam estar corretos.
O boleto é consultado no banco e o pagamento é criado como REQUESTED — nada é pago ainda. Revise quem você está pagando (payee, payeeDocument) e quanto (txnUpdatedAmount) antes de continuar:
Guarde o _id do pagamento — ele é o {boletoId} de todas as próximas etapas. txnUpdatedAmount é o valor nominal (txnOriginalAmount) com o desconto, a multa e os juros de hoje aplicados. pendingConfirmation guarda o que será pago, e policy, o que as políticas de negócio da sua organização dizem sobre ele. type distingue os dois tipos de boleto: GENERIC é um boleto bancário, com vencimento; UTILITY_BILL é uma conta de consumo ou guia de tributo (energia, água, telefone, impostos).
Um boleto que já foi pago não pode ser pago de novo: a criação do pagamento responde 422 ALREADY_PAID, e nada é criado.
Referência: Criar um pagamento de boleto

Etapa 2: Definir os detalhes, se faltar algum

A confirmação paga exatamente o que está em pendingConfirmation, então exige o valor e a categoria de saldo. O valor costuma ser conhecido depois da criação — o que você enviou ou, senão, o que o boleto cobra (txnUpdatedAmount, ou o valor de face quando ele é 0); só um boleto que não informa valor nenhum o deixa de fora. Se o pagamento já tem os dois, pule esta etapa. Caso contrário — ou para pagar outro valor, mudar o dia ou preencher campos personalizados —, defina-os:
amount e category são obrigatórios aqui, e o que você envia substitui o que estava armazenado. Um boleto que aceita uma faixa de valores recebe um valor entre txnMinAmount e txnMaxAmount; o banco verifica o valor quando o pagamento é confirmado. A resposta traz uma policy atualizada. Referência: Definir os detalhes de um pagamento de boleto

Etapa 3: Confirmar o pagamento

Quando policy.actions.autoAction for APPROVE, confirme o pagamento — sem corpo:
Uma confirmação bem-sucedida responde 200 com o pagamento PAID: o dinheiro saiu da carteira, e confirmedAmount e confirmedAt registram isso. Se o banco recusar o pagamento — por saldo insuficiente ou por um limite, por exemplo —, ele passa a FAILED, com o motivo em failReason, e você recebe o erro. Um pagamento FAILED não pode ser tentado de novo: crie outro. Quando autoAction for NONE, o pagamento precisa de aprovação: envie-o para aprovação em vez de confirmá-lo. Com DENY, as políticas o recusam. Referência: Confirmar um pagamento de boleto

Pagar em um dia futuro

Envie scheduledAt (YYYY-MM-DD) ao criar o pagamento, ou com PUT, para pagar em um dia futuro. A confirmação então responde 201 com o agendamento, e o pagamento passa a SCHEDULED; nesse dia, um novo pagamento é criado a partir do mesmo código de barras e pago.
  • Um boleto bancário (GENERIC) só pode ser agendado para o vencimento — ou, quando o vencimento cai em um fim de semana ou feriado, para o próximo dia útil. Qualquer outro dia futuro é recusado com 422 SCHEDULED_AT_NOT_ALLOWED, cuja mensagem informa o dia permitido. Um boleto bancário sem vencimento pode ser agendado para qualquer dia útil.
  • Uma conta de consumo ou guia de tributo (UTILITY_BILL) pode ser agendada para qualquer dia futuro.
  • Um dia anterior a hoje é recusado com 422 INVALID_SCHEDULED_AT. Na criação, com o dia de hoje ou sem scheduledAt, o pagamento é feito assim que é confirmado. Com PUT, deixar scheduledAt de fora mantém o dia já definido; envie o dia de hoje para voltar a pagar assim que for confirmado.
  • Nesse dia, o novo pagamento é debitado da categoria de saldo de uso geral (FLEX_INTERNATIONAL), qualquer que seja a category que você definiu, e não leva nenhum dos campos personalizados do pagamento — por isso ele falha se a sua organização tiver um campo personalizado de transação obrigatório. Nesses casos, pague o boleto no próprio dia.
  • O valor de um pagamento para um dia futuro precisa ser um que o boleto aceite (entre txnMinAmount e txnMaxAmount, quando ele os informa); senão a confirmação é recusada com 400 INVALID_AMOUNT e nada é agendado.

Cancelar um pagamento

Um pagamento que ainda não foi pago — REQUESTED, aguardando aprovação ou SCHEDULED — pode ser cancelado. Cancelar um pagamento agendado também cancela o agendamento dele:

Erros comuns

Os erros vêm no envelope de erro, com um code estável. Quando o banco recusa um boleto, code traz o motivo do banco — alguns motivos vêm em minúsculas, com a mensagem Unknown error, então baseie sua lógica no code, não na mensagem. A página de referência de cada endpoint lista todos os erros que ele pode retornar.

Acompanhar um pagamento

Consulte o pagamento para ver o status dele, ou liste os pagamentos de boleto de uma carteira — filtre por status, por exemplo ?status=PAID,FAILED. Para ser notificado, assine o webhook BANK_SLIP_PAID, enviado quando um boleto é pago a partir de uma carteira.

Próximos passos

Políticas de negócio e aprovações

Envie pagamentos para aprovação quando as políticas da sua organização exigirem.

Enviar um pagamento Pix

Pague por chave Pix, QR Code ou dados bancários.