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:
Available Information and Payment Methods
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:
Banking Information in Brazil
Employment Information in Brazil
Employment Information in Mexico
Fiscal Information in Mexico
Fiscal Information in Chile
You can also use our API to make payments in:
Brazil
Mexico
Data Dictionaries
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).
Environments
We currently offer two environments: sandbox and production.
Sandbox
Available for:
🟢 Aggregation and Enrichment
⚪️ Payment Initiation
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.
Production
Available for:
🟢 Aggregation and Enrichment
🟢 Payment Initiation
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:
Request Production API keys (and change your Sandbox API keys in the code to these new ones).
Change the base URL that you make requests to from sandbox.belvo.com to api.belvo.com.
If you're using webhooks, make sure to set a Production URL for your webhooks.
Response codes
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.
Error handling
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.
Request identifier
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.
Error codes and troubleshooting
For a full list of errors and how to troubleshoot them, please see our dedicated Error Handling article.
Retry policy
50x errors
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).
40x errors
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.
Deprecated fields
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.
OpenAPI: required and nullable fields
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.
An institution is an entity that Belvo can access information from. It can be a:
bank institution, such as Banamex retail banking or HSBC business banking.
fiscal institution, such as the Servicio de Administración Tributaria (SAT) in Mexico.
You can see a complete list of institutions by either consulting our Institutions article or making a List request to this endpoint.
Operations
Links
A Link is a set of credentials associated to an end-user's access to an institution. You will need to register a Link before accessing information from that specific end-user, such as account or transaction details.
Operations
Widget Access Token
Operations
Consents
Operations
Owners
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:
their full name
key contact information
information about the ID document they used when opening the account
Operations
Accounts
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:
what types of accounts the user has.
the balance for each account (savings, checking, credit card, loan, and so on).
detailed information regarding their credit card spending.
the current situation of any loans they may have.
Operations
List accounts
Request
▶️ Usage
With the List Accounts method, you can:
List accounts related to a specific link.id (using the link query parameter).
Get the details of a specific account.id (using the id query parameter).
[Not Recommended] List all accounts related to your Belvo account (without using any query parameters).
🔦 Filtering Responses
Please see the query list below for a list of fields that you can filter your responses by. For more information on how to use filters, see our Filtering responses article.
📖 Pagination
This method returns a paginated response (default: 100 items per page). You can use the page_size query parameter to increase the number of items returned to a maximum of 1000 items. You can use the page query parameter to navigate through the results. For more details on how to navigate Belvo's paginated responses, see our Pagination Tips article.
🚨 Deprecated Fields
This resource may return deprecated fields. In the response documentation 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.
Query
linkstring(uuid)
The link.id you want to filter by.
ℹ️ We highly recommend adding the link.id filter in order to improve your performance.
Indicates how many results to return per page. By default we return 100 results per page.
ℹ️ The minimum number of results returned per page is 1 and the maximum is 1000. If you enter a value greater than 1000, our API will default to the maximum value (1000).
Default 100
Example: page_size=100
pageinteger(int32)>= 1
A page number within the paginated result set.
Example: page=1
omitstring
Omit certain fields from being returned in the response. For more information, see our Filtering responses DevPortal article.
fieldsstring
Return only the specified fields in the response. For more information, see our Filtering responses DevPortal article.
Return information only for accounts matching this account type, as designated by the institution.
Example: type=Cuentas de efectivo
Mock server https://developers.belvo.com/_mock/apis/belvoopenapispec/api/accounts/
Sandbox https://sandbox.belvo.com/api/accounts/
curl
JavaScript
Node.js
Python
Java
C#
PHP
Go
Ruby
R
Payload
curl -i -X GET \ -u <username>:<password> \ 'https://developers.belvo.com/_mock/apis/belvoopenapispec/api/accounts/?balance__available=4000.02&balance__available__gt=2000.02&balance__available__gte=1999.02&balance__available__lt=6000.02&balance__available__lte=5999.02&balance__available__range=4350.02&balance__current=4000.02&balance__current__gt=2000.02&balance__current__gte=1999.02&balance__current__lt=6000.02&balance__current__lte=5999.02&balance__current__range=4350.02&category=CREDIT_ACCOUNT&category__in=SAVINGS_ACCOUNT&created_at=2022-05-05&created_at__gt=2022-05-05&created_at__gte=2022-05-04&created_at__lt=2022-04-01&created_at__lte=2022-03-30&created_at__range=2022-03-03¤cy=BRA¤cy__in=BRA&fields=string&id=24ccab1d-3a86-4136-a6eb-e04bf52b356f&id__in=6b3dea0f-be29-49d1-aabe-1a6d588642e6&institution=planet_mx_retail&institution__in=planet_mx_retail&link=8848bd0c-9c7e-4f53-a732-ec896b11d4c4&link__in=5722d0ba-69d7-42dc-8ff5-33767b83c5d6&name=Cuenta%20Perfiles-%20M.N.%20-%20MXN-666&name__icontains=Perfiles&number=4057068115181&number__in=4057068115181&omit=string&page=1&page_size=100&public_identification_name=CLABE&public_identification_value=150194683119900273&type=Cuentas%20de%20efectivo'
Responses
Ok
Bodyapplication/json
countinteger(int32)
The total number of results in your Belvo account.
Example: 130
nextstring or null(uri)
The URL to next page of results. Each page consists of up to 100 items. If there are not enough results for an additional page, the value is null.
In our documentation example, we use {endpoint} as a placeholder value. In production, this value will be replaced by the actual endpoint you are currently using (for example, accounts or owners).
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.
Example: "ASSET"
overdraftobject or null
typestringrequired
The account type, as designated by the institution.
Non-nullable: A value must be returned by Brazil's open finance network.
Example: "STANDARD_NACIONAL"
subtypestringrequired
The account subtype, as designated by the institution.
Non-nullable: A value must be returned by Brazil's open finance network.
Example: "FINANCIAMENTO_HABITACIONAL_SFH"
namestring or nullrequired
The account name, as given by the institution.
Example: "Cuenta Perfiles- M.N. - MXN-666"
numberstring or nullrequired
The account number, as designated by the institution.
Example: "4057068115181"
agencystring or null<= 4 characters^\d{1,4}$required
The branch code where the product was opened.
Example: "6272"
check_digitstring or null<= 2 characters[\w\W\s]*required
The check digit of the product's number, if applicable.
Example: "7"
balanceobjectrequired
Details regarding the current and available balances for the account.
currentnumber or null(float)^\d{1,15}\.\d{2,4}$required
The current balance is calculated differently according to the type of account.
💰 Checking and saving accounts:
The user's account balance at the collected_at timestamp.
💳 Credit cards:
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).
🏡 Loan accounts:
The amount remaining to pay on the users's loan.
Example: 5874.13
availablenumber or null(float)^\d{1,15}\.\d{2,4}$
The balance that the account owner can use.
💰 Checking and saving accounts:
The available balance may be different to the current balance due to pending transactions.
💳 Credit cards:
The credit amount the user still has available for the current period. The amount is calculated as credit_data.credit_limit minus balance.current.
🏡 Loan accounts:
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.
Example: 5621.12
blockednumber(float)^\d{1,15}\.\d{2,4}$
The amount that is currently blocked due to pending transactions.
Non-nullable: A value must be returned by Brazil's open finance network if the balances field is available.
The amount that is automatically invested (as agreed upon with the institution).
Non-nullable: A value must be returned by Brazil's open finance network if the balances field is available.
Example: 131.5
currencystring<= 3 characters^[A-Z]{3}$required
The three-letter currency code (ISO-4217).
Non-nullable: A value must be returned by Brazil's open finance network if the balances field is available.
Example: "BRL"
public_identification_namestring or nullrequired
The public name for the type of identification. For 🇧🇷 Brazilian savings and checking accounts, this field will be AGENCY/ACCOUNT.
Example: "AGENCY/ACCOUNT"
public_identification_valuestring or nullrequired
The value for the public_identification_name.
For 🇧🇷 OFDA Brazilian savings and checking accounts, this field will be the agency and bank account number, separated by a slash. For example: 0444/45722-0.
For 🇧🇷 OFDA Brazilian credit card accounts, we will return a string of concatenated credit card numbers associated with the account. For example: "8763,9076,5522"
contract_amountnumber or null(float)^\d{1,15}\.\d{2,4}$required
The initial total loan amount when the contract was signed, calculated by the institution. This amount includes the principal + interest + taxes + fees.
Example: 202000
total_effective_costnumber or null(float)^\d{1,15}\.\d{2,4}$
The initial total effective cost of the loan.
Example: 209000
loan_typestringrequired
The type of the loan, according to the institution.
Non-nullable: A value must be returned by Brazil's open finance network.
Example: "HOME_EQUITY"
outstanding_balancenumber or null(float)[ 4 .. 20 ] characters^\d{1,15}\.\d{2,4}$required
The amount remaining to pay in total, including interest.
Example: 182000
interest_ratesArray of objectsrequired
Breakdown of the interest applied to the loan. With OF Brazil, we highly recommend using the information in interest_rate_data for in-depth information.
Non-nullable: A value must be returned by Brazil's open finance network.
namestring or nullrequired
The name of the type of interest rate applied to the loan.
Note: For OFDA Brazil, we recommend you use the interest_date_data.tax_type parameter.
Example: "NOMINAL"
typestringrequired
The period that the interest is applied to the loan.
Non-nullable: A value must be returned by Brazil's open finance network.
Enum"MONTHLY""YEARLY"
Example: "MONTHLY"
valuenumber or null(float)required
The interest rate (in percent or currency value).
Note: For OFDA Brazil, we recommend you use the interest_date_data.pre_fixed_rate and interest_date_data.post_fixed_rateparameter.
Example: 7.85
interest_rate_dataobject or nullrequired
Detailed information regarding the interest rate.
tax_typestringrequired
The type of interest rate tax. We return one of the following values:
NOMINAL
EFFECTIVE
Non-nullable: A value must be returned by Brazil's open finance network.
Enum"NOMINAL""EFFECTIVE"
Example: "NOMINAL"
rate_typestringrequired
The type of interest rate. We return one of the following values:
SIMPLE
COMPOUND
Non-nullable: A value must be returned by Brazil's open finance network.
Enum"SIMPLE""COMPOUND"
Example: "SIMPLE"
typestring
The period that the interest is applied to the loan.
Non-nullable: A value must be returned by Brazil's open finance network.
Used to resume an Account retrieve session that was paused because an MFA token was required by the institution.
ℹ️ Note: This resource may return deprecated fields. Please check the response documentation for more information.
Query
omitstring
Omit certain fields from being returned in the response. For more information, see our Filtering responses DevPortal article.
fieldsstring
Return only the specified fields in the response. For more information, see our Filtering responses DevPortal article.
Bodyapplication/jsonrequired
sessionstring[a-f0-9]{32}required
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.
Example: "6e7b283c6efa449c9c028a16b5c249fa"
tokenstring
The MFA token generated by the institution which is required to continue a session.
Example: "1234ab"
linkstring(uuid)required
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.
Example: "683005d6-f45c-4adb-b289-f1a12f50f80c"
save_databoolean
Indicates whether or not to persist the data in Belvo. By default, this is set to true and we return a 201 Created response.
When set to false, the data won't be persisted and we return a 200 OK response.
Default true
Example: true
Mock server https://developers.belvo.com/_mock/apis/belvoopenapispec/api/accounts/
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.
Example: "ASSET"
overdraftobject or null
typestringrequired
The account type, as designated by the institution.
Non-nullable: A value must be returned by Brazil's open finance network.
Example: "STANDARD_NACIONAL"
subtypestringrequired
The account subtype, as designated by the institution.
Non-nullable: A value must be returned by Brazil's open finance network.
Example: "FINANCIAMENTO_HABITACIONAL_SFH"
namestring or nullrequired
The account name, as given by the institution.
Example: "Cuenta Perfiles- M.N. - MXN-666"
numberstring or nullrequired
The account number, as designated by the institution.
Example: "4057068115181"
agencystring or null<= 4 characters^\d{1,4}$required
The branch code where the product was opened.
Example: "6272"
check_digitstring or null<= 2 characters[\w\W\s]*required
The check digit of the product's number, if applicable.
Example: "7"
balanceobjectrequired
Details regarding the current and available balances for the account.
currentnumber or null(float)^\d{1,15}\.\d{2,4}$required
The current balance is calculated differently according to the type of account.
💰 Checking and saving accounts:
The user's account balance at the collected_at timestamp.
💳 Credit cards:
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).
🏡 Loan accounts:
The amount remaining to pay on the users's loan.
Example: 5874.13
availablenumber or null(float)^\d{1,15}\.\d{2,4}$
The balance that the account owner can use.
💰 Checking and saving accounts:
The available balance may be different to the current balance due to pending transactions.
💳 Credit cards:
The credit amount the user still has available for the current period. The amount is calculated as credit_data.credit_limit minus balance.current.
🏡 Loan accounts:
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.
Example: 5621.12
blockednumber(float)^\d{1,15}\.\d{2,4}$
The amount that is currently blocked due to pending transactions.
Non-nullable: A value must be returned by Brazil's open finance network if the balances field is available.
The amount that is automatically invested (as agreed upon with the institution).
Non-nullable: A value must be returned by Brazil's open finance network if the balances field is available.
Example: 131.5
currencystring<= 3 characters^[A-Z]{3}$required
The three-letter currency code (ISO-4217).
Non-nullable: A value must be returned by Brazil's open finance network if the balances field is available.
Example: "BRL"
public_identification_namestring or nullrequired
The public name for the type of identification. For 🇧🇷 Brazilian savings and checking accounts, this field will be AGENCY/ACCOUNT.
Example: "AGENCY/ACCOUNT"
public_identification_valuestring or nullrequired
The value for the public_identification_name.
For 🇧🇷 OFDA Brazilian savings and checking accounts, this field will be the agency and bank account number, separated by a slash. For example: 0444/45722-0.
For 🇧🇷 OFDA Brazilian credit card accounts, we will return a string of concatenated credit card numbers associated with the account. For example: "8763,9076,5522"
contract_amountnumber or null(float)^\d{1,15}\.\d{2,4}$required
The initial total loan amount when the contract was signed, calculated by the institution. This amount includes the principal + interest + taxes + fees.
Example: 202000
total_effective_costnumber or null(float)^\d{1,15}\.\d{2,4}$
The initial total effective cost of the loan.
Example: 209000
loan_typestringrequired
The type of the loan, according to the institution.
Non-nullable: A value must be returned by Brazil's open finance network.
Example: "HOME_EQUITY"
outstanding_balancenumber or null(float)[ 4 .. 20 ] characters^\d{1,15}\.\d{2,4}$required
The amount remaining to pay in total, including interest.
Example: 182000
interest_ratesArray of objectsrequired
Breakdown of the interest applied to the loan. With OF Brazil, we highly recommend using the information in interest_rate_data for in-depth information.
Non-nullable: A value must be returned by Brazil's open finance network.
namestring or nullrequired
The name of the type of interest rate applied to the loan.
Note: For OFDA Brazil, we recommend you use the interest_date_data.tax_type parameter.
Example: "NOMINAL"
typestringrequired
The period that the interest is applied to the loan.
Non-nullable: A value must be returned by Brazil's open finance network.
Enum"MONTHLY""YEARLY"
Example: "MONTHLY"
valuenumber or null(float)required
The interest rate (in percent or currency value).
Note: For OFDA Brazil, we recommend you use the interest_date_data.pre_fixed_rate and interest_date_data.post_fixed_rateparameter.
Example: 7.85
interest_rate_dataobject or nullrequired
Detailed information regarding the interest rate.
tax_typestringrequired
The type of interest rate tax. We return one of the following values:
NOMINAL
EFFECTIVE
Non-nullable: A value must be returned by Brazil's open finance network.
Enum"NOMINAL""EFFECTIVE"
Example: "NOMINAL"
rate_typestringrequired
The type of interest rate. We return one of the following values:
SIMPLE
COMPOUND
Non-nullable: A value must be returned by Brazil's open finance network.
Enum"SIMPLE""COMPOUND"
Example: "SIMPLE"
typestring
The period that the interest is applied to the loan.
Non-nullable: A value must be returned by Brazil's open finance network.
A transaction contains the detailed information of each movement inside an account. For example, a purchase at a store or a restaurant.
Operations
Bills
A bill refers to the credit card bill a user receives for given account.
Note: Only available for OFDA.
Operations
Investments Brazil
Operations
Investment Transactions Brazil
Operations
Employments Brazil
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:
work history (including occupations and employer data)
historical and current salary information (per employer)
At the moment, the employments resource is available for:
🇧🇷 Brazil (INSS)
Operations
Employment Records Mexico
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:
personal data
work history
historical and current daily base salary
and more!
At the moment, the employment records resource is available for:
🇲🇽 Mexico (IMSS)
🇲🇽 Mexico (ISSSTE)
Operations
Invoices
Operations
Tax compliance status
Operations
Tax returns
Operations
Tax retentions
Operations
Tax status
Operations
Financial Statements
Operations
Invoices Chile
Operations
Tax Status Chile
Operations
Debt Reports Chile
Operations
Incomes
Use the Incomes endpoint to gather insights on an account's income sources for the past 365 days. The endpoint is particularly useful when you want to verify a person's income.
📘 Info
The incomes resource is only available for Checking and Savings accounts associated with banking links.
Operations
Recurring Expenses
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.
Operations
Risk Insights
Operations
Employment Metrics
Operations
Payment Institutions (Brazil)
A payment institution is an entity that Belvo can access information from. You can see a complete list of institutions available for payments by making a List request to this endpoint.
Operations
Customers (Brazil)
A customer is the payer that's going to push funds into your bank account. You need to create a customer in order to receive inflow payments to your organization's bank account.
Operations
Bank Accounts (Brazil)
To receive inflow payments to your organization's bank account, you must register the bank accounts (individual and business) using Belvo's Payments API.
Individual bank accounts must be created for each payer (your customer).
Business bank accounts need to be created for the beneficiary of the payment (your organization).
Operations
Payment Links (Brazil)
This is a Payment link.
Operations
Payment Intents (Brazil)
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 the form_fields array, you must send through this value in your PATCH request.
Operations
Biometric Pix Widget Access Token (Brazil)
Use the Biometric Pix Widget Token requests to create a access token for Biometric Payments.
Operations
Payment Transactions (Brazil)
Each time you receive an inflow payment from your customer, a transaction is created in the Belvo database.
You can use the Payment Transactions resource in order to get useful information about a transaction as well as the specific charge associated with it.