Con la Iniciación de Pagos de Finanzas Abiertas (OFPI) de Belvo, puedes recolectar pagos de tus clientes y optimizar su experiencia de pago. En esta guía, te mostraremos:
- el flujo general de datos
- cómo crear una Payment Intent para recolectar pagos
- rastrear el estado de tus solicitudes de pago
Por favor, asegúrate de haber completado todos los pasos en nuestro artículo dedicado a los requisitos previos antes de continuar con esta guía.
Como puedes ver en el diagrama a continuación, el flujo de datos para crear un pago usando Pix a través de Open Finance involucra:
- Crear una Payment Intent (que contiene la información necesaria para que el pago sea procesado en la Red de Open Finance).
- Solicitar a tu usuario que confirme los detalles del Pix.
- Confirmar la Payment Intent para iniciar el pago.
- Redirigir al Pagador a su institución bancaria para aprobar el pago.
- Escuchar los webhooks
SUCCEEDEDde los recursos Payment Intents y Charges.

La Payment Intent contiene toda la información necesaria para registrar y procesar el pago en la Red de Open Finance. Al usar Claves Pix como beneficiario, necesitarás realizar dos llamadas a la API para completar el proceso de pago: primero, crear la Payment Intent y luego confirmarla.
Para crear una Payment Intent, necesitarás hacer una solicitud POST Crear una Payment Intent con el siguiente payload:
{
"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": false,
"payment_method_details": {
"open_finance": {
"pix_key": "chosen-pix-key",
"payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
"callback_url": "https://www.acmecorp.com/checkout/3487321"
}
},
"customer": "4714c93c-0132-4da4-b8fe-659515e1b1b6"
}| Parámetro | Requerido | Descripción |
|---|---|---|
amount | si | El monto del pago como una cadena de texto. |
description | si | La descripción del pago para tus propósitos internos. |
statement_description | opcional (pero recomendado) | La descripción que aparecerá en el estado de cuenta del banco del cliente (altamente recomendado). Nota: Si no utilizas el parámetro statement_description, el valor de description se usará como la descripción del estado de cuenta. |
allowed_payment_method_types | si | El parámetro allowed_payment_method_types indica qué método de pago debe usarse. Para pagos en Brasil, esto debe establecerse en ["open_finance"]. |
external_id | opcional (pero recomendado) | Un identificador único adicional (UUID) para el recurso con fines internos. Esto puede ser útil para rastrear el recurso en tu sistema y para propósitos de depuración. |
confirm | si | Indica que el pago está listo para ser procesado. Para la creación inicial de la Payment Intent, esto debe establecerse en false. Confirmarás el pago en un paso separado. |
payment_method_details.open_finance | si | En el objeto open_finance, debes proporcionar los siguientes detalles sobre el pago:
|
customer | si | El id del cliente previamente creado que realizará el pago. Opcionalmente, también puedes crear el cliente al mismo tiempo (ver el ejemplo de código). |
En la respuesta de la Payment Intent, recibirás los siguientes campos destacados. Necesitas mostrarlos en tu aplicación al usuario para que puedan confirmar que esta es la información de pago correcta. Después de que confirmen los detalles, necesitarás confirmar la Payment Intent en el siguiente paso.
{
"id": "0d3ffb69-f83b-456e-ad8e-208d0998d71d",
"customer": "1c83ead8-6665-429c-a17a-ddc76cb3a95e",
"external_id": "4b8a81a0-e33c-45a6-8567-479efb105f73",
"created_at": "2022-02-09T08:45:50.406032Z",
"created_by": "bcef7f35-67f2-4b19-b009-cb38795faf09",
"updated_at": "2022-02-09T08:45:50.406032Z",
"status": "REQUIRES_PAYMENT_METHOD",
"amount": "1234.12",
"currency": "BRL",
"description": "Training shoes",
"statement_description": "Super Shoe Store - Brown Sneakers",
"selected_payment_method_type": "open_finance",
"allowed_payment_method_types": ["open_finance"],
"payment_method_details": {
"open_finance": {
"pix_key": "53497b80-81a2-4ea8-9296-83a909c05bdf",
"payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
"callback_url": "https://www.acmecorp.com/checkout/3487321"
}
},
"payment_method_information": {
"open_finance": {
"pix_key_details": {
"identifier": "23******00",
"name": "João da Silva"
}
}
}
}En el caso de que la Clave Pix proporcionada sea un CPF, dirección de correo electrónico o número de teléfono, el valor en payment_method_details.open_finance.pix_key será enmascarado. Si es un CNPJ o una Clave Pix aleatoria UUID, el valor no será enmascarado.
Para confirmar la Payment Intent, necesitarás hacer una solicitud POST Completar una Payment Intent con el siguiente payload:
{
"confirm": true
}Una vez que hayas completado exitosamente una Payment Intent, necesitarás usar la URL en el parámetro payment_method_information.open_finance.redirect_url para redirigir a tu usuario a su institución financiera para confirmar el pago. Después de confirmar el pago, tu usuario es redirigido de vuelta a la callback_url que proporcionaste en la solicitud de Payment Intent.
{
"id": "0d3ffb69-f83b-456e-ad8e-208d0998d71d",
"customer": "1c83ead8-6665-429c-a17a-ddc76cb3a95e",
"external_id": "4b8a81a0-e33c-45a6-8567-479efb105f73",
"created_at": "2022-02-09T08:45:50.406032Z",
"created_by": "bcef7f35-67f2-4b19-b009-cb38795faf09",
"updated_at": "2022-02-09T08:45:50.406032Z",
"status": "REQUIRES_ACTION",
"amount": "1234.12",
"currency": "BRL",
"description": "Training shoes",
"statement_description": "Super Shoe Store - Brown Sneakers",
"selected_payment_method_type": "open_finance",
"allowed_payment_method_types": ["open_finance"],
"payment_method_details": {
"open_finance": {
"pix_key": "53497b80-81a2-4ea8-9296-83a909c05bdf",
"payer_institution": "600f1b4a-1ef9-4f89-b341-1a35f0c32cc0",
"callback_url": "https://www.acmecorp.com/checkout/3487321"
}
},
"payment_method_information": {
"open_finance": {
"provider_request_id": "978c0c97ea847e78e8849634473c1f1",
"redirect_url": "https://wakandanational.com/",
"end_to_end_id": "F203262942022211117487a213b1d140",
"settlement_date": "2024-10-22",
"pix_key_details": {
"identifier": "23******00",
"name": "João da Silva"
}
}
}
}Para cada Payment Intent confirmado, Belvo genera un objeto Charge dentro del cuerpo de respuesta del Payment Intent.
Recibirás notificaciones de webhook tanto para el Payment Intent como para el Charge asociado a medida que el pago pasa por diferentes estados.
A continuación, puedes ver un ejemplo de un pago y los estados asociados por los que pasará el pago. Recibirás notificaciones de webhook STATUS_UPDATE para cada estado que esté marcado con un punto rojo (🔴).

Cuando recibas los eventos de webhook SUCCEEDED de Payment Intent y Charge, esto indica que el pago dado fue liquidado.
Una vez que crees la Payment Intent, Belvo te proporcionará actualizaciones sobre el pago a través de webhooks. Como puedes ver en la imagen de la sección Descripción general del flujo de datos, recibirás los siguientes webhooks durante el proceso de pago:
| Evento | Recurso | Descripción |
|---|---|---|
STATUS_UPDATE | Payment Intents | Los eventos STATUS_UPDATE para Payment Intents indican la etapa del proceso de pago de Pix via Open Finance. Recibirás las siguientes actualizaciones de estado: REQUIRES_ACTION, PROCESSING y SUCCEEDED. > Nota: Aparte de responder al evento con un 200 OK, no se requiere ninguna acción adicional. |
STATUS_UPDATE | Charges | Los eventos STATUS_UPDATE para Charges indican la etapa del proceso de pago de Pix via Open Finance. Recibirás las siguientes actualizaciones de estado: SUCCEEDED. > Nota: Aparte de responder al evento con un 200 OK, no se requiere ninguna acción adicional. |