Skip to main content

Account Owner Identification

Account Owner Identification is offered in the context of the Atrium API and relies on the resources of that RESTful API to function properly. Specifically, this means following the general workflow below:

  1. Creating a user;
  2. Creating a member using the correct institution code and credentials required by that institution; set skip_aggregation to true;
  3. Polling the member's connection_status and answering MFA if necessary;
  4. Reading the member's account_owners (you may begin with this step for members that already exist);
  5. Calling the identify endpoint, if needed;
  6. Repeating steps 3 and 4.

If an identification is already running, a 202 Accepted status will be returned. If another aggregation-type process is already running — like standard aggregation or extended transaction history — a 409 Conflict will be returned.

For more information on other similar processes, please see our developer guide

For important information on errors, standards and conventions, and resource structure in Atrium, please see our technical reference page.

Step 1

Create a User

For further details on users, click here.

Endpoint: POST /users

Request
Response
Language:shell

_11
curl -i -X POST 'https://vestibule.mx.com/users' \
_11
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_11
-H 'Content-Type: application/json' \
_11
-H 'MX-API-Key: {mx_api_key}' \
_11
-H 'MX-Client-ID: {mx_client_id}' \
_11
-d '{
_11
"user": {
_11
"identifier": "unique_id",
_11
"metadata": "{\"first_name\": \"Steven\"}"
_11
}
_11
}'

Step 2

Get the Institution Code

Only certain institutions support identification. To get a list of all institutions which support identification, append the following query string to your request URL: supports_account_identification=true.

For further details on institutions, click here.

Endpoint: GET /institutions

Request
Response
Language:shell

_10
curl -i 'https://vestibule.mx.com/institutions?name=mx' \
_10
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_10
-H 'MX-API-Key: {mx_api_key}' \
_10
-H 'MX-Client-ID: {mx_client_id}'

Step 3

Get The Institution's Required Credentials Using the Institution Code

Endpoint: GET /institutions/{institution_code}/credentials

Request
Response
Language:shell

_10
curl -i 'https://vestibule.mx.com/institutions/mxbank/credentials' \
_10
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_10
-H 'MX-API-Key: {mx_api_key}' \
_10
-H 'MX-Client-ID: {mx_client_id}'

Step 4

Create a Member Using The Institution Code and The Required Credentials

Creating a member automatically starts a standard aggregation unless the skip_aggregation parameter is set to true. On already-existing members, you can use the identify endpoint described below.

For further details on members, click here

Endpoint: POST /users/{user_guid}/members

Request
Response
Language:shell

_21
curl -i -X POST 'https://vestibule.mx.com/users/{user_guid}/members' \
_21
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_21
-H 'Content-Type: application/json' \
_21
-H 'MX-API-Key: {mx_api_key}' \
_21
-H 'MX-Client-ID: {mx_client_id}' \
_21
-d '{
_21
"member": {
_21
"institution_code": "mxbank",
_21
"credentials": [
_21
{
_21
"guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
_21
"value": "ExampleUsername"
_21
},
_21
{
_21
"guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
_21
"value": "Pa$$vv@Rd"
_21
}
_21
],
_21
"skip_aggregation": true
_21
}
_21
}'

Step 5

Poll The Connection Status

A connection status of CONNECTED means that the member was successfully authenticated and aggregation has begun. The is_being_aggregated field will tell you whether aggregation has completed; the field will be true while aggregation is taking place and returns to false when aggregation is complete.

Endpoint: GET /users/{user_guid}/members/{member_guid}/status

Request
Response
Language:shell

_10
curl -i 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/status' \
_10
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_10
-H 'MX-API-Key: {mx_api_key}' \
_10
-H 'MX-Client-ID: {mx_client_id}'

If the aggregation has triggered MFA, the response will contain a field called challenges which contains an array of MFA questions that must be answered. There are several different types of challenges, each of which has an example to the right.

For further information on connection_status and related fields, click here.

Endpoint: GET /users/{user_guid}/members/{member_guid}/credentials

Request
Response
Language:shell

_10
curl -i 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/challenges' \
_10
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_10
-H 'MX-API-Key: {mx_api_key}' \
_10
-H 'MX-Client-ID: {mx_client_id}'

Step 6

Answer MFA, If Necessary

If the connection_status returns as CHALLENGED during polling, it will be necessary to answer multi-factor authentication in order to continue. This requires calling the list member MFA challenges endpoint and the resume aggregation from MFA endpoint, then polling the connection_status again.

Further details on MFA, see our technical reference or our troubleshooting guide.

Endpoint: PUT /users/{user_guid}/members/{member_guid}/resume

Request
Response
Language:shell

_19
curl -i -X PUT 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/resume' \
_19
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_19
-H 'Content-Type: application/json' \
_19
-H 'MX-API-Key: {mx_api_key}' \
_19
-H 'MX-Client-ID: {mx_client_id}' \
_19
-d '{
_19
"member":{
_19
"challenges":[
_19
{
_19
"guid": "institution-credential-guid",
_19
"value": "user-entered-value"
_19
},
_19
{
_19
"guid": "institution-credential-guid",
_19
"value": "user-entered-value"
_19
}
_19
]
_19
}
_19
}'

Step 7

Identify The Member

The identify endpoint begins an identification process for an already-existing member.

Endpoint: POST /users/{user_guid}/members/{member_guid}/identify

Request
Response
Language:shell

_10
curl -i -X POST 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/identify' \
_10
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_10
-H 'Content-Type: application/json' \
_10
-H 'MX-API-Key: {mx_api_key}' \
_10
-H 'MX-Client-ID: {mx_client_id}'

Step 8

List The Account Owners

ENdpoint: GET /users/{user_guid}/members/{member_guid}/account_owners

Request
Response
Language:shell

_10
curl -i 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/account_owners' \
_10
-H 'Accept: application/vnd.mx.atrium.v1+json' \
_10
-H 'MX-API-Key: {mx_api_key}' \
_10
-H 'MX-Client-ID: {mx_client_id}'

Testing Account Owner Identification

To test your setup without incurring the cost of calling the identify endpoint, Atrium has test endpoints available.

Simply modify the URL to contain the user GUID test_atrium and the member GUID test_atrium_member.

The endpoint URLs will then be as follows:

/users/test_atrium/members/test_atrium_member/identify

/users/test_atrium/members/test_atrium_member/account_owners