Skip to content
Última atualização

API Direta (Pix Agendado e Recorrente)

Com a Iniciação de Pagamentos de Open Finance (OFPI) da Belvo, você pode coletar pagamentos agendados de seus clientes e otimizar a experiência de pagamento deles. Neste guia, mostraremos:

  • o fluxo geral de dados
  • como criar uma intenção de pagamento para coletar pagamentos agendados ou recorrentes
  • os status de pagamento e notificações
  • como cancelar pagamentos agendados ou recorrentes
Pré-requisitos

Por favor, certifique-se de ter concluído todas as etapas em nosso artigo dedicado de pré-requisitos antes de continuar este guia.

Visão geral do fluxo de dados

Como você pode ver no diagrama abaixo, o fluxo de dados para criar um pagamento agendado ou recorrente envolve:

  1. Criar uma intenção de pagamento (contendo as informações necessárias para que o pagamento seja processado na Open Finance Network).
  2. Ouvir notificações sobre o pagamento agendado.
  3. No dia do pagamento agendado, ouvir o OBJECT_CREATED webhook do recurso de transações.
  4. Obter os detalhes da transação quando o pagamento for concluído.

Para mais detalhes sobre as notificações que você pode receber, bem como o ciclo de vida de um pagamento agendado ou recorrente, consulte a Seção de status e notificações de pagamento deste guia.

Criar uma Payment Intent agendada

A Payment Intent contém todas as informações necessárias para registrar e processar o pagamento na Open Finance Network. Para reduzir a fricção para o seu cliente, recomendamos que você crie sua tela de pagamento para que possa enviar todas as informações em apenas uma chamada POST.

Para criar uma Payment Intent Agendada ou Recorrente, você precisará fazer uma solicitação POST Criar uma Payment Intent com o seguinte payload:

Com cliente previamente criado
{
  "amount": "1234.12",
  "description": "B23A-Shoe-Brown-Sneaker",
  "statement_description": "Super Shoe Store - Brown Sneakers",
  "allowed_payment_method_types": ["open_finance"],
  "external_id": "2c75c041-9cc7-430a-84e9-3b234aae76a2",
  "confirm": true,
  "payment_method_details": {
    "open_finance": {
      "beneficiary_bank_account": "a80d5a9d-20ae-479a-8dd7-ff3443bcbbfc",
      "payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
      "callback_url": "https://www.acmecorp.com/checkout/3487321",
      "schedule": {} // veja as seções dedicadas abaixo
    }
  },
  "customer": "4714c93c-0132-4da4-b8fe-659515e1b1b6"
}
ParâmetroObrigatórioDescrição
amountsimO valor do pagamento como uma string.
descriptionsimA descrição do pagamento para seus propósitos internos.
statement_descriptionopcional (mas recomendado)A descrição que aparecerá no extrato bancário do cliente (altamente recomendado). Nota: Se você não usar o parâmetro statement_description, o valor de description será usado como a descrição do extrato.
allowed_payment_method_typessimO parâmetro allowed_payment_method_types indica qual método de pagamento deve ser usado. Para pagamentos no Brasil, isso deve ser definido como ["open_finance"].
external_idopcional (mas recomendado)Um identificador único adicional (UUID) para o recurso para fins internos. Isso pode ser útil para rastrear o recurso em seu sistema e para fins de depuração.
confirmsimIndica que o pagamento está pronto para processamento.
payment_method_details.open_financesimNo objeto open_finance, você deve fornecer os seguintes detalhes sobre o pagamento: beneficiary_bank_account: O id da conta bancária que receberá os fundos do pagamento. payer_institution: O id da instituição de onde o pagamento é feito. callback_url: A URL para a qual seu usuário deve ser redirecionado após aprovar o pagamento em sua instituição bancária. schedule: Veja as seções dedicadas abaixo para detalhes sobre cada agendamento que você pode solicitar. cpf: (Apenas quando o cliente é uma empresa) O CPF do usuário que está fazendo o pagamento.
customersimO id do cliente previamente criado que fará o pagamento. Opcionalmente, você também pode criar o cliente ao mesmo tempo (veja o exemplo de código).

