Skip to main content
POST
/
users
/
{user_guid}
/
accounts
/
{account_guid}
/
transactions
Create manual transaction
curl --request POST \
  --url https://int-api.mx.com/users/{user_guid}/accounts/{account_guid}/transactions \
  --header 'Accept-Version: <accept-version>' \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --data '{}'
import requests

url = "https://int-api.mx.com/users/{user_guid}/accounts/{account_guid}/transactions"

payload = {}
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({})
};

fetch('https://int-api.mx.com/users/{user_guid}/accounts/{account_guid}/transactions', 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}/accounts/{account_guid}/transactions",
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([

]),
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}/accounts/{account_guid}/transactions"

payload := strings.NewReader("{}")

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}/accounts/{account_guid}/transactions")
.header("Accept-Version", "<accept-version>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://int-api.mx.com/users/{user_guid}/accounts/{account_guid}/transactions")

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 = "{}"

response = http.request(request)
puts response.read_body
{
  "account_guid": "ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1",
  "account_id": "account123",
  "amount": 61.11,
  "category": "Groceries",
  "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": "2016-10-06T00:00:00.000Z",
  "description": "Whole foods",
  "extended_transaction_type": null,
  "guid": "TRN-265abee9-889b-af6a-c69b-25157db2bdd9",
  "id": null,
  "is_bill_pay": false,
  "is_direct_deposit": false,
  "is_expense": true,
  "is_fee": false,
  "is_income": false,
  "is_international": false,
  "is_manual": false,
  "is_overdraft_fee": false,
  "is_payroll_advance": false,
  "is_recurring": null,
  "is_subscription": false,
  "latitude": null,
  "localized_description": null,
  "localized_memo": null,
  "longitude": null,
  "member_guid": "MBR-7c6f361b-e582-15b6-60c0-358f12466b4b",
  "member_is_managed_by_user": true,
  "memo": "This is a memo",
  "merchant_category_code": null,
  "merchant_guid": null,
  "merchant_location_guid": null,
  "metadata": "some metadata",
  "original_description": null,
  "posted_at": null,
  "status": "POSTED",
  "top_level_category": "Food & Dining",
  "transacted_at": null,
  "type": "DEBIT",
  "updated_at": "2025-02-13T18:09:00+00:00",
  "user_guid": "USR-fa7537f3-48aa-a683-a02a-b18940482f54",
  "user_id": "u-1234"
}
This endpoint can only be used to create manual transactions that are under a manual account. This endpoint accepts the optional MX-Skip-Webhook header and skip_webhook parameter.

Authorizations

Authorization
string
header
required

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

Accept-Version
string
default:v20250224
required

MX Platform API version.

Example:

"v20250224"

Path Parameters

user_guid
string
required

The unique identifier for a user, beginning with the prefix USR-.

account_guid
string
required

The unique id for an account.

Body

application/json
transaction
object

Response

200 - application/json

OK

account_guid
string

The unique identifier for an account. Defined by MX.

Example:

"ACT-06d7f44b-caae-0f6e-1384-01f52e75dcb1"

account_id
string | null

The unique client-defined identifier for the account.

Example:

"account123"

amount
number

The monetary amount of the transaction.

Example:

61.11

category
string | null

The category of the transaction.

Example:

"Groceries"

category_guid
string | null

The unique identifier for the category. Defined by MX.

Example:

"CAT-b6d61a19-30a7-e852-2703-bdfb4072289e"

check_number_string
string | null

The check number for the transaction.

Example:

null

created_at
string | null

The date and time the transaction was created, represented in ISO 8601 format with a timestamp.

Example:

"2025-02-13T18:08:00+00:00"

currency_code
string | null

The three-character ISO 4217 currency code, for example, USD.

Example:

"USD"

date
string | null

The date of the transaction.

Example:

"2016-10-06T00:00:00.000Z"

description
string | null

A human-readable version of the original_description field. Provided by MX.

Example:

"Whole foods"

extended_transaction_type
string | null

The transaction type assigned by the partner.

Example:

null

guid
string | null

The unique identifier for the transaction. Defined by MX.

Example:

"TRN-265abee9-889b-af6a-c69b-25157db2bdd9"

id
string | null

The unique partner-defined identifier for the transaction.

Example:

null

is_bill_pay
boolean | null

Indicates whether the transaction is a bill payment.

Example:

false

is_direct_deposit
boolean | null

Indicates whether the transaction is a direct deposit.

Example:

false

is_expense
boolean | null

Indicates whether the transaction is an expense.

Example:

true

is_fee
boolean | null

Indicates whether the transaction is a fee.

Example:

false

is_income
boolean | null

Indicates whether the transaction is income.

Example:

false

is_international
boolean | null

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.

Example:

false

is_manual
boolean | null

Indicates whether the transaction was manually created or belongs to a manual account.

Example:

false

is_overdraft_fee
boolean | null

Indicates whether the transaction is an overdraft fee.

Example:

false

is_payroll_advance
boolean | null

Indicates whether the transaction is a payroll advance.

Example:

false

is_recurring
boolean | null

Deprecated. If required, reach out to MX to discuss an alternative.

Example:

null

is_subscription
boolean | null

Indicates whether the transaction is a subscription payment.

Example:

false

latitude
number | null

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).

Example:

null

localized_description
string | null

A human-readable description of the transaction, provided in a local language.

Example:

null

localized_memo
string | null

Additional descriptive information about the transaction, provided in a local language.

Example:

null

longitude
number | null

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).

Example:

null

member_guid
string | null

The unique identifier for the member. Defined by MX.

Example:

"MBR-7c6f361b-e582-15b6-60c0-358f12466b4b"

member_is_managed_by_user
boolean | null

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.

Example:

true

memo
string | null

A note about the transaction.

Example:

"This is a memo"

merchant_category_code
integer | null

The category code assigned to the merchant. Defined by MX.

Example:

null

merchant_guid
string | null

The unique identifier for the merchant. Defined by MX.

Example:

null

merchant_location_guid
string | null

The unique identifier for the merchant location. Defined by MX.

Example:

null

metadata
string | null

Additional information you stored about the transaction.

Example:

"some metadata"

original_description
string | null

The original description of the transaction as provided by the MX data feed.

Example:

null

posted_at
string | null

The date and time the transaction was posted to the account.

Example:

null

status
enum<string> | null

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.

Available options:
POSTED,
PENDING
Example:

"POSTED"

top_level_category
string | null

The parent category assigned to this transaction's category.

Example:

"Food & Dining"

transacted_at
string | null

The date and time the transaction took place.

Example:

null

type
enum<string>

The type of transaction.

Available options:
CREDIT,
DEBIT
Example:

"DEBIT"

updated_at
string

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.

Example:

"2025-02-13T18:09:00+00:00"

user_guid
string | null

The unique identifier for the user. Defined by MX.

Example:

"USR-fa7537f3-48aa-a683-a02a-b18940482f54"

user_id
string | null

The unique partner-defined identifier for the user.

Example:

"u-1234"