Reach new audiences and convert more users by easily and safely connecting to their financial data, understanding their behavior and enabling instant payments with open finance. Through our API, you can access:
Belvo is an open banking API for Latin America that allows companies to access banking and fiscal information in a secure as well as agile way.
Through our API, you can access:
You can also use our API to make payments in:
If you woud like the response documentation in Excel or CSV form, please download them from our public GitHub Reposiitory: Belvo Open Finance Data Dictionaries.
Our EXCEL and CSV files are additionally localized into Spanish and Portuguese (Brazil).
Available for:
Use our Sandbox environment to build your integration. We offer dummy data that mimics that of real-world use cases, which means you can test out all the endpoints, use the widget, and implement webhooks - just as you would with real-world data!
All you need to get started with the Sandbox environment is to get your API keys. We really recommend that you start creating your integration in this environment.
Available for:
After you have tested your integration in the Sandbox environment and are ready to go live, you'll need to request access to our Production environment. After you request access, our Sales Team will get in contact with you to schedule a meeting just to ensure your needs are met, and then you'll just need to go through a certification process with one of our engineers to make sure that your integration is running optimally. To prepare for the certification meeting, just follow our Integration checklist.
Once your integration is certified, all you'll need to do is:
sandbox.belvo.com
to api.belvo.com
.We use the following HTTP status code in the response depending on the success or failure:
Status Code | Description |
---|---|
200 | ✅ Success - The content is available in the response body. |
201 | ✅ Success - The content was created successfully on Belvo. |
204 | ✅ Success - No content to return. |
400 | ❌ Bad Request Error - Request returned an error, detail in the content. |
401 | ❌ Unauthorized - The Belvo credentials provided are not valid. |
404 | ❌ Not Found - The resource you try to access cannot be found. |
405 | ❌ Method Not Allowed - The HTTP method you are using is not accepted for this resource. |
408 | ❌ Request Timeout - The request timed out and was terminated by the server. |
428 | ❌ MFA Token Required - MFA token was required by the institution to connect. |
500 | ❌ Internal Server Error - The detail of the error is available in the response body. |
Belvo API errors are returned in JSON format. For example, an error might look like this:
[
{
"request_id": "a6e1c493d7a29d91aed4338e6fcf077d",
"message": "This field is required.",
"code": "required",
"field": "link"
}
]
Typically, an error response will have the following parameters:
request_id
: a unique ID for the request, you should share it with the Belvo support team for investigations.message
: human-readable description of the error.code
: a unique code for the error. Check the table below to see how to handle each error code.field
(optional): The specific field in the request body that has an issue.When you need help with a specific error, include the request identifier (request_id
) in your message to the Belvo support team. This will speed up investigations and get you back up and running in no time at all.
For a full list of errors and how to troubleshoot them, please see our dedicated Error Handling article.
Implement an automated exponential backoff of up to five retries. We recommend using a base interval of three seconds with a factor of two. For example, the first retry should be after three seconds, the second retry after six seconds (2 * 3), the third retry after 12 seconds (2 * 6), the fourth retry after 24 seconds (2 * 12), and the fifth retry after 48 seconds (2 * 24).
You should not retry making requests if you receive a 40x response, as this is a client error.
The only exception is the “Too Many Sessions” error, as it means that your end-user is accessing the account from another browser at the same time. In this case, please implement the same retry policy as with 50x errors.
In our schema, you may see that a field has been marked as deprecated
. This means that this field is no longer maintained by the Belvo team. You may still receive data for this field depending on the institution, however, you should not rely on this field.
In our API specification, you'll see that some response parameters will have a required annotation. According to the OpenAPI specification, when a response parameter is marked as required, this means that the response key must be returned. However, the value of that response parameter can be null
.
📘 Info
In short, any response parameter marked as required will be returned by our API, but the value can be set to null.
https://developers.belvo.com/_mock/apis/belvoopenapispec/
https://sandbox.belvo.com/
An institution is an entity that Belvo can access information from. It can be a:
An owner represents the person who has access to a Link and is the owner of all the accounts inside the Link.
You can use this endpoint in order to get useful information about your client, such as:
An account is the representation of a bank account inside a financial institution. A user can have one or more accounts in an institution.
For example, one user (or link) can have a checking account, several credit cards, and a loan account.
Querying for a user's account information is useful as you can get information regarding:
Our employments resource for Brazil lets you get a comprehensive view of your user's current employment history and salary information.
For each user, we return the:
At the moment, the employments resource is available for:
Our employment records resource for Mexico lets you get a comprehensive view of your user’s current social security contributions and employment history.
With Belvo's employment records resource for Mexico, you can access information about your user's current social security contributions and employment history. For the each user, we return the:
At the moment, the employment records resource is available for:
Belvo's Recurring Expenses API allows you to identify a user's regular payments for subscription services, such as Netflix or gym memberships, as well as utility payments, such as electricity or phone bills. We return information for up to 365 days.
📘 Info
The recurring expenses resource is only available for Checking, Savings and Credit Card accounts associated with banking links.
Omit certain fields from being returned in the response. For more information, see our Filtering responses DevPortal article.
Return only the specified fields in the response. For more information, see our Filtering responses DevPortal article.
The session you want to resume. You need to use the session
value that is provided in the 428 Token Required response that you receive after you make your POST request.
The MFA token generated by the institution which is required to continue a session.
The link.id
you want to resume. Must be the same link.id
as the one you receive in the 428 Token Required response that contains the session
ID.
https://developers.belvo.com/_mock/apis/belvoopenapispec/api/recurring-expenses/
https://sandbox.belvo.com/api/recurring-expenses/
curl -i -X PATCH \
-u <username>:<password> \
'https://developers.belvo.com/_mock/apis/belvoopenapispec/api/recurring-expenses/?fields=string&omit=string' \
-H 'Content-Type: application/json' \
-d '{
"session": "6e7b283c6efa449c9c028a16b5c249fa",
"token": "1234ab",
"link": "683005d6-f45c-4adb-b289-f1a12f50f80c",
"save_data": true
}'
Ok (when save_data=false)
Belvo's unique identifier for the current item.
Details regarding the account.
Note: For our recurring expenses resource, this account relates to the account that was analyzed to generate the recurring expenses report.
Belvo's unique identifier for the current item.
The link.id
the data belongs to.
The ISO-8601 timestamp when the data point was collected.
The ISO-8601 timestamp of when the data point was created in Belvo's database.
The type of account. We return one of the following enum values:
CHECKING_ACCOUNT
CREDIT_CARD
INVESTMENT_ACCOUNT
LOAN_ACCOUNT
PENSION_FUND_ACCOUNT
SAVINGS_ACCOUNT
UNCATEGORIZED
null
Indicates whether this account is either an ASSET
or a LIABILITY
. You can consider the balance of an ASSET
as being positive, while the balance of a LIABILITY
as negative.
The account type, as designated by the institution.
The account name, as given by the institution.
The account number, as designated by the institution.
Details regarding the current and available balances for the account.
The current balance is calculated differently according to the type of account.
The user's account balance at the collected_at
timestamp.
The amount the user has spent in the current card billing period (see credit_data.cutting_date
for information on when the current billing period finishes).
The amount remaining to pay on the users's loan.
The balance that the account owner can use.
The available balance may be different to the current
balance due to pending transactions.
The credit amount the user still has available for the current period. The available
balance may be different to the current
balance due to pending transactions or future instalments.
The present value required to pay off the loan, as provided by the institution.
Note: If the institution does not provide this value, we return null
.
The currency of the account. For example:
Please note that other currencies other than in the list above may be returned.
The public name for the type of identification. For example: "CLABE"
.
ℹ️ For 🇧🇷 Brazilian savings and checking accounts, this field will be AGENCY/ACCOUNT
.
The value for the public_identification_name
.
ℹ️ For 🇧🇷 Brazilian savings and checking accounts, this field will be the agency and bank account number, separated by a slash. For example: 0444/45722-0
.
The ISO-8601 timestamp of Belvo's most recent successful access to the institution for the given link.
The credit options associated with this account.
The maximum amount of credit the owner can receive.
The ISO-8601 timestamp when the data point was collected.
The closing date of the credit period, in YYYY-MM-DD
format.
The due date for the next payment , in YYYY-MM-DD
format.
The minimum amount to be paid on the next_payment_date
.
The minimum amount required to pay to avoid generating interest.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The recurrent monthly payment, if applicable.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The date when the last credit payment was made, in YYYY-MM-DD
format.
The loan options associated with this account.
The ISO-8601 timestamp when the data point was collected.
The initial total loan amount, calculated by the institution, when the contract was signed. This amount includes the principal + interest + taxes + fees.
Total amount of the loan (the amount the user receives).
The day of the month by which the owner needs to pay the loan (DD
).
Outstanding loan amount, that is, how much remains to pay on the principal (not including interest).
The amount remaining to pay in total, including interest.
The recurrent monthly payment, if applicable.
Breakdown of the interest applied to the loan.
The name of the type of interest rate applied to the loan.
The period that the interest is applied to the loan. We return one of the following values:
MONTHLY
YEARLY
The total number of installments required to pay the loan.
The number of installments left to pay.
The date when the loan contract was signed , in YYYY-MM-DD
format.
The date when the loan is expected to be completed, in YYYY-MM-DD
format.
The contract number of the loan, as given by the institution.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see principal
instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see outstanding_balance
instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see the interest_rates
object instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see payment_day
instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The closing day of the month for the loan.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The closing date of the loan period, in YYYY-MM-DD
format.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The date when the last loan payment was made, in YYYY-MM-DD
format.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please use payment_day
instead, in YYYY-MM-DD
format.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The institution's product ID for the account type.
The name for the recurring expense.
ℹ️ Note: This information is taken from the description section of a transaction and then normalized to provide you with an easy-to-read name. As such, sometimes the name will reflect the merchant the payment is made to (for example, Netflix.com), while for other recurring expenses, this could be something like "Monthly payment to John".
An array of minified transaction objects used to evaluate the recurring expense. If no transactions were found, we return an empty array.
The description of the transaction provided by the institution. Usually, this is the text that the end user would see in the bank statement. The description can be an empty string.
Note: For EYOD Risk Insights, the description is the one that you provided in the initial request.
The frequency at which this recurring expense occurs.
ℹ️ Note: Belvo only identifies MONTHLY
frequencies.
The average transaction amount of the recurring expense.
The median transaction amount of the recurring expense.
Number of days since the last recurring expense occurred.
Based on the frequency, you can infer how many days until the next charge will occur.
The transaction category for the recurring expense. For more information on the available categories, please see our Transaction categorization documentation.
Online Platforms & Leisure
(Netflix, Spotify, Gym Memberships)Bills & Utilities
(electricity, telephone, internet)Credits & Loans
(credit card cash advances, student loan, watercraft lease)Insurance
(home, car, and health & life insurance)Transport & Travel
(Uber trip, airbnb, parking)Taxes
(service fee, donation, court taxes)The type of recurring expense. We return one of the following values:
SUBSCRIPTION
REGULAR
[ { "id": "0d3ffb69-f83b-456e-ad8e-208d0998d71d", "account": { … }, "name": "Netflix", "transactions": [ … ], "frequency": "MONTHLY", "average_transaction_amount": 32.9, "median_transaction_amount": 32.9, "days_since_last_transaction": 5, "category": "Online Platforms & Leisure", "payment_type": "SUBSCRIPTION" } ]
Omit certain fields from being returned in the response. For more information, see our Filtering responses DevPortal article.
Return only the specified fields in the response. For more information, see our Filtering responses DevPortal article.
https://developers.belvo.com/_mock/apis/belvoopenapispec/api/recurring-expenses/{id}/
https://sandbox.belvo.com/api/recurring-expenses/{id}/
curl -i -X GET \
-u <username>:<password> \
'https://developers.belvo.com/_mock/apis/belvoopenapispec/api/recurring-expenses/{id}/?fields=string&omit=string'
Ok
Belvo's unique identifier for the current item.
Details regarding the account.
Note: For our recurring expenses resource, this account relates to the account that was analyzed to generate the recurring expenses report.
Belvo's unique identifier for the current item.
The link.id
the data belongs to.
The ISO-8601 timestamp when the data point was collected.
The ISO-8601 timestamp of when the data point was created in Belvo's database.
The type of account. We return one of the following enum values:
CHECKING_ACCOUNT
CREDIT_CARD
INVESTMENT_ACCOUNT
LOAN_ACCOUNT
PENSION_FUND_ACCOUNT
SAVINGS_ACCOUNT
UNCATEGORIZED
null
Indicates whether this account is either an ASSET
or a LIABILITY
. You can consider the balance of an ASSET
as being positive, while the balance of a LIABILITY
as negative.
The account type, as designated by the institution.
The account name, as given by the institution.
The account number, as designated by the institution.
Details regarding the current and available balances for the account.
The current balance is calculated differently according to the type of account.
The user's account balance at the collected_at
timestamp.
The amount the user has spent in the current card billing period (see credit_data.cutting_date
for information on when the current billing period finishes).
The amount remaining to pay on the users's loan.
The balance that the account owner can use.
The available balance may be different to the current
balance due to pending transactions.
The credit amount the user still has available for the current period. The available
balance may be different to the current
balance due to pending transactions or future instalments.
The present value required to pay off the loan, as provided by the institution.
Note: If the institution does not provide this value, we return null
.
The currency of the account. For example:
Please note that other currencies other than in the list above may be returned.
The public name for the type of identification. For example: "CLABE"
.
ℹ️ For 🇧🇷 Brazilian savings and checking accounts, this field will be AGENCY/ACCOUNT
.
The value for the public_identification_name
.
ℹ️ For 🇧🇷 Brazilian savings and checking accounts, this field will be the agency and bank account number, separated by a slash. For example: 0444/45722-0
.
The ISO-8601 timestamp of Belvo's most recent successful access to the institution for the given link.
The credit options associated with this account.
The maximum amount of credit the owner can receive.
The ISO-8601 timestamp when the data point was collected.
The closing date of the credit period, in YYYY-MM-DD
format.
The due date for the next payment , in YYYY-MM-DD
format.
The minimum amount to be paid on the next_payment_date
.
The minimum amount required to pay to avoid generating interest.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The recurrent monthly payment, if applicable.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The date when the last credit payment was made, in YYYY-MM-DD
format.
The loan options associated with this account.
The ISO-8601 timestamp when the data point was collected.
The initial total loan amount, calculated by the institution, when the contract was signed. This amount includes the principal + interest + taxes + fees.
Total amount of the loan (the amount the user receives).
The day of the month by which the owner needs to pay the loan (DD
).
Outstanding loan amount, that is, how much remains to pay on the principal (not including interest).
The amount remaining to pay in total, including interest.
The recurrent monthly payment, if applicable.
Breakdown of the interest applied to the loan.
The name of the type of interest rate applied to the loan.
The period that the interest is applied to the loan. We return one of the following values:
MONTHLY
YEARLY
The total number of installments required to pay the loan.
The number of installments left to pay.
The date when the loan contract was signed , in YYYY-MM-DD
format.
The date when the loan is expected to be completed, in YYYY-MM-DD
format.
The contract number of the loan, as given by the institution.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see principal
instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see outstanding_balance
instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see the interest_rates
object instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please see payment_day
instead.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The closing day of the month for the loan.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The closing date of the loan period, in YYYY-MM-DD
format.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The date when the last loan payment was made, in YYYY-MM-DD
format.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
Please use payment_day
instead, in YYYY-MM-DD
format.
This field has been deprecated. For more information regarding Belvo and deprecation, see our Deprecated fields explanation.
The institution's product ID for the account type.
The name for the recurring expense.
ℹ️ Note: This information is taken from the description section of a transaction and then normalized to provide you with an easy-to-read name. As such, sometimes the name will reflect the merchant the payment is made to (for example, Netflix.com), while for other recurring expenses, this could be something like "Monthly payment to John".
An array of minified transaction objects used to evaluate the recurring expense. If no transactions were found, we return an empty array.
The description of the transaction provided by the institution. Usually, this is the text that the end user would see in the bank statement. The description can be an empty string.
Note: For EYOD Risk Insights, the description is the one that you provided in the initial request.
The frequency at which this recurring expense occurs.
ℹ️ Note: Belvo only identifies MONTHLY
frequencies.
The average transaction amount of the recurring expense.
The median transaction amount of the recurring expense.
Number of days since the last recurring expense occurred.
Based on the frequency, you can infer how many days until the next charge will occur.
The transaction category for the recurring expense. For more information on the available categories, please see our Transaction categorization documentation.
Online Platforms & Leisure
(Netflix, Spotify, Gym Memberships)Bills & Utilities
(electricity, telephone, internet)Credits & Loans
(credit card cash advances, student loan, watercraft lease)Insurance
(home, car, and health & life insurance)Transport & Travel
(Uber trip, airbnb, parking)Taxes
(service fee, donation, court taxes)The type of recurring expense. We return one of the following values:
SUBSCRIPTION
REGULAR
[ { "id": "0d3ffb69-f83b-456e-ad8e-208d0998d71d", "account": { … }, "name": "Netflix", "transactions": [ … ], "frequency": "MONTHLY", "average_transaction_amount": 32.9, "median_transaction_amount": 32.9, "days_since_last_transaction": 5, "category": "Online Platforms & Leisure", "payment_type": "SUBSCRIPTION" } ]
https://developers.belvo.com/_mock/apis/belvoopenapispec/api/recurring-expenses/{id}/
https://sandbox.belvo.com/api/recurring-expenses/{id}/
curl -i -X DELETE \
-u <username>:<password> \
'https://developers.belvo.com/_mock/apis/belvoopenapispec/api/recurring-expenses/{id}/'
To receive inflow payments to your organization's bank account, you must register the bank accounts (individual and business) using Belvo's Payments API.
A payment intent is a single point of access to create payments using any payment method offered by Belvo.
A payment intent captures all payment information (such as the amount to be charged, the description of the payment, the provider, and so on) and guides your customers through the payment flow.
Note: For institutions that require the
username_type
in theform_fields
array, you must send through this value in your PATCH request.