# Integration Checklist (OFDA)

To help you out during your OFDA integration process, we've created a checklist for you to follow 😉. Please make sure you address all the items before requesting access to the Production environment.

## Implement the widget

While you're integrating the widget, make sure that:

- [ ] Your users first register an account with your application before prompting them to connect their accounts with Belvo.
- [ ] You are using the `external_id` parameter to provide your own unique ID for a link (or group of links) in your system. **Note**: This parameter is searchable within Belvo's system as well.
- [ ] If using single links, you use the `fetch_resources` parameter to asynchronously receive historical data about your user.
- [ ] You can generate an `access_token` for both individuals and businesses.
- [ ] You have correctly implemented your callback URLs.
- [ ] You can handle Success, Exit, Error, and Warning events from the Hosted Widget.


## Error Handling

Make sure that your integration can handle and log the `request_id` of:

- [ ] 400 and 401 errors
- [ ] 500 Errors
- [ ] Timeout errors


We ask you to log the `request_id` just in case you need to reach out to our support team. With this ID, we can speed up the troubleshooting process and figure out a solution for you.

For more information on the retry logic you should implement, see our General error handling notes.

## Request Handling

Can your integration handle:

- [ ] 200, 201, and 202 Success responses
- [ ] 204 Success responses (when you delete some data)
- [ ] Pagination


Additionally, make sure that with successful responses, you store:

- [ ] The unique identifier for the object (for example, the `transaction.id`)
This will allow you to avoid having duplicated objects (such as transactions) in your database.


## Webhooks

Whether you are using single or recurrent links, make sure you:

- [ ] Set a webhook URL in the dashboard so that you can receive webhook events. **Please remember that you'll need to set different webhook URLs depending on the environment you're working in.**
- [ ] If using recurrent links, that you have set up your refresh rate according to your needs (daily, weekly, or monthly) (contact our sales team).
- [ ] Only send GET requests **after** you receive a webhook event.
- [ ] Respond within five seconds of receiving a webhook with a 200 OK.
- [ ] Whitelist the following IP addresses:


You can receive webhook events from the following IP addresses:

- `3.130.254.46`
- `18.220.61.186`
- `18.223.45.212`


We **highly recommend** you whitelist these IP addresses so that you can receive webhook events.

## Link creation and management

Does your integration:

- [ ] Have a mechanism to avoid duplicate links from being created?
- [ ] Monitor for `invalid` and `token_required` link statuses, and if needed, prompt your users to update their credentials?
- [ ] Familiarized yourself with the Open finance Brazil network limits.


## My Belvo Portal

Have you:

- [ ] Implemented a easy-to-access link to the My Belvo Portal?
- [ ] Implemented a mechanism to handle `consent_expired` Consent webhook events?


## Non-breaking changes

If we make the following non-breaking changes to our API, are you sure it won't affect your integration?

- [ ]  New fields or a different order in the response body.
- [ ]  Change the number of characters for a string.
- [ ]  Return `yyyy-MM-ddTHH:mm:ss.SSSZ` timestamps, where `S` are microseconds (from 3 to 6 digits) and `Z` is **either** `+00:00` or `Z`.
- [ ]  Add new endpoints.


## URL and API Keys

When you are switching to Production, make sure that:

- [ ]  You are calling the production version of the Belvo API ([https://api.belvo.com](https://api.belvo.com)).
- [ ]  You are using your Belvo Production API Keys.
- [ ]  You are storing your API keys securely.


## Subscribe to updates

Make sure you've subscribed to the following services to be up to date on the status of our API and institutions:

- [ ]  Belvo API status
- [ ]  Institution status (see our dedicated guide)