Uma vez que você cria com sucesso uma Payment Intent, você precisará usar a URL no parâmetro payment_method_information.open_finance.redirect_url para redirecionar seu usuário para sua instituição financeira para confirmar o pagamento. Após confirmar o pagamento, seu usuário é redirecionado de volta para o callback_url que você forneceu na solicitação de Payment Intent.

Single

Um single pagamento agendado permite que você configure uma transação única para uma data futura específica. Isso é ideal para pagamentos pontuais onde você precisa garantir que a transação ocorra em um dia específico. Para criar um pagamento agendado único, adicione as seguintes informações à sua solicitação de Payment Intent:

Single Scheduled Payment
{
  "amount": "1234.12",
  "customer": "06dc2f14-1217-4480-9b36-550a944a39d1",
  "description": "Shoe payment - Single",
  "statement_descrption": "Super Shoe Store - Brown Sneakers",
  "allowed_payment_method_types": ["open_finance"],
  "payment_method_details": {
    "open_finance": {
      "schedule": {
        "single": {
          "date": "2024-08-01"
        }
      },
      "beneficiary_bank_account": "a80d5a9d-20ae-479a-8dd7-ff3443bcbbfc",
      "payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
      "callback_url": "https://www.acmecorp.com/checkout/3487321"
    }
  },
  "confirm": true
}
Campo DescriçãoExemplo
dateA data em que o pagamento deve ocorrer, no formato YYYY-MM-DD. A data deve ser pelo menos 1 dia no futuro e não mais que 720 dias no futuro.2024-08-01

Diário

Pagamentos agendados Diariamente permitem transações recorrentes todos os dias a partir de uma data especificada. Isso é perfeito para pagamentos frequentes e regulares, como assinaturas diárias ou serviços repetitivos. Para criar um pagamento agendado diário, adicione as seguintes informações à sua solicitação de Payment Intent:

Daily Recurring Payment
{
  "amount": "1234.12",
  "customer": "06dc2f14-1217-4480-9b36-550a944a39d1",
  "description": "Pagamento de sapato - Diário",
  "statement_descrption": "Super Loja de Sapatos - Tênis Marrom",
  "allowed_payment_method_types": ["open_finance"],
  "payment_method_details": {
    "open_finance": {
      "schedule": {
        "daily": {
          "start_date": "2025-04-09",
          "occurrences": 2
        }
      },
      "beneficiary_bank_account": "a80d5a9d-20ae-479a-8dd7-ff3443bcbbfc",
      "payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
      "callback_url": "https://www.acmecorp.com/checkout/3487321"
    }
  },
  "confirm": true
}
Campo DescriçãoExemplo
start_dateA data em que os pagamentos recorrentes devem começar, no formato YYYY-MM-DD.2024-08-01
occurrencesO número de vezes que este pagamento recorrente deve se repetir. O valor mínimo é 2 e o valor máximo é 60.52

Semanal

Pagamentos agendados Semanalmente permitem que você configure transações recorrentes em um dia específico de cada semana. Isso é útil para serviços semanais ou obrigações recorrentes que ocorrem no mesmo dia da semana. Para criar um pagamento agendado semanalmente, adicione as seguintes informações à sua solicitação de Payment Intent:

Pagamento Recorrente Semanal
{
  "amount": "1234.12",
  "customer": "06dc2f14-1217-4480-9b36-550a944a39d1",
  "description": "Pagamento de sapato - Semanal",
  "statement_descrption": "Super Loja de Sapatos - Tênis Marrom",
  "allowed_payment_method_types": ["open_finance"],
  "payment_method_details": {
    "open_finance": {
      "schedule": {
        "weekly": {
          "start_date": "2025-04-09",
          "day_of_week": "MONDAY",
          "occurrences": 2
        }
      },
      "beneficiary_bank_account": "a80d5a9d-20ae-479a-8dd7-ff3443bcbbfc",
      "payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
      "callback_url": "https://www.acmecorp.com/checkout/3487321"
    }
  },
  "confirm": true
}
Campo DescriçãoExemplo
start_dateA data em que os pagamentos recorrentes devem começar, no formato YYYY-MM-DD. Atualmente, essa data deve ser a mesma do primeiro day_of_week que você fornecer.2024-08-01
day_of_weekO dia da semana em que este pagamento deve ser liquidado. Pode ser um dos seguintes: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY ou SUNDAY.MONDAY
occurrencesO número de vezes que este pagamento recorrente deve se repetir. O valor mínimo é 2 e o valor máximo é 60.52

