Skip to main content

Integrate without using MX's Connect Widget

By the end of this guide, you'll be able to connect a user to their financial institution and retrieve their financial data using the Platform API to power a non-MX UI connection experience.

Looking for our legacy guides?

If you're using Platform API v2011101, see Legacy Guides.

Prerequisites

Before using this guide, ensure the following:

  • You've signed up for the Client Dashboard and can access your API keys
  • Your IP addresses are whitelisted in the Client Dashboard
  • Users exist on the MX system or you've created a user
  • You have your own end-user facing connection experience instead of using our Connect Widget
  • You have registered for OAuth, unless you're using our test institution
  • You've set up how you'll send held data to MX (if your institution has held data)
Step 1

Search for an Institution

To connect a user to a specific financial institution, you first need to find that institution in MX's institution list.

Make a GET request to the List Institutions endpoint and set the name query parameter to list only institutions in which the appended string appears. You can also check which institutions support the products (data) you need before connecting users by using the supported_products parameter with the List Institutions.

The response returns a paginated list of institutions, filtered by the query parameters you set. The next step covers which fields to look for in the response.

info

For caching the institutions list to improve performance, see Caching our Institutions List and Credentials.

Request
Response
Language:shell

_10
curl -i -X GET 'https://int-api.mx.com/institutions?name=mx' \
_10
-u 'client_id:api_key' \
_10
-H 'Content-Type: application/json' \
_10
-H 'Accept: application/json' \
_10
-H 'Accept-Version: v20250224'

Step 2

Get the Institution's Requirements

The response from the previous step included a supports_oauth field that reflects 2 conditions:

  1. The institution supports OAuth.
  2. You have gone through the OAuth registration process.

If this field is true, you must create an OAuth member in the next step.

If this field is false, make a request to the List Institution Credentials endpoint and set the institution code from the previous step in the path.

The following example uses mxbank as the code and returns the guid for each required credential, which you'll use to match the end user's credentials to the required credential types.

Request
Response
Language:shell

_10
curl -i -X GET 'https://int-api.mx.com/institutions/mxbank/credentials' \
_10
-u 'client_id:api_key' \
_10
-H 'Content-Type: application/json' \
_10
-H 'Accept: application/json' \
_10
-H 'Accept-Version: v20250224'

Step 3

Create Member

Now that you have the institution's authentication requirements, create the member and specify the data to retrieve after the connection is established. The products you set in the Create Member request (through the data_request.products) determine what data will be aggregated.

If the institution's supports_oauth field is true, create an OAuth member (see our OAuth guides). Otherwise, create a credential-based member as shown below.

Create a credential-based member

To create a credential-based member, you need the user_guid, institution_code, and credential values from the end user. The following example uses MX Bank test credentials (username: mxuser, password: password).

Make a request to the Create Member endpoint (POST /users/{user_guid}/members):

  • Required: Put the user_guid in the path.
  • Required: Include the credential GUIDs and their values in the credentials array.
  • Required: Set data_request.products to define the data you want to aggregate.
  • Recommended: Set id to a unique value when creating a member so you can sync between your systems and ours.
  • Recommended: Set metadata.
  • Optional: Disable background aggregation by setting background_aggregation_is_disabled to true. For more info, see Background Aggregation.

The response returns with the newly created member and indicates that the connection process has started: connection_status is CREATED and is_being_aggregated is true.

warning

Don't add multiple members that connect to the same institution using the same credentials on the same user. This will result in a 409 Conflict error.

Request
Response
Language:shell

_22
curl -i -X POST 'https://int-api.mx.com/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members' \
_22
-u 'client_id:api_key' \
_22
-H 'Content-Type: application/json' \
_22
-H 'Accept: application/json' \
_22
-H 'Accept-Version: v20250224' \
_22
-d '{
_22
"member": {
_22
"credentials": [
_22
{
_22
"guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
_22
"value": "mxuser"
_22
},
_22
{
_22
"guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
_22
"value": "password"
_22
}
_22
],
_22
"id": "member-9876",
_22
"institution_code": "mxbank",
_22
"metadata": "some metadata"
_22
}
_22
}'

Step 4

Monitor Connection Statuses

When a user connects to an institution, a member is created in the MX system.

To proactively resolve connections issues that may arise, such as MFA challenges or credential changes, you must monitor the connection_status of each member that belongs to a user.

For guidance on how to handle each possible status, see Member Connection Statuses.

Step 5

Ensure Data Aggregated

To ensure that the member is in a state where you can retrieve data, you must implement a polling workflow:

  1. Request the Read Member Status endpoint.
  2. In the response, check the connection_status and is_being_aggregated fields.
  3. If connection_status is CONNECTED and is_being_aggregated is false, exit this workflow and retrieve the data. If not, we recommend waiting 3 seconds before repeating this polling workflow.
Step 6

Read Data

Once the member's connection_status is CONNECTED and is_being_aggregated is false, retrieve the data using the endpoints below.

info

Not every field will populate for each product, as data availability depends on what the institution provides.

Requested DataRetrieve Data
accounts and/or transactionsList Accounts, List Accounts by Member, Read Account, Read Account by Member, List Transactions by Account, List Transactions, or Read Transaction
identificationList Account Owners by Member
verificationList Account Numbers by Member or List Account Numbers by Account
statements1. List Statements by Member or Read Statement by Member
2. (Optional) Download Statement PDF
transaction_history1. List Accounts by Member, Read Account, or another GET accounts endpoint and save the resulting guid
2. Use the guid from the previous response in List Transactions by Account
investmentsList Holdings by Member, List Holdings by User, List Holdings by Account, or Read Holding
rewardsList Rewards or Read Reward
Step 7

Update Data Later

note

MX automatically aggregates account and transaction data approximately every 24 hours. Check the successfully_aggregated_at field to determine if manual aggregation is needed.

To refresh data after the initial connection:

  1. Make a POST request using the appropriate endpoint from the table below.
  2. Verify aggregation is complete using the workflow from step 5.
  3. Retrieve the updated data.
Requested DataAggregate DataRetrieve Data
accounts and transactionsAggregate MemberList Accounts, List Accounts by Member, Read Account, Read Account by Member, List Transactions by Account, List Transactions, or Read Transaction
identificationIdentify MemberList Account Owners by Member
verificationVerify MemberList Account Numbers by Member or List Account Numbers by Account
statementsFetch Statements1. List Statements by Member or Read Statement by Member
2. (Optional) Download Statement PDF
transaction_historyExtend History1. List Accounts by Member, Read Account, or another GET accounts endpoint and save the resulting guid
2. Use the guid from the previous response in List Transactions by Account
investmentsAggregate MemberList Holdings by Member, List Holdings by User, List Holdings by Account, or Read Holding
rewardsFetch RewardsList Rewards or Read Reward
success

You've used our Platform API to build connections between a user and their financial institution and can retrieve data from that connection.