curl --request POST \
--url https://int-api.mx.com/users/{user_identifier}/accounts \
--header 'Accept-Version: <accept-version>' \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"account": {
"account_subtype": "PERSONAL",
"account_type": "CHECKING",
"apy": 2.35,
"available_balance": 1000,
"balance": 1000,
"currency_code": "USD",
"interest_rate": 3.25,
"is_business": false,
"is_closed": false,
"is_hidden": false,
"metadata": "some metadata",
"name": "Test account 2",
"nickname": "Swiss Account",
"skip_webhook": true
}
}
'import requests
url = "https://int-api.mx.com/users/{user_identifier}/accounts"
payload = { "account": {
"account_subtype": "PERSONAL",
"account_type": "CHECKING",
"apy": 2.35,
"available_balance": 1000,
"balance": 1000,
"currency_code": "USD",
"interest_rate": 3.25,
"is_business": False,
"is_closed": False,
"is_hidden": False,
"metadata": "some metadata",
"name": "Test account 2",
"nickname": "Swiss Account",
"skip_webhook": True
} }
headers = {
"Accept-Version": "<accept-version>",
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Accept-Version': '<accept-version>',
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
account: {
account_subtype: 'PERSONAL',
account_type: 'CHECKING',
apy: 2.35,
available_balance: 1000,
balance: 1000,
currency_code: 'USD',
interest_rate: 3.25,
is_business: false,
is_closed: false,
is_hidden: false,
metadata: 'some metadata',
name: 'Test account 2',
nickname: 'Swiss Account',
skip_webhook: true
}
})
};
fetch('https://int-api.mx.com/users/{user_identifier}/accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://int-api.mx.com/users/{user_identifier}/accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'account' => [
'account_subtype' => 'PERSONAL',
'account_type' => 'CHECKING',
'apy' => 2.35,
'available_balance' => 1000,
'balance' => 1000,
'currency_code' => 'USD',
'interest_rate' => 3.25,
'is_business' => false,
'is_closed' => false,
'is_hidden' => false,
'metadata' => 'some metadata',
'name' => 'Test account 2',
'nickname' => 'Swiss Account',
'skip_webhook' => true
]
]),
CURLOPT_HTTPHEADER => [
"Accept-Version: <accept-version>",
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://int-api.mx.com/users/{user_identifier}/accounts"
payload := strings.NewReader("{\n \"account\": {\n \"account_subtype\": \"PERSONAL\",\n \"account_type\": \"CHECKING\",\n \"apy\": 2.35,\n \"available_balance\": 1000,\n \"balance\": 1000,\n \"currency_code\": \"USD\",\n \"interest_rate\": 3.25,\n \"is_business\": false,\n \"is_closed\": false,\n \"is_hidden\": false,\n \"metadata\": \"some metadata\",\n \"name\": \"Test account 2\",\n \"nickname\": \"Swiss Account\",\n \"skip_webhook\": true\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Accept-Version", "<accept-version>")
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://int-api.mx.com/users/{user_identifier}/accounts")
.header("Accept-Version", "<accept-version>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"account\": {\n \"account_subtype\": \"PERSONAL\",\n \"account_type\": \"CHECKING\",\n \"apy\": 2.35,\n \"available_balance\": 1000,\n \"balance\": 1000,\n \"currency_code\": \"USD\",\n \"interest_rate\": 3.25,\n \"is_business\": false,\n \"is_closed\": false,\n \"is_hidden\": false,\n \"metadata\": \"some metadata\",\n \"name\": \"Test account 2\",\n \"nickname\": \"Swiss Account\",\n \"skip_webhook\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://int-api.mx.com/users/{user_identifier}/accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Accept-Version"] = '<accept-version>'
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account\": {\n \"account_subtype\": \"PERSONAL\",\n \"account_type\": \"CHECKING\",\n \"apy\": 2.35,\n \"available_balance\": 1000,\n \"balance\": 1000,\n \"currency_code\": \"USD\",\n \"interest_rate\": 3.25,\n \"is_business\": false,\n \"is_closed\": false,\n \"is_hidden\": false,\n \"metadata\": \"some metadata\",\n \"name\": \"Test account 2\",\n \"nickname\": \"Swiss Account\",\n \"skip_webhook\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"account": {
"account_number_display": "3331261",
"subtype": "CHECKING",
"type": "CHECKING",
"guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"id": "1040434698",
"name": "Test account 2",
"nickname": "Swiss Account",
"self": "/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/accounts/ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"member": {
"guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
"id": "unique_id",
"metadata": "some metadata",
"name": "MX Bank",
"self": "/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members/MBR-7c6f361b-e582-15b6-60c0-358f12466b4b"
},
"user": {
"guid": "USR-11141024-90b3-1bce-cac9-c06ced52ab4c",
"id": "unique_id",
"metadata": "some metadata",
"self": "/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c"
},
"mx_record": {
"created_at": "2025-05-10T18:08:00Z",
"updated_at": "2026-02-12T22:48:21Z"
}
}
}Create manual account
This endpoint can only be used to create manual accounts. Creating a manual account will automatically create it under the Manual Institution member. Since a manual account has no credentials tied to the member, the account will never aggregate or include data from a data feed.
You must use the user guid when setting user_identifier in the path.
curl --request POST \
--url https://int-api.mx.com/users/{user_identifier}/accounts \
--header 'Accept-Version: <accept-version>' \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"account": {
"account_subtype": "PERSONAL",
"account_type": "CHECKING",
"apy": 2.35,
"available_balance": 1000,
"balance": 1000,
"currency_code": "USD",
"interest_rate": 3.25,
"is_business": false,
"is_closed": false,
"is_hidden": false,
"metadata": "some metadata",
"name": "Test account 2",
"nickname": "Swiss Account",
"skip_webhook": true
}
}
'import requests
url = "https://int-api.mx.com/users/{user_identifier}/accounts"
payload = { "account": {
"account_subtype": "PERSONAL",
"account_type": "CHECKING",
"apy": 2.35,
"available_balance": 1000,
"balance": 1000,
"currency_code": "USD",
"interest_rate": 3.25,
"is_business": False,
"is_closed": False,
"is_hidden": False,
"metadata": "some metadata",
"name": "Test account 2",
"nickname": "Swiss Account",
"skip_webhook": True
} }
headers = {
"Accept-Version": "<accept-version>",
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Accept-Version': '<accept-version>',
Authorization: 'Basic <encoded-value>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
account: {
account_subtype: 'PERSONAL',
account_type: 'CHECKING',
apy: 2.35,
available_balance: 1000,
balance: 1000,
currency_code: 'USD',
interest_rate: 3.25,
is_business: false,
is_closed: false,
is_hidden: false,
metadata: 'some metadata',
name: 'Test account 2',
nickname: 'Swiss Account',
skip_webhook: true
}
})
};
fetch('https://int-api.mx.com/users/{user_identifier}/accounts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://int-api.mx.com/users/{user_identifier}/accounts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'account' => [
'account_subtype' => 'PERSONAL',
'account_type' => 'CHECKING',
'apy' => 2.35,
'available_balance' => 1000,
'balance' => 1000,
'currency_code' => 'USD',
'interest_rate' => 3.25,
'is_business' => false,
'is_closed' => false,
'is_hidden' => false,
'metadata' => 'some metadata',
'name' => 'Test account 2',
'nickname' => 'Swiss Account',
'skip_webhook' => true
]
]),
CURLOPT_HTTPHEADER => [
"Accept-Version: <accept-version>",
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://int-api.mx.com/users/{user_identifier}/accounts"
payload := strings.NewReader("{\n \"account\": {\n \"account_subtype\": \"PERSONAL\",\n \"account_type\": \"CHECKING\",\n \"apy\": 2.35,\n \"available_balance\": 1000,\n \"balance\": 1000,\n \"currency_code\": \"USD\",\n \"interest_rate\": 3.25,\n \"is_business\": false,\n \"is_closed\": false,\n \"is_hidden\": false,\n \"metadata\": \"some metadata\",\n \"name\": \"Test account 2\",\n \"nickname\": \"Swiss Account\",\n \"skip_webhook\": true\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Accept-Version", "<accept-version>")
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://int-api.mx.com/users/{user_identifier}/accounts")
.header("Accept-Version", "<accept-version>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"account\": {\n \"account_subtype\": \"PERSONAL\",\n \"account_type\": \"CHECKING\",\n \"apy\": 2.35,\n \"available_balance\": 1000,\n \"balance\": 1000,\n \"currency_code\": \"USD\",\n \"interest_rate\": 3.25,\n \"is_business\": false,\n \"is_closed\": false,\n \"is_hidden\": false,\n \"metadata\": \"some metadata\",\n \"name\": \"Test account 2\",\n \"nickname\": \"Swiss Account\",\n \"skip_webhook\": true\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://int-api.mx.com/users/{user_identifier}/accounts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Accept-Version"] = '<accept-version>'
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"account\": {\n \"account_subtype\": \"PERSONAL\",\n \"account_type\": \"CHECKING\",\n \"apy\": 2.35,\n \"available_balance\": 1000,\n \"balance\": 1000,\n \"currency_code\": \"USD\",\n \"interest_rate\": 3.25,\n \"is_business\": false,\n \"is_closed\": false,\n \"is_hidden\": false,\n \"metadata\": \"some metadata\",\n \"name\": \"Test account 2\",\n \"nickname\": \"Swiss Account\",\n \"skip_webhook\": true\n }\n}"
response = http.request(request)
puts response.read_body{
"account": {
"account_number_display": "3331261",
"subtype": "CHECKING",
"type": "CHECKING",
"guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"id": "1040434698",
"name": "Test account 2",
"nickname": "Swiss Account",
"self": "/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/accounts/ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"member": {
"guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
"id": "unique_id",
"metadata": "some metadata",
"name": "MX Bank",
"self": "/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members/MBR-7c6f361b-e582-15b6-60c0-358f12466b4b"
},
"user": {
"guid": "USR-11141024-90b3-1bce-cac9-c06ced52ab4c",
"id": "unique_id",
"metadata": "some metadata",
"self": "/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c"
},
"mx_record": {
"created_at": "2025-05-10T18:08:00Z",
"updated_at": "2026-02-12T22:48:21Z"
}
}
}Authorizations
To authenticate with the Platform API, include your Base64-encoded client_id and api_key in the Authorization header of every request:
-H 'Authorization: Basic BASE_64_ENCODING_OF{client_id:api_key}'
Headers
MX Platform API version.
"v20260929"
Path Parameters
Use either the user id you defined or the MX-defined user guid. See Assigning Resource IDs.
Body
Manual account object to be created.
Hide child attributes
Hide child attributes
The type of account. Some account types may include subtypes. For a full list of account types and subtypes, see Account Types.
ANY, CASH, CHECKING, CHECKING_LINE_OF_CREDIT, CREDIT_CARD, LOAN, LINE_OF_CREDIT, SAVINGS, INVESTMENT, MORTGAGE, INSURANCE, PREPAID, PROPERTY "CHECKING"
The human-readable name for the account.
"Test account 2"
The annual percentage rate associated with the account.
1
The annual percentage yield associated with the account.
2.35
The balance that is available for use in asset accounts like checking and savings.
PENDING transactions are typically (not always) taken into account with the available balance.
available_balance will usually be a positive value for all account types, determined in the same way as the balance field.
1000
The current balance of the account.
PENDING transactions are typically not taken into account with the current balance, but this may not always be the case.
The balance will usually be a positive value for all account types. Asset-type accounts (CHECKING, SAVINGS, INVESTMENT) may have a negative balance if they are in overdraft.
Debt-type accounts (CREDIT_CARD, LOAN, LINE_OF_CREDIT, MORTGAGE) may have a negative balance if they are overpaid.
1000
The sum of money paid to the policyholder or annuity holder in the event the policy is voluntarily terminated before it matures, or the insured event occurs.
1000
The credit limit associated with the account.
100
The three-character ISO 4217 currency code, for example, USD.
"USD"
The amount paid to the beneficiary of the account upon death of the account owner.
1000
The interest rate associated with the account.
3.25
Indicates whether the account is a business account.
false
Indicates whether an account has been closed. Closed accounts will no longer update balance or transaction information.
false
Indicates whether the account is hidden. Hidden accounts can still have an active balance and receive transactions. Defaults to false.
false
The amount of the loan associated with the account.
1000
Additional information you can store about the account.
"some metadata"
An alternate name for the account.
"Swiss Account"
The original balance associated with the account. This will always be positive.
10
Subtype if the account type is PROPERTY. This field should be ignored unless the type is set to PROPERTY. For a full list of property types, see Account Types.
APPLIANCES, ART, COMPUTER, ELECTRONICS, FURNITURE, JEWELRY, MISCELLANEOUS, REAL_ESTATE, SPORTS_EQUIPMENT, VEHICLE "VEHICLE"
If set to true, prevents sending an account webhook for the update if that webhook type is enabled for you.
true
Response
OK
The base fields for an account. Returned as the account companion on related resources such as transactions, statements, and rewards, and as the foundation of full account responses.
Hide child attributes
Hide child attributes
The account number associated with the account. This will typically be a masked or partial account number.
"3331261"
The type of account. Some account types may include subtypes. For a full list of account types and subtypes, see Account Types.
ANY, CASH, CHECKING, CHECKING_LINE_OF_CREDIT, CREDIT_CARD, LOAN, LINE_OF_CREDIT, SAVINGS, INVESTMENT, MORTGAGE, INSURANCE, PREPAID, PROPERTY "CHECKING"
Unique identifier for the account. Defined by MX.
"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1"
The unique partner-defined identifier for the account.
"1040434698"
The human-readable name for the account.
"Test account 2"
An alternate name for the account.
"Swiss Account"
The API URI path for the account.
"/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/accounts/ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1"
The base fields for a member, which is a user's connection to an institution. Returned as the member companion on related resources such as accounts and transactions, and as the foundation of full member responses.
Hide child attributes
Hide child attributes
The unique identifier for the member. Defined by MX.
"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b"
The unique partner-defined identifier for the member.
"unique_id"
Additional information you can store about the member.
"some metadata"
The name of the member.
"MX Bank"
The API URI path for the member.
"/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c/members/MBR-7c6f361b-e582-15b6-60c0-358f12466b4b"
The base fields for a user. Returned as the user companion on related resources such as members, accounts, and transactions, and as the foundation of full user responses.
Hide child attributes
Hide child attributes
The unique identifier for the user. Defined by MX.
"USR-11141024-90b3-1bce-cac9-c06ced52ab4c"
The unique partner-defined identifier for the user.
"unique_id"
Additional information you can store about the user.
"some metadata"
The API URI path for the user.
"/users/USR-11141024-90b3-1bce-cac9-c06ced52ab4c"
Timestamps for when MX created and last updated the record. Returned as the mx_record companion on all resources persisted by MX. These describe the MX record, not the underlying resource at the institution.
Hide child attributes
Hide child attributes
The date and time the resource was created in MX Platform, represented in ISO 8601 format with a timestamp.
"2025-05-10T18:08:00Z"
The date and time the resource was last updated in MX Platform, represented in ISO 8601 format with a timestamp.
For categories, this field will always be null when is_default is true.
"2026-02-12T22:48:21Z"