Mensal

Pagamentos agendados Mensalmente são projetados para transações que se repetem no mesmo dia de cada mês. Esta configuração é ideal para contas mensais, assinaturas ou qualquer pagamento mensal regular. Para criar um pagamento agendado mensalmente, adicione as seguintes informações à sua solicitação de Payment Intent:

Pagamento Recorrente Mensal
{
  "amount": "1234.12",
  "customer": "06dc2f14-1217-4480-9b36-550a944a39d1",
  "description": "Pagamento de sapato - Mensal",
  "statement_descrption": "Super Loja de Sapatos - Tênis Marrons",
  "allowed_payment_method_types": ["open_finance"],
  "payment_method_details": {
    "open_finance": {
      "schedule": {
        "monthly": {
          "start_date": "2025-04-26",
          "day_of_month": 26,
          "occurrences": 12
        }
      },
      "beneficiary_bank_account": "a80d5a9d-20ae-479a-8dd7-ff3443bcbbfc",
      "payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
      "callback_url": "https://www.acmecorp.com/checkout/3487321"
    }
  },
  "confirm": true
}
Campo DescriçãoExemplo
start_dateA data em que os pagamentos recorrentes devem começar, no formato YYYY-MM-DD. Atualmente, esta data deve ser a mesma do primeiro day_of_month que você fornecer.2024-08-01
day_of_monthO dia do mês (entre 1 e 31) em que o pagamento deve ocorrer. Nota: Se você escolher um dia que não aparece em todos os meses (por exemplo, 31), então nos meses em que essa data não ocorrer, o pagamento será feito no dia seguinte. Por exemplo, como junho tem apenas 30 dias, o pagamento será processado em 1º de julho (e depois novamente em 31 de julho). Para evitar cobrar seus usuários duas vezes no mesmo mês, sugerimos que você escolha um dia até o 28º.26
occurrencesO número de vezes que este pagamento recorrente deve se repetir. O valor mínimo é 2 e o valor máximo é 24.12

Custom

Custom pagamentos agendados oferecem flexibilidade ao permitir que você especifique um array de datas para transações recorrentes. Esta opção é perfeita para agendas irregulares ou planos de pagamento sob medida que não se encaixam em padrões de recorrência padrão. Para criar um pagamento agendado personalizado, adicione as seguintes informações à sua solicitação de Payment Intent:

Custom Recurring Payment
{
  "amount": "1234.12",
  "customer": "06dc2f14-1217-4480-9b36-550a944a39d1",
  "description": "Shoe payment - Custom Schedule",
  "statement_descrption": "Super Shoe Store - Brown Sneakers",
  "allowed_payment_method_types": ["open_finance"],
  "payment_method_details": {
    "open_finance": {
      "schedule": {
        "custom": {
          "dates": ["2024-06-27", "2024-07-27", "2024-08-26", "2024-09-25", "2024-10-25"]
        }
      },
      "beneficiary_bank_account": "a80d5a9d-20ae-479a-8dd7-ff3443bcbbfc",
      "payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
      "callback_url": "https://www.acmecorp.com/checkout/3487321"
    }
  },
  "confirm": true
}
Campo DescriçãoExemplo
datesO array de datas em que os pagamentos recorrentes devem ocorrer, no formato YYYY-MM-DD. O número mínimo de datas é 2 e o número máximo de datas é 60. As datas devem ser pelo menos 1 dia no futuro e não mais do que 720 dias no futuro.["2024-06-27", "2024-07-27"]
descriptionUma descrição do pagamento recorrente personalizado que será exibida ao seu usuário quando ele for redirecionado para o banco para dar seu consentimento e aceitar o pagamento. Nota: Recomendamos fortemente que esta mensagem esteja em português brasileiro e que explique claramente o propósito, bem como a natureza recorrente do pagamento.Os pagamentos ocorrerão a cada três dias até a data final (09.07.2024)

