Skip to main content

Introduction to Atrium

The MX Atrium API supports over 48,000 data connections to thousands of financial institutions. It provides secure access to your users’ accounts and transactions with industry-leading cleansing, categorization, and classification. Atrium is designed according to resource-oriented REST architecture and responds with JSON bodies and HTTP response codes. Use Atrium’s development environment, vestibule.mx.com, to quickly get up and running. The development environment limits are 100 users and access to the top 15 institutions.

Getting Started

To get started right away with some of the most common tasks and frequently used features of Atrium, you can check out our detailed developer guide. Our developer guide also explains our test endpoints and test credentials to help you get off the ground as soon as possible. We’ve also provided wrapper libraries in several languages. Visit the appropriate GitHub page below. C# Go Java Node PHP Python Ruby

Aggregation and Data Availability

Aggregation is how Atrium is able to gather financial data from multiple sources and then deliver it to you. It is the core feature of the Atrium API. MX automatically aggregates certain members in the background every 24 hours. Specifically, we aggregate all members whose connection_status is either CONNECTED, CREATED, or UPDATED — unless the member has been disabled. You may aggregate a member via the aggregate member endpoint to get the most up-to-date information on accounts and transactions. When you aggregate a member with this endpoint, MX will not initiate a background aggregation within the next 20-hour period.

Aggregation Limits

The default minimum time between aggregation events is 10,800 seconds (3 hours), though this limit can vary by institution. Aggregating within this limit will not return an error, however; the response will simply contain the current state of the member, including the latest connection_status. Certain codepaths may also bypass this limit — for instance, updating a member’s credentials. The MX Bank test institution has no aggregation limits.

Data Availability

Be aware that aggregation is not guaranteed to return all relevant information or even every data point on a given resource. For instance, aggregation may return the balance of an account, but return a null value for the apr and day_payment_is_due fields. This is to be expected in all resources and all aggregations.

API Architecture and Resource Structure

Atrium is designed around the REST architecture and uses predictable, resource-oriented URLs. Requests are made with HTTP methods and HTTP response codes indicate the success or failure of those requests. Atrium has five broad groups of resources, each with their own attributes and endpoints:

Authentication and Security

Atrium API requests must be HTTPS with encryption TLSv1.2 or higher or else they will fail. All requests are authenticated with tokens in request headers: MX-API-Key and MX-Client-ID. The production and development environments require separate tokens. Development tokens are granted automatically during the signup process; These can be found on your profile page. Because these tokens grant access to all of your data, you must keep them secret and keep them safe. Do not share them in public areas, use them in client-side code, or otherwise use them in a way that may compromise their security. In some instances, requests that require authentication will return 404 Not Found, instead of 401 Unauthorized. This is to prevent leaking private information.

Base URL

Production Environment
Development Environment

Caching

Certain Atrium resources are subject to change at any time; for instance, institutions and institution credentials. For this reason, MX discourages partners from caching lists of resources. If caching is necessary, MX recommends refreshing a cached list at least daily.

Character Encoding

Requests to Atrium must use characters encoded with the UTF-8 standard.

Data Encoding

MX Technologies is committed to providing high-quality data to accommodate a wide range of scenarios. Due to the financial nature of our data, sometimes special characters such as ', <, >, ", and = will be found in string fields. For example, an account might be identified as Mortgage Loan <= 15 Years. We strongly recommend that clients sanitize and/or encode the output of our API, such as HTML encoding prior to rendering in a web view.

Data Format

JSON structured data is returned in all responses, including some errors.

Dates and Times

Dates and times are always given in ISO 8601 format. Fields which end in _on are given without a timestamp: 2018-07-18 Fields which end in _at are given with a timestamp: 2015-04-13T12:01:23-06:00.

Errors

Atrium uses conventional HTTP response codes to indicate the success or failure of a request, with supplementary error messaging as needed within response bodies.
Example

Identifiers and Metadata

Atrium gives you two special — but optional — fields which you can define for any resource created with the API: identifier and metadata. These fields make it easier to customize and integrate Atrium with your systems. For instance, you may need to make certain that some resources are created only once. In these situations, you can give an unique identifier to resources created with Atrium. Atrium will return a 409 Conflict error if a resource is created with an identifier that already exists. You might also use the metadata field to store custom data about a resource. For example, you could store a user’s username for your system, their sign-up date, the date and time of their last logon in your system, or all of these. Example metadata Request
Example identifier Request
Example of an identifier Conflict Response

IP Address Whitelisting

All IP addresses which will make calls to Atrium’s production environment must be whitelisted first. A 403 Forbidden error will be returned for non-whitelisted addresses. The vestibule environment does not require any whitelisting. You can whitelist IP addresses on your account profile.

Limits

User and member limits

The development environment limits developers to 100 users and access to the top 15 institutions. No user may have more than 25 members in either the development or production environments.

Aggregation throttling

Standard aggregation jobs are throttled, and a new standard agg can only be started after the throttle period has elapsed. The default throttle period is three hours (10,800 seconds), though this limit can vary from one institution to another. However, premium agg-type jobs won’t start the throttle period (extended history, identification, verification, statements, balance check). In other words, running a standard agg will always start the throttle period and prevent a new standard agg. Running any other type of job will not start the throttle period. Premium aggregation-type jobs are never throttled. That is, you can run an account verification right after a standard agg (or balance request, or verification etc.). However, because standard aggs are throttled, you should generally use the include_transactions parameter on premium jobs if standard data is also required; this will prevent delays. Throttled jobs will not return an error; the response will return with 202 Accepted and will contain the current state of the member, including the latest connection_status. Jobs for members that have experienced credential-related errors won’t be throttled (connection_status: REJECTED, PREVENTED, UPDATED). Balance jobs are limited to 5 requests every 2 hours. There is no throttling of any kind when using the MX Bank test institution.

Numbers and Number Formats

Number limits are described by their precision and scale. Precision refers to the total number of digits. Scale refers to the number of digits to the right of the decimal. For example, 538.46’s precision,scale is 5,2. Percentages are in decimal format without the percentage sign. For example, 2.99% is written 2.99.

Pagination

All endpoints which return lists are paginated. These endpoints also support two query parameters which specify the number of records per page and the page to be returned. Each response will include a pagination object specifying information on the total number of entries and the current page. Example Pagination object

Query parameters

Pagination fields

Testing

The developer guide explains how to test your setup using our test endpoints and test credentials.

Versioning

We always try to make API changes backwards-compatible. However, when we make breaking changes to Atrium, we’ll increment the version number. The current version is v1. Versions are specified in a request’s Accept header. All requests will access the current version unless a different version is specified with the request, so it’s best to always specify the API version. The current Accept header is application/vnd.mx.atrium.v1+json.

Deleting Objects

When you delete an object on MX, associated child objects are also removed automatically:
  • Deleting a member removes all linked accounts, transactions, and holdings.
  • Deleting a user removes all connected members (and their accounts, transactions, and holdings).
Deleting a user is permanent. Deleted users can never be restored.
MX uses a two-phase deletion process. Deleted objects first enter a soft-deleted state, then are permanently purged approximately two weeks later. Soft-deleted items cannot be restored through the API, though MX may manually restore soft-deleted members in limited circumstances before permanent purging occurs. If a new member is created for the same user and institution with identical credentials, any soft-deleted member will be immediately purged and a fresh record created. For OAuth members specifically:
  • Members in a PENDING state are immediately purged upon deletion by MX and cannot be recovered.
  • Members in other states are soft-deleted and potentially recoverable through MX support before permanent purging.
Once fully purged, all data is permanently lost and cannot be retrieved.