NAV Navbar
cURL Elixir Go Java Node Python Ruby
  • Introduction
  • Getting started
  • Things you need to know
  • Users
  • Institutions
  • Members
  • Accounts
  • Transactions
  • MX Connect widget
  • Identity
  • Verification
  • Webhooks
  • Changelog
  • MX Atrium API
    Technical Reference

    Introduction

    Production environment

    https://atrium.mx.com/
    

    Development environment

    https://vestibule.mx.com/
    

    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. Contact MX to purchase production access.

    Getting started

    A detailed guide to getting started with Atrium is available here. It covers some of the most common questions and scenarios you'll run into when getting up and running, offers step-buy-step guides for testing, provides downloadable resources, and offers workflow examples and explanations.

    Wrapper libraries

    To help you get started with Atrium, we've provided wrapper libraries in several languages. Visit the appropriate GitHub page below.

    Elixir

    Go

    Express

    Java

    Node

    Python

    Ruby

    Things you need to know

    Standards and conventions

    Thing Description
    API architecture 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.
    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. Please contact support to have your addresses whitelisted. The vestibule environment does not require any whitelisting.
    Security Atrium API requests must be HTTPS with encryption TLSv1.2 or higher or else they will fail.
    Authentication All requests to Atrium are authenticated with tokens: MX-API-Key and MX-Client-ID. The production and development environments require separate tokens. Development tokens are granted automatically during the signup process, and are available in your profile page. Contact MX for information on moving to production. 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.
    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.
    Data formats By default, JSON structured data is returned in responses, including some errors.
    Character encoding Requests and responses to Atrium must use characters encoded with the UTF-8 standard.
    Dates and times Dates and times follow ISO 8601 format. E.g., 2015-04-13T12:01:23-06:00.
    Percentages Percentages are in decimal format without the percentage sign. E.g., 2.99% is written 2.99.
    Numbers 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. E.g., 538.46's precision,scale is 5,2.
    Pagination All endpoints which return lists are paginated with defaults of page=1 and records_per_page=25. You may override these defaults with URL query parameters. The records_per_page parameter supports any integer within the range 10-1000.
    Limits The development environment limits developers to 100 users and access to the top 15 institutions.

    No user may have more than 25 members, regardless of the environment.

    The default minimum time between aggregation events is 10800 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.

    Resource structure

    Atrium has five broad groups of resources, each with their own attributes and endpoints:

    Resource Description
    user A user represents a person using Atrium via your application, be it a mobile app, web app, desktop app, etc.
    institution An institution represents a financial institution like Chase or Wells Fargo. It's important to point out that many real-world financial institutions will actually have several different institution objects within Atrium. This is because, for example, the mortgage division of Wells Fargo might use a separate system than its everyday banking division, which is different from its credit card division, etc.
    member A member represents the relationship between a user and an institution, and creating one is how you connect a user to an institution. A user may have one member each for their bank, their mortgage broker, their credit card provider, etc. Aggregation takes place via members.
    account An account represents a financial account held by a financial institution, e.g., a user's checking or savings account. Because a user's relationship with an institution may involve more than one account, a member may have more than one account associated with it. For instance, a user may have both a checking and savings account with Chase. In that case, the user would have a member that represents their connection with the Chase institution. That member would have two accounts, a checking account and a savings account.
    transaction A transaction represents any instance in which money moves into or out of an account. This could be a purchase at a business, a payroll deposit, a transfer from one account to another, an ATM withdrawal, etc. Each transaction belongs to only one account.

    Identifiers and metadata

    Example metadata request

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

    Example identifier request

    $ curl -X POST 'https://vestibule.mx.com/users' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
            "user": {
              "identifier": "5935d8ef-20c0-4bc1-997c-b2cccf4d601d"
            }
          }'
    

    Example of an identifier conflict response

    Status: 409 Conflict
    
    {
      "error": {
        "message": "A user already exists with identifier: '5935d8ef-20c0-4bc1-997c-b2cccf4d601d'."
      }
    }
    

    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.

    Field Description
    identifier A unique, enforced identifier for a user or member, defined by you. An identifier may contain letters, numbers, dashes, and underscores — but they should not be longer than 200 characters. MX recommends using GUIDs. Atrium will return a 409 Conflict error if a resource is created with an identifier that already exists.
    metadata This field that can be used to store additional information about a particular user or member. Any UTF-8 string can be stored, but MX recommends using structured key-value data such as JSON.

    Background Aggregation

    MX automatically aggregates certain members in the background every 24 hours. Specifically, we aggregate all members whose connection_status is either CONNECTED, CREATED, IMPEDED, or UPDATED — unless the member has been disabled. You may aggregate a member in the foreground via the aggregate member endpoint to get the most up-to-date information on accounts and transactions.

    Errors

    Example error message

    {
      "error": {
        "message": "Unrecognized institution.",
      }
    }
    

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

    Status codes

    Status Explanation
    2xx Success
    200 OK Everything worked as expected with content returned.
    202 Accepted Everything worked and MX's system is processing the request.
    204 No Content Everything worked as expected without content returned.
    4xx Requester error
    400 Bad Request Often, this means a required parameter was missing.
    401 Unauthorized Invalid MX-API-Key or MX-Client-ID provided.
    403 Forbidden The request was made from a non-whitelisted address.
    404 Not Found Invalid item/id/URL requested.
    405 Method Not Allowed A constraint on the requested endpoint wasn't met.
    406 Not Acceptable The request didn't specify a valid API version.
    409 Conflict An object with the given attributes already exists.
    422 Unprocessable Entity The data provided cannot be processed.
    5xx Responder error — which are rare
    500, 502, 504 Server errors Something went wrong with MX's servers.
    503 Service Unavailable The MX Platform is being updated.

    Users

    A user represents a person using Atrium via your application, be it a mobile app, web app, desktop app, etc.

    Endpoint Method Description
    /users POST Creates a new user.
    /users GET Returns a list of all your users in Atrium.
    /users/{user_guid} GET Returns a user's attributes.
    /users/{user_guid} PUT Updates a user's attributes.
    /users/{user_guid} DELETE Permanently deletes a user.

    Create user

    POST /users
    

    Example request

    $ curl -i -X POST 'https://vestibule.mx.com/users' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
            "user": {
              "identifier": "unique_id",
              "metadata": "{\"first_name\": \"Steven\"}"
            }
          }'
    
    user = Atrium.createUser(identifier: "unique_id", metadata: "{\"first_name\": \"Steven\"}")
    IO.inspect user
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
      "github.com/mxenabled/atrium-go/models"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      newUser := &models.User {
        Identifier: "unique_id",
        Metadata: "{\"first_name\": \"Steven\"}",
      }
      user, err := client.CreateUser(newUser)
      if err != nil {
        fmt.Println("Error creating user:", err)
        return
      }
      fmt.Printf("%+v\n", user)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    User user = atriumClient.createUser("unique_id", "", "{\"first_name\": \"Steven\"}");
    System.out.println(user.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      body: {
        "user": {
          "identifier": "unique_id",
          "metadata": "{\"first_name\": \"Steven\"}"
        }
      }
    };
    
    AtriumClient.createUser(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    user = atriumClient.createUser(identifier = "unique_id", metadata = "{\"first_name\": \"Steven\"}")
    print user.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    user = ::Atrium::User.create identifier: "unique_id", is_disabled: "", metadata: "{\"first_name\": \"Steven\"}"
    puts user.attributes
    

    Example response

    Status: 200 OK
    
    {
      "user": {
        "guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
        "identifier": "unique_id",
        "is_disabled": false,
        "metadata": "{\"first_name\": \"Steven\"}"
      }
    }
    
    %{
      "guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier" => "unique_id",
      "is_disabled" => false,
      "metadata" => "{\"first_name\": \"Steven\"}"
    }
    
    &{
      Guid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
      Metadata:{"first_name": "Steven"}
      IsDisabled:false
      Identifier:unique_id
    }
    
    User{
      guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      identifier='unique_id',
      is_disabled='false',
      metadata='{"first_name": "Steven"}'
    }
    
    { user:
       { guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         is_disabled: false,
         metadata: '{"first_name": "Steven"}',
         identifier: 'unique_id' } }
    
    {
      'guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'is_disabled': False,
      'identifier': u'unique_id',
      'metadata': u'{"first_name": "Steven"}'
    }
    
    {
      "guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier"=>"unique_id",
      "is_disabled"=>false,
      "metadata"=>"{\"first_name\": \"Steven\"}"
    }
    

    Call this endpoint to create a new user. Atrium will respond with the newly-created user object if successful.

    This endpoint accepts several parameters: identifier, metadata, and is_disabled. The identifier and metadata fields are discussed above.

    Disabling a user means that accounts and transactions associated with it will not be updated in the background by MX. It will also restrict access to that user's data until they are no longer disabled. Users who are disabled for the entirety of an Atrium billing period will not be factored into that month's bill.

    Field Data Type Description Required?
    identifier String A unique, enforced identifier for the user, defined by you. No
    is_disabled Boolean True if you want the user disabled, false otherwise. No
    metadata String Additional information you can store about this user. MX recommends using JSON-structured data. No

    Read user

    GET /users/{user_guid}
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    user = Atrium.readUser("{user_guid}")
    IO.inspect user
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      user, err := client.GetUser("{user_guid}")
      if err != nil {
        fmt.Println("Error reading user:", err)
        return
      }
      fmt.Printf("%+v\n", user)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    User user = atriumClient.readUser("{user_guid}");
    System.out.println(user.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
      }
    }
    
    AtriumClient.readUser(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    user = atriumClient.readUser("{user_guid}")
    print user.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    user = ::Atrium::User.read guid: "{user_guid}"
    puts user.attributes
    

    Example response

    Status: 200 OK
    
    {
      "user": {
        "guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
        "identifier": "unique_id",
        "is_disabled": false,
        "metadata": "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
      }
    }
    
    %{
      "guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier" => "unique_id",
      "is_disabled" => false,
      "metadata" => "{\"first_name\": \"Steven\"}"
    }
    
    &{
      Guid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
      Metadata:{"first_name": "Steven"}
      IsDisabled:false
      Identifier:unique_id
    }
    
    User{
      guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      identifier='unique_id',
      is_disabled='false',
      metadata='{"first_name": "Steven"}'
    }
    
    { user:
       { guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         is_disabled: false,
         metadata: '{"first_name": "Steven"}',
         identifier: 'unique_id' } }
    
    {
      'guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'is_disabled': False,
      'identifier': u'unique_id',
      'metadata': u'{"first_name": "Steven"}'
    }
    
    {
      "guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier"=>"unique_id",
      "is_disabled"=>false,
      "metadata"=>"{\"first_name\": \"Steven\"}"
    }
    

    Use this endpoint to read the attributes of a specific user. The following attributes will be included in user object:

    Field Data Type Description
    guid String A unique identifier, defined by MX.
    identifier String A unique, enforced identifier for the user, defined by you.
    is_disabled Boolean True if you want the user disabled, false otherwise.
    metadata String Additional information you can store about this user. MX recommends using JSON-structured data.

    Update user

    PUT /users/{user_guid}
    

    Example request

    $ curl -i -X PUT 'https://vestibule.mx.com/users/{user_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
            "user": {
              "metadata": "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
            }
          }'
    
    user = Atrium.updateUser("{user_guid}", metadata: "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}")
    IO.inspect user
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
      "github.com/mxenabled/atrium-go/models"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      updatedUser := &models.User {
        Guid: "{user_guid}",
        Metadata: "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}",
      }
      user, err := client.UpdateUser(updatedUser)
      if err != nil {
        fmt.Println("Error updating user:", err)
        return
      }
      fmt.Printf("%+v\n", user)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    User user = atriumClient.updateUser("{user_guid}", "", "", "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}");
    System.out.println(user.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      body: {
        "user": {
          "guid": "{user_guid}",
          "metadata": "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
        }
      }
    };
    
    AtriumClient.updateUser(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    user = atriumClient.updateUser("{user_guid}", metadata = "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}")
    print user.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    user = ::Atrium::User.read guid: "{user_guid}"
    user = user.update metadata: "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
    user.attributes
    

    Example response

    Status: 200 OK
    
    {
      "user": {
        "guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
        "identifier": "unique_id",
        "is_disabled": false,
        "metadata": "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
      }
    }
    
    {
      "guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier" => "unique_id",
      "is_disabled" => false,
      "metadata" => "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
    }
    
    &{
      Guid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
      Metadata:{"first_name": "Steven", "last_name": "Universe"}
      IsDisabled:false
      Identifier:unique_id
    }
    
    User{
      guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      identifier='unique_id',
      is_disabled='false',
      metadata='{"first_name": "Steven", "last_name": "Universe"}'
    }
    
    { user:
       { guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         is_disabled: false,
         metadata: '{"first_name": "Steven", "last_name": "Universe"}',
         identifier: 'unique_id' } }
    
    {
      'guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'is_disabled': False,
      'identifier': u'unique_id',
      'metadata': u'{"first_name": "Steven", "last_name": "Universe"}'
    }
    
    {
      "guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier"=>"unique_id",
      "is_disabled"=>false,
      "metadata"=>"{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
    }
    

    Example request to disable user

    Status: 200 OK
    
    $ curl -i -X PUT 'https://vestibule.mx.com/users/{user_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
            "user": {
              "is_disabled": true
            }
         }'
    
    user = Atrium.updateUser("{user_guid}", is_disabled: "true")
    IO.inspect user
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
      "github.com/mxenabled/atrium-go/models"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      updatedUser := &models.User {
        Guid: "{user_guid}",
        IsDisabled: true,
      }
      user, err := client.UpdateUser(updatedUser)
      if err != nil {
        fmt.Println("Error updating user:", err)
        return
      }
      fmt.Printf("%+v\n", user)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    User user = atriumClient.updateUser("{user_guid}", "", "true", "");
    System.out.println(user.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      body: {
        "user": {
          "guid": "{user_guid}",
          "is_disabled": "true"
        }
      }
    };
    
    AtriumClient.updateUser(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    user = atriumClient.updateUser("{user_guid}", is_disabled = "true")
    print user.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    user = ::Atrium::User.read guid: "{user_guid}"
    user = user.update is_disabled: "true"
    puts user.attributes
    

    Example response

    Status: 200
    
    {
      "user": {
        "guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
        "identifier": "unique_id",
        "is_disabled": true,
        "metadata": "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
      }
    }
    
    %{
      "guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier" => "unique_id",
      "is_disabled" => true,
      "metadata" => "{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
    }
    
    &{
      Guid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
      Metadata:{"first_name": "Steven", "last_name": "Universe"}
      IsDisabled:true
      Identifier:unique_id
    }
    
    User{
      guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      identifier='unique_id',
      is_disabled='true',
      metadata='{"first_name": "Steven", "last_name": "Universe"}'
    }
    
    { user:
       { guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         is_disabled: true,
         metadata: '{"first_name": "Steven", "last_name": "Universe"}',
         identifier: 'unique_id' } }
    
    {
      'guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'is_disabled': True,
      'identifier': u'unique_id',
      'metadata': u'{"first_name": "Steven", "last_name": "Universe"}'
    }
    
    {
      "guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier"=>"unique_id",
      "is_disabled"=>true,
      "metadata"=>"{\"first_name\": \"Steven\", \"last_name\": \"Universe\"}"
    }
    

    Use this endpoint to update the attributes of a specific user. Atrium will respond with the updated user object.

    Disabling a user means that accounts and transactions associated with it will not be updated in the background by MX. It will also restrict access to that user's data until they are no longer disabled. Users who are disabled for the entirety of an Atrium billing period will not be factored into that month's bill.

    To disable a user, update it and set the is_disabled parameter to true. Set it to false to re-enable the user.

    List users

    GET /users
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    users = Atrium.listUsers()
    Enum.each(users, fn user ->
      IO.inspect user
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      users, err := client.ListUsers()
      if err != nil {
        fmt.Println("Error listing users:", err)
        return
      }
      for _, user := range users {
        fmt.Printf("%+v\n", user)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    User users = atriumClient.listUsers("", "");
    for(User user : users) {
        System.out.println(user.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    AtriumClient.listUsers().then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    users = atriumClient.listUsers()
    for user in users:
        print user.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    ::Atrium::User.list
    users.each do |a_user|
      puts a_user.attributes
    end
    

    Example response

    Status: 200 OK
    
    {
      "users": [
        {
          "guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
          "identifier": "unique_id",
          "is_disabled": false,
          "metadata": "{\"first_name\": \"Steven\"}"
        },
        {
          "guid": "USR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "identifier": "unique_id",
          "is_disabled": false,
          "metadata": "{\"first_name\": \"Barb\"}"
        }
      ]
    }
    
    %{
      "guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier" => "unique_id",
      "is_disabled" => false,
      "metadata" => "{\"first_name\": \"Steven\"}"
    }
    %{
      "guid" => "USR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier" => "unique_id",
      "is_disabled" => false,
      "metadata" => "{\"first_name\": \"Barb\"}"
    }
    
    &{
      Guid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
      Metadata:{"first_name": "Steven"}
      IsDisabled:false
      Identifier:unique_id
    }
    &{
      Guid:USR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Metadata:{"first_name": "Barb"}
      IsDisabled:false
      Identifier:unique_id
    }
    
    User{
      guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      identifier='unique_id',
      is_disabled='false',
      metadata='{"first_name": "Steven"}'
    }
    User{
      guid='USR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      identifier='unique_id',
      is_disabled='false',
      metadata='{"first_name": "Barb"}'
    }
    
    { users:
       [ { guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
           is_disabled: false,
           metadata: '{"first_name": "Steven"}',
           identifier: 'unique_id' },
         { guid: 'USR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           is_disabled: false,
           metadata: '{"first_name": "Barb"}',
           identifier: 'unique_id' } ],
      pagination:
        { current_page: 1,
          per_page: 25,
          total_entries: 2,
          total_pages: 1 } }
    
    {
      'guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'is_disabled': False,
      'identifier': u'unique_id',
      'metadata': u'{"first_name": "Steven"}'
    }
    {
      'guid': u'USR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'is_disabled': False,
      'identifier': u'unique_id',
      'metadata': u'{"first_name": "Barb"}'
    }
    
    {
      "guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54",
      "identifier"=>"unique_id",
      "is_disabled"=>false,
      "metadata"=>"{\"first_name\": \"Steven\"}"
    }
    {
      "guid"=>"USR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier"=>"unique_id",
      "is_disabled"=>false,
      "metadata"=>"{\"first_name\": \"Barb\"}"
    }
    

    Use this endpoint to list every user you've created in Atrium.

    Delete user

    DELETE /users/{user_guid}
    

    Example request

    $ curl -i -X DELETE 'https://vestibule.mx.com/users/{user_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    Atrium.deleteUser("{user_guid}")
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      err := client.DeleteUser("{user_guid}")
      if err != nil {
        fmt.Println("Error deleting user:", err)
        return
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    atriumClient.deleteUser("{user_guid}");
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}"
      }
    }
    
    AtriumClient.deleteUser(request);
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    atriumClient.deleteUser("{user_guid}")
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    user = ::Atrium::User.read guid: "{user_guid}"
    user.delete
    

    Example response

    Status: 204 No Content
    

    Calling this endpoint will permanently delete a user from Atrium. If successful, the API will respond with Status: 204 No Content.

    Institutions

    An institution represents a financial institution like Chase, Wells Fargo, or Mountain America Credit Union.

    It's important to point out that many real-world financial institutions will actually have several different institution objects within Atrium. This is because, for example, the banking and mortgage divisions of Wells Fargo may use separate online systems for accessing customer data, both of which may be different from the credit card division's system, etc.

    Endpoint Method Description
    /institutions GET Returns a list of institutions that are available for connection.
    /institutions/{institution_code} GET Returns information about a particular institution.
    /institutions/{institution_code}/credentials GET Returns information on what kind of credentials are needed for a particular institution.

    Read institution

    GET /institutions/{institution_code}
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/institutions/chase' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    institution = Atrium.readInstitution("chase")
    IO.inspect institution
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      institution, err := client.GetInstitution("chase")
      if err != nil {
        fmt.Println("Error reading institution:", err)
        return
      }
      fmt.Printf("%+v\n", institution)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Institution institution = atriumClient.readInstitution("chase");
    System.out.println(institution.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        institutionCode: "chase"
      }
    };
    
    AtriumClient.readInstitution(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    institution = atriumClient.readInstitution("chase")
    print institution.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    institution = ::Atrium::Institution.read institution_code: "chase"
    puts institution.attributes
    

    Example response

    Status: 200 OK
    
    {
      "institution": {
        "code": "chase",
        "medium_logo_url": "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png",
        "name": "Chase Bank",
        "small_logo_url": "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png",
        "supports_account_identification": true,
        "supports_account_verification": true,
        "url": "https://www.chase.com"
      }
    }
    
    %{
      "code" => "chase",
      "medium_logo_url" => "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png",
      "name" => "Chase Bank",
      "small_logo_url" => "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png",
      "supports_account_identification" => true,
      "supports_account_verification" => true,
      "url" => "https://www.chase.com",
    }
    
    &{
      Code:chase
      MediumLogoURL:https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png
      Name:Chase Bank
      SmallLogoURL:https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png
      SupportsAccountIdentification:true
      SupportsAccountVerification:true
      URL:https://www.chase.com
    }
    
    Institution{
      code='chase',
      name='Chase Bank',
      url='https://www.chase.com',
      small_logo_url='https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png',
      medium_logo_url='https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png'
      supports_account_identification=true
      supports_account_verification=true
    }
    
    { institution:
       { code: 'chase',
         name: 'Chase Bank',
         url: 'https://www.mx.com',
         medium_logo_url: 'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png',
         small_logo_url: 'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png'
         supports_account_identification: true,
         supports_account_verification: true } }
    
    {
      'url': u'https://www.chase.com',
      'code': u'chase',
      'medium_logo_url': u'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png',
      'name': u'Chase Bank',
      'small_logo_url': u'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png'
    }
    
    {
      "code"=>"chase",
      "name"=>"Chase Bank",
      "url"=>"https://www.chase.com",
      "small_logo_url"=>"https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png",
      "medium_logo_url"=>"https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png",
      "supports_account_identification"=>true,
      "supports_account_verification"=>true
    }
    

    This endpoint allows you to see information for a specific institution.

    Field Data type Description
    code String A unique identifier for each institution, defined by MX.
    medium_logo_url String URL for a 100px X 100px logo for each institution. A generic logo is returned for institutions that don't have one.
    name String An easy-to-read name for an institution, e.g., "Chase Bank" or "Wells Fargo Bank."
    small_logo_url String URL for a 50px X 50px logo for each institution. A generic logo is returned for institutions that don't have one.
    supports_account_identification Boolean Indicates whether the institution supports account identification.
    supports_account_verification Boolean Indicates whether the institution supports account verification.
    url String Website URL for a particular institution, e.g., www.chase.com.

    List institutions

    GET /institutions
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/institutions?name=chase' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    institutions = Atrium.listInstitutions(name: "chase")
    Enum.each(institutions, fn institution ->
      IO.inspect institution
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      institutions, err := client.ListInstitutions("chase")
      if err != nil {
        fmt.Println("Error listing institutions:", err)
        return
      }
      for _, institution := range institutions {
        fmt.Printf("%+v\n", institution)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Institution[] institutions = atriumClient.listInstitutions("chase", "", "");
    for(Institution institution : institutions) {
        System.out.println(institution.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        name: "chase"
      }
    };
    
    AtriumClient.listInstitutions(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    institutions = atriumClient.listInstitutions(name = "chase")
    for institution in institutions:
        print institution.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    name = "chase"
    params = {:name => name}
    institutions = ::Atrium::Institution.list query_params: params
    institutions.each do |institution|
      puts institution.attributes
    end
    

    Example response

    Status: 200 OK
    
    {
      "institutions": [
        {
          "code": "chase",
          "medium_logo_url": "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png",
          "name": "Chase Bank",
          "small_logo_url": "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png",
          "supports_account_identification": true,
          "supports_account_verification": true,
          "url": "https://www.chase.com"
        }
      ]
    }
    
    %{
      "code" => "chase",
      "medium_logo_url" => "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png",
      "name" => "Chase Bank",
      "small_logo_url" => "https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png",
      "supports_account_identification" => true,
      "supports_account_verification" => true,
      "url" => "https://www.chase.com",
    }
    
    &{
      Code:chase
      MediumLogoURL:https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png
      Name:Chase Bank
      SmallLogoURL:https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png
      SupportsAccountIdentification:true
      SupportsAccountVerification:true
      URL:https://www.chase.com
    }
    
    Institution{
      code='chase',
      name='Chase Bank',
      url='https://www.chase.com',
      small_logo_url='https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png',
      medium_logo_url='https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png'
      supports_account_identification=true
      supports_account_verification=true
    }
    
    { institutions:
       [ { code: 'chase',
           name: 'Chase Bank',
           url: 'https://www.chase.com',
           medium_logo_url: 'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png',
           supports_account_identification: true,
           supports_account_verification: true,
           small_logo_url: 'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png' } ],
      pagination:
        { current_page: 1,
          per_page: 25,
          total_entries: 1,
          total_pages: 1 } }
    
    {
      'url': u'https://www.chase.com',
      'code': u'chase',
      'medium_logo_url': u'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png',
      'name': u'Chase Bank',
      'small_logo_url': u'https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png'
    }
    
    {
      "code"=>"chase",
      "name"=>"Chase Bank",
      "url"=>"https://www.chase.com",
      "small_logo_url"=>"https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/100x100/default_100x100.png",
      "medium_logo_url"=>"https://content.moneydesktop.com/storage/MD_Assets/Ipad%20Logos/50x50/default_50x50.png",
      "supports_account_identification"=>true,
      "supports_account_verification"=>true
    }
    

    This endpoint allows you to see what institutions are available for connection. Information returned will include the institution_code assigned to a particular institution, URLs for the financial institution's logo, and the URL for its website.

    This endpoint takes certain optional query string parameters to facilitate searching for specific institutions.

    Parameter Results
    name={string} Only institutions whose name contains the appended string will be returned.
    supports_account_identification=true Only institutions which support identity will be returned.
    supports_account_verification=true Only institutions which support account verification will be returned.

    Read institution credentials

    GET /institutions/{institution_code}/credentials
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/institutions/chase/credentials' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    credentials = Atrium.readInstitutionCredentials("chase")
    Enum.each(credentials, fn credential ->
      IO.inspect credential
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      credentials, err := client.ListCredentials("chase")
      if err != nil {
        fmt.Println("Error reading institution credentials:", err)
        return
      }
      for _, credential := range credentials {
        fmt.Printf("%+v\n", credential)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Credentials[] credentials = atriumClient.readInstitutionCredentials("chase", "", "");
    for(Credential credential : credentials) {
        System.out.println(credential.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        institutionCode: "chase"
      }
    };
    
    AtriumClient.listCredentials(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    credentials = atriumClient.readInstitutionCredentials("chase")
    for credential in credentials:
        print credential.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    credentials = ::Atrium::Institution.credentials "chase"
    credentials.each do |credential|
      puts credential.attributes
    end
    

    Example response

    Status: 200 OK
    
    {
        "credentials": [
            {
                "field_name": "login_email",
                "guid": "CRD-12ce94ad-032b-5441-8cb3-d7ebe3a35676",
                "label": "Email Address",
                "display_order": 0,
                "type": "LOGIN"
            },
            {
                "field_name": "login_password",
                "guid": "CRD-305767e4-f464-765b-8f83-881b5bd307ec",
                "label": "PayPal password",
                "display_order": 1,
                "type": "PASSWORD"
            }
        ]
    }
    
    %{
      "display_order" => 0,
      "field_name" => "LOGIN",
      "guid" => "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label" => "Username",
      "type" => "LOGIN"
    }
    %{
      "display_order" => 1,
      "field_name" => "PASSWORD",
      "guid" => "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label" => "Password",
      "type" => "PASSWORD"
    }
    
    &{
      DisplayOrder :0
      FieldName:LOGIN
      Guid:CRD-1ec152cd-e628-e81a-e852-d1e7104624da
      Label:Username
      Type:LOGIN
      Value:
    }
    &{
      DisplayOrder:1
      FieldName:PASSWORD
      Guid:CRD-1ec152cd-e628-e81a-e852-d1e7104624da
      Label:Password
      Type:PASSWORD
      Value:
    }
    
    Credential{
      display_order=0,
      field_name='LOGIN',
      guid='CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      label='Username',
      type='LOGIN'
    }
    Credential{
      display_order=1,
      field_name='PASSWORD',
      guid='CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      label='Password',
      type='PASSWORD'
    }
    
    { credentials:
       [ { display_order: 0,
           field_name: 'LOGIN',
           guid: 'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
           label: 'Username',
           type: 'LOGIN' },
         { display_order: 1,
           field_name: 'PASSWORD',
           guid: 'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
           label: 'Password',
           type: 'PASSWORD' } ] }
    
    {
      'type': u'LOGIN',
      'guid': u'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      'field_name': u'LOGIN',
      'display_order': 0,
      'label': u'Username'
    }
    {
      'type': u'PASSWORD',
      'guid': u'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      'field_name': u'PASSWORD',
      'display_order': 1,
      'label': u'Password'
    }
    
    {
      "display_order"=>0,
      "field_name"=>"LOGIN",
      "guid"=>"CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label"=>"Username",
      "type"=>"LOGIN",
      "value"=>nil
    }
    {
      "display_order"=>1,
      "field_name"=>"PASSWORD",
      "guid"=>"CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label"=>"Password",
      "type"=>"PASSWORD",
      "value"=>nil
    }
    

    Use this endpoint to see which credentials will be needed to create a member for a specific institution.

    Field Data type Description
    display_order Integer The order in which the credential should be displayed to the end user; lower numbers should be displayed first.
    field_name String Name of the credential field for the institution, e.g., "LOGIN"
    guid String A unique identifier for the credential. Defined by MX.
    label String A label for the credential, intended to be readable by the end user, e.g., "Username"
    type String A name for the type of field, e.g., "PASSWORD"
    options Array See explanation that immediately follows.

    For credentials with the type OPTIONS, the credentials object will contain a nested array called options. This array lists various choices available for credential prompts, and includes further attributes.

    Field Data type Description
    label String A label for the credential prompt.
    value String A response for the credential prompt.

    Members

    A member represents the relationship between a user and an institution, and creating one is how you connect one to the other. Thus, multiple members may be attached to a single user, e.g., one for their bank, another for their mortgage provider, another for their credit card provider, etc.

    Endpoint Method Description
    /users/{user_guid}/members POST Create a new member.
    /users/{user_guid}/members/{member_guid} GET Read information about a specific member.
    /users/{user_guid}/members/{member_guid} PUT Update a specific member.
    /users/{user_guid}/members GET List all members that belong to a user.
    /users/{user_guid}/members/{member_guid}/aggregate GET Aggregate a member.
    /users/{user_guid}/members/{member_guid}/status GET Read the aggregation status of a member.
    /users/{user_guid}/members/{member_guid}/challenges GET List the MFA challenges for a member.
    /users/{user_guid}/members/{member_guid}/credentials GET List the Non-MFA credentials for a member.
    /users/{user_guid}/members/{member_guid}/resume PUT This resumes aggregation for a member with status CHALLENGED by answering MFA challenges./users/{user_guid}/members/{member_guid}/accounts
    /users/{user_guid}/members/{member_guid}/transactions GET Returns a list of transactions associated with a specific member.

    Create member

    POST /users/{user_guid}/members
    

    Example request

    $ curl -i -X POST 'https://vestibule.mx.com/users/{user_guid}/members' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
            "member": {
              "institution_code": "chase",
              "credentials": [
                {
                  "guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
                  "value": "ExampleUsername"
                },
                {
                  "guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
                  "value": "Pa$$vv@Rd"
                }
              ],
              "skip_aggregation": true
            }
          }'
    
    credentialArray = []
    credentialArray = [%{guid: "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716", value: "username"} | credentialArray]
    credentialArray = [%{guid: "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f", value: "password"} | credentialArray]
    
    member = Atrium.createMember("{user_guid}", credentialArray, "chase")
    IO.inspect member
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
      "github.com/mxenabled/atrium-go/models"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      loginCredentials := []*models.Credential{}
      username := &models.Credential{Guid: "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716", Value: "username"}
      loginCredentials = append(loginCredentials, username)
      password := &models.Credential{Guid: "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f", Value: "password"}
      loginCredentials = append(loginCredentials, password)
    
      newMember := &models.Member{
        InstitutionCode: "chase",
      }
      member, err := client.CreateMember("{user_guid}", newMember, loginCredentials)
      if err != nil {
        fmt.Println("Error creating member:", err)
        return
      }
      fmt.Printf("%+v\n", member)
    }
    
    import com.google.gson.JsonArray;
    import com.google.gson.JsonObject;
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    
    JsonObject credentialOne = new JsonObject();
    credentialOne.addProperty("guid", "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716");
    credentialOne.addProperty("value", "username");
    
    JsonObject credentialTwo = new JsonObject();
    credentialTwo.addProperty("guid", "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f");
    credentialTwo.addProperty("value", "password");
    
    JsonArray credentialArray = new JsonArray();
    credentialArray.add(credentialOne);
    credentialArray.add(credentialTwo);
    
    Member member = atriumClient.createMember("{user_guid}", credentialArray, "chase", "", "");
    System.out.println(member.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}"
      },
      body: {
        "member": {
          "institution_code": "chase",
          "credentials": [
            {
              "guid": "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716",
              "value": "username"
            },
            {
              "guid": "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f",
              "value": "password"
            }
          ]
        }
      }
    };
    
    AtriumClient.createMember(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    
    credentialOne = {}
    credentialOne["guid"] = "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716"
    credentialOne["value"] = "username"
    
    credentialTwo = {}
    credentialTwo["guid"] = "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f"
    credentialTwo["value"] = "password"
    
    credentialArray = []
    credentialArray.append(credentialOne)
    credentialArray.append(credentialTwo)
    
    member = atriumClient.createMember("{user_guid}", credentialArray, "chase")
    print member.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    credentialOne = {}
    credentialOne[:guid] = "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716"
    credentialOne[:value] = "username"
    
    credentialTwo = {}
    credentialTwo[:guid] = "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f"
    credentialTwo[:value] = "password"
    
    credentialArray = []
    credentialArray.push(credentialOne)
    credentialArray.push(credentialTwo)
    
    member = ::Atrium::Member.create user_guid: "{user_guid}", institution_code: "chase", credentials: credentialArray
    puts member.attributes
    

    Example response

    Status: 202 Accepted
    
    {
      "member": {
        "aggregated_at": "2016-10-13T17:57:36+00:00",
        "connection_status": "CONNECTED",
        "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "identifier": "unique_id",
        "institution_code": "chase",
        "is_being_aggregated": true,
        "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
        "name": "Chase Bank",
        "status": "INITIATED",
        "successfully_aggregated_at": null,
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    
    %{
      "aggregated_at" => "2016-10-13T17:57:36+00:00",
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier" => "unique_id",
      "institution_code" => "chase",
      "is_being_aggregated" => true,
      "metadata" => "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name" => "Chase Bank",
      "status" => "INITIATED",
      "successfully_aggregated_at" => nil,
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AggregatedAt:2016-10-13T17:57:36+00:00
      Challenges:[]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      HasProcessedAccounts:
      HasProcessedTransactions:
      Identifier:unique_id
      InstitutionCode:chase
      IsBeingAggregated:true
      Metadata:{"credentials_last_refreshed_at": "2015-10-15"}
      Name:Chase Bank
      Status:INITIATED
      SuccessfullyAggregatedAt:
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Member{
      aggregated_at='2016-10-13T17:57:36+00:00',
      challenges='null',
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='null',
      has_processed_transactions='null',
      identifier='unique_id',
      institution_code='chase',
      is_being_aggregated='true',
      metadata='{"credentials_last_refreshed_at": "2015-10-15"}',
      name='Chase Bank',
      status='INITIATED',
      successfully_aggregated_at='null',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { member:
       { status: 'INITIATED',
         guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         institution_code: 'chase',
         is_being_aggregated: true,
         metadata: '{"credentials_last_refreshed_at": "2015-10-15"}',
         name: 'Chase Bank',
         user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         aggregated_at: '2016-10-13T17:57:36+00:00',
         identifier: 'unique_id',
         successfully_aggregated_at: null } }
    
    {
      'status': u'INITIATED',
      'successfully_aggregated_at': None,
      'institution_code': u'chase',
      'identifier': u'unique_id',
      'name': u'Chase Bank',
      'is_being_aggregated': True,
      'aggregated_at': u'2016-10-13T17:57:36+00:00',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'metadata': u'{"credentials_last_refreshed_at": "2015-10-15"}'
    }
    
    {
      "aggregated_at"=>"2016-10-13T17:57:36+00:00",
      "challenges"=>nil,
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>nil,
      "has_processed_transactions"=>nil,
      "identifier"=>"unique_id",
      "institution_code"=>"chase",
      "is_being_aggregated"=>true,
      "metadata"=>"{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name"=>"Chase Bank",
      "status"=>"INITIATED",
      "successfully_aggregated_at"=>nil,
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    This endpoint allows you to create a new member. Members are created with the required parameters credentials and institution_code, and the optional parameters identifier and metadata.

    When creating a member, you'll need to include the correct type of credential required by the financial institution, with values provided by the end user. You can find out which credential type is required with the /institutions/{institution_code}/credentials endpoint.

    If successful, Atrium will respond with the newly-created member object.

    Once you successfully create a member, MX will immediately validate the provided credentials and attempt to aggregate data for accounts and transactions. You can prevent this automatic aggregation attempt by setting the optional skip_aggregation parameter to true in the request body.

    Parameter Data type Description Required?
    credentials Array The credentials endpoint for the requested institution will give you a list of all the credentials required to create a member for a given institution. Each required credential will need to be included within this array. Yes
    identifier String A unique enforced identifier for the member, defined by you. No
    institution_code String Unique code for the institution to which the member will connect. Yes
    metadata String Additional information you can store on this member. No
    skip_aggregation Boolean Setting this parameter to true will prevent the member from automatically aggregating when it is created. No

    Read member

    GET /users/{user_guid}/members/{member_guid}
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    member = Atrium.readMember("{user_guid}", "member_guid")
    IO.inspect member
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      member, err := client.GetMember("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error reading member:", err)
        return
      }
      fmt.Printf("%+v\n", member)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Member member = atriumClient.readMember("{user_guid}", "{member_guid}");
    System.out.println(member.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.readMember(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    member = atriumClient.readMember("{user_guid}", "{member_guid}")
    print member.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    puts member.attributes
    

    Example response

    Status: 200 OK
    
    {
      "member": {
        "aggregated_at": "2016-10-13T18:07:57+00:00",
        "connection_status": "CONNECTED",
        "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "identifier": "unique_id",
        "institution_code": "chase",
        "is_being_aggregated": false,
        "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
        "name": "Chase Bank",
        "status": "COMPLETED",
        "successfully_aggregated_at": "2016-10-13T17:57:38+00:00",
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"    
      }
    }
    
    %{
      "aggregated_at" => "2016-10-13T18:07:57+00:00",
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier" => "unique_id",
      "institution_code" => "chase",
      "is_being_aggregated" => true,
      "metadata" => "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name" => "Chase Bank",
      "status" => "COMPLETED",
      "successfully_aggregated_at" => "2016-10-13T17:57:38+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AggregatedAt:2016-10-13T17:57:36+00:00
      Challenges:[]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      HasProcessedAccounts:
      HasProcessedTransactions:
      Identifier:unique_id
      InstitutionCode:chase
      IsBeingAggregated:true
      Metadata:{"credentials_last_refreshed_at": "2015-10-15"}
      Name:Chase Bank
      Status:COMPLETED
      SuccessfullyAggregatedAt:2016-10-13T17:57:38+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Member{
      aggregated_at='2016-10-13T17:57:36+00:00',
      challenges='null',
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='null',
      has_processed_transactions='null',
      identifier='unique_id',
      institution_code='chase',
      is_being_aggregated='true',
      metadata='{"credentials_last_refreshed_at": "2015-10-15"}',
      name='Chase Bank',
      status='COMPLETED',
      successfully_aggregated_at='2016-10-13T17:57:38+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { member:
       { status: 'COMPLETED',
         guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         institution_code: 'chase',
         is_being_aggregated: true,
         metadata: '{"credentials_last_refreshed_at": "2015-10-15"}',
         name: 'Chase Bank',
         user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         aggregated_at: '2016-10-13T18:07:57+00:00',
         identifier: 'unique_id',
         successfully_aggregated_at: '2016-10-13T17:57:38+00:00' } }
    
    {
      'status': u'COMPLETED',
      'successfully_aggregated_at': '2016-10-13T17:57:38+00:00',
      'institution_code': u'chase',
      'identifier': 'unique_id',
      'name': u'Chase Bank',
      'is_being_aggregated': True,
      'aggregated_at': u'2016-10-13T18:07:57+00:00',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'metadata': '{"credentials_last_refreshed_at": "2015-10-15"}'
    }
    
    {
      "aggregated_at"=>"2016-10-13T18:07:57+00:00",
      "challenges"=>nil,
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>nil,
      "has_processed_transactions"=>nil,
      "identifier"=>"unique_id",
      "institution_code"=>"chase",
      "is_being_aggregated"=>true,
      "metadata"=>"{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name"=>"Chase Bank",
      "status"=>"COMPLETED",
      "successfully_aggregated_at"=>"2016-10-13T17:57:38+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Use this endpoint to read the attributes of a specific member.

    A member has the following attributes:

    Field Data type Description
    aggregated_at String The date and time the account was last aggregated.
    connection_status The status of a member's aggregation. Read more about these statuses below.
    guid String A unique identifier for the member. Defined by MX.
    identifier String A unique, enforced identifier for the member. Defined by you.
    institution_code String Unique identifier for the institution. Defined by MX.
    is_being_aggregated Boolean This value is true if the member is being aggregated at the time of the request and false otherwise.
    metadata String Additional information you can store on this member.
    name String The name of the member. If omitted as a parameter when creating the member, the institution name within the MX platform will be used, e.g., "Chase Bank."
    status String The status of a member's aggregation. This field will soon be deprecated. Use connection_status above as more detailed indicator of a member's status.
    successfully_aggregated_at String The date and time the member was successfully aggregated.
    user_guid String A unique identifier for the user. Defined by MX.

    Update member

    PUT /users/{user_guid}/members/{member_guid}
    

    Example request

    $ curl -i -X PUT 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
            "member":{
              "credentials":[
                {
                   "guid": "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716",
                   "value": "updated-username"
                },
                {
                   "guid": "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f",
                   "value": "updated-password"
                }
              ],
              "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-16\"}"
            }
          }'
    
    credentialArray = []
    credentialArray = [%{guid: "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716", value: "updated-username"} | credentialArray]
    credentialArray = [%{guid: "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f", value: "updated-password"} | credentialArray]
    
    member = Atrium.updateMember("{user_guid}", "{member_guid}", credentials: credentialArray, metadata: "{\"credentials_last_refreshed_at\": \"2015-10-16\"}")
    IO.inspect member
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
      "github.com/mxenabled/atrium-go/models"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      updatedCredentials := []*models.Credential{}
      username := &models.Credential{Guid: "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716", Value: "updated-username"}
      updatedCredentials = append(updatedCredentials, username)
      password := &models.Credential{Guid: "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f", Value: "updated-password"}
      updatedCredentials = append(updatedCredentials, password)
    
      updatedMember := &models.Member{
        Guid: "{member_guid}",
        Metadata: "{\"credentials_last_refreshed_at\": \"2015-10-16\"}",
      }
    
      member, err := client.UpdateMember("{user_guid}", updatedMember, updatedCredentials)
      if err != nil {
        fmt.Println("Error updating member:", err)
        return
      }
      fmt.Printf("%+v\n", member)
    }
    
    import com.google.gson.JsonArray;
    import com.google.gson.JsonObject;
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    
    JsonObject credentialOne = new JsonObject();
    credentialOne.addProperty("guid", "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716");
    credentialOne.addProperty("value", "updated-username");
    
    JsonObject credentialTwo = new JsonObject();
    credentialTwo.addProperty("guid", "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f");
    credentialTwo.addProperty("value", "updated-password");
    
    JsonArray credentialArray = new JsonArray();
    credentialArray.add(credentialOne);
    credentialArray.add(credentialTwo);
    
    Member member = atriumClient.updateMember("{user_guid}", "{member_guid}", credentialArray, "", "{\"credentials_last_refreshed_at\": \"2015-10-16\"}");
    System.out.println(member.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      },
      body: {
        "member":{
          "credentials":[
            {
               "guid": "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716",
               "value": "updated-username"
            },
            {
               "guid": "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f",
               "value": "updated-password"
            }
          ],
          "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-16\"}"
        }
      }
    };
    
    AtriumClient.updateMember(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    
    credentialOne = {}
    credentialOne["guid"] = "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716"
    credentialOne["value"] = "updated-username"
    
    credentialTwo = {}
    credentialTwo["guid"] = "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f"
    credentialTwo["value"] = "updated-password"
    
    credentialArray = []
    credentialArray.append(credentialOne)
    credentialArray.append(credentialTwo)
    
    member = atriumClient.updateMember("{user_guid}", "{member_guid}", credentials = credentialArray, metadata = "{\"credentials_last_refreshed_at\": \"2015-10-16\"}")
    print member.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    
    usernameCredential = {}
    usernameCredential[:guid] = "CRD-598ec8d4-6200-8cda-345d-3dbb5fc17716"
    usernameCredential[:value] = "updated-username"
    
    passwordCredential = {}
    passwordCredential[:guid] = "CRD-27d0edb8-1d50-5b90-bcbc-be270ca42b9f"
    passwordCredential[:value] = "updated-password"
    
    updatedCredentials = []
    updatedCredentials.push(usernameCredential)
    updatedCredentials.push(passwordCredential)
    
    member = member.update({metadata: "{\"credentials_last_refreshed_at\": \"2015-10-16\"}", credentials: updatedCredentials})
    puts member.attributes
    

    Example response

    Status: 202 Accepted
    
    {
      "member": {
        "aggregated_at": "2016-09-30T14:43:44-06:00",
        "connection_status": "CONNECTED",
        "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "identifier": "unique_id",
        "institution_code": "chase",
        "is_being_aggregated": false,
        "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-16\"}",
        "name": "Bank Name",
        "status": "INITIATED",
        "successfully_aggregated_at": "2016-09-30T14:38:59-06:00",
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"    
      }
    }
    
    %{
      "aggregated_at" => "2016-09-30T14:43:44-06:00",
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier" => "unique_id",
      "institution_code" => "chase",
      "is_being_aggregated" => true,
      "metadata" => "{\"credentials_last_refreshed_at\": \"2015-10-16\"}",
      "name" => "Chase Bank",
      "status" => "INITIATED",
      "successfully_aggregated_at" => "2016-09-30T14:38:59-06:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AggregatedAt:2016-09-30T14:43:44-06:00
      Challenges:[]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      HasProcessedAccounts:
      HasProcessedTransactions:
      Identifier:unique_id
      InstitutionCode:chase
      IsBeingAggregated:true
      Metadata:{"credentials_last_refreshed_at": "2015-10-16"}
      Name:Chase Bank
      Status:INITIATED
      SuccessfullyAggregatedAt:2016-09-30T14:38:59-06:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Member{
      aggregated_at='2016-09-30T14:43:44-06:00',
      challenges='null',
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='null',
      has_processed_transactions='null',
      identifier='unique_id',
      institution_code='chase',
      is_being_aggregated='true',
      metadata='{"credentials_last_refreshed_at": "2015-10-16"}',
      name='Chase Bank',
      status='INITIATED',
      successfully_aggregated_at='2016-09-30T14:38:59-06:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { member:
       { status: 'INITIATED',
         guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         institution_code: 'chase',
         is_being_aggregated: true,
         metadata: '{"credentials_last_refreshed_at": "2015-10-16"}',
         name: 'Chase Bank',
         user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         aggregated_at: '2016-09-30T14:43:44-06:00',
         identifier: 'unique_id',
         successfully_aggregated_at: '2016-09-30T14:38:59-06:00' } }
    
    {
      'status': u'INITIATED',
      'successfully_aggregated_at': u'2016-09-30T14:38:59-06:00',
      'institution_code': u'chase',
      'identifier': u'unique_id',
      'name': u'Chase Bank',
      'is_being_aggregated': True,
      'aggregated_at': u'2016-09-30T14:43:44-06:00',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'metadata': u'{"credentials_last_refreshed_at": "2015-10-16"}'
    }
    
    {
      "aggregated_at"=>"2016-09-30T14:43:44-06:00",
      "challenges"=>nil,
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>nil,
      "has_processed_transactions"=>nil,
      "identifier"=>"unique_id",
      "institution_code"=>"chase",
      "is_being_aggregated"=>true,
      "metadata"=>"{\"credentials_last_refreshed_at\": \"2015-10-16\"}",
      "name"=>"Chase Bank",
      "status"=>"INITIATED",
      "successfully_aggregated_at"=>"2016-09-30T14:38:59-06:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Use this endpoint to update a member's attributes. Only the credentials, identifier, and metadata parameters can be updated. To get a list of the required credentials for the member, use the list member credentials endpoint.

    Parameter Data type Description Required?
    credentials Array The credentials that you wish to update for this member. No
    identifier String A unique, enforced identifier for the member. Defined by you. No
    metadata String Additional information you can store on this member. Defined by you. No

    Delete member

    DELETE /users/{user_guid}/members/{member_guid}
    

    Example request

    $ curl -i -X DELETE 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    Atrium.deleteMember("{user_guid}", "{member_guid}")
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      err := client.DeleteMember("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error deleting member:", err)
        return
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    atriumClient.deleteMember("{user_guid}", "{member_guid}");
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.deleteMember(request);
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    atriumClient.deleteMember("{user_guid}", "{member_guid}")
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    member.delete
    

    Example response

    Status: 204 No Content
    

    Accessing this endpoint will permanently delete a member.

    List members

    GET /users/{user_guid}/members
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    members = Atrium.listMembers("{user_guid}")
    Enum.each(members, fn member ->
      IO.inspect member
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      members, err := client.ListMembers("{user_guid}")
      if err != nil {
        fmt.Println("Error listing members:", err)
        return
      }
      for _, member := range members {
        fmt.Printf("%+v\n", member)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Member[] members = atriumClient.listMembers("{user_guid}", "", "");
    for(Member member : members) {
        System.out.println(member.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}"
      }
    };
    
    AtriumClient.listMembers(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    members = atriumClient.listMembers("{user_guid}")
    for member in members:
        print member.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    members = ::Atrium::Member.list user_guid: "{user_guid}"
    members.each do |a_member|
      puts a_member.attributes
    end
    

    Example response

    Status 200 OK
    
    {
      "members": [
        {
          "aggregated_at": "2016-10-13T18:07:57+00:00",
          "connection_status": "CONNECTED",
          "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "identifier": "unique_id",
          "institution_code": "chase",
          "is_being_aggregated": true,
          "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
          "name": "Chase Bank",
          "status": "INITIATED",
          "successfully_aggregated_at": "2016-10-13T17:57:38+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        }
      ]
    }
    
    %{
      "aggregated_at" => "2016-10-13T18:07:57+00:00",
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier" => "unique_id",
      "institution_code" => "chase",
      "is_being_aggregated" => true,
      "metadata" => "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name" => "Chase Bank",
      "status" => "INITIATED",
      "successfully_aggregated_at" => "2016-10-13T17:57:38+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AggregatedAt:2016-10-13T18:07:57+00:00
      Challenges:[]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      HasProcessedAccounts:
      HasProcessedTransactions:
      Identifier:unique_id
      InstitutionCode:chase
      IsBeingAggregated:true
      Metadata:{"credentials_last_refreshed_at": "2015-10-15"}
      Name:Chase Bank
      Status:INITIATED
      SuccessfullyAggregatedAt:2016-10-13T17:57:38+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Member{
      aggregated_at='2016-10-13T18:07:57+00:00',
      challenges='null',
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='null',
      has_processed_transactions='null',
      identifier='unique_id',
      institution_code='chase',
      is_being_aggregated='true',
      metadata='{"credentials_last_refreshed_at": "2015-10-15"}',
      name='Chase Bank',
      status='INITIATED',
      successfully_aggregated_at='2016-10-13T17:57:38+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { members:
       [ { status: 'INITIATED',
           guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           institution_code: 'chase',
           is_being_aggregated: true,
           metadata: '{"credentials_last_refreshed_at": "2015-10-15"}',
           name: 'Chase Bank',
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
           aggregated_at: '2016-10-13T18:07:57+00:00',
           identifier: 'unique_id',
           successfully_aggregated_at: '2016-10-13T17:57:38+00:00' } ],
      pagination:
       { current_page: 1,
         per_page: 25,
         total_entries: 1,
         total_pages: 1 } }
    
    {
      'status': u'INITIATED',
      'successfully_aggregated_at': u'2016-10-13T17:57:38+00:00',
      'institution_code': u'chase',
      'identifier': u'unique_id',
      'name': u'Chase Bank',
      'is_being_aggregated': True,
      'aggregated_at': u'2016-10-13T18:07:57+00:00',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'metadata': u'{"credentials_last_refreshed_at": "2015-10-15"}'
    }
    
    {
      "aggregated_at"=>"2016-10-13T18:07:57+00:00",
      "challenges"=>nil,
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>nil,
      "has_processed_transactions"=>nil,
      "identifier"=>"unique_id",
      "institution_code"=>"chase",
      "is_being_aggregated"=>true,
      "metadata"=>"{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name"=>"Chase Bank",
      "status"=>"INITIATED",
      "successfully_aggregated_at"=>"2016-10-13T17:57:38+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    This endpoint returns an array which contains information on every member associated with a specific user.

    Aggregate member

    POST /users/{user_guid}/members/{member_guid}/aggregate
    

    Example request

    $ curl -i -X POST 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/aggregate' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    member = Atrium.aggregateMember("{user_guid}", "{member_guid}")
    IO.inspect member
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      member, err := client.AggregateMember("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error aggregating member:", err)
        return
      }
      fmt.Printf("%+v\n", member)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Member member = atriumClient.aggregateMember("{user_guid}", "{member_guid}");
    System.out.println(member.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.aggregateMember(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    member = atriumClient.aggregateMember("{user_guid}", "{member_guid}")
    print member.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    member = member.aggregate
    puts member.attributes
    

    Example response

    Status: 202 Accepted
    
    {
      "member": {
        "aggregated_at": "2016-10-13T18:07:57+00:00",
        "connection_status": "CONNECTED",
        "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "identifier": "unique_id",
        "institution_code": "chase",
        "is_being_aggregated": true,
        "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
        "name": "Chase Bank",
        "status": "INITIATED",
        "successfully_aggregated_at": "2016-10-13T17:57:38+00:00",
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    
    %{
      "aggregated_at" => "2016-10-13T18:07:57+00:00",
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier" => "unique_id",
      "institution_code" => "chase",
      "is_being_aggregated" => true,
      "metadata" => "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name" => "Chase Bank",
      "status" => "INITIATED",
      "successfully_aggregated_at" => "2016-10-13T17:57:38+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AggregatedAt:2016-10-13T18:07:57+00:00
      Challenges:[]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Identifier:unique_id
      InstitutionCode:chase
      IsBeingAggregated:true
      Metadata:{"credentials_last_refreshed_at": "2015-10-15"}
      Name:Chase Bank
      Status:INITIATED
      SuccessfullyAggregatedAt: 2016-10-13T17:57:38+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Member{
      aggregated_at='2016-10-13T18:07:57+00:00',
      challenges='null',
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='null',
      has_processed_transactions='null',
      identifier='unique_id',
      institution_code='chase',
      is_being_aggregated='true',
      metadata='{"credentials_last_refreshed_at": "2015-10-15"}',
      name='Chase Bank',
      status='INITIATED',
      successfully_aggregated_at='2016-10-13T17:57:38+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { member:
       { status: 'INITIATED',
         guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         institution_code: 'chase',
         is_being_aggregated: true,
         metadata: '{"credentials_last_refreshed_at": "2015-10-15"}',
         name: 'Chase Bank',
         user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         aggregated_at: '2016-10-13T18:07:57+00:00',
         identifier: 'unique_id',
         successfully_aggregated_at: '2016-10-13T17:57:38+00:00' } }
    
    {
      'status': u'INITIATED',
      'successfully_aggregated_at': u'2016-10-13T17:57:38+00:00',
      'institution_code': u'chase',
      'identifier': u'unique_id',
      'name': u'Chase Bank',
      'is_being_aggregated': True,
      'aggregated_at': u'2016-10-13T18:07:57+00:00',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'metadata': u'{"credentials_last_refreshed_at": "2015-10-15"}'
    }
    
    {
      "aggregated_at"=>"2016-10-13T18:07:57+00:00",
      "challenges"=>nil,
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>nil,
      "has_processed_transactions"=>nil,
      "identifier"=>"unique_id",
      "institution_code"=>"chase",
      "is_being_aggregated"=>true,
      "metadata"=>"{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name"=>"Chase Bank",
      "status"=>"INITIATED",
      "successfully_aggregated_at"=>"2016-10-13T17:57:38+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Calling this endpoint initiates an aggregation event for the member. This brings in the latest account and transaction data from the connected institution. If this data has recently been updated, MX may not initiate an aggregation event.

    Read member connection status

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

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/status' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    member = Atrium.readMemberAggregationStatus("{user_guid}", "{member_guid}")
    IO.inspect member
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      member, err := client.GetMemberStatus("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error getting member status:", err)
        return
      }
      fmt.Printf("%+v\n", member)
      if len(member.Challenges) > 0 {
            for _, challenge := range member.Challenges {
                fmt.Printf("%+v\n", challenge)
            }
        }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Member member = atriumClient.readMemberAggregationStatus("{user_guid}", "{member_guid}");
    System.out.println(member.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.checkMemberStatus(request)
      .then(function(response) {
        console.log(data)
        if (response.member.status == "CHALLENGED") {
          console.log("* CHALLENGE ARRAY CONTENTS *")
          for (var i = 0; i < response.member.challenges.length; i++) {
            console.log(response.member.challenges[i])
          }
        }
      });
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    member = atriumClient.readMemberAggregationStatus("{user_guid}", "{member_guid}")
    print member.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    member = member.aggregation_status
    puts member.attributes
    

    Example response

    Status: 200 OK
    
    {
      "member": {
        "aggregated_at": "2016-10-13T18:07:57+00:00",
        "connection_status": "CONNECTED",
        "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "has_processed_accounts": true,
        "has_processed_transactions": false,
        "identifier": "unique_id",
        "institution_code": "chase",
        "is_being_aggregated": false,
        "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
        "name": "Chase Bank",
        "status": "COMPLETED",
        "successfully_aggregated_at": "2016-10-13T17:57:38+00:00",
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    
    %{
      "aggregated_at" => "2016-10-13T18:07:57+00:00",
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts" => true,
      "has_processed_transactions" => false,
      "identifier" => "unique_id",
      "institution_code" => "chase",
      "is_being_aggregated" => true,
      "metadata" => "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name" => "Chase Bank",
      "status" => "COMPLETED",
      "successfully_aggregated_at" => "2016-10-13T17:57:38+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AggregatedAt:2016-10-13T18:07:57+00:00
      Challenges:[]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      HasProcessedAccounts:true
      HasProcessedTransactions:false
      Identifier:unique_id
      InstitutionCode:chase
      IsBeingAggregated:true
      Metadata:{"credentials_last_refreshed_at": "2015-10-15"}
      Name:Chase Bank
      Status:COMPLETED
      SuccessfullyAggregatedAt:2016-10-13T17:57:38+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Member{
      aggregated_at='2016-10-13T18:07:57+00:00',
      challenges='null',
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='true',
      has_processed_transactions='false',
      identifier='unique_id',
      institution_code='chase',
      is_being_aggregated='true',
      metadata='{"credentials_last_refreshed_at": "2015-10-15"}',
      name='Chase Bank',
      status='COMPLETED',
      successfully_aggregated_at='2016-10-13T17:57:38+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { member:
       { status: 'COMPLETED',
         guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         is_being_aggregated: true,
         aggregated_at: '2016-10-13T18:07:57+00:00',
         successfully_aggregated_at: '2016-10-13T17:57:38+00:00',
         has_processed_accounts: true,
         has_processed_transactions: false } }
    
    {
      'identifier': u'unique_id',
      'institution_code': u'chase',
      'status': u'COMPLETED',
      'successfully_aggregated_at': u'2016-10-13T17:57:38+00:00',
      'has_processed_accounts': True,
      'name': u'Chase Bank',
      'is_being_aggregated': True,
      'aggregated_at': u'2016-10-13T18:07:57+00:00',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'has_processed_transactions': False,
      'metadata': u'{"credentials_last_refreshed_at": "2015-10-15"}'
    }
    
    {
      "aggregated_at"=>"2016-10-13T18:07:57+00:00",
      "challenges"=>nil,
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>true,
      "has_processed_transactions"=>false,
      "identifier"=>"unique_id",
      "institution_code"=>"chase",
      "is_being_aggregated"=>true,
      "metadata"=>"{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name"=>"Chase Bank",
      "status"=>"COMPLETED",
      "successfully_aggregated_at"=>"2016-10-13T17:57:38+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Example response for status CHALLENGED

    Status: 200 OK
    
    {
      "member": {
        "aggregated_at":"2016-10-13T18:24:37+00:00",
        "challenges": [
          {
            "field_name": null,
            "guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
            "label": "What city were you born in?",
            "type": "TEXT"
          }
        ],
        "connection_status": "CHALLENGED",
        "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "has_processed_accounts": false,
        "has_processed_transactions": false,
        "is_being_aggregated": true,
        "status": "CHALLENGED",
        "successfully_aggregated_at": "2016-10-13T18:08:04+00:00"
      }
    }
    
    %{
      "aggregated_at" =>"2016-10-13T18:24:37+00:00",
      "challenges" => [
        %{
          "field_name" => nil,
          "guid" => "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
          "label" => "What city were you born in?",
          "type" => "TEXT"
        }
      ],
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts" => false,
      "has_processed_transactions" => false,
      "is_being_aggregated" => true,
      "status" => "CHALLENGED",
      "successfully_aggregated_at" => "2016-10-13T18:08:04+00:00"
    }
    
    &{
      AggregatedAt:2016-10-13T18:24:37+00:00
      Challenges:[0xc4200f88c0]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      HasProcessedAccounts:false
      HasProcessedTransactions:false
      Identifier:
      InstitutionCode:
      IsBeingAggregated:true
      Metadata:
      Name:
      Status:CHALLENGED
      SuccessfullyAggregatedAt: 2016-10-13T18:08:04+00:00
      UserGuid:
    }
    &{
      FieldName:
      Guid:CRD-1ec152cd-e628-e81a-e852-d1e7104624da
      Label:What city were you born in?
      Options:[]
      Type:TEXT
      Value:
    }
    
    Member{
      aggregated_at='2016-10-13T18:24:37+00:00',
      challenges=[
        Challenge{
          field_name='null',
          guid='CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
          image_data='null',
          label='What city were you born in?',
          options='null',
          type='TEXT'
        }
      ],
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='false',
      has_processed_transactions='false',
      identifier='null',
      institution_code='null',
      is_being_aggregated='true',
      metadata='null',
      name='null',
      status='CHALLENGED',
      successfully_aggregated_at='2016-10-13T18:08:04+00:00',
      user_guid='null'
    }
    
    { member:
       { status: 'CHALLENGED',
         guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         is_being_aggregated: true,
         challenges: [ [Object] ],
         aggregated_at: '2016-10-13T18:24:37+00:00',
         successfully_aggregated_at: '2016-10-13T18:08:04+00:00',
         has_processed_accounts: false,
         has_processed_transactions: false } }
    * CHALLENGE ARRAY CONTENTS *
    { field_name: null,
      guid: 'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      label: 'What city were you born in?',
      type: 'TEXT' }
    
    {
      'status': u'CHALLENGED',
      'successfully_aggregated_at': u'2016-10-13T18:08:04+00:00',
      'has_processed_accounts': False,
      'challenges': [
        {
          u'type': u'TEXT',
          u'guid': u'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
          u'field_name': None,
          u'label': u'What city were you born in?'
        }
      ],
      'aggregated_at': u'2016-10-13T18:24:37+00:00',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'has_processed_transactions': False,
      'is_being_aggregated': True
    }
    
    {
      "aggregated_at"=>"2016-10-13T18:24:37+00:00",
      "challenges"=>[
        {
          "field_name"=>nil,
          "guid"=>"CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
          "label"=>"What city were you born in?",
          "type"=>"TEXT"
        }
      ],
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>false,
      "has_processed_transactions"=>false,
      "identifier"=>nil,
      "institution_code"=>nil,
      "is_being_aggregated"=>true,
      "metadata"=>nil,
      "name"=>nil,
      "status"=>"CHALLENGED",
      "successfully_aggregated_at"=>"2016-10-13T18:08:04+00:00",
      "user_guid"=>nil
    }
    

    This endpoint provides the status of the member's most recent aggregation event. This is an important step in the aggregation process, and the results returned by this endpoint should determine what you do next in order to successfully aggregate a member.

    MX has introduced new, more detailed information on the current status of a member's connection to a financial institution and the state of its aggregation: the connection_status field. These are intended to replace and expand upon the information provided in the status field, which will soon be deprecated; support for the status field remains for the time being.

    Member connection status Definition
    nil The member exists but does not yet have credentials.
    CHALLENGED The member has been challenged by multi-factor authentication.
    CLOSED The end user, MX, the client, or a partner has marked the member as closed.
    CONNECTED The member was authenticated.
    CREATED The member is new and has not yet been aggregated.
    DEGRADED Aggregation has failed at least three times within a short period of time.
    DELAYED Aggregating the member has taken longer than expected and it has not yet been connected.
    DENIED The credentials passed by the member were invalid.
    DISABLED Aggregation has been momentarily paused, but the member is still connected.
    DISCONTINUED The connection to this financial institution is no longer available.
    DISCONNECTED Aggregation has failed at least three times and has not succeeded for at least two weeks.
    EXPIRED The MFA answer was not provided within the time allotted by the financial institution.
    FAILED Aggregation failed without being connected.
    IMPAIRED The member is missing some or all credentials needed in order to connect.
    IMPEDED The end user’s attention is required at their online banking institution, e.g., there is a marketing message that must be viewed, or terms and conditions that must be accepted, etc.
    IMPORTED This means MX does not have credentials and will not try to aggregate the member.
    LOCKED The financial institution is preventing authentication. The end user must contact the financial institution.
    PREVENTED MX is preventing aggregation until the member’s credentials have been updated.
    RECONNECTED The member has been migrated to a new data source and aggregation is likely to trigger one-time password MFA. MX will not perform background aggregation in order to avoid unnecessarily disruptive texts, emails, etc. The member must be re-aggregated in the foreground with the end user present.
    REJECTED An MFA challenge was answered incorrectly.
    RESUMED The answer to an MFA challenge was received, but it is not yet clear whether it was correct.
    UPDATED The member has been updated — i.e., credentials have been updated — but it has not yet been connected.
    Status (will be deprecated soon) Description Next steps
    INITIATED Aggregation has started.
    REQUESTED Request to get the data has started.
    CHALLENGED MFA challenged returned. Resume member with updated credentials.
    RECEIVED Received response back from the request.
    TRANSFERRED Start saving the data into the MX Platform.
    PROCESSED Data has been processed into the MX Platform.
    COMPLETED Aggregation is complete. List member accounts and transactions.
    PREVENTED Aggregation was prevented due to too many login attempts. List member credentials, update member.
    DENIED Authentication failed due to invalid credentials or incorrect MFA answer. List member credentials, update member. If MFA was answered incorrectly, restart aggregation.
    HALTED An exception occurred that was unrelated to authentication. Retry aggregation tomorrow. If themember hits the HALTED status for 3 or more days, leave the member in its current state and contact support.
    Field Data type Description
    has_processed_accounts Boolean true when accounts have been processed for this member, false otherwise. Resets each time /aggregate is called.
    has_processed_transactions Boolean true when transactions have been processed for this member, false otherwise. Resets each time /aggregate is called.

    List member MFA challenges

    GET /users/{user_guid}/members/member_guid}/challenges
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/challenges' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    challenges = Atrium.listMemberMFAChallenges("{user_guid}", "{member_guid}")
    Enum.each(challenges, fn challenge ->
      IO.inspect challenge
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      challenges, err := client.GetMemberChallenges("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error listing member MFA challenges:", err)
        return
      }
      for _, challenge := range challenges {
        fmt.Printf("%+v\n", challenge)
            if len(challenge.Options) > 0 {
                for _, option := range challenge.Options {
                    fmt.Printf("%+v\n", option)
                }
            }
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Challenge[] challenges = atriumClient.listMemberMFAChallenges("{user_guid}", "{member_guid}", "", "");
    for(Challenge challenge : challenges) {
        System.out.println(challenge.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.listMemberChallenges(request)
      .then(function(response) {
        if (response.challenges.length > 0 && response.challenges[0].type == "OPTIONS" || response.challenges[0].type == "IMAGE_OPTIONS") {
          console.log("* OPTIONS ARRAY CONTENTS *")
          for (var i = 0; i < response.challenges[0].options.length; i++) {
            console.log(response.challenges[0].options[i])
          }
        }
      });
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    challenges = atriumClient.listMemberMFAChallenges("{user_guid}", "{member_guid}")
    for challenge in challenges:
        print challenge.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    member = member.mfa_challenges
    puts member.attributes
    

    Example response for credential type TEXT

    Status: 200 OK
    
    {
      "challenges": [
        {
          "field_name": "What city were you born in?",
          "guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
          "label": "What city were you born in?",
          "type": "TEXT"
        }
      ]
    }
    
    %{
      "field_name" => "What city were you born in?",
      "guid" => "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label" => "What city were you born in?",
      "type" => "TEXT"
    }
    
    &{
      FieldName:What city were you born in?
      Guid:CRD-1ec152cd-e628-e81a-e852-d1e7104624da
      ImageData:
      Label:What city were you born in?
      Options:[]
      Type:TEXT
      Value:
    }
    
    Challenge{
      field_name='What city were you born in?',
      guid='CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      image_data='null',
      label='What city were you born in?',
      options='null',
      type='TEXT'
    }
    
    { challenges:
       [ { field_name: 'What city were you born in?',
           guid: 'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
           label: 'What city were you born in?',
           type: 'TEXT' } ] }
    
    {
      'type': u'TEXT',
      'guid': u'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      'field_name': u'What city were you born in?',
      'label': u'What city were you born in?'
    }
    
    {
      "field_name"=>"What city were you born in?",
      "guid"=>"CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label"=>"What city were you born in?",
      "type"=>"TEXT",
      "image_data"=>nil,
      "options"=>nil
    }
    

    Example response for credential type IMAGE_DATA

    Status: 200 OK
    
    {
      "challenges": [
        {
          "field_name": "Who is this guy?",
          "guid": "CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
          "label": "Who is this guy?",
          "type": "IMAGE_DATA",
          "image_data": "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        }
      ]
    }
    
    %{
      "field_name" => "Who is this guy?",
      "guid" => "CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
      "label" => "Who is this guy?",
      "type" => "IMAGE_DATA",
      "image_data" => "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
    }
    
    &{
      FieldName:Who is this guy?
      Guid:CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5
      ImageData:data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...
      Label:Who is this guy?
      Options:[]
      Type:IMAGE_DATA
      Value:
    }
    
    Challenge{
      field_name='Who is this guy?',
      guid='CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
      image_data='data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
      label='Who is this guy?',
      options='null',
      type='IMAGE_DATA'
    }
    
    { challenges:
       [ { field_name: 'Who is this guy?',
           guid: 'CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
           label: 'Who is this guy?',
           type: 'IMAGE_DATA',
           image_data: 'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...'} ] }
    
    {
      'image_data': u'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...'
      'type': u'IMAGE_DATA',
      'guid': u'CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
      'field_name': u'Who is this guy?',
      'label': u'Who is this guy?'}
    
    {
      "field_name"=>"Who is this guy?",
      "guid"=>"CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
      "label"=>"Who is this guy?",
      "type"=>"IMAGE_DATA",
      "image_data"=>"data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...",
      "options"=>nil
    }
    

    Example response for credential type OPTIONS

    Status: 200 OK
    
    {
      "challenges": [
        {
          "field_name": "One time passcode",
          "guid": "CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
          "label": "Where should we send your one time passcode?",
          "type": "OPTIONS",
          "options": [
            {
              "label": "EMAIL",
              "value": "user_email@provider.org"
            },
            {
              "label": "PHONE",
              "value": "(XXX) XXX-1234"
            },
            {
              "label": "PHONE_2",
              "value": "(XXX) XXX-2345"
            }
          ]
        }
      ]
    }
    
    %{
      "field_name" => "One time passcode",
      "guid" => "CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
      "label" => "Where should we send your one time passcode?",
      "type" => "OPTIONS",
      "options" => [
        %{
          "label" => "EMAIL",
          "value" => "user_email@provider.org"
        },
        %{
          "label" => "PHONE",
          "value" => "(XXX) XXX-1234"
        },
        %{
          "label" => "PHONE_2",
          "value" => "(XXX) XXX-2345"
        }
      ]
    }
    
    &{
      FieldName:One time passcode
      Guid:CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5
      ImageData:
      Label:Where should we send your one time passcode?
      Options:[0xc4203f3380 0xc4203f33b0 0xc4203f33e0]
      Type:OPTIONS
      Value:
    }
    &{
      Label:EMAIL
      ImageData:
      Value:user_email@provider.org
    }
    &{
      Label:PHONE
      ImageData:
      Value:(XXX) XXX-1234
    }
    &{
      Label:PHONE_2
      ImageData:
      Value:(XXX) XXX-2345
    }
    
    Challenge{
      field_name='One time passcode',
      guid='CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
      image_data='null',
      label='Where should we send your one time passcode?',
      options=[
        Option{
          image_data='null',
          label='EMAIL',
          value='user_email@provider.org'
        },
        Option{
          image_data='null',
          label='PHONE',
          value='(XXX) XXX-1234'
        },
        Option{
          image_data='null',
          label='PHONE_2',
          value='(XXX) XXX-2345'
        },
      ],
      type='OPTIONS'
    }
    
    { challenges:
       [ { field_name: 'One time passcode',
           guid: 'CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
           label: 'Where should we send your one time passcode?',
           type: 'OPTIONS',
           options: [Array] } ] }
    * OPTIONS ARRAY CONTENTS *
    { label: 'EMAIL', value: 'user_email@provider.org' }
    { label: 'PHONE', value: '(XXX) XXX-1234' }
    { label: 'PHONE_2', value: '(XXX) XXX-2345' }
    
    {
      'type': u'OPTIONS',
      'guid': u'CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
      'field_name': u'One time passcode',
      'options': [
        {
          u'value': u'user_email@provider.org',
          u'label': u'EMAIL'
        },
        {
          u'value': u'(XXX) XXX-1234',
          u'label': u'PHONE'
        },
        {
          u'value': u'(XXX) XXX-2345',
          u'label': u'PHONE_2'
        }
      ],
      'label': u'Where should we send your one time passcode?'
    }
    
    {
      "field_name"=>"One time passcode",
      "guid"=>"CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
      "label"=>"Where should we send your one time passcode?",
      "type"=>"OPTIONS",
      "image_data"=>nil,
      "options"=>[
        {
          "label"=>"EMAIL",
          "value"=>"user_email@provider.org"
        },
        {
          "label"=>"PHONE",
          "value"=>"(XXX) XXX-1234"
        },
        {
          "label"=>"PHONE_2",
          "value"=>"(XXX) XXX-2345"
        }
      ]
    }
    

    Example response for credential type IMAGE_OPTIONS

    Status: 200 OK
    
    {
      "challenges": [
        {
          "field_name": "Choose your image",
          "guid": "CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
          "label": "Which is your image?",
          "type": "IMAGE_OPTIONS",
          "options": [
            {
              "label": "IMAGE_1",
              "image_data": "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
            },
            {
              "label": "IMAGE_2",
              "image_data": "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
            },
            {
              "label": "IMAGE_3",
              "image_data": "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
            },
            {
              "label": "IMAGE_4",
              "image_data": "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
            }
          ]
        }
      ]
    }
    
    %{
      "field_name" => "Choose your image",
      "guid" => "CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
      "label" => "Which is your image?",
      "type" => "IMAGE_OPTIONS",
      "options" => [
        %{
          "label" => "IMAGE_1",
          "image_data" => "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        },
        %{
          "label" => "IMAGE_2",
          "image_data" => "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        },
        %{
          "label" => "IMAGE_3",
          "image_data" => "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        },
        %{
          "label" => "IMAGE_4",
          "image_data" => "data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        }
      ]
    }
    
    &{
      FieldName:Choose your image
      Guid:CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5
      ImageData:
      Label:Which is your image?
      Options:[0xc4203f3380 0xc4203f33b0 0xc4203f33e0 0xc4203f3410]
      Type:IMAGE_OPTIONS
      Value:
    }
    &{
      Label:IMAGE_1
      ImageData:data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...
      Value:
    }
    &{
      Label:IMAGE_2
      ImageData:data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...
      Value:
    }
    &{
      Label:IMAGE_3
      ImageData:data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...
      Value:
    }
    &{
      Label:IMAGE_4
      ImageData:data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...
      Value:
    }
    
    Challenge{
      field_name='Choose your image',
      guid='CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
      image_data='null',
      label='Which is your image?',
      options=[
        Option{
          image_data='data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          label='IMAGE_1',
          value='null',
        },
        Option{
          image_data='data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          label='IMAGE_2',
          value='null',
        },
        Option{
          image_data='data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          label='IMAGE_3',
          value='null',
        },
        Option{
          image_data='data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          label='IMAGE_4',
          value='null',
        },
      ],
      type='IMAGE_OPTIONS'
    }
    
    { challenges:
       [ { field_name: 'Choose your image',
           guid: 'CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
           label: 'Which is your image?',
           type: 'IMAGE_OPTIONS',
           options: [Array] } ] }
    * OPTIONS ARRAY CONTENTS *
    { label: 'IMAGE_1', image_data: 'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...' }
    { label: 'IMAGE_2', image_data: 'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...' }
    { label: 'IMAGE_3', image_data: 'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...' }
    { label: 'IMAGE_4', image_data: 'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...' }
    
    {
      'type': u'IMAGE_OPTIONS',
      'guid': u'CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5',
      'field_name': u'Choose your image',
      'options': [
        {
          u'image_data': u'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          u'label': u'IMAGE_1'
        },
        {
          u'image_data': u'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          u'label': u'IMAGE_2'
        },
        {
          u'image_data': u'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          u'label': u'IMAGE_3'
        },
        {
          u'image_data': u'data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ...',
          u'label': u'IMAGE_4'
        }
      ],
      'label': u'Which is your image?'
    }
    
    {
      "field_name"=>"Choose your image",
      "guid"=>"CRD-ce76d2e3-86bd-ec4a-ec52-eb53b5194bf5",
      "label"=>"Which is your image?",
      "type"=>"IMAGE_OPTIONS",
      "image_data"=>nil,
      "options"=>[
        {
          "label"=>"IMAGE_1",
          "image_data"=>"data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        },
        {
          "label"=>"IMAGE_2",
          "image_data"=>"data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        },
        {
          "label"=>"IMAGE_3",
          "image_data"=>"data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        },
        {
          "label"=>"IMAGE_4",
          "image_data"=>"data:image/png;base64,iVBORw0KGgoAAAANSUh ... more image data ..."
        }
      ]
    }
    

    Use this endpoint for information on what multi-factor authentication challenges need to be answered in order to aggregate a member.

    If the aggregation is not challenged, i.e., the member does not have a connection status of CHALLENGED, then code 204 No Content will be returned.

    If the aggregation has been challenged, i.e., the member does have a connection status of CHALLENGED, then code 200 OK will be returned — along with the corresponding credentials.

    Field Name Data type Description
    field_name string A non-unique identifier for the question.
    guid String A unique identifier for the credential, defined by MX.
    label String A readable question that is presented to the user.
    type String The type of credential. Supported types include TEXT, OPTIONS, TOKEN, IMAGE_DATA, IMAGE_OPTIONS.
    image_data String This field contains image data encoded as a base64 string. It will only be present when the credential type is IMAGE_DATA.
    options Array For credential types OPTIONS or IMAGE_OPTIONS, this field represents an array of choices. It will only be present when the credential type is OPTIONS or IMAGE_OPTIONS.

    Resume aggregation from MFA

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

    Example request

    $ curl -i -X PUT 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/resume' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
            "member":{
              "challenges":[
                {
                   "guid": "institution-credential-guid",
                   "value": "user-entered-value"
                },
                {
                  "guid": "institution-credential-guid",
                   "value": "user-entered-value"
                }
              ]
            }
          }'
    
    credentialArray = []
    credentialArray = [%{guid: "CRD-1ec152cd-e628-e81a-e852-d1e7104624da", value: "user-entered-value"} | credentialArray]
    credentialArray = [%{guid: "CRD-2ec152cd-e628-e81a-e852-d1e7104624da", value: "user-entered-value"} | credentialArray]
    
    member = Atrium.resumeMemberAggregation("{user_guid}", "{member_guid}", credentialArray)
    IO.inspect member
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
      "github.com/mxenabled/atrium-go/models"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      challenges := []*models.Challenge{}
      challengeOne := &models.Challenge{Guid: "CRD-1ec152cd-e628-e81a-e852-d1e7104624da", Value: "user-entered-value"}
      challenges = append(challenges, challengeOne)
      challengeTwo := &models.Challenge{Guid: "CRD-2ec152cd-e628-e81a-e852-d1e7104624da", Value: "user-entered-value"}
      challenges = append(challenges, challengeTwo)
    
      member, err := client.ResumeMember("{user_guid}", "{member_guid}", challenges)
      if err != nil {
        fmt.Println("Error resuming member:", err)
        return
      }
      fmt.Printf("%+v\n", member)
    }
    
    import com.google.gson.JsonArray;
    import com.google.gson.JsonObject;
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    
    JsonObject credentialOne = new JsonObject();
    credentialOne.addProperty("guid", "CRD-1ec152cd-e628-e81a-e852-d1e7104624da");
    credentialOne.addProperty("value", "user-entered-value");
    
    JsonObject credentialTwo = new JsonObject();
    credentialTwo.addProperty("guid", "CRD-2ec152cd-e628-e81a-e852-d1e7104624da");
    credentialTwo.addProperty("value", "user-entered-value");
    
    JsonArray credentialArray = new JsonArray();
    credentialArray.add(credentialOne);
    credentialArray.add(credentialTwo);
    
    Member member = atriumClient.resumeMemberAggregation("{user_guid}", "{member_guid}", credentialArray);
    System.out.println(member.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      },
      body: {
        "member": {
          "challenges": [
            {
              "guid": "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
              "value": "user-entered-value"
            },
            {
              "guid": "CRD-2ec152cd-e628-e81a-e852-d1e7104624da",
              "value": "user-entered-value"
            }
          ]
        }
      }
    };
    
    AtriumClient.resumeMemberAggregation(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    
    credentialOne = {}
    credentialOne["guid"] = "CRD-1ec152cd-e628-e81a-e852-d1e7104624da"
    credentialOne["value"] = "user-entered-value"
    
    credentialTwo = {}
    credentialTwo["guid"] = "CRD-2ec152cd-e628-e81a-e852-d1e7104624da"
    credentialTwo["value"] = "user-entered-value"
    
    credentialArray = []
    credentialArray.append(credentialOne)
    credentialArray.append(credentialTwo)
    
    member = atriumClient.resumeMemberAggregation("{user_guid}", "{member_guid}", credentialArray)
    print member.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    
    credentialOne = {}
    credentialOne[:guid] = "institution-credential-guid"
    credentialOne[:value] = "user-entered-value"
    
    credentialTwo = {}
    credentialTwo[:guid] = "institution-credential-guid"
    credentialTwo[:value] = "user-entered-value"
    
    challengeResponses = []
    challengeResponses.push(credentialOne)
    challengeResponses.push(credentialTwo)
    
    member = member.resume challengeResponses
    puts member.attributes
    

    Example response

    Status: 202 Accepted
    
    {
      "member": {
        "aggregated_at": "2016-09-30T14:31:45-06:00",
        "connection_status": "CHALLENGED",
        "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "identifier":"unique_id",
        "institution_code": "chase",
        "is_being_aggregated": true,
        "metadata": "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
        "name": "Bank Name",
        "status": "CHALLENGED",
        "successfully_aggregated_at": null,
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    
    %{
      "aggregated_at" => "2016-09-30T14:31:45-06:00",
      "guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "identifier" => "unique_id",
      "institution_code" => "chase",
      "is_being_aggregated" => true,
      "metadata" => "{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name" => "Chase Bank",
      "status" => "CHALLENGED",
      "successfully_aggregated_at" => nil,
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AggregatedAt:2016-09-30T14:31:45-06:00
      Challenges:[]
      Guid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      HasProcessedAccounts:
      HasProcessedTransactions:
      Identifier:unique_id
      InstitutionCode:chase
      IsBeingAggregated:true
      Metadata:{"credentials_last_refreshed_at": "2015-10-15"}
      Name:Chase Bank
      Status:CHALLENGED
      SuccessfullyAggregatedAt:
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Member{
      aggregated_at='2016-09-30T14:31:45-06:00',
      challenges='null',
      guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      has_processed_accounts='null',
      has_processed_transactions='null',
      identifier='unique_id',
      institution_code='chase',
      is_being_aggregated='true',
      metadata='{"credentials_last_refreshed_at": "2015-10-15"}',
      name='Chase Bank',
      status='CHALLENGED',
      successfully_aggregated_at='null',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { member:
       { status: 'CHALLENGED',
         guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         institution_code: 'chase',
         is_being_aggregated: true,
         metadata: '{"credentials_last_refreshed_at": "2015-10-15"}',
         name: 'Chase Bank',
         user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         aggregated_at: '2016-09-30T14:31:45-06:00',
         identifier: 'unique_id',
         successfully_aggregated_at: null } }
    
    {
      'status': u'CHALLENGED',
      'successfully_aggregated_at': None,
      'institution_code': u'chase',
      'identifier': u'unique_id',
      'name': u'Chase Bank',
      'is_being_aggregated': True,
      'aggregated_at': u'2016-09-30T14:31:45-06:00',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'metadata': u'{"credentials_last_refreshed_at": "2015-10-15"}'
    }
    
    {
      "aggregated_at"=>"2016-09-30T14:31:45-06:00",
      "challenges"=>nil,
      "guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "has_processed_accounts"=>nil,
      "has_processed_transactions"=>nil,
      "identifier"=>"unique_id",
      "institution_code"=>"chase",
      "is_being_aggregated"=>true,
      "metadata"=>"{\"credentials_last_refreshed_at\": \"2015-10-15\"}",
      "name"=>"Chase Bank",
      "status"=>"CHALLENGED",
      "successfully_aggregated_at"=>nil,
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    This endpoint answers the challenges needed when a member has been challenged by multi-factor authentication.

    List member credentials

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

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/credentials' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    credentials = Atrium.listMemberCredentials("{user_guid}", "{member_guid}")
    Enum.each(credentials, fn credential ->
      IO.inspect credential
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      credentials, err := client.ListMemberCredentials("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error listing member credentials:", err)
        return
      }
      for _, credential := range credentials {
        fmt.Printf("%+v\n", credential)
      }
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.listMemberCredentials(request).then(response => console.log(response));
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Credential[] credentials = atriumClient.listMemberCredentials("{user_guid}", "{member_guid}", "", "");
    for(Credential credential : credentials) {
        System.out.println(credential.toString());
    }
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    credentials = atriumClient.listMemberCredentials("{user_guid}", "{member_guid}")
    for credential in credentials:
        print credential.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    credentials = member.credentials
    credentials.each do |credential|
      puts credential.attributes
    end
    

    Example response

    Status 200 OK
    
    {
        "credentials": [
            {
                "field_name": "login_email",
                "guid": "CRD-12ce94ad-032b-5441-8cb3-d7ebe3a35676",
                "label": "Email Address",
                "display_order": 0,
                "type": "LOGIN"
            },
            {
                "field_name": "login_password",
                "guid": "CRD-305767e4-f464-765b-8f83-881b5bd307ec",
                "label": "PayPal password",
                "display_order": 1,
                "type": "PASSWORD"
            }
        ]
    }
    
    %{
      "display_order" => 0,
      "field_name" => "LOGIN",
      "guid" => "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label" => "Username",
      "type" => "LOGIN"
    }
    %{
      "display_order" => 1,
      "field_name" => "PASSWORD",
      "guid" => "CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label" => "Password",
      "type" => "PASSWORD"
    }
    
    &{
      DisplayOrder :0
      FieldName:LOGIN
      Guid:CRD-1ec152cd-e628-e81a-e852-d1e7104624da
      Label:Username
      Type:LOGIN
      Value:
    }
    &{
      DisplayOrder:1
      FieldName:PASSWORD
      Guid:CRD-1ec152cd-e628-e81a-e852-d1e7104624da
      Label:Password
      Type:PASSWORD
      Value:
    }
    
    Credential{
      display_order=0,
      field_name='LOGIN',
      guid='CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      label='Username',
      type='LOGIN'
    }
    Credential{
      display_order=1,
      field_name='PASSWORD',
      guid='CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      label='Password',
      type='PASSWORD'
    }
    
    { credentials:
       [ { display_order: 0,
           field_name: 'LOGIN',
           guid: 'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
           label: 'Username',
           type: 'LOGIN' },
         { display_order: 1,
           field_name: 'PASSWORD',
           guid: 'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
           label: 'Password',
           type: 'PASSWORD' } ] }
    
    {
      'type': u'LOGIN',
      'guid': u'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      'field_name': u'LOGIN',
      'display_order': 0,
      'label': u'Username'
    }
    {
      'type': u'PASSWORD',
      'guid': u'CRD-1ec152cd-e628-e81a-e852-d1e7104624da',
      'field_name': u'PASSWORD',
      'display_order': 1,
      'label': u'Password'
    }
    
    {
      "display_order"=>0,
      "field_name"=>"LOGIN",
      "guid"=>"CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label"=>"Username",
      "type"=>"LOGIN",
      "value"=>nil
    }
    {
      "display_order"=>1,
      "field_name"=>"PASSWORD",
      "guid"=>"CRD-1ec152cd-e628-e81a-e852-d1e7104624da",
      "label"=>"Password",
      "type"=>"PASSWORD",
      "value"=>nil
    }
    

    This endpoint returns an array which contains information on every non-MFA credential associated with a specific member.

    Field Data type Description
    display_order Integer The order in which the credential should be displayed to the end user; lower numbers should be displayed first.
    field_name String Name of the credential field for the institution, e.g., "LOGIN".
    guid String A unique identifier for the credential. Defined by MX.
    label String A label for the credential, intended to be readable by the end user, e.g., "Username"
    type String A name for the type of field, e.g., "PASSWORD"
    options Array See explanation that immediately follows.

    For credentials with the type OPTIONS, the credentials object will contain a nested array called options. This array lists various choices available for credential prompts, and includes further attributes.

    Field Data type Description
    label String A label for the credential prompt.
    value String A response for the credential prompt.

    List member accounts

    GET /users/{user_guid}/members/{member_guid}/accounts
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/accounts' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    accounts = Atrium.listMemberAccounts("{user_guid}", "{member_guid}")
    Enum.each(accounts, fn account ->
      IO.inspect account
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      accounts, err := client.ListMemberAccounts("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error listing member accounts:", err)
        return
      }
      for _, account := range accounts {
        fmt.Printf("%+v\n", account)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Account[] accounts = atriumClient.listMemberAccounts("{user_guid}", "{member_guid}", "", "");
    for(Account account : accounts) {
        System.out.println(account.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.listMemberAccounts(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    accounts = atriumClient.listMemberAccounts("{user_guid}", "{member_guid}")
    for account in accounts:
        print account.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    accounts = member.accounts
    accounts.each do |account|
      puts account.attributes
    end
    

    Example Response

    Status: 200 OK
    
    {
      "accounts": [
        {
          "apr": 1.0,
          "apy": 1.0,
          "available_balance": 1000.0,
          "available_credit": 100,
          "balance": 1000.0,
          "created_at": "2016-10-13T17:57:37+00:00",
          "credit_limit": 100,
          "currency_code": "USD",
          "day_payment_is_due": 20,
          "guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "institution_code": "chase",
          "interest_rate": null,
          "is_closed": false,
          "last_payment": null,
          "last_payment_at": null,
          "matures_on": null,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "minimum_balance": null,
          "minimum_payment": null,
          "name": "Test Account 2",
          "original_balance": null,
          "payment_due_at": null,
          "payoff_balance": null,
          "started_on": null,
          "subtype": null,
          "total_account_value": null,
          "type": "SAVINGS",
          "updated_at": "2016-10-13T18:08:00+00:00",
          "user_guid":  "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        }
      ]
    }
    
    {
      "apr" => 1.0,
      "apy" => 1.0,
      "available_balance" => 1000.0,
      "available_credit" => 100,
      "balance" => 1000.0,
      "created_at" => "2016-10-13T17:57:37+00:00",
      "credit_limit" => 100,
      "currency_code" => "USD",
      "day_payment_is_due" => 20,
      "guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "institution_code" => "chase",
      "interest_rate" => nil,
      "is_closed" => false,
      "last_payment" => nil,
      "last_payment_at" => nil,
      "matures_on" => nil,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "minimum_balance" => nil,
      "minimum_payment" => nil,
      "name" => "Test Account 2",
      "original_balance" => nil,
      "payment_due_at" => nil,
      "payoff_balance" => nil,
      "started_on" => nil,
      "subtype" => nil,
      "total_account_value" => nil,
      "type" => "SAVINGS",
      "updated_at" => "2016-10-13T18:08:00+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      Apr:1
      Apy:1
      AvailableBalance:1000
      AvailableCredit:100
      Balance:1000
      CreatedAt:2016-10-13T17:57:37+00:00
      CreditLimit:100
      CurrencyCode:USD
      DayPaymentIsDue:20
      Guid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      InstitutionCode:chase
      InterestRate:
      IsClosed:false
      LastPayment:
      LastPaymentAt:
      MaturesOn:
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      MinimumBalance:
      MinimumPayment:
      Name:Test Account 2
      OriginalBalance:
      PaymentDueAt:
      PayoffBalance:
      StartedOn:
      Subtype:
      TotalAccountValue:
      Type:SAVINGS
      UpdatedAt:2016-10-13T18:08:00+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Account{
      apr='1.0',
      apy='1.0',
      available_balance='1000.0',
      available_credit='100',
      balance='1000.0',
      created_at='2016-10-13T17:57:37+00:00',
      credit_limit='100',
      currency_code='USD',
      day_payment_is_due='20',
      guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      institution_code='chase',
      interest_rate='null',
      is_closed='false',
      last_payment='null',
      last_payment_at='null',
      matures_on='null',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      minimum_balance='null',
      minimum_payment='null',
      name='Test Account 2',
      original_balance='null',
      payment_due_at='null',
      payoff_balance='null',
      started_on='null',
      subtype='null',
      total_account_value='null',
      type='SAVINGS',
      updated_at='2016-10-13T18:08:00+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { accounts:
       [ { apr: 1,
           apy: 1,
           available_balance: 1000,
           available_credit: 100,
           balance: 1000,
           credit_limit: 100,
           currency_code: 'USD',
           day_payment_is_due: 20,
           guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           interest_rate: null,
           is_closed: false,
           last_payment: null,
           matures_on: null,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           minimum_balance: null,
           minimum_payment: null,
           name: 'Test Account 2',
           original_balance: null,
           payoff_balance: null,
           started_on: null,
           subtype: null,
           total_account_value: null,
           type: 'SAVINGS',
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
           created_at: '2016-10-13T17:57:37+00:00',
           institution_code: 'chase',
           last_payment_at: null,
           payment_due_at: null,
           updated_at: '2016-10-13T18:08:00+00:00' } ],
      pagination:
       { current_page: 1,
         per_page: 25,
         total_entries: 1,
         total_pages: 1 } }
    
    {
      'last_payment_at': None,
      'apy': 1.0,
      'apr': 1.0,
      'updated_at': u'2016-10-13T18:08:00+00:00',
      'started_on': None,
      'matures_on': None,
      'day_payment_is_due': 20,
      'guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'is_closed': False,
      'last_payment': None,
      'minimum_payment': None,
      'interest_rate': None,
      'original_balance': None,
      'type': u'SAVINGS',
      'institution_code': u'chase',
      'minimum_balance': None,
      'available_balance': 1000.0,
      'credit_limit': 100,
      'payment_due_at': None,
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'available_credit': 100,
      'name': u'Test Account 2',
      'created_at': u'2016-10-13T17:57:37+00:00',
      'currency_code': u'USD',
      'subtype': None,
      'balance': 1000.0,
      'payoff_balance': None,
      'total_account_value': None
    }
    
    
    {
      "apr"=>1.0,
      "apy"=>1.0,
      "available_balance"=>1000.0,
      "available_credit"=>100,
      "balance"=>1000.0,
      "created_at"=>"2016-10-13T17:57:37+00:00",
      "credit_limit"=>100,
      "currency_code"=>"USD",
      "day_payment_is_due"=>20,
      "guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "institution_code"=>"chase",
      "interest_rate"=>nil,
      "is_closed"=>false,
      "last_payment"=>nil,
      "last_payment_at"=>nil,
      "matures_on"=>nil,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "minimum_balance"=>nil,
      "minimum_payment"=>nil,
      "name"=>"Test Account 2",
      "original_balance"=>nil,
      "payment_due_at"=>nil,
      "payoff_balance"=>nil,
      "started_on"=>nil,
      "subtype"=>nil,
      "total_account_value"=>nil,
      "type"=>"SAVINGS",
      "updated_at"=>"2016-10-13T18:08:00+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    This endpoint returns an array with information about every account associated with a particular member.

    List member transactions

    GET /users/{user_guid}/members/{member_guid}/transactions
    

    Example of a URL with query parameters

    GET https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/transactions?from_date=2016-09-20&to_date=2016-10-20
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/transactions' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    transactions = Atrium.listMemberTransactions("{user_guid}", "{member_guid}")
    Enum.each(transactions, fn transaction ->
      IO.inspect transaction
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      transactions, err := client.ListMemberTransactions("{user_guid}", "{member_guid}")
      if err != nil {
        fmt.Println("Error listing member transactions:", err)
        return
      }
      for _, transaction := range transactions {
        fmt.Printf("%+v\n", transaction)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Transaction[] transactions = atriumClient.listMemberTransactions("{user_guid}", "{member_guid}", "", "", "", "");
    for(Transaction transaction : transactions1) {
        System.out.println(transaction.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        memberGuid: "{member_guid}"
      }
    };
    
    AtriumClient.listMemberTransactions(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    transactions = atriumClient.listMemberTransactions("{user_guid}", "{member_guid}")
    for transaction in transactions:
        print transaction.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    transactions = member.transactions
    transactions.each do |transaction|
      puts transaction.attributes
    end
    

    Example response

    Status: 200 OK
    
    {
      "transactions": [
        {
          "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "amount": 61.11,
          "category": "Groceries",
          "check_number": 15234,
          "check_number_string": "00015234",
          "created_at": "2016-10-06T09:43:42+00:00",
          "currency_code": "USD",
          "date": "2013-09-23",
          "description": "Whole Foods",
          "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
          "is_bill_pay": false,
          "is_direct_deposit": false,
          "is_expense": true,
          "is_fee": false,
          "is_income": false,
          "is_international": false,
          "is_overdraft_fee": false,
          "is_payroll_advance": false,
          "latitude": -43.2075,
          "longitude": 139.691706,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "memo": null,
          "merchant_category_code": 5411,
          "original_description": "WHOLEFDS TSQ 102",
          "posted_at": "2016-10-07T06:00:00+00:00",
          "status": "POSTED",
          "top_level_category": "Food & Dining",
          "transacted_at": "2016-10-06T13:00:00+00:00",
          "type": "DEBIT",
          "updated_at": "2016-10-07T05:49:12+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        },
        {
          "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "amount": 23.40,
          "category": "Books",
          "check_number": 15234,
          "check_number_string": "00015234",
          "currency_code": "USD",
          "created_at": "2016-08-26T09:43:42+00:00",
          "date": "2013-09-23",
          "description": "Audible",
          "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
          "is_bill_pay": false,
          "is_direct_deposit": false,
          "is_expense": true,
          "is_fee": false,
          "is_income": false,
          "is_international": false,
          "is_overdraft_fee": false,
          "is_payroll_advance": false,
          "latitude": -43.2075,
          "longitude": 139.691706,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "memo": null,
          "merchant_category_code": 5411,
          "original_description": "AUDIBLEBKS",
          "posted_at": "2016-08-27T06:00:00+00:00",
          "status": "POSTED",
          "top_level_category": "Entertainment",
          "transacted_at": "2016-08-26T13:00:00+00:00",
          "type": "DEBIT",
          "updated_at": "2016-08-27T05:49:12+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        }
      ]
    }
    
    %{
      "account_guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount" => 61.11,
      "category" => "Groceries",
      "check_number" => 15234,
      "check_number_string" => "00015234",
      "created_at" => "2016-10-06T09:43:42+00:00",
      "currency_code" => "USD",
      "date" => "2013-09-23",
      "description" => "Whole Foods",
      "guid" => "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay" => false,
      "is_direct_deposit" => false,
      "is_expense" => true,
      "is_fee" => false,
      "is_income" => false,
      "is_international" => false,
      "is_overdraft_fee" => false,
      "is_payroll_advance" => false,
      "latitude" => -43.2075,
      "longitude" => 139.691706,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo" => nil,
      "merchant_category_code" => 5411,
      "original_description" => "WHOLEFDS TSQ 102",
      "posted_at" => "2016-10-07T06:00:00+00:00",
      "status" => "POSTED",
      "top_level_category" => "Food & Dining",
      "transacted_at" => "2016-10-06T13:00:00+00:00",
      "type" => "DEBIT",
      "updated_at" => "2016-10-07T05:49:12+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    %{
      "account_guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount" => 23.40,
      "category" => "Books",
      "check_number" => 15234,
      "check_number_string" => "00015234",
      "created_at" => "2016-08-26T09:43:42+00:00",
      "currency_code" => "USD",
      "date" => "2013-09-23",
      "description" => "Audible",
      "guid" => "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay" => false,
      "is_direct_deposit" => false,
      "is_expense" => true,
      "is_fee" => false,
      "is_income" => false,
      "is_international" => false,
      "is_overdraft_fee" => false,
      "is_payroll_advance" => false,
      "latitude" => -43.2075,
      "longitude" => 139.691706,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo" => nil,
      "merchant_category_code" => 5411,
      "original_description" => "AUDIBLEBKS",
      "posted_at" => "2016-08-27T06:00:00+00:00",
      "status" => "POSTED",
      "top_level_category" => "Entertainment",
      "transacted_at" => "2016-08-26T13:00:00+00:00",
      "type" => "DEBIT",
      "updated_at" => "2016-08-27T05:49:12+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AccountGuid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      Amount:61.11
      Category:Groceries
      CheckNumber:15234
      CheckNumberString:00015234
      CreatedAt:2016-10-06T09:43:42+00:00
      CurrencyCode:USD
      Date:2013-09-23
      Description:Whole Foods
      Guid:TRN-265abee9-889b-af6a-c69b-25157db2bdd9
      IsBillPay:false
      IsDirectDeposit:false
      IsExpense:true
      IsFee:false
      IsIncome:false
      IsInternational:false
      IsOverdraftFee:false
      IsPayrollAdvance:false
      Latitude:-43.2075
      Longitude:139.691706
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Memo:
      MerchantCategoryCode:5411
      OriginalDescription:WHOLEFDS TSQ 102
      PostedAt:2016-10-07T06:00:00+00:00
      Status:POSTED
      TopLevelCategory:Food & Dining
      TransactedAt:2016-10-06T13:00:00+00:00
      Type:DEBIT
      UpdatedAt:2016-10-07T05:49:12+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    &{
      AccountGuid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      Amount:23.40
      Category:Books
      CheckNumber:15234
      CheckNumberString:00015234
      CreatedAt:2016-08-26T09:43:42+00:00
      CurrencyCode:USD
      Date:2013-09-23
      Description:Audible
      Guid:TRN-265abee9-889b-af6a-c69b-25157db2bdd9
      IsBillPay:false
      IsDirectDeposit:false
      IsExpense:true
      IsFee:false
      IsIncome:false
      IsInternational:false
      IsOverdraftFee:false
      IsPayrollAdvance:false
      Latitude:-43.2075
      Longitude:139.691706
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Memo:
      MerchantCategoryCode:5411
      OriginalDescription:UDIBLEBKS
      PostedAt:2016-08-27T06:00:00+00:00
      Status:POSTED
      TopLevelCategory:Entertainment
      TransactedAt:2016-08-26T13:00:00+00:00
      Type:DEBIT
      UpdatedAt:2016-08-27T05:49:12+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Transaction{
      account_guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      amount='61.11',
      category='Groceries',
      check_number='15234',
      check_number_string='00015234',
      created_at='2016-10-06T09:43:42+00:00',
      currency_code='USD',
      date='2013-09-23',
      description='Whole Foods',
      guid='TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      is_bill_pay='false',
      is_direct_deposit='false',
      is_expense='true',
      is_fee='false',
      is_income='false',
      is_international='false',
      is_overdraft_fee='false',
      is_payroll_advance='false',
      latitude='-43.2075',
      longitude='139.691706',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      memo='null',
      merchant_category_code='5411',
      original_description='WHOLEFDS TSQ 102',
      posted_at='2016-10-07T06:00:00+00:00',
      status='POSTED',
      top_level_category='Food & Dining',
      transacted_at='2016-10-06T13:00:00+00:00',
      type='DEBIT',
      updated_at='2016-10-07T05:49:12+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    Transaction{
      account_guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      amount='23.40',
      category='Books',
      check_number='15234',
      check_number_string='00015234',
      created_at='2016-08-26T09:43:42+00:00',
      currency_code='USD',
      date='2013-09-23',
      description='Audible',
      guid='TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      is_bill_pay='false',
      is_direct_deposit='false',
      is_expense='true',
      is_fee='false',
      is_income='false',
      is_international='false',
      is_overdraft_fee='false',
      is_payroll_advance='false',
      latitude='-43.2075',
      longitude='139.691706',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      memo='null',
      merchant_category_code='5411',
      original_description='AUDIBLEBKS',
      posted_at='2016-08-27T06:00:00+00:00',
      status='POSTED',
      top_level_category='Entertainment',
      transacted_at='2016-10-06T13:00:00+00:00',
      type='DEBIT',
      updated_at='2016-10-07T05:49:12+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { transactions:
       [ { category: 'Groceries',
           created_at: '2016-10-06T09:43:42+00:00',
           currency_code: 'USD',
           date: '2013-09-23',
           original_description: 'WHOLEFDS TSQ 102',
           status: 'POSTED',
           type: 'DEBIT',
           posted_at: '2016-10-07T06:00:00+00:00',
           top_level_category: 'Food & Dining',
           transacted_at: '2016-10-06T13:00:00+00:00',
           updated_at: '2016-10-07T05:49:12+00:00',
           account_guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           amount: 61.11,
           check_number: 15234,
           check_number_string: '00015234',
           description: 'Whole Foods',
           guid: 'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
           is_bill_pay: false,
           is_direct_deposit: false,
           is_expense: true,
           is_fee: false,
           is_income: false,
           is_international: false,
           is_overdraft_fee: false,
           is_payroll_advance: false,
           latitude: -43.2075,
           longitude: 139.691706,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           memo: null,
           merchant_category_code: 5411,
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' },
         { category: 'Books',
           created_at: '2016-08-26T09:43:42+00:00',
           currency_code: 'USD',
           date: '2013-09-23',
           original_description: 'AUDIBLEBKS',
           status: 'POSTED',
           type: 'DEBIT',
           posted_at: '2016-08-27T06:00:00+00:00',
           top_level_category: 'Entertainment',
           transacted_at: '2016-08-26T13:00:00+00:00',
           updated_at: '2016-08-27T05:49:12+00:00',
           account_guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           amount: 23.40,
           check_number: 15234,
           check_number_string: '00015234',
           description: 'Audible',
           guid: 'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
           is_bill_pay: false,
           is_direct_deposit: false,
           is_expense: true,
           is_fee: false,
           is_income: false,
           is_international: false,
           is_overdraft_fee: false,
           is_payroll_advance: false,
           latitude: -43.2075,
           longitude: 139.691706,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           memo: null,
           merchant_category_code: 5411,
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' } ],
        pagination:
          { current_page: 1,
            per_page: 25,
            total_entries: 2,
            total_pages: 1 } }
    
    {
      'updated_at': u'2016-10-07T05:49:12+00:00',
      'is_income': False,
      'is_fee': False,
      'is_international': False,
      'original_description': u'WHOLEFDS TSQ 102',
      'guid': u'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'category': u'Groceries',
      'is_payroll_advance': False,
      'posted_at': u'2016-10-07T06:00:00+00:00',
      'latitude': -43.2075,
      'type': u'DEBIT',
      'is_direct_deposit': False,
      'status': u'POSTED',
      'transacted_at': u'2016-10-06T13:00:00+00:00',
      'description': u'Whole Foods',
      'is_expense': True,
      'memo': None,
      'date': u'2013-09-23',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'top_level_category': u'Food & Dining',
      'check_number': u'00015234',
      'account_guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'created_at': u'2016-10-06T09:43:42+00:00',
      'currency_code': u'USD',
      'merchant_category_code': u'5411',
      'is_bill_pay': False,
      'longitude': 139.691706,
      'amount': 61.11,
      'is_overdraft_fee': False
    }
    {
      'updated_at': u'2016-08-27T05:49:12+00:00',
      'is_income': False,
      'is_fee': False,
      'is_international': False,
      'original_description': u'AUDIBLEBKS',
      'guid': u'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'category': u'Books',
      'is_payroll_advance': False,
      'posted_at': u'2016-08-27T06:00:00+00:00',
      'latitude': -43.2075,
      'type': u'DEBIT',
      'is_direct_deposit': False,
      'status': u'POSTED',
      'transacted_at': u'2016-08-26T13:00:00+00:00',
      'description': u'Audible',
      'is_expense': True,
      'memo': None,
      'date': u'2013-09-23',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'top_level_category': u'Entertainment',
      'check_number': u'00015234',
      'account_guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'created_at': u'2016-08-26T09:43:42+00:00',
      'currency_code': u'USD',
      'merchant_category_code': 5411,
      'is_bill_pay': False,
      'longitude': 139.691706,
      'amount': 23.40,
      'is_overdraft_fee': False
    }
    
    {
      "account_guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount"=>61.11,
      "category"=>"Groceries",
      "check_number"=>15234,
      "check_number_string"=>"00015234",
      "created_at"=>"2016-10-06T09:43:42+00:00",
      "currency_code"=>"USD",
      "date"=>"2013-09-23",
      "description"=>"Whole Foods",
      "guid"=>"TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay"=>false,
      "is_direct_deposit"=>false,
      "is_expense"=>true,
      "is_fee"=>false,
      "is_income"=>false,
      "is_international"=>false,
      "is_overdraft_fee"=>false,
      "is_payroll_advance"=>false,
      "latitude"=>-43.2075,
      "longitude"=>139.691706,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo"=>nil,
      "merchant_category_code"=>5411,
      "original_description"=>"WHOLEFDS TSQ 102",
      "posted_at"=>"2016-10-07T06:00:00+00:00",
      "status"=>"POSTED",
      "top_level_category"=>"Food & Dining",
      "transacted_at"=>"2016-10-06T13:00:00+00:00",
      "type"=>"DEBIT",
      "updated_at"=>"2016-10-07T05:49:12+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    {
      "account_guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount"=>23.40,
      "category"=>"Books",
      "check_number"=>15234,
      "check_number_string"=>"00015234",
      "created_at"=>"2016-08-26T09:43:42+00:00",
      "currency_code"=>"USD",
      "date"=>"2013-09-23",
      "description"=>"Audible",
      "guid"=>"TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay"=>false,
      "is_direct_deposit"=>false,
      "is_expense"=>true,
      "is_fee"=>false,
      "is_income"=>false,
      "is_international"=>false,
      "is_overdraft_fee"=>false,
      "is_payroll_advance"=>false,
      "latitude"=>-43.2075,
      "longitude"=>139.691706,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo"=>nil,
      "merchant_category_code"=>5411,
      "original_description"=>"AUDIBLEBKS",
      "posted_at"=>"2016-08-27T06:00:00+00:00",
      "status"=>"POSTED",
      "top_level_category"=>"Entertainment",
      "transacted_at"=>"2016-08-26T13:00:00+00:00",
      "type"=>"DEBIT",
      "updated_at"=>"2016-08-27T05:49:12+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Use this endpoint to get all transactions from all accounts associated with a specific member.

    This endpoint accepts optional URL query parameters — from_date and to_date — which are used to filter transactions according to the date they were posted. If no values are given for the query parameters, from_date will default to 90 days prior to the request and to_date will default to 5 days from the time of the request.

    Accounts

    An account represents a financial account held by a financial institution, e.g., a user's checking or savings account. An account belongs to a member, which represents the user's overall relationship with a particular financial institution. A checking account may be just one part of a larger relationship that could also include a car loan and a savings account.

    Endpoint Method Description
    /users/{user_guid}/accounts GET Returns a list of all accounts that belong to a particular user.
    /users/{user_guid}/accounts/{account_guid} GET Returns information about a particular account.
    /users/{user_guid}/members/{member_guid}/accounts/{account_guid} GET Returns information about a particular account.
    /users/{user_guid}/accounts/{account_guid}/transactions GET Returns a list of transactions that belong to a particular account.

    Read an account

    GET /users/{user_guid}/accounts/{account_guid}
    
    GET /users/{user_guid}/members/{member_guid}/accounts/{account_guid}
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/accounts/{account_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    account = Atrium.readAccount("{user_guid}", "[account_guid]")
    IO.inspect account
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      account, err := client.GetAccount("{user_guid}", "{account_guid}")
      if err != nil {
        fmt.Println("Error reading account:", err)
        return
      }
      fmt.Printf("%+v\n", account)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Account account = atriumClient.readAccount("{user_guid}", "{account_guid}");
    System.out.println(account.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        accountGuid: "{account_guid}"
      }
    };
    
    AtriumClient.readAccount(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    account = atriumClient.readAccount("{user_guid}", "{account_guid}")
    print account.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    account = ::Atrium::Account.read user_guid: "{user_guid}", account_guid: "{account_guid}"
    puts account.attributes
    

    Example response

    Status: 200 OK
    
    {
      "account": {
        "apr": 1.0,
        "apy": 1.0,
        "available_balance": 1000.0,
        "available_credit": 100,
        "balance": 1000.0,
        "created_at": "2016-10-13T17:57:37+00:00",
        "credit_limit": 100,
        "currency_code": "USD",
        "day_payment_is_due": 20,
        "guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
        "institution_code": "chase",
        "interest_rate": null,
        "is_closed": false,
        "last_payment": null,
        "last_payment_at": null,
        "matures_on": null,
        "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "minimum_balance": null,
        "minimum_payment": null,
        "name": "Test Account 2",
        "original_balance": null,
        "payment_due_at": null,
        "payoff_balance": null,
        "started_on": null,
        "subtype": null,
        "total_account_value": null,
        "type": "SAVINGS",
        "updated_at": "2016-10-13T18:08:00+00:00",
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    
    %{
      "apr" => 1.0,
      "apy" => 1.0,
      "available_balance" => 1000.0,
      "available_credit" => 100,
      "balance" => 1000.0,
      "created_at" => "2016-10-13T17:57:37+00:00",
      "credit_limit" => 100,
      "currency_code" => "USD",
      "day_payment_is_due" => 20,
      "guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "institution_code" => "chase",
      "interest_rate" => nil,
      "is_closed" => false,
      "last_payment" => nil,
      "last_payment_at" => nil,
      "matures_on" => nil,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "minimum_balance" => nil,
      "minimum_payment" => nil,
      "name" => "Test Account 2",
      "original_balance" => nil,
      "payment_due_at" => nil,
      "payoff_balance" => nil,
      "started_on" => nil,
      "subtype" => nil,
      "total_account_value" => nil,
      "type" => "SAVINGS",
      "updated_at" => "2016-10-13T18:08:00+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      Apr:1
      Apy:1
      AvailableBalance:1000
      AvailableCredit:100
      Balance:1000
      CreatedAt:2016-10-13T17:57:37+00:00
      CreditLimit:100
      CurrencyCode:USD
      DayPaymentIsDue:20
      Guid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      InstitutionCode:chase
      InterestRate:
      IsClosed:false
      LastPayment:
      LastPaymentAt:
      MaturesOn:
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      MinimumBalance:
      MinimumPayment:
      Name:Test Account 2
      OriginalBalance:
      PaymentDueAt:
      PayoffBalance:
      StartedOn:
      Subtype:
      TotalAccountValue:
      Type:SAVINGS
      UpdatedAt:2016-10-13T18:08:00+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Account{
      apr='1.0',
      apy='1.0',
      available_balance='1000.0',
      available_credit='100',
      balance='1000.0',
      created_at='2016-10-13T17:57:37+00:00',
      credit_limit='100',
      currency_code='USD',
      day_payment_is_due='20',
      guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      institution_code='chase',
      interest_rate='null',
      is_closed='false',
      last_payment='null',
      last_payment_at='null',
      matures_on='null',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      minimum_balance='null',
      minimum_payment='null',
      name='Test Account 2',
      original_balance='null',
      payment_due_at='null',
      payoff_balance='null',
      started_on='null',
      subtype='null',
      total_account_value='null',
      type='SAVINGS',
      updated_at='2016-10-13T18:08:00+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { account:
       { apr: 1,
         apy: 1,
         available_balance: 1000,
         available_credit: 100,
         balance: 1000,
         credit_limit: 100,
         currency_code: 'USD'
         day_payment_is_due: 20,
         guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
         interest_rate: null,
         is_closed: false,
         last_payment: null,
         matures_on: null,
         member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         minimum_balance: null,
         minimum_payment: null,
         name: 'Test Account 2',
         original_balance: null,
         payoff_balance: null,
         started_on: null,
         subtype: null,
         total_account_value: null,
         type: 'SAVINGS',
         user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
         created_at: '2016-10-13T17:57:37+00:00',
         institution_code: 'chase',
         last_payment_at: null,
         payment_due_at: null,
         updated_at: '2016-10-13T18:08:00+00:00' } }
    
    {
      'last_payment_at': None,
      'apy': 1.0,
      'apr': 1.0,
      'updated_at': u'2016-10-13T18:08:00+00:00',
      'started_on': None,
      'matures_on': None,
      'day_payment_is_due': 20,
      'guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'is_closed': False,
      'last_payment': None,
      'minimum_payment': None,
      'interest_rate': None,
      'original_balance': None,
      'type': u'SAVINGS',
      'institution_code': u'chase',
      'minimum_balance': None,
      'available_balance': 1000.0,
      'credit_limit': 100,
      'payment_due_at': None,
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'available_credit': 100,
      'name': u'Test Account 2',
      'created_at': u'2016-10-13T17:57:37+00:00',
      'currency_code': u'USD'
      'subtype': None,
      'balance': 1000.0,
      'payoff_balance': None,
      'total_account_value': None
    }
    
    {
      "apr"=>1.0,
      "apy"=>1.0,
      "available_balance"=>1000.0,
      "available_credit"=>100,
      "balance"=>1000.0,
      "created_at"=>"2016-10-13T17:57:37+00:00",
      "credit_limit"=>100,
      "currency_code"=>"USD"
      "day_payment_is_due"=>20,
      "guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "institution_code"=>"chase",
      "interest_rate"=>nil,
      "is_closed"=>false,
      "last_payment"=>nil,
      "last_payment_at"=>nil,
      "matures_on"=>nil,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "minimum_balance"=>nil,
      "minimum_payment"=>nil,
      "name"=>"Test Account 2",
      "original_balance"=>nil,
      "payment_due_at"=>nil,
      "payoff_balance"=>nil,
      "started_on"=>nil,
      "subtype"=>nil,
      "total_account_value"=>nil,
      "type"=>"SAVINGS",
      "updated_at"=>"2016-10-13T18:08:00+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Reading an account allows you to get information about a specific account that belongs to a user. That includes the account type — e.g., CHECKING, MONEY_MARKET, or PROPERTY — the balance, the date the account was started, and much more.

    There are two endpoints for reading an account. Both will return the same information.

    It's important to remember that balance and available_balance will normally be positive numbers — for all account types. But this should be interpreted differently for debt accounts and asset accounts.

    An asset account, e.g., CHECKING, SAVINGS, or INVESTMENT, will have a positive balance unless it is in an overdraft condition, in which case the balance will be negative.

    On the other hand, a debt account, e.g., CREDIT CARD, LOAN, MORTGAGE, would have a positivebalance when the user owes money on the account. It would have a negative balance if the account has been overpaid.

    Field name Data type Description
    apr Decimal Annual Percentage Rate. Max length is 10,6.
    apy Decimal Annual Percentage Yield. Max length is 10,6.
    available_balance Decimal The balance currently available in an account. Max length is 14,2.
    available_credit Decimal The currently available credit balance of an account. This field is for accounts with types CREDIT CARD and LINE OF CREDIT.
    balance Decimal An account's current balance. Max length is 14,2.
    created_at String The date and time the account was created.
    credit_limit Decimal The credit limit for the account. Max length is 10,2.
    currency_code String The three-character ISO 4217 currency code, e.g. USD.
    day_payment_is_due Integer The day of the month the payment is due. Max length is 2. So, for example, the 14th is passed as 14).
    guid String Unique identifier for the account. Defined by MX.
    institution_code String Unique identifier for the financial institution which holds the account. Defined by MX.
    interest_rate Decimal Interest rate. Max length is 10,6.
    is_closed Boolean If an account is closed, this field will be true. Otherwise, this field will be false.
    last_payment Decimal The amount of the last payment made on a debt account, such as an account of type CREDIT CARD or MORTGAGE. Max length is 10,2.
    last_payment_at String The date and time the last payment toward a debt account was applied.
    matures_on String Date on which an account matures.
    member_guid String Unique identifier for the member to which this account belongs. Defined by MX.
    minimum_balance Decimal Minimum required balance for the account. This is normally a positive number. Max length is 14,2.
    minimum_payment Decimal The minimum payment required for an account. This can apply to any debt account. Max length is 10,2.
    name String This must be a human-readable name for the account. It will be visible to the user.
    original_balance Decimal The original balance on an account. This will be a positive value. Max length is 14,2.
    payment_due_at String The Date and time the next payment on a debt account is due.
    payoff_balance Decimal Payoff Balance (positive value normally). Can apply to any debt account. Max length is 14,2.
    started_on String The date on which a debt account was started.
    subtype String The account's subtype, e.g., PLAN_401_K, MONEY_MARKET, or HOME_EQUITY.
    total_account_value Decimal The total value of the account. Max length is 14,2.
    type String The main type of an account, e.g., INVESTMENT, PREPAID, or SAVINGS.
    updated_at String The date and time at which the account was last updated.
    user_guid String A unique identifier for the user to which the account belongs. Defined by MX.

    List accounts for a user

    GET /users/{user_guid}/accounts
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/accounts' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    accounts = Atrium.listAccounts("{user_guid}")
    Enum.each(accounts, fn account ->
      IO.inspect account
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      accounts, err := client.ListAccounts("{user_guid}")
      if err != nil {
        fmt.Println("Error listing accounts:", err)
        return
      }
      for _, account := range accounts {
        fmt.Printf("%+v\n", account)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Account[] accounts = atriumClient.listAccounts("{user_guid}", "", "");
    for(Account account : accounts) {
        System.out.println(account.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}"
      }
    };
    
    AtriumClient.listAccounts(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    accounts = atriumClient.listAccounts("{user_guid}")
    for account in accounts:
        print account.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    user_guid = "{user_guid}"
    params = {:user_guid => user_guid}
    accounts = ::Atrium::Account.list params
    accounts.each do |an_account|
      puts an_account.attributes
    end
    

    Example response

    Status: 200 OK
    
    {
      "accounts": [
        {
          "apr": 1.0,
          "apy": 1.0,
          "available_balance": 1000.0,
          "available_credit": 100,
          "balance": 1000.0,
          "created_at": "2016-10-13T17:57:37+00:00",
          "credit_limit": 100,
          "currency_code": "USD",
          "day_payment_is_due": 20,
          "guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "institution_code": "chase",
          "interest_rate": null,
          "is_closed": false,
          "last_payment": null,
          "last_payment_at": null,
          "matures_on": null,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "minimum_balance": null,
          "minimum_payment": null,
          "name": "Test Account 2",
          "original_balance": null,
          "payment_due_at": null,
          "payoff_balance": null,
          "started_on": null,
          "subtype": null,
          "total_account_value": null,
          "type": "SAVINGS",
          "updated_at": "2016-10-13T18:08:00+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        }
      ]
    }
    
    %{
      "apr" => 1.0,
      "apy" => 1.0,
      "available_balance" => 1000.0,
      "available_credit" => 100,
      "balance" => 1000.0,
      "created_at" => "2016-10-13T17:57:37+00:00",
      "credit_limit" => 100,
      "currency_code" => "USD",
      "day_payment_is_due" => 20,
      "guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "institution_code" => "chase",
      "interest_rate" => nil,
      "is_closed" => false,
      "last_payment" => nil,
      "last_payment_at" => nil,
      "matures_on" => nil,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "minimum_balance" => nil,
      "minimum_payment" => nil,
      "name" => "Test Account 2",
      "original_balance" => nil,
      "payment_due_at" => nil,
      "payoff_balance" => nil,
      "started_on" => nil,
      "subtype" => nil,
      "total_account_value" => nil,
      "type" => "SAVINGS",
      "updated_at" => "2016-10-13T18:08:00+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      Apr:1
      Apy:1
      AvailableBalance:1000
      AvailableCredit:100
      Balance:1000
      CreatedAt:2016-10-13T17:57:37+00:00
      CreditLimit:100
      CurrencyCode:USD
      DayPaymentIsDue:20
      Guid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      InstitutionCode:chase
      InterestRate:
      IsClosed:false
      LastPayment:
      LastPaymentAt:
      MaturesOn:
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      MinimumBalance:
      MinimumPayment:
      Name:Test Account 2
      OriginalBalance:
      PaymentDueAt:
      PayoffBalance:
      StartedOn:
      Subtype:
      TotalAccountValue:
      Type:SAVINGS
      UpdatedAt:2016-10-13T18:08:00+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Account{
      apr='1.0',
      apy='1.0',
      available_balance='1000.0',
      available_credit='100',
      balance='1000.0',
      created_at='2016-10-13T17:57:37+00:00',
      credit_limit='100',
      currency_code='USD'
      day_payment_is_due='20',
      guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      institution_code='chase',
      interest_rate='null',
      is_closed='false',
      last_payment='null',
      last_payment_at='null',
      matures_on='null',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      minimum_balance='null',
      minimum_payment='null',
      name='Test Account 2',
      original_balance='null',
      payment_due_at='null',
      payoff_balance='null',
      started_on='null',
      subtype='null',
      total_account_value='null',
      type='SAVINGS',
      updated_at='2016-10-13T18:08:00+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { accounts:
       [ { apr: 1,
           apy: 1,
           available_balance: 1000,
           available_credit: 100,
           balance: 1000,
           credit_limit: 100,
           currency_code: 'USD',
           day_payment_is_due: 20,
           guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           interest_rate: null,
           is_closed: false,
           last_payment: null,
           matures_on: null,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           minimum_balance: null,
           minimum_payment: null,
           name: 'Test Account 2',
           original_balance: null,
           payoff_balance: null,
           started_on: null,
           subtype: null,
           total_account_value: null,
           type: 'SAVINGS',
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
           created_at: '2016-10-13T17:57:37+00:00',
           institution_code: 'chase',
           last_payment_at: null,
           payment_due_at: null,
           updated_at: '2016-10-13T18:08:00+00:00' } ],
      pagination:
       { current_page: 1,
         per_page: 25,
         total_entries: 1,
         total_pages: 1 } }
    
    {
      'last_payment_at': None,
      'apy': 1.0,
      'apr': 1.0,
      'updated_at': u'2016-10-13T18:08:00+00:00',
      'started_on': None,
      'matures_on': None,
      'day_payment_is_due': 20,
      'guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'is_closed': False,
      'last_payment': None,
      'minimum_payment': None,
      'interest_rate': None,
      'original_balance': None,
      'type': u'SAVINGS',
      'institution_code': u'chase',
      'minimum_balance': None,
      'available_balance': 1000.0,
      'credit_limit': 100,
      'currency_code': u'USD',
      'payment_due_at': None,
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'available_credit': 100,
      'name': u'Test Account 2',
      'created_at': u'2016-10-13T17:57:37+00:00',
      'subtype': None,
      'balance': 1000.0,
      'payoff_balance': None,
      'total_account_value': None
    }
    
    {
      "apr"=>1.0,
      "apy"=>1.0,
      "available_balance"=>1000.0,
      "available_credit"=>100,
      "balance"=>1000.0,
      "created_at"=>"2016-10-13T17:57:37+00:00",
      "credit_limit"=>100,
      "currency_code"=>"USD",
      "day_payment_is_due"=>20,
      "guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "institution_code"=>"chase",
      "interest_rate"=>nil,
      "is_closed"=>false,
      "last_payment"=>nil,
      "last_payment_at"=>nil,
      "matures_on"=>nil,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "minimum_balance"=>nil,
      "minimum_payment"=>nil,
      "name"=>"Test Account 2",
      "original_balance"=>nil,
      "payment_due_at"=>nil,
      "payoff_balance"=>nil,
      "started_on"=>nil,
      "subtype"=>nil,
      "total_account_value"=>nil,
      "type"=>"SAVINGS",
      "updated_at"=>"2016-10-13T18:08:00+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Use this endpoint to view information about every account that belongs to a user. You'll need the user's GUID to access this list. The information will include the account type — e.g., CHECKING, MONEY_MARKET, or PROPERTY — the account balance, the date the account was started, etc.

    List account transactions

    GET /users/{user_guid}/accounts/{account_guid}/transactions
    
    Example URL, with request parameters
    
    GET https://vestibule.mx.com/users/{user_guid}/accounts/{account_guid}/transactions?from_date=2016-09-20&to_date=2016-10-20
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/accounts/{account_guid}/transactions' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    transactions = Atrium.listAccountTransactions("{user_guid}", "{account_guid}")
    Enum.each(transactions, fn transaction ->
      IO.inspect transaction
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      transactions, err := client.ListAccountTransactions("{user_guid}", "{account_guid}")
      if err != nil {
        fmt.Println("Error listing account transactions:", err)
        return
      }
      for _, transaction := range transactions {
        fmt.Printf("%+v\n", transaction)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Transaction[] transactions = atriumClient.listAccountTransactions("{user_guid}", "{account_guid}", "", "", "", "");
    for(Transaction transaction : transactions2) {
        System.out.println(transaction.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        accountGuid: "{account_guid}"
      }
    };
    
    AtriumClient.listAccountTransactions(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    atriumClient.listAccountTransactions("{user_guid}", "{account_guid}")
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    account = ::Atrium::Account.read user_guid: "{user_guid}", account_guid: "{account_guid}"
    
    user_guid = "{user_guid}"
    guid = "{account_guid}"
    params = {:user_guid => user_guid, :guid => guid}
    transactions = account.transactions params
    transactions.each do |transaction|
      puts transaction.attributes
    end
    

    Example response

    Status: 200 OK
    
    {
      "transactions": [
        {
          "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "amount": 61.11,
          "category": "Groceries",
          "check_number": 15234,
          "check_number_string": "00015234",
          "created_at": "2016-10-06T09:43:42+00:00",
          "currency_code": "USD",
          "date": "2013-09-23",
          "description": "Whole Foods",
          "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
          "is_bill_pay": false,
          "is_direct_deposit": false,
          "is_expense": true,
          "is_fee": false,
          "is_income": false,
          "is_international": false,
          "is_overdraft_fee": false,
          "is_payroll_advance": false,
          "latitude": -43.2075,
          "longitude": 139.691706,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "memo": null,
          "merchant_category_code": 5411,
          "original_description": "WHOLEFDS TSQ 102",
          "posted_at": "2016-10-07T06:00:00+00:00",
          "status": "POSTED",
          "top_level_category": "Food & Dining",
          "transacted_at": "2016-10-06T13:00:00+00:00",
          "type": "DEBIT",
          "updated_at": "2016-10-07T05:49:12+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        },
        {
          "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "amount": 23.40,
          "category": "Books",
          "check_number": 15234,
          "check_number_string": "00015234",
          "created_at": "2016-08-26T09:43:42+00:00",
          "currency_code": "USD",
          "date": "2013-09-23",
          "description": "Audible",
          "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
          "is_bill_pay": false,
          "is_direct_deposit": false,
          "is_expense": true,
          "is_fee": false,
          "is_income": false,
          "is_international": false,
          "is_overdraft_fee": false,
          "is_payroll_advance": false,
          "latitude": -43.2075,
          "longitude": 139.691706,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "memo": null,
          "merchant_category_code": 5411,
          "original_description": "AUDIBLEBKS",
          "posted_at": "2016-08-27T06:00:00+00:00",
          "status": "POSTED",
          "top_level_category": "Entertainment",
          "transacted_at": "2016-08-26T13:00:00+00:00",
          "type": "DEBIT",
          "updated_at": "2016-08-27T05:49:12+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        }
      ]
    }
    
    %{
      "account_guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount" => 61.11,
      "category" => "Groceries",
      "check_number" => 15234,
      "check_number_string" => "00015234",
      "created_at" => "2016-10-06T09:43:42+00:00",
      "currency_code" => "USD",
      "date" => "2013-09-23",
      "description" => "Whole Foods",
      "guid" => "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay" => false,
      "is_direct_deposit" => false,
      "is_expense" => true,
      "is_fee" => false,
      "is_income" => false,
      "is_international" => false,
      "is_overdraft_fee" => false,
      "is_payroll_advance" => false,
      "latitude" => -43.2075,
      "longitude" => 139.691706,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo" => nil,
      "merchant_category_code" => 5411,
      "original_description" => "WHOLEFDS TSQ 102",
      "posted_at" => "2016-10-07T06:00:00+00:00",
      "status" => "POSTED",
      "top_level_category" => "Food & Dining",
      "transacted_at" => "2016-10-06T13:00:00+00:00",
      "type" => "DEBIT",
      "updated_at" => "2016-10-07T05:49:12+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    %{
      "account_guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount" => 23.40,
      "category" => "Books",
      "check_number" => 15234,
      "check_number_string" => "00015234",
      "created_at" => "2016-08-26T09:43:42+00:00",
      "currency_code" => "USD",
      "date" => "2013-09-23",
      "description" => "Audible",
      "guid" => "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay" => false,
      "is_direct_deposit" => false,
      "is_expense" => true,
      "is_fee" => false,
      "is_income" => false,
      "is_international" => false,
      "is_overdraft_fee" => false,
      "is_payroll_advance" => false,
      "latitude" => -43.2075,
      "longitude" => 139.691706,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo" => nil,
      "merchant_category_code" => 5411,
      "original_description" => "AUDIBLEBKS",
      "posted_at" => "2016-08-27T06:00:00+00:00",
      "status" => "POSTED",
      "top_level_category" => "Entertainment",
      "transacted_at" => "2016-08-26T13:00:00+00:00",
      "type" => "DEBIT",
      "updated_at" => "2016-08-27T05:49:12+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AccountGuid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      Amount:61.11
      Category:Groceries
      CheckNumber:15234
      CheckNumberString:00015234
      CreatedAt:2016-10-06T09:43:42+00:00
      CurrencyCode:USD
      Date:2013-09-23
      Description:Whole Foods
      Guid:TRN-265abee9-889b-af6a-c69b-25157db2bdd9
      IsBillPay:false
      IsDirectDeposit:false
      IsExpense:true
      IsFee:false
      IsIncome:false
      IsInternational:false
      IsOverdraftFee:false
      IsPayrollAdvance:false
      Latitude:-43.2075
      Longitude:139.691706
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Memo:
      MerchantCategoryCode:5411
      OriginalDescription:WHOLEFDS TSQ 102
      PostedAt:2016-10-07T06:00:00+00:00
      Status:POSTED
      TopLevelCategory:Food & Dining
      TransactedAt:2016-10-06T13:00:00+00:00
      Type:DEBIT
      UpdatedAt:2016-10-07T05:49:12+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    &{
      AccountGuid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      Amount:23.40
      Category:Books
      CheckNumber:15234
      CheckNumberString:00015234
      CreatedAt:2016-08-26T09:43:42+00:00
      CurrencyCode:USD
      Date:2013-09-23
      Description:Audible
      Guid:TRN-265abee9-889b-af6a-c69b-25157db2bdd9
      IsBillPay:false
      IsDirectDeposit:false
      IsExpense:true
      IsFee:false
      IsIncome:false
      IsInternational:false
      IsOverdraftFee:false
      IsPayrollAdvance:false
      Latitude:-43.2075
      Longitude:139.691706
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Memo:
      MerchantCategoryCode:5411
      OriginalDescription:UDIBLEBKS
      PostedAt:2016-08-27T06:00:00+00:00
      Status:POSTED
      TopLevelCategory:Entertainment
      TransactedAt:2016-08-26T13:00:00+00:00
      Type:DEBIT
      UpdatedAt:2016-08-27T05:49:12+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Transaction{
      account_guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      amount='61.11',
      category='Groceries',
      check_number='15234',
      check_number_string='00015234',
      created_at='2016-10-06T09:43:42+00:00',
      currency_code='USD',
      date='2013-09-23',
      description='Whole Foods',
      guid='TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      is_bill_pay='false',
      is_direct_deposit='false',
      is_expense='true',
      is_fee='false',
      is_income='false',
      is_international='false',
      is_overdraft_fee='false',
      is_payroll_advance='false',
      latitude='-43.2075',
      longitude='139.691706',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      memo='null',
      merchant_category_code='5411',
      original_description='WHOLEFDS TSQ 102',
      posted_at='2016-10-07T06:00:00+00:00',
      status='POSTED',
      top_level_category='Food & Dining',
      transacted_at='2016-10-06T13:00:00+00:00',
      type='DEBIT',
      updated_at='2016-10-07T05:49:12+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    Transaction{
      account_guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      amount='23.40',
      category='Books',
      check_number='15234',
      check_number_string='00015234',
      created_at='2016-08-26T09:43:42+00:00',
      currency_code='USD',
      date='2013-09-23',
      description='Audible',
      guid='TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      is_bill_pay='false',
      is_direct_deposit='false',
      is_expense='true',
      is_fee='false',
      is_income='false',
      is_international='false',
      is_overdraft_fee='false',
      is_payroll_advance='false',
      latitude='-43.2075',
      longitude='139.691706',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      memo='null',
      merchant_category_code='5411',
      original_description='AUDIBLEBKS',
      posted_at='2016-08-27T06:00:00+00:00',
      status='POSTED',
      top_level_category='Entertainment',
      transacted_at='2016-10-06T13:00:00+00:00',
      type='DEBIT',
      updated_at='2016-10-07T05:49:12+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { transactions:
       [ { category: 'Groceries',
           created_at: '2016-10-06T09:43:42+00:00',
           currency_code: 'USD',
           date: '2013-09-23',
           original_description: 'WHOLEFDS TSQ 102',
           status: 'POSTED',
           type: 'DEBIT',
           posted_at: '2016-10-07T06:00:00+00:00',
           top_level_category: 'Food & Dining',
           transacted_at: '2016-10-06T13:00:00+00:00',
           updated_at: '2016-10-07T05:49:12+00:00',
           account_guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           amount: 61.11,
           check_number: 15234,
           check_number_string: '00015234',
           description: 'Whole Foods',
           guid: 'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
           is_bill_pay: false,
           is_direct_deposit: false,
           is_expense: true,
           is_fee: false,
           is_income: false,
           is_international: false,
           is_overdraft_fee: false,
           is_payroll_advance: false,
           latitude: -43.2075,
           longitude: 139.691706,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           memo: null,
           merchant_category_code: 5411,
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' },
         { category: 'Books',
           created_at: '2016-08-26T09:43:42+00:00',
           currency_code: 'USD',
           date: '2013-09-23',
           original_description: 'AUDIBLEBKS',
           status: 'POSTED',
           type: 'DEBIT',
           posted_at: '2016-08-27T06:00:00+00:00',
           top_level_category: 'Entertainment',
           transacted_at: '2016-08-26T13:00:00+00:00',
           updated_at: '2016-08-27T05:49:12+00:00',
           account_guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           amount: 23.40,
           check_number: 15234,
           check_number_string: '00015234',
           description: 'Audible',
           guid: 'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
           is_bill_pay: false,
           is_direct_deposit: false,
           is_expense: true,
           is_fee: false,
           is_income: false,
           is_international: false,
           is_overdraft_fee: false,
           is_payroll_advance: false,
           latitude: -43.2075,
           longitude: 139.691706,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           memo: null,
           merchant_category_code: 5411,
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' } ],
        pagination:
          { current_page: 1,
            per_page: 25,
            total_entries: 2,
            total_pages: 1 } }
    
    {
      'updated_at': u'2016-10-07T05:49:12+00:00',
      'is_income': False,
      'is_fee': False,
      'is_international': False,
      'original_description': u'WHOLEFDS TSQ 102',
      'guid': u'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'category': u'Groceries',
      'is_payroll_advance': False,
      'posted_at': u'2016-10-07T06:00:00+00:00',
      'latitude': -43.2075,
      'type': u'DEBIT',
      'is_direct_deposit': False,
      'status': u'POSTED',
      'transacted_at': u'2016-10-06T13:00:00+00:00',
      'description': u'Whole Foods',
      'is_expense': True,
      'memo': None,
      'date': u'2013-09-23',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'top_level_category': u'Food & Dining',
      'check_number': u'00015234',
      'account_guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'created_at': u'2016-10-06T09:43:42+00:00',
      'currency_code': u'USD',
      'merchant_category_code': u'5411',
      'is_bill_pay': False,
      'longitude': 139.691706,
      'amount': 61.11,
      'is_overdraft_fee': False
    }
    {
      'updated_at': u'2016-08-27T05:49:12+00:00',
      'is_income': False,
      'is_fee': False,
      'is_international': False,
      'original_description': u'AUDIBLEBKS',
      'guid': u'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'category': u'Books',
      'is_payroll_advance': False,
      'posted_at': u'2016-08-27T06:00:00+00:00',
      'latitude': -43.2075,
      'type': u'DEBIT',
      'is_direct_deposit': False,
      'status': u'POSTED',
      'transacted_at': u'2016-08-26T13:00:00+00:00',
      'description': u'Audible',
      'is_expense': True,
      'memo': None,
      'date': u'2013-09-23',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'top_level_category': u'Entertainment',
      'check_number': u'00015234',
      'account_guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'created_at': u'2016-08-26T09:43:42+00:00',
      'currency_code': u'USD',
      'merchant_category_code': 5411,
      'is_bill_pay': False,
      'longitude': 139.691706,
      'amount': 23.40,
      'is_overdraft_fee': False
    }
    
    {
      "account_guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount"=>61.11,
      "category"=>"Groceries",
      "check_number"=>15234,
      "check_number_string"=>"00015234",
      "created_at"=>"2016-10-06T09:43:42+00:00",
      "currency_code"=>"USD",
      "date"=>"2013-09-23",
      "description"=>"Whole Foods",
      "guid"=>"TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay"=>false,
      "is_direct_deposit"=>false,
      "is_expense"=>true,
      "is_fee"=>false,
      "is_income"=>false,
      "is_international"=>false,
      "is_overdraft_fee"=>false,
      "is_payroll_advance"=>false,
      "latitude"=>-43.2075,
      "longitude"=>139.691706,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo"=>nil,
      "merchant_category_code"=>5411,
      "original_description"=>"WHOLEFDS TSQ 102",
      "posted_at"=>"2016-10-07T06:00:00+00:00",
      "status"=>"POSTED",
      "top_level_category"=>"Food & Dining",
      "transacted_at"=>"2016-10-06T13:00:00+00:00",
      "type"=>"DEBIT",
      "updated_at"=>"2016-10-07T05:49:12+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    {
      "account_guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount"=>23.40,
      "category"=>"Books",
      "check_number"=>15234,
      "check_number_string"=>"00015234",
      "created_at"=>"2016-08-26T09:43:42+00:00",
      "currency_code"=>"USD",
      "date"=>"2013-09-23",
      "description"=>"Audible",
      "guid"=>"TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay"=>false,
      "is_direct_deposit"=>false,
      "is_expense"=>true,
      "is_fee"=>false,
      "is_income"=>false,
      "is_international"=>false,
      "is_overdraft_fee"=>false,
      "is_payroll_advance"=>false,
      "latitude"=>-43.2075,
      "longitude"=>139.691706,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo"=>nil,
      "merchant_category_code"=>5411,
      "original_description"=>"AUDIBLEBKS",
      "posted_at"=>"2016-08-27T06:00:00+00:00",
      "status"=>"POSTED",
      "top_level_category"=>"Entertainment",
      "transacted_at"=>"2016-08-26T13:00:00+00:00",
      "type"=>"DEBIT",
      "updated_at"=>"2016-08-27T05:49:12+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    This endpoint allows you to see every transaction that belongs to a specific account. The default from_date is 90 days prior to the request, and the default to_date is 5 days from the time of the request.

    The from_date and to_date parameters can optionally be appended to the request.

    Account types and subtypes

    Transactions

    A transaction represents any instance in which money moves into or out of an account. This could be a purchase at a business, a payroll deposit, a transfer from one account to another, an ATM withdrawal, etc. Each transaction belongs to only one account.

    Endpoint Method Description
    /users/{user_guid}/transactions/{transaction_guid} GET Read information about a specific transaction.
    /users/{user_guid}/transactions GET Read information about all transactions that belong to a user, across all members and accounts.

    Read a transaction

    GET /users/{user_guid}/transactions/{transaction_guid}
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/transactions/{transaction_guid}' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      transaction, err := client.GetTransaction("{user_guid}", "{transaction_guid}")
      if err != nil {
        fmt.Println("Error reading Transaction:", err)
        return
      }
      fmt.Printf("%+v\n", transaction)
    }
    
    transaction = Atrium.readTransaction("{user_guid}", "{transaction_guid}")
    IO.inspect transaction
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Transaction transaction = atriumClient.readTransaction("{user_guid}", "{transaction_guid}");
    System.out.println(transaction.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}",
        transactionGuid: "{transaction_guid}"
      }
    };
    
    AtriumClient.readTransaction(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    transaction = atriumClient.readTransaction("{user_guid}", "{transaction_guid}")
    print transaction.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    transaction = ::Atrium::Transaction.read user_guid: "{user_guid}", transaction_guid: "{transaction_guid}"
    puts transaction.attributes
    

    Example response

    Status: 200 OK
    
    {
      "transaction": {
        "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
        "amount": 61.11,
        "category": "Groceries",
        "check_number": 15234,
        "check_number_string": "00015234",
        "created_at": "2016-10-06T09:43:42+00:00",
        "currency_code": "USD",
        "date": "2013-09-23",
        "description": "Whole Foods",
        "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
        "is_bill_pay": false,
        "is_direct_deposit": false,
        "is_expense": true,
        "is_fee": false,
        "is_income": false,
        "is_overdraft_fee": false,
        "is_payroll_advance": false,
        "latitude": -43.2075,
        "longitude": 139.691706,
        "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
        "memo": null,
        "merchant_category_code": 5411,
        "original_description": "WHOLEFDS TSQ 102",
        "posted_at": "2016-10-07T06:00:00+00:00",
        "status": "POSTED",
        "top_level_category": "Food & Dining",
        "transacted_at": "2016-10-06T13:00:00+00:00",
        "type": "DEBIT",
        "updated_at": "2016-10-07T05:49:12+00:00",
        "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    
    %{
      "account_guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount" => 61.11,
      "category" => "Groceries",
      "check_number" => 15234,
      "check_number_string" => "00015234",
      "created_at" => "2016-10-06T09:43:42+00:00",
      "currency_code" => "USD",
      "date" => "2013-09-23",
      "description" => "Whole Foods",
      "guid" => "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay" => false,
      "is_direct_deposit" => false,
      "is_expense" => true,
      "is_fee" => false,
      "is_income" => false,
      "is_overdraft_fee" => false,
      "is_payroll_advance" => false,
      "latitude" => -43.2075,
      "longitude" => 139.691706,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo" => nil,
      "merchant_category_code" => 5411,
      "original_description" => "WHOLEFDS TSQ 102",
      "posted_at" => "2016-10-07T06:00:00+00:00",
      "status" => "POSTED",
      "top_level_category" => "Food & Dining",
      "transacted_at" => "2016-10-06T13:00:00+00:00",
      "type" => "DEBIT",
      "updated_at" => "2016-10-07T05:49:12+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AccountGuid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      Amount:61.11
      Category:Groceries
      CheckNumber:15234
      CheckNumberString:00015234
      CreatedAt:2016-10-06T09:43:42+00:00
      CurrencyCode:USD
      Date:2013-09-23
      Description:Whole Foods
      Guid:TRN-265abee9-889b-af6a-c69b-25157db2bdd9
      IsBillPay:false
      IsDirectDeposit:false
      IsExpense:true
      IsFee:false
      IsIncome:false
      IsOverdraftFee:false
      IsPayrollAdvance:false
      Latitude:-43.2075
      Longitude:139.691706
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Memo:
      MerchantCategoryCode:5411
      OriginalDescription:WHOLEFDS TSQ 102
      PostedAt:2016-10-07T06:00:00+00:00
      Status:POSTED
      TopLevelCategory:Food & Dining
      TransactedAt:2016-10-06T13:00:00+00:00
      Type:DEBIT
      UpdatedAt:2016-10-07T05:49:12+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Transaction{
      account_guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      amount='61.11',
      category='Groceries',
      check_number='15234',
      check_number_string='00015234',
      created_at='2016-10-06T09:43:42+00:00',
      currency_code='USD',
      date='2013-09-23',
      description='Whole Foods',
      guid='TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      is_bill_pay='false',
      is_direct_deposit='false',
      is_expense='true',
      is_fee='false',
      is_income='false',
      is_overdraft_fee='false',
      is_payroll_advance='false',
      latitude='-43.2075',
      longitude='139.691706',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      memo='null',
      merchant_category_code='5411',
      original_description='WHOLEFDS TSQ 102',
      posted_at='2016-10-07T06:00:00+00:00',
      status='POSTED',
      top_level_category='Food & Dining',
      transacted_at='2016-10-06T13:00:00+00:00',
      type='DEBIT',
      updated_at='2016-10-07T05:49:12+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { transaction:
       { category: 'Groceries',
         created_at: '2016-10-06T09:43:42+00:00',
         currency_code: 'USD',
         date: '2013-09-23',
         original_description: 'WHOLEFDS TSQ 102',
         status: 'POSTED',
         type: 'DEBIT',
         posted_at: '2016-10-07T06:00:00+00:00',
         top_level_category: 'Food & Dining',
         transacted_at: '2016-10-06T13:00:00+00:00',
         updated_at: '2016-10-07T05:49:12+00:00',
         account_guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
         amount: 61.11,
         check_number: 15234,
         check_number_string: '00015234',
         description: 'Whole Foods',
         guid: 'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
         is_bill_pay: false,
         is_direct_deposit: false,
         is_expense: true,
         is_fee: false,
         is_income: false,
         is_overdraft_fee: false,
         is_payroll_advance: false,
         latitude: -43.2075,
         longitude: 139.691706,
         member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
         memo: null,
         merchant_category_code: 5411,
         user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' } }
    
    {
      'updated_at': u'2016-10-07T05:49:12+00:00',
      'is_income': False,
      'is_fee': False,
      'original_description': u'WHOLEFDS TSQ 102',
      'guid': u'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'category': u'Groceries',
      'is_payroll_advance': False,
      'posted_at': u'2016-10-07T06:00:00+00:00',
      'latitude': -43.2075,
      'type': u'DEBIT',
      'is_direct_deposit': False,
      'status': u'POSTED',
      'transacted_at': u'2016-10-06T13:00:00+00:00',
      'description': u'Whole Foods',
      'is_expense': True,
      'memo': None,
      'date': u'2013-09-23',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'top_level_category': u'Food & Dining',
      'check_number': u'00015234',
      'account_guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'created_at': u'2016-10-06T09:43:42+00:00',
      'currency_code': u'USD',
      'merchant_category_code': u'5411',
      'is_bill_pay': False,
      'longitude': 139.691706,
      'amount': 61.11,
      'is_overdraft_fee': False
    }
    
    {
      "account_guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount"=>61.11,
      "category"=>"Groceries",
      "check_number"=>15234,
      "check_number_string"=>"00015234",
      "created_at"=>"2016-10-06T09:43:42+00:00",
      "currency_code"=>"USD",
      "date"=>"2013-09-23",
      "description"=>"Whole Foods",
      "guid"=>"TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay"=>false,
      "is_direct_deposit"=>false,
      "is_expense"=>true,
      "is_fee"=>false,
      "is_income"=>false,
      "is_overdraft_fee"=>false,
      "is_payroll_advance"=>false,
      "latitude"=>-43.2075,
      "longitude"=>139.691706,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo"=>nil,
      "merchant_category_code"=>5411,
      "original_description"=>"WHOLEFDS TSQ 102",
      "posted_at"=>"2016-10-07T06:00:00+00:00",
      "status"=>"POSTED",
      "top_level_category"=>"Food & Dining",
      "transacted_at"=>"2016-10-06T13:00:00+00:00",
      "type"=>"DEBIT",
      "updated_at"=>"2016-10-07T05:49:12+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    This endpoint allows you to view information about a specific transaction that belongs to a user.

    Below are the fields associated with transactions:

    Field Data type Description
    account_guid String A unique identifier for the account to which the transaction belongs. Defined by MX.
    amount Decimal The monetary amount of the transaction. Max length is 10,2.
    category String The category of the transaction.
    check_number Integer DEPRECATED. Use check_number_string instead.
    check_number_string String The check number for the transaction.
    created_at String The date and time the transaction was stored in the MX system.
    currency_code String The three-character ISO 4217 currency code, e.g. USD.
    date String The date the transaction was created.
    description String A human-readable version of the original_description field described below, e.g., "Sam's Club," "Johnny's Tavern." This is provided by the MX Platform.
    guid String A unique identifier for the transaction. Defined by MX.
    is_bill_pay Boolean If the transaction is a bill pay, this field will be true. Otherwise, this field will be false.
    is_direct_deposit Boolean If the transaction is a direct deposit, this field will be true. Otherwise, this field will be false.
    is_expense Boolean If the transaction is an expense, this field will be true. Otherwise, this field will be false.
    is_fee Boolean If the transaction is a fee, this field will be true. Otherwise, this field will be false.
    is_income Boolean If the transaction is income, this field will be true. Otherwise, this field will be false.
    is_international Boolean If the transaction is international as defined by the data provider, this field will be true. If the data provider determines it is not international then it will be false. It will be null if the data provider does not have this information.
    is_overdraft_fee Boolean If the transaction is an overdraft fee, this field will be true. Otherwise, this field will be false.
    is_payroll_advance Boolean If the transaction is a payroll advance fee, this field will be true. Otherwise, this field will be false.
    latitude Decimal The latitude of the location where the transaction occurred. The number is a signed decimal (e.g. Rio de Janeiro's latitude is -22.9027800 and Tokyo's latitude is 35.689488).
    longitude Decimal The longitude of the location where the transaction occurred. The number is a signed decimal (e.g. Rio de Janeiro's longitude is -43.2075000 and Tokyo's longitude is 139.691706).
    member_guid String A unique identifier for the member to which the transaction belongs. Defined by MX.
    memo string This field contains additional descriptive information about the transaction.
    merchant_category_code Integer The merchant category code.
    original_description String The original description of the transaction as provided by our data feed. See description above for more information.
    posted_at String The date and time the transaction was posted.
    status String The status of the transaction, i.e., POSTED or PENDING.
    top_level_category String The parent category that this transaction's category is assigned to.
    transacted_at String The date and time the transaction took place.
    type String The type of transaction, i.e., CREDIT or DEBIT.
    updated_at String The date and time the transaction was updated.
    user_guid String A unique identifier for the user to which this transaction belongs. Defined by MX.

    List transactions

    GET /users/{user_guid}/transactions
    

    Example URL with query parameters

    GET https://vestibule.mx.com/users/{user_guid}/transactions?from_date=2016-09-20&to_date=2016-10-20
    

    Example request

    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/transactions' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    transactions = Atrium.listTransactions("{user_guid}")
    Enum.each(transactions, fn transaction ->
      IO.inspect transaction
    end)
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      transactions, err := client.ListTransactions("{user_guid}")
      if err != nil {
        fmt.Println("Error listing transactions:", err)
        return
      }
      for _, transaction := range transactions {
        fmt.Printf("%+v\n", transaction)
      }
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Transaction[] transactions = atriumClient.listTransactions("{user_guid}", "", "", "", "");
    for(Transaction transaction : transactions3) {
        System.out.println(transaction.toString());
    }
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}"
      }
    };
    
    AtriumClient.listTransactions(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    transactions = atriumClient.listTransactions("{user_guid}")
    for transaction in transactions:
        print transaction.__dict__
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    user_guid = "{user_guid}"
    account_guid = "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1"
    params = {:user_guid => user_guid, :account_guid => account_guid}
    
    transactions = ::Atrium::Transaction.list params
    transactions.each do |a_transaction|
      puts a_transaction.attributes
    end
    

    Example Response

    Status: 200 OK
    
    {
      "transactions": [
        {
          "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "amount": 61.11,
          "category": "Groceries",
          "check_number": 15234,
          "check_number_string": "00015234",
          "created_at": "2016-10-06T09:43:42+00:00",
          "currency_code": "USD",
          "date": "2013-09-23",
          "description": "Whole Foods",
          "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
          "is_bill_pay": false,
          "is_direct_deposit": false,
          "is_expense": true,
          "is_fee": false,
          "is_income": false,
          "is_international": false,
          "is_overdraft_fee": false,
          "is_payroll_advance": false,
          "latitude": -43.2075,
          "longitude": 139.691706,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "memo": null,
          "merchant_category_code": 5411,
          "original_description": "WHOLEFDS TSQ 102",
          "posted_at": "2016-10-07T06:00:00+00:00",
          "status": "POSTED",
          "top_level_category": "Food & Dining",
          "transacted_at": "2016-10-06T13:00:00+00:00",
          "type": "DEBIT",
          "updated_at": "2016-10-07T05:49:12+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        },
        {
          "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
          "amount": 23.40,
          "category": "Books",
          "check_number": 15234,
          "check_number_string": "00015234",
          "created_at": "2016-08-26T09:43:42+00:00",
          "currency_code": "USD",
          "date": "2013-09-23",
          "description": "Audible",
          "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
          "is_bill_pay": false,
          "is_direct_deposit": false,
          "is_expense": true,
          "is_fee": false,
          "is_income": false,
          "is_international": false,
          "is_overdraft_fee": false,
          "is_payroll_advance": false,
          "latitude": -43.2075,
          "longitude": 139.691706,
          "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
          "memo": null,
          "merchant_category_code": 5411,
          "original_description": "AUDIBLEBKS",
          "posted_at": "2016-08-27T06:00:00+00:00",
          "status": "POSTED",
          "top_level_category": "Entertainment",
          "transacted_at": "2016-08-26T13:00:00+00:00",
          "type": "DEBIT",
          "updated_at": "2016-08-27T05:49:12+00:00",
          "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        }
      ]
    }
    
    %{
      "account_guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount" => 61.11,
      "category" => "Groceries",
      "check_number" => 15234,
      "check_number_string" => "00015234",
      "created_at" => "2016-10-06T09:43:42+00:00",
      "currency_code" => "USD",
      "date" => "2013-09-23",
      "description" => "Whole Foods",
      "guid" => "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay" => false,
      "is_direct_deposit" => false,
      "is_expense" => true,
      "is_fee" => false,
      "is_income" => false,
      "is_international" => false,
      "is_overdraft_fee" => false,
      "is_payroll_advance" => false,
      "latitude" => -43.2075,
      "longitude" => 139.691706,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo" => nil,
      "merchant_category_code" => 5411,
      "original_description" => "WHOLEFDS TSQ 102",
      "posted_at" => "2016-10-07T06:00:00+00:00",
      "status" => "POSTED",
      "top_level_category" => "Food & Dining",
      "transacted_at" => "2016-10-06T13:00:00+00:00",
      "type" => "DEBIT",
      "updated_at" => "2016-10-07T05:49:12+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    %{
      "account_guid" => "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount" => 23.40,
      "category" => "Books",
      "check_number" => 15234,
      "check_number_string" => "00015234",
      "created_at" => "2016-08-26T09:43:42+00:00",
      "currency_code" => "USD",
      "date" => "2013-09-23",
      "description" => "Audible",
      "guid" => "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay" => false,
      "is_direct_deposit" => false,
      "is_expense" => true,
      "is_fee" => false,
      "is_income" => false,
      "is_international" => false,
      "is_overdraft_fee" => false,
      "is_payroll_advance" => false,
      "latitude" => -43.2075,
      "longitude" => 139.691706,
      "member_guid" => "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo" => nil,
      "merchant_category_code" => 5411,
      "original_description" => "AUDIBLEBKS",
      "posted_at" => "2016-08-27T06:00:00+00:00",
      "status" => "POSTED",
      "top_level_category" => "Entertainment",
      "transacted_at" => "2016-08-26T13:00:00+00:00",
      "type" => "DEBIT",
      "updated_at" => "2016-08-27T05:49:12+00:00",
      "user_guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      AccountGuid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      Amount:61.11
      Category:Groceries
      CheckNumber:15234
      CheckNumberString:00015234
      CreatedAt:2016-10-06T09:43:42+00:00
      CurrencyCode:USD
      Date:2013-09-23
      Description:Whole Foods
      Guid:TRN-265abee9-889b-af6a-c69b-25157db2bdd9
      IsBillPay:false
      IsDirectDeposit:false
      IsExpense:true
      IsFee:false
      IsIncome:false
      IsInternational: false
      IsOverdraftFee:false
      IsPayrollAdvance:false
      Latitude:-43.2075
      Longitude:139.691706
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Memo:
      MerchantCategoryCode:5411
      OriginalDescription:WHOLEFDS TSQ 102
      PostedAt:2016-10-07T06:00:00+00:00
      Status:POSTED
      TopLevelCategory:Food & Dining
      TransactedAt:2016-10-06T13:00:00+00:00
      Type:DEBIT
      UpdatedAt:2016-10-07T05:49:12+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    &{
      AccountGuid:ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1
      Amount:23.40
      Category:Books
      CheckNumber:15234
      CheckNumberString:00015234
      CreatedAt:2016-08-26T09:43:42+00:00
      CurrencyCode:USD
      Date:2013-09-23
      Description:Audible
      Guid:TRN-265abee9-889b-af6a-c69b-25157db2bdd9
      IsBillPay:false
      IsDirectDeposit:false
      IsExpense:true
      IsFee:false
      IsIncome:false
      IsInternational:false
      IsOverdraftFee:false
      IsPayrollAdvance:false
      Latitude:-43.2075
      Longitude:139.691706
      MemberGuid:MBR-7c6f361b-e582-15b6-60c0-358f12466b4b
      Memo:
      MerchantCategoryCode:5411
      OriginalDescription:UDIBLEBKS
      PostedAt:2016-08-27T06:00:00+00:00
      Status:POSTED
      TopLevelCategory:Entertainment
      TransactedAt:2016-08-26T13:00:00+00:00
      Type:DEBIT
      UpdatedAt:2016-08-27T05:49:12+00:00
      UserGuid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Transaction{
      account_guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      amount='61.11',
      category='Groceries',
      check_number='15234',
      check_number_string='00015234',
      created_at='2016-10-06T09:43:42+00:00',
      currency_code='USD',
      date='2013-09-23',
      description='Whole Foods',
      guid='TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      is_bill_pay='false',
      is_direct_deposit='false',
      is_expense='true',
      is_fee='false',
      is_income='false',
      is_international='false',
      is_overdraft_fee='false',
      is_payroll_advance='false',
      latitude='-43.2075',
      longitude='139.691706',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      memo='null',
      merchant_category_code='5411',
      original_description='WHOLEFDS TSQ 102',
      posted_at='2016-10-07T06:00:00+00:00',
      status='POSTED',
      top_level_category='Food & Dining',
      transacted_at='2016-10-06T13:00:00+00:00',
      type='DEBIT',
      updated_at='2016-10-07T05:49:12+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    Transaction{
      account_guid='ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      amount='23.40',
      category='Books',
      check_number='15234',
      check_number_string='00015234',
      created_at='2016-08-26T09:43:42+00:00',
      currency_code='USD',
      date='2013-09-23',
      description='Audible',
      guid='TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      is_bill_pay='false',
      is_direct_deposit='false',
      is_expense='true',
      is_fee='false',
      is_income='false',
      is_international='false',
      is_overdraft_fee='false',
      is_payroll_advance='false',
      latitude='-43.2075',
      longitude='139.691706',
      member_guid='MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      memo='null',
      merchant_category_code='5411',
      original_description='AUDIBLEBKS',
      posted_at='2016-08-27T06:00:00+00:00',
      status='POSTED',
      top_level_category='Entertainment',
      transacted_at='2016-10-06T13:00:00+00:00',
      type='DEBIT',
      updated_at='2016-10-07T05:49:12+00:00',
      user_guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { transactions:
       [ { category: 'Groceries',
           created_at: '2016-10-06T09:43:42+00:00',
           currency_code: 'USD',
           date: '2013-09-23',
           original_description: 'WHOLEFDS TSQ 102',
           status: 'POSTED',
           type: 'DEBIT',
           posted_at: '2016-10-07T06:00:00+00:00',
           top_level_category: 'Food & Dining',
           transacted_at: '2016-10-06T13:00:00+00:00',
           updated_at: '2016-10-07T05:49:12+00:00',
           account_guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           amount: 61.11,
           check_number: 15234,
           check_number_string: '00015234',
           description: 'Whole Foods',
           guid: 'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
           is_bill_pay: false,
           is_direct_deposit: false,
           is_expense: true,
           is_fee: false,
           is_income: false,
           is_international: false,
           is_overdraft_fee: false,
           is_payroll_advance: false,
           latitude: -43.2075,
           longitude: 139.691706,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           memo: null,
           merchant_category_code: 5411,
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' },
         { category: 'Books',
           created_at: '2016-08-26T09:43:42+00:00',
           currency_code: 'USD',
           date: '2013-09-23',
           original_description: 'AUDIBLEBKS',
           status: 'POSTED',
           type: 'DEBIT',
           posted_at: '2016-08-27T06:00:00+00:00',
           top_level_category: 'Entertainment',
           transacted_at: '2016-08-26T13:00:00+00:00',
           updated_at: '2016-08-27T05:49:12+00:00',
           account_guid: 'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
           amount: 23.40,
           check_number: 15234,
           check_number_string: '00015234',
           description: 'Audible',
           guid: 'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
           is_bill_pay: false,
           is_direct_deposit: false,
           is_expense: true,
           is_fee: false,
           is_income: false,
           is_international; false,
           is_overdraft_fee: false,
           is_payroll_advance: false,
           latitude: -43.2075,
           longitude: 139.691706,
           member_guid: 'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
           memo: null,
           merchant_category_code: 5411,
           user_guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' } ],
        pagination:
          { current_page: 1,
            per_page: 25,
            total_entries: 2,
            total_pages: 1 } }
    
    {
      'updated_at': u'2016-10-07T05:49:12+00:00',
      'is_income': False,
      'is_fee': False,
      'is_international': False,
      'original_description': u'WHOLEFDS TSQ 102',
      'guid': u'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'category': u'Groceries',
      'is_payroll_advance': False,
      'posted_at': u'2016-10-07T06:00:00+00:00',
      'latitude': -43.2075,
      'type': u'DEBIT',
      'is_direct_deposit': False,
      'status': u'POSTED',
      'transacted_at': u'2016-10-06T13:00:00+00:00',
      'description': u'Whole Foods',
      'is_expense': True,
      'memo': None,
      'date': u'2013-09-23',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'top_level_category': u'Food & Dining',
      'check_number': u'00015234',
      'account_guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'created_at': u'2016-10-06T09:43:42+00:00',
      'currency_code': u'USD',
      'merchant_category_code': u'5411',
      'is_bill_pay': False,
      'longitude': 139.691706,
      'amount': 61.11,
      'is_overdraft_fee': False
    }
    {
      'updated_at': u'2016-08-27T05:49:12+00:00',
      'is_income': False,
      'is_fee': False,
      'is_international': False,
      'original_description': u'AUDIBLEBKS',
      'guid': u'TRN-265abee9-889b-af6a-c69b-25157db2bdd9',
      'member_guid': u'MBR-7c6f361b-e582-15b6-60c0-358f12466b4b',
      'category': u'Books',
      'is_payroll_advance': False,
      'posted_at': u'2016-08-27T06:00:00+00:00',
      'latitude': -43.2075,
      'type': u'DEBIT',
      'is_direct_deposit': False,
      'status': u'POSTED',
      'transacted_at': u'2016-08-26T13:00:00+00:00',
      'description': u'Audible',
      'is_expense': True,
      'memo': None,
      'date': u'2013-09-23',
      'user_guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'top_level_category': u'Entertainment',
      'check_number': u'00015234',
      'account_guid': u'ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1',
      'created_at': u'2016-08-26T09:43:42+00:00',
      'currency_code': u'USD',
      'merchant_category_code': 5411,
      'is_bill_pay': False,
      'longitude': 139.691706,
      'amount': 23.40,
      'is_overdraft_fee': False
    }
    
    {
      "account_guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount"=>61.11,
      "category"=>"Groceries",
      "check_number"=>15234,
      "check_number_string"=>"00015234",
      "created_at"=>"2016-10-06T09:43:42+00:00",
      "currency_code"=>"USD",
      "date"=>"2013-09-23",
      "description"=>"Whole Foods",
      "guid"=>"TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay"=>false,
      "is_direct_deposit"=>false,
      "is_expense"=>true,
      "is_fee"=>false,
      "is_income"=>false,
      "is_international"=>false,
      "is_overdraft_fee"=>false,
      "is_payroll_advance"=>false,
      "latitude"=>-43.2075,
      "longitude"=>139.691706,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo"=>nil,
      "merchant_category_code"=>5411,
      "original_description"=>"WHOLEFDS TSQ 102",
      "posted_at"=>"2016-10-07T06:00:00+00:00",
      "status"=>"POSTED",
      "top_level_category"=>"Food & Dining",
      "transacted_at"=>"2016-10-06T13:00:00+00:00",
      "type"=>"DEBIT",
      "updated_at"=>"2016-10-07T05:49:12+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    {
      "account_guid"=>"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
      "amount"=>23.40,
      "category"=>"Books",
      "check_number"=>15234,
      "check_number_string"=>"00015234",
      "created_at"=>"2016-08-26T09:43:42+00:00",
      "currency_code"=>"USD",
      "date"=>"2013-09-23",
      "description"=>"Audible",
      "guid"=>"TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
      "is_bill_pay"=>false,
      "is_direct_deposit"=>false,
      "is_expense"=>true,
      "is_fee"=>false,
      "is_income"=>false,
      "is_international"=>false,
      "is_overdraft_fee"=>false,
      "is_payroll_advance"=>false,
      "latitude"=>-43.2075,
      "longitude"=>139.691706,
      "member_guid"=>"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
      "memo"=>nil,
      "merchant_category_code"=>5411,
      "original_description"=>"AUDIBLEBKS",
      "posted_at"=>"2016-08-27T06:00:00+00:00",
      "status"=>"POSTED",
      "top_level_category"=>"Entertainment",
      "transacted_at"=>"2016-08-26T13:00:00+00:00",
      "type"=>"DEBIT",
      "updated_at"=>"2016-08-27T05:49:12+00:00",
      "user_guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    Use this endpoint to get all transactions that belong to a specific user, across all the user's members and accounts.

    This endpoint accepts optional query parameters, from_date and to_date, which filter transactions according to the date they were posted. If no values are given, from_date will default to 90 days prior to the request, and to_date will default to 5 days from the time of the request.

    Categorize transactions

    POST /transactions/cleanse_and_categorize
    

    Parameters

    Field Name Data Type Description Required?
    amount Decimal Transaction amount. If the value is empty, an amount of 0.0 will be returned. No
    description String Transaction description. Yes
    identifier String Transaction identifier. Yes
    type String Transaction type, i.e., CREDIT or DEBIT. If the value is empty, null will be returned. No

    Example request

    $ curl -i -X POST 'https://vestibule.mx.com/transactions/cleanse_and_categorize' \
      -H 'Content-Type: application/json' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}' \
      -d '{
        "transactions": [
            {
                "amount": 11.22,
                "description": "BEER BAR 65000000764SALT LAKE C",
                "identifier": "12",
                "type": "DEBIT"
            },
            {
                "amount": 21.33,
                "description": "IN-N-OUT BURGER #239AMERICAN FO",
                "identifier": "13",
                "type": "DEBIT"
            },
            {
                "amount": 1595.33,
                "description": "ONLINE PAYMENT - THANK YOU",
                "identifier": "14",
                "type": "CREDIT"
            }
        ]
    }'
    

    Example response

    Status: 200 OK
    
    {
        "transactions": [
            {
                "category": "Alcohol & Bars",
                "description": "Beer Bar",
                "type": "DEBIT",
                "amount": 11.22,
                "identifier": "12",
                "is_bill_pay": false,
                "is_direct_deposit": false,
                "is_expense": null,
                "is_fee": null,
                "is_income": null,
                "is_international": null,
                "is_overdraft_fee": false,
                "is_payroll_advance": false
            },
            {
                "category": "Fast Food",
                "description": "In N Out Burger",
                "type": "DEBIT",
                "amount": 21.33,
                "identifier": "13",
                "is_bill_pay": false,
                "is_direct_deposit": false,
                "is_expense": null,
                "is_fee": null,
                "is_income": null,
                "is_international": null,
                "is_overdraft_fee": false,
                "is_payroll_advance": false
            },
            {
                "category": "Credit Card Payment",
                "description": "Online Payment Thank You",
                "type": "CREDIT",
                "amount": 1595.33,
                "identifier": "14",
                "is_bill_pay": false,
                "is_direct_deposit": false,
                "is_expense": null,
                "is_fee": null,
                "is_income": null,
                "is_international": null,
                "is_overdraft_fee": false,
                "is_payroll_advance": false
            }
        ]
    }
    

    Use this endpoint to categorize, cleanse, and classify transactions. These transactions are not persisted or stored on the MX platform.

    Transaction categories

    Transaction status

    Transactions may have one of two statuses: PENDING or POSTED. How these statuses are reconciled depends on a number of factors.

    MX Connect widget

    The MX Connect widget allows you to quickly add users to Atrium. You can deliver it to end users by either embedding it in a website or by including it in your mobile application.

    Embedding in a website

    Create an MX Connect widget URL

    This endpoint will return a URL for an embeddable version of MX Connect.

    POST /users/{user_guid}/connect_widget_url

    Example request

    $ curl -i -X POST 'https://vestibule.mx.com/users/{user_guid}/connect_widget_url' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    
    user = Atrium.createWidget("{user_guid}")
    IO.inspect user
    
    package main
    
    import (
      "fmt"
      "github.com/mxenabled/atrium-go/client"
    )
    
    func main() {
      client := &client.Client {
        ApiKey:   "YOUR_MX_API_KEY",
        ClientId: "YOUR_MX_CLIENT_ID",
        ApiURL:   "https://vestibule.mx.com",
      }
    
      connect, err := client.GetWidget("{user_guid}")
      if err != nil {
        fmt.Println("Error getting connect widget:", err)
        return
      }
      fmt.Printf("%+v\n", connect)
    }
    
    AtriumClient atriumClient = new AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID");
    Connect connect = atriumClient.createWidget("{user_guid}");
    System.out.println(connect.toString());
    
    const Atrium = require('mx-atrium');
    const AtriumClient = new Atrium.Client('YOUR_MX_API_KEY', 'YOUR_MX_CLIENT_ID', 'https://vestibule.mx.com/');
    
    var request = {
      params: {
        userGuid: "{user_guid}"
      }
    };
    
    AtriumClient.getConnectWidgetUrl(request).then(response => console.log(response));
    
    atriumClient = AtriumClient("https://vestibule.mx.com", "YOUR_MX_API_KEY", "YOUR_MX_CLIENT_ID")
    atriumClient.createWidget("{user_guid}")
    
    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    widget = ::Atrium::Connect.create user_guid: "{user_guid}"
    puts widget.attributes
    

    Example response

    Status: 200 OK
    
    {
      "user": {
        "connect_widget_url": "https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8",
        "guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    
    %{
      "connect_widget_url" => "https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8",
      "guid" => "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    
    &{
      URL:https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8
      Guid:USR-fa7537f3-48aa-a683-a02a-b18940482f54
    }
    
    Connect{
      connect_widget_url='https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8',
      guid='USR-fa7537f3-48aa-a683-a02a-b18940482f54'
    }
    
    { user:
       { connect_widget_url: 'https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8',
         guid: 'USR-fa7537f3-48aa-a683-a02a-b18940482f54' } }
    
    {
      'guid': u'USR-fa7537f3-48aa-a683-a02a-b18940482f54',
      'connect_widget_url': u'https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8'
    }
    
    {
      "connect_widget_url"=>"https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8",
      "guid"=>"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
    }
    

    JavaScript loader for embedding in a website

    Once you've generated a URL, you can pass that information on to a JavaScript loader.

    Options available for the JavaScript loader are as follows:

    Option Data Type Description Required?
    id String The id of the DOM element you'll load the widget into. Yes
    url String A URL for the widget provided as a response to the POST request above. Yes
    onLoad Function An event message that is fired when the widget is loaded. No
    onSuccess Function An event message that is fired upon successfully adding a new member for the user No
    config Object This object allows you to set additional parameters to load the MX Connect widget in a specific state. No
    height String Desired height of the iframe. Defaults to 600 pixels. No
    width String Desired width of the iframe. Defaults to 100% of the parent. No

    Example usage

    <script src="https://atrium.mx.com/connect.js"></script>
    <script>
      var mxConnect = new MXConnect({
        id: 'addAccount',
        url: 'https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8',
        onLoad: function () {
          // Add accounts widget successfully loaded
          console.log('On Load');
        },
        onSuccess: function (memberGuid) {
          // Member created successfully
          console.log('On Success');
        }
      });
    
      var addAccountClick = function () {
        mxConnect.load();
      };
    </script>
    

    Using mobile WebViews for MX Connect

    WebViews come with their own set of technical limitations which make the JavaScript Loader impractical. Instead of passing configuration options through the JavaScript Loader, additional options are available by sending parameters along with your POST request. Full configuration options are listed below.

    Create widget URL

    POST /users/{user_guid}/connect_widget_url

    Example request

    $ curl -i -X POST 'https://vestibule.mx.com/users/{user_guid}/connect_widget_url' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'Content-Type: application/json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
      -d '{
            "is_mobile_webview": true
          }'
    

    Example response

    Status: 200 OK
    
    {
      "user": {
        "connect_widget_url": "https://int-widgets.moneydesktop.com/md/connect/jb1rA14m85tw2lyvpgfx4gc6d3Z8z8Ayb8/ewoJImNsaWVudF9jb25maWciOiB7CiAgICAgICJpc19tb2JpbGVfd2VidmlldyI6IHRydWUKICAgIH0KfQ",
        "guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
      }
    }
    

    Mobile WebViews event messages

    Once you've handed off the connect_widget_url to your WebView, we provide a simple URL updating mechanism to replace the event messages available to the JavaScipt loader. You should be able to capture these URLs and do any necessary logic in your application. Notice the member_guid included in the URL.

    Available URLs

    {
      "onLoad": "atrium://mxConnectLoaded",
      "onSuccess": "atrium://memberAdded/member_guid"
    }
    

    Example Java URL capture

    public class MainActivity extends AppCompatActivity {
        private WebView webView = null;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
          webView = (WebView) findViewById(R.id.webview);
          webView.setWebViewClient(new AtriumWebViewClient());
          webView.getSettings().setDomStorageEnabled(true);
          webView.getSettings().setJavaScriptEnabled(true);
        }
        private class AtriumWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url.equals("atrium://mxConnectLoaded")) {
                    //Take action here.
                    return true;
                } else if (url.startsWith("atrium://memberAdded")) {
                    //Grab member guid and take action here.
                    return true;
                }
                return false;
            }
        }
    }
    

    Example Swift URL capture

    class ViewController: UIViewController, UIWebViewDelegate {
      override func viewDidLoad() {
          super.viewDidLoad()
          webView.delegate = self
          ...
      }
      func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
          let surl = request.url?.absoluteString
          if  surl ==  "atrium://mxConnectLoaded" {
            print("Widget Loaded")
            //Take action here.
            return false
          } else if surl?.range(of:"atrium://memberAdded") != nil {
            print("Member Added")
            //Grab member guid and take action here.
            return false
          }
          return true
      }
    }
    

    Configuration Options

    Both the JavaScript config option and the WebView POST data accept the following options.

    Option Required Data Type Description
    is_mobile_webview no boolean Executes URL updates in place of the JavaScript event messages
    current_institution_code no string Load the widget with desired institution credential view by the institutions code
    current_member_guid no string Load to a specific member that contains an error or requires MFA from the most recent job. Members with no errors will return to search. current_member_guid takes precedence over current_institution_code
    update_credentials no boolean Used in conjuction with current_member_guid to load into a state to update the provided members credentials

    Identity

    Atrium Identity allows you to access data such as the name, street address, phone number, and email address for all the accounts associated with a particular member. The process for getting an account owner's identity is much like standard aggregation. For more detailed information on the process, see the identity guide.

    Identity information may sometimes be returned through normal aggregation. You can check whether this information is already available by calling the account owners endpoint. When such information is not returned, the identify endpoint may be used to gather this information on certain institutions, and then accessed with another call to the account owners endpoint.

    Only certain institutions support identity. Use the list institutions endpoint to get a list of such institutions.

    Endpoint Method Description
    /users/{user_guid}/members/{member_guid}/account_owners GET Returns the account_owners resource, which is an array containing data about the owner of each account belonging to a member.
    /users/{user_guid}/members/{member_guid}/identify POST Begins the process of identification; works much like the aggregate member endpoint.

    Account owners

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

    Example request:

    ::Atrium.configure do |config|
      config.mx_client_id = "YOUR_MX_CLIENT_ID"
      config.mx_api_key = "YOUR_MX_API_KEY"
    end
    
    member = ::Atrium::Member.read user_guid: "{user_guid}", member_guid: "{member_guid}"
    account_owners = member.account_owners
    account_owners.each do |account_owner|
      puts account_owner.attributes
    end
    
    $ curl -i -X GET 'https://vestibule.mx.com/users/{user_guid}/members/{member_guid}/account_owners' \
      -H 'Accept: application/vnd.mx.atrium.v1+json' \
      -H 'MX-API-Key: {mx_api_key}' \
      -H 'MX-Client-ID: {mx_client_id}'
    

    Example response:

    Status: 200 OK
    
    {
      "account_owners":[
        {
          "guid": "ACO-123",
          "user_guid": "USR-123",
          "member_guid": "MBR-123",
          "account_guid": "ACT-123",
          "owner_name": "Donnie Darko",
          "address": "123 This Way",
          "city": "Middlesex",
          "state": "VA",
          "postal_code": "00000-0000",
          "country": "US",
          "email": "donnie@darko.co",
          "phone": "555-555-5555"
        }
      ]
    }
    

    Use this endpoint to check whether identity data is available for a specific member. It returns the account_owners resource, which contains an array with data about each account associated with the member.

    Field Data Type Description
    account_guid String The unique identifier for the account associated with the account owner. Defined by MX.
    address String The account owner's street address.
    city String The account owner's city.
    county String The account owner's county.
    email String The account owner's email address.
    member_guid String The unique identifier for the member associated with the account owner. Defined by MX.
    name String The account owner's name.
    phone String The account owner's phone number.
    postal_code String The the account owner's postal code.
    state String The account owner's state.
    user_guid String The unique identifier for the user associated with the account owner. Defined by MX.

    Identify

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

    Example request:

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

    Example response:

    Status: 200 OK
    
    {
        "member": {
            "aggregated_at": "2018-06-25T20:04:19Z",
            "connection_status": "CONNECTED",
            "identifier": "chase_ds",
            "status": "INITIATED",
            "successfully_aggregated_at": "2018-06-25T19:45:01Z",
            "guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
            "institution_code": "6930ee63-16b3-fc5e-ab48-18bbc39379d0",
            "is_being_aggregated": true,
            "metadata": null,
            "name": "chase ds",
            "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54"
        }
    }
    

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

    Verification

    Account verification allows you to access account and routing numbers for accounts associated with a particular member. The process for account verification is much like standard aggregation. For more detailed information on the process, see the account verification guide.

    Verification information may be returned through normal aggregation. You may check whether this information is already available by calling the account numbers endpoint. When such information is not returned, the verify endpoint may be used to gather this information on certain institutions, and then accessed with another call to the account numbers endpoint.

    Only certain institutions support account verification. Use the list institutions