---
title: "Enroll a new user device"
method: POST
path: "/payments/br/enrollments/"
tags: ["Enrollments (Brazil)"]
---

# Enroll a new user device

`POST /payments/br/enrollments/`

## ▶️ Usage

With the **Enroll a new user device** method, you can begin the enrollment process for a new device to allow for Biometric Pix payments.

> 🚧 Create a customer first
>
> Before you can enroll a user device, you must first create a customer.

## Request body

- CreateEnrollmentBiometricPix — Request body to create a new device enrollment.
  - `type` 'open_finance_biometric_pix', required — The type of enrollment. For 🇧🇷 Brazil's OFPI, can be either: - `open_finance_biometric_pix`: For biometric payments using the PIX network.
  - `details` object, required — The details of the enrollment to be created.
    - `customer` string, uuid, required — Belvo's unique ID to reference the customer.
    - `institution` string, uuid, required — Belvo's unique ID to reference the payer's institution.
    - `name` string — A human-readable name for the device enrollment.
    - `callback_url` string, uri — The URL to redirect your user to after the enrollment process is completed.
    - `platform` 'ANDROID' | 'BROWSER' | 'CROSS_PLATFORM' | 'IOS', required — The platform of the device to be enrolled. Can be either: - `ANDROID`: For Android devices. - `BROWSER`: For web browsers. - `CROSS_PLATFORM`: For cross-platform devices. - `IOS`: For iOS devices.
    - `risk_signals` object, required — Details regarding the device to be enrolled. This is the JSON-formatted object received from the Belvo Android or iOS SDK.

## Response `201`

OK (Created)

- EnrollmentBiometricPix — Details regarding the device enrollment for Biometric Pix payments.
  - `id` string, uuid — Belvo's unique identifier of the enrollment.
  - `created_by` string, uuid — The Belvo ID of the merchant that created the enrollment.
  - `created_at` string, date-time — The ISO-8601 timestamp of when the data point was created in Belvo's database.
  - `updated_at` string, date-time — The ISO-8601 timestamp of when the enrollment was last updated.
  - `external_id` string, uuid — An additional unique identifier for the resource for internal purposes. {% admonition type="success" name="Highly Recommended" %} We recommend using this field to store your own unique identifier for each resource (customer, bank account, payment intent, or enrollment). This can be useful for tracking the resource in your system and for debugging purposes. {% /admonition %}
  - `type` 'open_finance_biometric_pix' — The type of enrollment. For 🇧🇷 Brazil's OFPI, can be either: - `open_finance_biometric_pix`: For biometric payments using the PIX network.
  - `status` 'PENDING' | 'SUCCEEDED' | 'CANCELED' | 'FAILED' — The status of the device enrollment. Can be either: - `PENDING`: The enrollment is pending. - `SUCCEEDED`: The enrollment was successful. - `CANCELED`: The enrollment was canceled. - `FAILED`: The enrollment failed.
  - `status_reason_code` string, nullable — A machine-readable code providing the reason for a failed enrollment. Only present when `status` is `FAILED`. Possible values: - `send_risk_signals_failed`: Enrollment rejected due to timeout while sending risk signals. - `redirection_to_institution_failed`: Enrollment rejected because the redirection to the institution was not successfully completed. - `biometric_registration_failed`: Enrollment rejected because the biometric registration was not completed successfully within the allowed time. - `too_many_device_registration_attempts`: Enrollment rejected due to too many failed device registration attempts. - `rejected_by_user`: Enrollment was manually cancelled by the user. - `device_not_supports_biometric_authentication`: Enrollment rejected because the device is not compatible with biometric authentication. - `institution_infra_failed`: Enrollment rejected due to infrastructure issues at the institution. - `blocked_by_institution_security_policy`: Enrollment rejected due to the institution security policy decisions based on risk evaluation. - `redirection_back_from_institution_failed`: Enrollment rejected because the redirection back from the institution was not successfully completed. - `biometric_validation_error`: Enrollment failed due to biometric validation or public key registration issues. - `rejected_other`: Enrollment rejected for an unspecified reason. - `canceled_due_to_expiration`: Enrollment canceled due to expiration of validity period.
  - `status_reason_message` string, nullable — A human-readable message providing more details about the reason for a failed enrollment. Only present when `status` is `FAILED`. Please see `status_reason_code` for example messages for each reason code.
  - `details` object — Details regarding the enrollment
    - `status` 'AWAITING_ACCOUNT_HOLDER_VALIDATION' | 'AWAITING_ENROLLMENT' | 'AUTHORIZED' | 'REJECTED' | 'REVOKED' — The status of the Biometric Pix enrollment. Can be either: - `AWAITING_ACCOUNT_HOLDER_VALIDATION`: The account holder needs to validate the enrollment by sending their biometric data. - `AWAITING_ENROLLMENT`: The enrollment information has been sent to the institution and is being evaluated. - `AUTHORIZED`: The enrollment has been authorized. - `REJECTED`: The institution has rejected the enrollment. - `REVOKED`: The user or the institution has revoked the enrollment.
    - `customer` string, uuid — Belvo's unique ID to reference the customer.
    - `institution` string, uuid — Belvo's unique ID to reference the institution the device is enrolled at.
    - `platform` 'ANDROID' | 'BROWSER' | 'CROSS_PLATFORM' | 'IOS' — The platform of the device to be enrolled. Can be either: - `ANDROID`: For Android devices. - `BROWSER`: For web browsers. - `CROSS_PLATFORM`: For cross-platform devices. - `IOS`: For iOS devices.
    - `name` string, nullable — An internal name for this device enrollment.
    - `callback_url` string, uri — The URL to redirect your user to after the enrollment process is completed.
    - `redirect_url` string, uri — The URL to redirect the user to complete their enrollment at the institution.
    - `risk_signals` string — An obfuscated string (`******`) used to indicate that risk signals have been provided.
    - `expires_at` string, date-time — The ISO-8601 timestamp of when the enrollment will expire. After this time, the enrollment will no longer be valid and the `status` will transition to `CANCELED` and the `status_reason_code` will be set to `canceled_due_to_expiration`.
  - `metadata` object — Optional and customizable object where you can provide any additional key-value pairs for your internal purposes. For example, an internal reference number for the enrollment. ⚠️ **Note**: You can only provide up to 50 keys (keys can have up to 50 characters each and each value can be up to 500 characters). We do not support nested objects, only ASCII values.

## Other responses

- `400` — Validation Error
- `401` — Unauthorized
- `403` — Access to Belvo API denied
- `404` — Not Found Error
- `408` — Request Timeout
- `500` — Unexpected Error

---

[API](https://skmtc.net/belvo/apis/belvo-api-docs.md) · [All operations](https://skmtc.net/belvo/apis/belvo-api-docs/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/belvo/belvo-api-docs/revisions/3423c786ece5/schema)
