curl --request POST \
--url https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split \
--header 'Accept-Version: <accept-version>' \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"transactions": {
"amount": 61.11,
"description": "Chevron Gas",
"category_guid": "CAT-b6d61a19-30a7-e852-2703-bdfb4072289e",
"memo": "Chips and Soda"
}
}
'import requests
url = "https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split"
payload = { "transactions": {
"amount": 61.11,
"description": "Chevron Gas",
"category_guid": "CAT-b6d61a19-30a7-e852-2703-bdfb4072289e",
"memo": "Chips and Soda"
} }
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({
transactions: {
amount: 61.11,
description: 'Chevron Gas',
category_guid: 'CAT-b6d61a19-30a7-e852-2703-bdfb4072289e',
memo: 'Chips and Soda'
}
})
};
fetch('https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split', 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_guid}/transactions/{transaction_guid}/split",
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([
'transactions' => [
'amount' => 61.11,
'description' => 'Chevron Gas',
'category_guid' => 'CAT-b6d61a19-30a7-e852-2703-bdfb4072289e',
'memo' => 'Chips and Soda'
]
]),
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_guid}/transactions/{transaction_guid}/split"
payload := strings.NewReader("{\n \"transactions\": {\n \"amount\": 61.11,\n \"description\": \"Chevron Gas\",\n \"category_guid\": \"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e\",\n \"memo\": \"Chips and Soda\"\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_guid}/transactions/{transaction_guid}/split")
.header("Accept-Version", "<accept-version>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"transactions\": {\n \"amount\": 61.11,\n \"description\": \"Chevron Gas\",\n \"category_guid\": \"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e\",\n \"memo\": \"Chips and Soda\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split")
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 \"transactions\": {\n \"amount\": 61.11,\n \"description\": \"Chevron Gas\",\n \"category_guid\": \"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e\",\n \"memo\": \"Chips and Soda\"\n }\n}"
response = http.request(request)
puts response.read_body{
"transactions": [
{
"account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"account_id": "account123",
"amount": 61.11,
"category": "Paycheck",
"category_guid": "CAT-b6d61a19-30a7-e852-2703-bdfb4072289e",
"check_number_string": null,
"created_at": "2025-02-13T18:08:00+00:00",
"currency_code": "USD",
"date": "2024-12-20",
"description": "MX Technologies Payroll",
"extended_transaction_type": null,
"guid": "TRN-429ad9fe-a1d2-4559-8590-885b2603f0e1",
"id": "1734681600000-178fa8095c154a55b9172f977b4c5f9a-0",
"is_bill_pay": false,
"is_direct_deposit": false,
"is_expense": false,
"is_fee": false,
"is_income": true,
"is_international": false,
"is_manual": false,
"is_overdraft_fee": false,
"is_payroll_advance": false,
"is_recurring": null,
"is_subscription": false,
"latitude": null,
"localized_description": "This is a localized_description",
"localized_memo": "This is a localized_memo",
"longitude": null,
"member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
"member_is_managed_by_user": true,
"memo": "Transactions",
"merchant_category_code": null,
"merchant_guid": "MCH-8cc3b01a-1c52-47d4-970d-30f8ee5566f1",
"merchant_location_guid": null,
"metadata": "some metadata",
"original_description": "MX TECHNOLOGIES PAYMENT",
"posted_at": "2024-12-20T12:00:00Z",
"status": "POSTED",
"top_level_category": "Income",
"transacted_at": "2024-12-20T12:00:00Z",
"type": "CREDIT",
"updated_at": "2025-02-13T18:09:00+00:00",
"user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
"user_id": "u-1234"
}
]
}Create split transactions
curl --request POST \
--url https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split \
--header 'Accept-Version: <accept-version>' \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"transactions": {
"amount": 61.11,
"description": "Chevron Gas",
"category_guid": "CAT-b6d61a19-30a7-e852-2703-bdfb4072289e",
"memo": "Chips and Soda"
}
}
'import requests
url = "https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split"
payload = { "transactions": {
"amount": 61.11,
"description": "Chevron Gas",
"category_guid": "CAT-b6d61a19-30a7-e852-2703-bdfb4072289e",
"memo": "Chips and Soda"
} }
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({
transactions: {
amount: 61.11,
description: 'Chevron Gas',
category_guid: 'CAT-b6d61a19-30a7-e852-2703-bdfb4072289e',
memo: 'Chips and Soda'
}
})
};
fetch('https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split', 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_guid}/transactions/{transaction_guid}/split",
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([
'transactions' => [
'amount' => 61.11,
'description' => 'Chevron Gas',
'category_guid' => 'CAT-b6d61a19-30a7-e852-2703-bdfb4072289e',
'memo' => 'Chips and Soda'
]
]),
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_guid}/transactions/{transaction_guid}/split"
payload := strings.NewReader("{\n \"transactions\": {\n \"amount\": 61.11,\n \"description\": \"Chevron Gas\",\n \"category_guid\": \"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e\",\n \"memo\": \"Chips and Soda\"\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_guid}/transactions/{transaction_guid}/split")
.header("Accept-Version", "<accept-version>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"transactions\": {\n \"amount\": 61.11,\n \"description\": \"Chevron Gas\",\n \"category_guid\": \"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e\",\n \"memo\": \"Chips and Soda\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://int-api.mx.com/users/{user_guid}/transactions/{transaction_guid}/split")
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 \"transactions\": {\n \"amount\": 61.11,\n \"description\": \"Chevron Gas\",\n \"category_guid\": \"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e\",\n \"memo\": \"Chips and Soda\"\n }\n}"
response = http.request(request)
puts response.read_body{
"transactions": [
{
"account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
"account_id": "account123",
"amount": 61.11,
"category": "Paycheck",
"category_guid": "CAT-b6d61a19-30a7-e852-2703-bdfb4072289e",
"check_number_string": null,
"created_at": "2025-02-13T18:08:00+00:00",
"currency_code": "USD",
"date": "2024-12-20",
"description": "MX Technologies Payroll",
"extended_transaction_type": null,
"guid": "TRN-429ad9fe-a1d2-4559-8590-885b2603f0e1",
"id": "1734681600000-178fa8095c154a55b9172f977b4c5f9a-0",
"is_bill_pay": false,
"is_direct_deposit": false,
"is_expense": false,
"is_fee": false,
"is_income": true,
"is_international": false,
"is_manual": false,
"is_overdraft_fee": false,
"is_payroll_advance": false,
"is_recurring": null,
"is_subscription": false,
"latitude": null,
"localized_description": "This is a localized_description",
"localized_memo": "This is a localized_memo",
"longitude": null,
"member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
"member_is_managed_by_user": true,
"memo": "Transactions",
"merchant_category_code": null,
"merchant_guid": "MCH-8cc3b01a-1c52-47d4-970d-30f8ee5566f1",
"merchant_location_guid": null,
"metadata": "some metadata",
"original_description": "MX TECHNOLOGIES PAYMENT",
"posted_at": "2024-12-20T12:00:00Z",
"status": "POSTED",
"top_level_category": "Income",
"transacted_at": "2024-12-20T12:00:00Z",
"type": "CREDIT",
"updated_at": "2025-02-13T18:09:00+00:00",
"user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
"user_id": "u-1234"
}
]
}has_been_split field will automatically be updated to true and the child transactions’ parent_guid will have the transaction guid of the parent. The total amount of the child transactions must equal the amount of the parent transaction. Once a transaction has been split it can’t be split again. In order to re-split a transaction, it must first be un-split. This can be done by calling the Delete Split Transactions endpoint. Calling this endpoint will delete the existing child transactions and update the parent transaction’s has_been_split field to false. You can then re-split the parent transaction by calling Create Split Transaction again.Authorizations
The MX Platform API requires basic access authentication using your client_id and api_key. These credentials must be Base64 encoded and included in the Authorization header of each API request to ensure secure access.
Here's an example using curl to access v20250224. Replace https://int-api.mx.com/endpoint with the actual API endpoint you wish to access and your Base64 encoded client_id and api_key.
curl -L -X POST `https://int-api.mx.com/endpoint' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Accept-Version: v20250224'
-H 'Authorization: Basic BASE_64_ENCODING_OF{client_id:api_key}'Headers
MX Platform API version.
"v20250224"
Path Parameters
The unique id for a transaction.
The unique identifier for a user, beginning with the prefix USR-.
Body
Hide child attributes
Hide child attributes
The amount of money you want to recategorize.
61.11
Description for the split transaction.
"Chevron Gas"
The unique identifier for the category.
"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e"
Memo for the split transaction
"Chips and Soda"
Response
OK
Hide child attributes
Hide child attributes
The unique identifier for an account. Defined by MX.
"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1"
The unique client-defined identifier for the account.
"account123"
The monetary amount of the transaction.
61.11
The category of the transaction.
"Paycheck"
The unique identifier for the category. Defined by MX.
"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e"
The check number for the transaction.
null
The date and time the transaction was created, represented in ISO 8601 format with a timestamp.
"2025-02-13T18:08:00+00:00"
The three-character ISO 4217 currency code, for example, USD.
"USD"
The date on which the transaction took place. This is the field used when searching for transactions by date and is generally the same as transacted_at, but uses posted_at as a fallback.
"2024-12-20"
A human-readable description of the transaction.
"MX Technologies Payroll"
The transaction type assigned by the partner.
null
The unique identifier for the transaction. Defined by MX.
"TRN-429ad9fe-a1d2-4559-8590-885b2603f0e1"
The unique partner-defined identifier for the transaction.
"1734681600000-178fa8095c154a55b9172f977b4c5f9a-0"
Indicates whether the transaction is a bill payment.
false
Indicates whether the transaction is a direct deposit.
false
Indicates whether the transaction is an expense.
false
Indicates whether the transaction is a fee.
false
Indicates whether the transaction is income.
true
Indicates whether the transaction is international. If the data provider determines it isn't international then it will be false. It will be null if the data provider does not have this information.
false
Indicates whether the transaction was manually created or belongs to a manual account.
false
Indicates whether the transaction is an overdraft fee.
false
Indicates whether the transaction is a payroll advance.
false
Deprecated. If required, reach out to MX to discuss an alternative.
null
Indicates whether the transaction is a subscription payment.
false
The latitude of the location where the transaction occurred. The number is a signed decimal (for example, Rio de Janeiro's latitude is -22.9027800 and Tokyo's latitude is 35.689488).
null
A human-readable description of the transaction, provided in a local language.
"This is a localized_description"
Additional descriptive information about the transaction, provided in a local language.
"This is a localized_memo"
The longitude of the location where the transaction occurred. The number is a signed decimal (for example, Rio de Janeiro's longitude is -43.2075000 and Tokyo's longitude is 139.691706).
null
The unique identifier for the member. Defined by MX.
"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b"
This indicates whether the member is managed by the user or the MX partner. Members created with the managed member feature will have this field set to false.
true
Additional information about the transaction.
"Transactions"
The ISO 18245 category code for the transaction.
null
The unique identifier for the merchant. Defined by MX.
"MCH-8cc3b01a-1c52-47d4-970d-30f8ee5566f1"
The unique identifier for the merchant location. Defined by MX.
null
Additional information you stored about the transaction.
"some metadata"
The original description of the transaction as provided by our data feed.
"MX TECHNOLOGIES PAYMENT"
The date and time the transaction was posted to the account.
"2024-12-20T12:00:00Z"
The status of the transaction.
All transaction data on our systems represent what we get through our data feed which depends what institutions make available for aggregation. Many institutions do not provide data for pending transactions; transactions from those accounts always have a status of POSTED.
When we do receive data for pending transactions, a single transaction may be updated from PENDING to POSTED and keep the same guid. This is done through various matching methods performed automatically by MX.
If a single transaction can't be updated, the PENDING transaction will often be deleted and replaced with a new POSTED transaction (with a new guid) when it is sent to us; this is the most common scenario when pending data is available.
In unusual circumstances, there may be separate PENDING and POSTED transactions on MX systems for up to 14 days. All PENDING transactions are deleted after 14 days as a failsafe.
POSTED, PENDING "POSTED"
The parent category assigned to this transaction's category.
"Income"
The date and time the transaction took place.
"2024-12-20T12:00:00Z"
The type of transaction.
CREDIT, DEBIT "CREDIT"
The date and time the resource was last updated in ISO 8601 format with a timestamp.
For categories, this field will always be null when is_default is true.
"2025-02-13T18:09:00+00:00"
The unique identifier for the user. Defined by MX.
"USR-fa7537f3-48aa-a683-a02a-b18940482f54"
The unique partner-defined identifier for the user.
"u-1234"