Payment Intents, Charges, and Transactions

Para cada pagamento agendado, a Belvo gera um objeto Charge dentro do corpo de resposta do Payment Intent. Uma vez que um Charge é processado com sucesso, a Belvo gera uma Transaction associada a esse Charge.

Por exemplo, se você criar um pagamento recorrente que ocorrerá duas vezes, o charges array no Payment Intent incluirá dois Charges. E uma vez que o primeiro Charge é processado, a Belvo gera uma Transaction associada.

Status de Pagamento e Notificações

Uma vez que você agenda um pagamento, você receberá atualizações de webhook para o Payment Intent, Charges e Transactions associados. Abaixo você pode ver um exemplo de um pagamento agendado recorrente e os status associados que cada pagamento passará. Você receberá notificações de webhook STATUS_UPDATE para cada status que está marcado com um ponto vermelho (🔴).

Quando você recebe o evento de webhook OBJECT_CREATED da Transaction, isso indica que o pagamento agendado foi liquidado.

Uma vez que todos os Charges agendados tenham sido concluídos (incluindo aqueles que falham), o status do Payment Intent será definido como SCHEDULE_FINISHED.

Para ver se um Payment Intent tem algum Charge falhado, você pode usar o método List all Charges, filtrando pelo id do Payment Intent:

curl --request GET \
--url 'https://api.belvo.com/payments/br/payment-intents/{payment_intent_id}/charges/' \
--header 'accept: application/json' \
---u [Secret Key ID]:[Secret Key PASSWORD]
CampoDescriçãoExemplo
payment_intent_idO payment-intent.id para o qual você deseja obter os Charges.65492eeb-344c-49fe-8dab-11da1be67d7a

Cancelar um pagamento

Cancelando uma cobrança específica

Para cancelar uma cobrança agendada específica, você só precisa fazer uma chamada de API POST Cancelar uma Cobrança Agendada:

Cancelar Cobrança Singular
curl 
--request POST \
--header 'accept: application/json' \
-u [Secret Key ID]:[Secret Key PASSWORD] \
--url https://api.belvo.com/payments/br/payment-intents/{payment_intent_id}/charges/{charge_id}/cancel/ \
Campo DescriçãoExemplo
payment_intent_idO payment-intent.id agendado ao qual a cobrança pertence.65492eeb-344c-49fe-8dab-11da1be67d7a
charge_idO charge.id agendado que você deseja cancelar.414c6387-2d46-45cc-84a8-e1d175aebe53

O mais tardar que você pode cancelar uma Cobrança agendada é até 23:59:00 (GMT-3) do dia anterior à data de pagamento agendada. Se você perder o prazo, receberá um erro de API da Belvo e o pagamento será processado.

Cancelando uma Payment Intent inteira

Para cancelar uma Payment Intent (e todas as Charges agendadas associadas), você só precisa fazer uma chamada de API POST Cancelar uma Payment Intent:

Cancelar Payment Intent Inteira
curl 
--request POST \
--header 'accept: application/json' \
-u [Secret Key ID]:[Secret Key PASSWORD] \
--url https://api.belvo.com/payments/br/payment-intents/{payment_intent_id}/cancel/ \
Campo DescriçãoExemplo
idO payment-intent.id que você deseja cancelar.65492eeb-344c-49fe-8dab-11da1be67d7a

Após fazer sua solicitação de cancelamento, a Belvo responderá com um 204 - No Content, e notificará você usando um webhook que o status da Payment Intent foi alterado para CANCELED.

O mais tardar que você pode cancelar uma Payment Intent agendada é até 23:59:00 (GMT-3) do dia anterior à data de pagamento agendada. Se você perder o prazo, receberá um erro de API da Belvo e o pagamento será processado.