curl --request POST \
--url https://int-api.mx.com/users/{user_guid}/micro_deposits \
--header 'Accept-Version: <accept-version>' \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"micro_deposit": {
"account_name": "My test account",
"account_number": "3331261",
"account_type": "CHECKING",
"email": "example@example.com",
"first_name": "Josh",
"last_name": "Grobanne",
"routing_number": 91000019
}
}
'import requests
url = "https://int-api.mx.com/users/{user_guid}/micro_deposits"
payload = { "micro_deposit": {
"account_name": "My test account",
"account_number": "3331261",
"account_type": "CHECKING",
"email": "example@example.com",
"first_name": "Josh",
"last_name": "Grobanne",
"routing_number": 91000019
} }
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({
micro_deposit: {
account_name: 'My test account',
account_number: '3331261',
account_type: 'CHECKING',
email: 'example@example.com',
first_name: 'Josh',
last_name: 'Grobanne',
routing_number: 91000019
}
})
};
fetch('https://int-api.mx.com/users/{user_guid}/micro_deposits', 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}/micro_deposits",
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([
'micro_deposit' => [
'account_name' => 'My test account',
'account_number' => '3331261',
'account_type' => 'CHECKING',
'email' => 'example@example.com',
'first_name' => 'Josh',
'last_name' => 'Grobanne',
'routing_number' => 91000019
]
]),
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}/micro_deposits"
payload := strings.NewReader("{\n \"micro_deposit\": {\n \"account_name\": \"My test account\",\n \"account_number\": \"3331261\",\n \"account_type\": \"CHECKING\",\n \"email\": \"example@example.com\",\n \"first_name\": \"Josh\",\n \"last_name\": \"Grobanne\",\n \"routing_number\": 91000019\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}/micro_deposits")
.header("Accept-Version", "<accept-version>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"micro_deposit\": {\n \"account_name\": \"My test account\",\n \"account_number\": \"3331261\",\n \"account_type\": \"CHECKING\",\n \"email\": \"example@example.com\",\n \"first_name\": \"Josh\",\n \"last_name\": \"Grobanne\",\n \"routing_number\": 91000019\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://int-api.mx.com/users/{user_guid}/micro_deposits")
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 \"micro_deposit\": {\n \"account_name\": \"My test account\",\n \"account_number\": \"3331261\",\n \"account_type\": \"CHECKING\",\n \"email\": \"example@example.com\",\n \"first_name\": \"Josh\",\n \"last_name\": \"Grobanne\",\n \"routing_number\": 91000019\n }\n}"
response = http.request(request)
puts response.read_body{
"micro_deposit": [
{
"account_number": "3331261",
"account_type": "CHECKING",
"routing_number": "091000019",
"account_name": "My test account",
"email": "example@example.com",
"first_name": "Josh",
"last_name": "Grobanne",
"error_message": null,
"guid": "MIC-09ba578e-8448-4f7f-89e1-b62ff2517edb",
"institution_code": "mxbank",
"institution_name": "MX Bank",
"status": "INITIATED",
"updated_at": "2025-02-13T18:09:00+00:00",
"verified_at": null
}
]
}Create or pre-initiate a microdeposit
Use this endpoint to create or pre-initiate a microdeposit. The response will include the new microdeposit record with a status of INITIATED or PREINITIATED respectively.
To pre-initiate a microdeposit, you only need to set email (string), first_name (string), and last_name (string) in the request body.
Pre-initiating a microdeposit allows you to pass the end user’s first name, last name, and email if this data has already been collected. If the end user selects an institution which requires the microdeposit flow, the pre-initiated micro_deposit will be used and the Connect Widget step that normally requests this info from the end user will be skipped. However, if the end user selects an institution which supports IAV, the pre-initiated micro_deposit will be deleted and IAV will be used instead. When requesting a Connect Widget URL after pre-initiating, make sure to set the current_microdeposit_guid to the resulting microdeposit’s guid and set data_request.products to include account_verification. If you use this enhanced flow, a micro_deposit should be pre-initiated for all connect sessions in verification mode. After pre-initiating a microdeposit, pass the GUID to the config as current_microdeposit_guid and set data_request.products to include account_verification when requesting a Connect URL. Pre-initiating a microdeposit is optional. If you choose to implement this flow, it should be used for all Connect Widget sessions in verification mode.
curl --request POST \
--url https://int-api.mx.com/users/{user_guid}/micro_deposits \
--header 'Accept-Version: <accept-version>' \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"micro_deposit": {
"account_name": "My test account",
"account_number": "3331261",
"account_type": "CHECKING",
"email": "example@example.com",
"first_name": "Josh",
"last_name": "Grobanne",
"routing_number": 91000019
}
}
'import requests
url = "https://int-api.mx.com/users/{user_guid}/micro_deposits"
payload = { "micro_deposit": {
"account_name": "My test account",
"account_number": "3331261",
"account_type": "CHECKING",
"email": "example@example.com",
"first_name": "Josh",
"last_name": "Grobanne",
"routing_number": 91000019
} }
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({
micro_deposit: {
account_name: 'My test account',
account_number: '3331261',
account_type: 'CHECKING',
email: 'example@example.com',
first_name: 'Josh',
last_name: 'Grobanne',
routing_number: 91000019
}
})
};
fetch('https://int-api.mx.com/users/{user_guid}/micro_deposits', 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}/micro_deposits",
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([
'micro_deposit' => [
'account_name' => 'My test account',
'account_number' => '3331261',
'account_type' => 'CHECKING',
'email' => 'example@example.com',
'first_name' => 'Josh',
'last_name' => 'Grobanne',
'routing_number' => 91000019
]
]),
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}/micro_deposits"
payload := strings.NewReader("{\n \"micro_deposit\": {\n \"account_name\": \"My test account\",\n \"account_number\": \"3331261\",\n \"account_type\": \"CHECKING\",\n \"email\": \"example@example.com\",\n \"first_name\": \"Josh\",\n \"last_name\": \"Grobanne\",\n \"routing_number\": 91000019\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}/micro_deposits")
.header("Accept-Version", "<accept-version>")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"micro_deposit\": {\n \"account_name\": \"My test account\",\n \"account_number\": \"3331261\",\n \"account_type\": \"CHECKING\",\n \"email\": \"example@example.com\",\n \"first_name\": \"Josh\",\n \"last_name\": \"Grobanne\",\n \"routing_number\": 91000019\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://int-api.mx.com/users/{user_guid}/micro_deposits")
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 \"micro_deposit\": {\n \"account_name\": \"My test account\",\n \"account_number\": \"3331261\",\n \"account_type\": \"CHECKING\",\n \"email\": \"example@example.com\",\n \"first_name\": \"Josh\",\n \"last_name\": \"Grobanne\",\n \"routing_number\": 91000019\n }\n}"
response = http.request(request)
puts response.read_body{
"micro_deposit": [
{
"account_number": "3331261",
"account_type": "CHECKING",
"routing_number": "091000019",
"account_name": "My test account",
"email": "example@example.com",
"first_name": "Josh",
"last_name": "Grobanne",
"error_message": null,
"guid": "MIC-09ba578e-8448-4f7f-89e1-b62ff2517edb",
"institution_code": "mxbank",
"institution_name": "MX Bank",
"status": "INITIATED",
"updated_at": "2025-02-13T18:09:00+00:00",
"verified_at": null
}
]
}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
The unique identifier for a user, beginning with the prefix USR-.
Body
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.
ANY, CASH, CHECKING, CHECKING_LINE_OF_CREDIT, CREDIT_CARD, LOAN, LINE_OF_CREDIT, SAVINGS, INVESTMENT, MORTGAGE, INSURANCE, PREPAID, PROPERTY "CHECKING"
The routing number for the account.
"091000019"
The human-readable name for the account.
"My test account"
The email address associated with the account.
"example@example.com"
The account owner's first name. This may also include a middle name. This field returns null if the first name can't be derived from the entity (such as a business or trust) or if name splitting isn't enabled. To enable name splitting, contact MX.
"Josh"
The account owner's last name. This field returns null if the last name can't be derived from the entity (such as a business or trust) or if name splitting isn't enabled. To enable name splitting, contact MX.
"Grobanne"
Response
OK
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.
ANY, CASH, CHECKING, CHECKING_LINE_OF_CREDIT, CREDIT_CARD, LOAN, LINE_OF_CREDIT, SAVINGS, INVESTMENT, MORTGAGE, INSURANCE, PREPAID, PROPERTY "CHECKING"
The routing number for the account.
"091000019"
The human-readable name for the account.
"My test account"
The email address associated with the account.
"example@example.com"
The account owner's first name. This may also include a middle name. This field returns null if the first name can't be derived from the entity (such as a business or trust) or if name splitting isn't enabled. To enable name splitting, contact MX.
"Josh"
The account owner's last name. This field returns null if the last name can't be derived from the entity (such as a business or trust) or if name splitting isn't enabled. To enable name splitting, contact MX.
"Grobanne"
A message describing an error that occurred.
null
The unique identifier for the microdeposit. Defined by MX.
"MIC-09ba578e-8448-4f7f-89e1-b62ff2517edb"
The code identifying a financial institution.
"mxbank"
An easy-to-read name for an institution. May be null for institutions that are not in the MX system.
"MX Bank"
The name of the current status. See Microdeposit Statuses.
"INITIATED"
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 date and time at which the microdeposit status changed from DEPOSITED to VERIFIED.
null

