Skip to main content

Fetch Statements

Legacy Guide

This guide is for Platform API v2011101. For guidance on the newest version, see Connectivity Integration Guides.

This guide takes you through the statement aggregation process using API endpoints.

API Workflow

The workflow for performing a statement aggregation is as follows:

  1. Create a user.
  2. Search for an institution.
  3. Get the credentials required by the institution.
  4. Create a member.
  5. Start the statement job.
  6. Poll the member's connection status.
  7. Answer multifactor authentication, if necessary.
  8. Poll the member's connection status again until it reaches an end state.
  • A successful end state is when the connection_status is CONNECTED and the is_aggregating field changes from true to false.
  1. List the member's statement data.
  2. Download a statement PDF.
Step 1

Create a user

A user represents your end user in the MX Platform. Make a request to the Create User endpoint (POST /users).

We recommend that you include a unique id of your choice with the request. You may also include metadata, such as the date the user was created or the end user's name. Don't include any sensitive information here, such as credentials.

info

None of these parameters are required, but the user object can't be empty. We recommend that you always set the id parameter when creating a user.

In the response, the API gives each new user an MX-defined guid (or user_guid when appearing outside the user object). Between your id and the guid, you can map between your system and ours. You'll need the user guid for nearly every request on the MX API, at least when using basic authorization.

Request
Response
Language:shell

_12
curl -i -X POST 'https://int-api.mx.com/users' \
_12
-u 'client_id:api_key' \
_12
-H 'Accept: application/vnd.mx.api.v1+json' \
_12
-H 'Content-Type: application/json' \
_12
-d '{
_12
"user": {
_12
"id": "partner-2345",
_12
"is_disabled": false,
_12
"email": "example@example.com",
_12
"metadata": "Some metadata"
_12
}
_12
}'

Step 2

Search for an Institution

To create a member, you need to know what financial institution the member should be connected to and what type of credentials the institution expects to get.

First, search for an institution using query parameters on the list institutions endpoint, GET /institutions?name={string}&supports_account_statement=true.

The example searches for MX Bank, which is MX's institution for testing and development. It also limits results to institutions that support statements.

The response returns a paginated list of institutions that match the string you send in the name query parameter. Make a note of the code you find in the example response; you'll need this for the next step.

Request
Response
Language:shell

_10
curl -i 'https://int-api.mx.com/institutions?name=mx&supports_account_statement=true' \
_10
-u 'client_id:api_key' \
_10
-H 'Accept: application/vnd.mx.api.v1+json'

Step 3

Get the Institution's Required Credentials

Each institution requires different types of credentials. Some require an email and a password, some require a username and a password, and some may require other types of credentials.

Make a request to the List Institution Credentials endpoint (GET /institutions/{institution_code}/credentials). Include the institution code retrieved from the previous step in the request path.

This endpoint returns the GUID for each required credential, which is used to match the credentials the end user provides to the required credential type when creating a member.

Request
Response
Language:shell

_10
curl -X GET https://int-api.mx.com/institutions/mxbank/credentials \
_10
-H 'Accept: application/vnd.mx.api.v1+json' \
_10
-u 'client_id:api_key'

Step 4

Create a Member

For this step, you need to have already gathered from the end user the values needed for each credential such as their username and password. The following example uses the MX Bank institution and therefore requires a username and a password; it sets the username to mxuser and the password to password which are the credentials for the test user for MX Bank.

Make a POST request to the /users/{user_guid}/members endpoint. The response includes the newly created member.

  • Put the user_guid in the path.
  • In the body, include the credential GUIDs and their values in the credentials array.
  • In the body, set the skip_aggregation parameter to true.
    • A standard aggregation is kicked off automatically whenever a member is created unless you explicitly prevent it using skip_aggregation. Depending on your use case, you may or may not want that automatic agg to happen. Our example shows skip_aggregation: true.
  • In the body, set the id and metadata fields as you see fit. This is not required, but is strongly encouraged.
  • Optionally, you can disable background aggregation with the background_aggregation_is_disabled parameter. It defaults to false. In other words, background aggregation is enabled by default.
warning

Do not 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 'Accept: application/vnd.mx.api.v1+json' \
_22
-H 'Content-Type: application/json' \
_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
"skip_aggregation": true
_22
}
_22
}'

Step 5

Fetch Statements

Now we can actually begin the process of gathering the end user's statements.

Make a POST request to the fetch statements endpoint. This request only starts the statements process; actually reading the aggregated data comes later. The response will be a member object with information about the state of the statements process that just started.

Request
Response
Language:shell

_10
curl -i -X POST 'https://int-api.mx.com/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members/MBR-3bdc7d6b-efd4-1497-a0af-b23501cf9bd0/fetch_statements' \
_10
-H 'Accept: application/vnd.mx.api.v1+json' \
_10
-H 'Content-Type: application/json' \
_10
-u 'client_id:api_key'

Step 6

Check the Connection Status

Check the connection status of the member to get information on the state of the statement aggregation. Important fields include connection_status, is_being_aggregated, and successfully_aggregated_at. The is_being_aggregated field will tell you whether the statement aggregation is ongoing or complete.

When you see "connection_status": "CONNECTED" and "is_being_aggregated": false at the same time, the statement aggregation is done and you can move on to the next step. The successfully_aggregated_at field will give the exact time the aggregate successfully completed, but won't update if the statement aggregation fails.

You may need to check the connection status several times until an end state is reached.

Make a request to the Read Member Status endpoint (GET /users/{user_guid}/members/{member_guid}/status). The response in the example shows a successful end state.

Request
Response
Language:shell

_10
curl -i 'https://int-api.mx.com/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members/MBR-3bdc7d6b-efd4-1497-a0af-b23501cf9bd0/status' \
_10
-H 'Accept: application/vnd.mx.api.v1+json' \
_10
-u 'client_id:api_key'

Step 7

Deal with Multifactor Authentication

Aggregation-type jobs such as statements may trigger multifactor authentication (MFA) from the institution associated with the member. This is indicated by connection_status: CHALLENGED.

Please see the detailed section on answering MFA challenges for more information. For this part of the guide, we'll assume there was no MFA and move on to the next step.

Step 8

List the Available Statements

You can now see all the statements that are available to download. Make a note of the uri field on each statement object: this will be used in the next step to download a particular statement PDF.

Make a GET request to the /users/{user_guid}/members/{member_guid}/statements endpoint.

Request
Response
Language:shell

_10
curl -i -X GET 'https://int-api.mx.com/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members/MBR-3bdc7d6b-efd4-1497-a0af-b23501cf9bd0/statements' \
_10
-H 'Accept: application/vnd.mx.api.v1+json' \
_10
-u 'client_id:api_key'

Step 9

Download a Statement PDF

Now that you know which statements are available, pick one and use its uri to request a PDF of that statement.

Make a GET request /users/{user_guid}/members/{member_guid}/statements/{statement_guid}.pdf endpoint. Note the .pdf extension in the route, and the +pdf extension in the example's accept header.

MX will respond with the bytes of the PDF file.

Request
Language:shell

_10
curl -i -X GET 'https://int-api.mx.com/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members/MBR-3bdc7d6b-efd4-1497-a0af-b23501cf9bd0/statements/STA-737a344b-caae-0f6e-1384-01f52e75dcb1' \
_10
-H 'Accept: application/vnd.mx.api.v1+json' \
_10
-u 'client_id:api_key' \
_10
--output statement_file_name.pdf