Process — Check by Mail
Disburse funds via Ingo-issued check mailed to the recipient.
curl --request POST \
--url https://payapi-sandbox.ingo.money/gateway/process--check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"participant_id": 12345,
"account_type": "CK",
"amount": 500,
"source_of_funds": 4,
"participant_unique_id1": "35a792a5-39e6-46fa-add1-419a75d3aa9a",
"timestamp": 1597862420,
"version": 11,
"customer_account_token": "6218c726-3989-40ab-af84-fa6f4c932cb6",
"recipient_phone": "5555550100",
"participant_unique_id2": "2d4ebd46-616b-4212-bc54-1f7f68514e1a",
"check_memo_data": "Invoice #12345",
"remittance_memo_data": "Payment for services rendered Q2 2026",
"store_id": "STORE-001",
"clerk_id": "CLK-007",
"terminal_id": "TERM-042",
"ledger": {
"api_key": "lk_live_abc123xyz",
"user_id": "usr_00456",
"entity_type": "business",
"entity_id": "ent_00789"
}
}
'import requests
url = "https://payapi-sandbox.ingo.money/gateway/process--check"
payload = {
"participant_id": 12345,
"account_type": "CK",
"amount": 500,
"source_of_funds": 4,
"participant_unique_id1": "35a792a5-39e6-46fa-add1-419a75d3aa9a",
"timestamp": 1597862420,
"version": 11,
"customer_account_token": "6218c726-3989-40ab-af84-fa6f4c932cb6",
"recipient_phone": "5555550100",
"participant_unique_id2": "2d4ebd46-616b-4212-bc54-1f7f68514e1a",
"check_memo_data": "Invoice #12345",
"remittance_memo_data": "Payment for services rendered Q2 2026",
"store_id": "STORE-001",
"clerk_id": "CLK-007",
"terminal_id": "TERM-042",
"ledger": {
"api_key": "lk_live_abc123xyz",
"user_id": "usr_00456",
"entity_type": "business",
"entity_id": "ent_00789"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
participant_id: 12345,
account_type: 'CK',
amount: 500,
source_of_funds: 4,
participant_unique_id1: '35a792a5-39e6-46fa-add1-419a75d3aa9a',
timestamp: 1597862420,
version: 11,
customer_account_token: '6218c726-3989-40ab-af84-fa6f4c932cb6',
recipient_phone: '5555550100',
participant_unique_id2: '2d4ebd46-616b-4212-bc54-1f7f68514e1a',
check_memo_data: 'Invoice #12345',
remittance_memo_data: 'Payment for services rendered Q2 2026',
store_id: 'STORE-001',
clerk_id: 'CLK-007',
terminal_id: 'TERM-042',
ledger: {
api_key: 'lk_live_abc123xyz',
user_id: 'usr_00456',
entity_type: 'business',
entity_id: 'ent_00789'
}
})
};
fetch('https://payapi-sandbox.ingo.money/gateway/process--check', 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://payapi-sandbox.ingo.money/gateway/process--check",
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([
'participant_id' => 12345,
'account_type' => 'CK',
'amount' => 500,
'source_of_funds' => 4,
'participant_unique_id1' => '35a792a5-39e6-46fa-add1-419a75d3aa9a',
'timestamp' => 1597862420,
'version' => 11,
'customer_account_token' => '6218c726-3989-40ab-af84-fa6f4c932cb6',
'recipient_phone' => '5555550100',
'participant_unique_id2' => '2d4ebd46-616b-4212-bc54-1f7f68514e1a',
'check_memo_data' => 'Invoice #12345',
'remittance_memo_data' => 'Payment for services rendered Q2 2026',
'store_id' => 'STORE-001',
'clerk_id' => 'CLK-007',
'terminal_id' => 'TERM-042',
'ledger' => [
'api_key' => 'lk_live_abc123xyz',
'user_id' => 'usr_00456',
'entity_type' => 'business',
'entity_id' => 'ent_00789'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://payapi-sandbox.ingo.money/gateway/process--check"
payload := strings.NewReader("{\n \"participant_id\": 12345,\n \"account_type\": \"CK\",\n \"amount\": 500,\n \"source_of_funds\": 4,\n \"participant_unique_id1\": \"35a792a5-39e6-46fa-add1-419a75d3aa9a\",\n \"timestamp\": 1597862420,\n \"version\": 11,\n \"customer_account_token\": \"6218c726-3989-40ab-af84-fa6f4c932cb6\",\n \"recipient_phone\": \"5555550100\",\n \"participant_unique_id2\": \"2d4ebd46-616b-4212-bc54-1f7f68514e1a\",\n \"check_memo_data\": \"Invoice #12345\",\n \"remittance_memo_data\": \"Payment for services rendered Q2 2026\",\n \"store_id\": \"STORE-001\",\n \"clerk_id\": \"CLK-007\",\n \"terminal_id\": \"TERM-042\",\n \"ledger\": {\n \"api_key\": \"lk_live_abc123xyz\",\n \"user_id\": \"usr_00456\",\n \"entity_type\": \"business\",\n \"entity_id\": \"ent_00789\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://payapi-sandbox.ingo.money/gateway/process--check")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"participant_id\": 12345,\n \"account_type\": \"CK\",\n \"amount\": 500,\n \"source_of_funds\": 4,\n \"participant_unique_id1\": \"35a792a5-39e6-46fa-add1-419a75d3aa9a\",\n \"timestamp\": 1597862420,\n \"version\": 11,\n \"customer_account_token\": \"6218c726-3989-40ab-af84-fa6f4c932cb6\",\n \"recipient_phone\": \"5555550100\",\n \"participant_unique_id2\": \"2d4ebd46-616b-4212-bc54-1f7f68514e1a\",\n \"check_memo_data\": \"Invoice #12345\",\n \"remittance_memo_data\": \"Payment for services rendered Q2 2026\",\n \"store_id\": \"STORE-001\",\n \"clerk_id\": \"CLK-007\",\n \"terminal_id\": \"TERM-042\",\n \"ledger\": {\n \"api_key\": \"lk_live_abc123xyz\",\n \"user_id\": \"usr_00456\",\n \"entity_type\": \"business\",\n \"entity_id\": \"ent_00789\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://payapi-sandbox.ingo.money/gateway/process--check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"participant_id\": 12345,\n \"account_type\": \"CK\",\n \"amount\": 500,\n \"source_of_funds\": 4,\n \"participant_unique_id1\": \"35a792a5-39e6-46fa-add1-419a75d3aa9a\",\n \"timestamp\": 1597862420,\n \"version\": 11,\n \"customer_account_token\": \"6218c726-3989-40ab-af84-fa6f4c932cb6\",\n \"recipient_phone\": \"5555550100\",\n \"participant_unique_id2\": \"2d4ebd46-616b-4212-bc54-1f7f68514e1a\",\n \"check_memo_data\": \"Invoice #12345\",\n \"remittance_memo_data\": \"Payment for services rendered Q2 2026\",\n \"store_id\": \"STORE-001\",\n \"clerk_id\": \"CLK-007\",\n \"terminal_id\": \"TERM-042\",\n \"ledger\": {\n \"api_key\": \"lk_live_abc123xyz\",\n \"user_id\": \"usr_00456\",\n \"entity_type\": \"business\",\n \"entity_id\": \"ent_00789\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": 100,
"client_message": "Success",
"data": {
"check_number": "100042",
"transaction_id": 2361540,
"customer_account_token": "6218c726-3989-40ab-af84-fa6f4c932cb6",
"estimated_posting_date": "08/29/2020",
"estimated_posting_time": "Payment will post 7-10 Days",
"participant_unique_id1": "35a792a5-39e6-46fa-add1-419a75d3aa9a",
"participant_unique_id2": "2d4ebd46-616b-4212-bc54-1f7f68514e1a",
"request_timestamp": 1597862480
}
}{
"status": 700,
"client_message": "Account not currently available for payment",
"data": {
"request_timestamp": 1597862480
}
}Reissuing a check
Neither Check Stop nor Check Cancel reissues a disbursement. Both are terminal for the original, and no method resends a check. A reissue is always a new disbursement, submitted as a new Process request with a newparticipant_unique_id1.
Take care not to conflate the two identifiers. A Check Stop or Check Cancel request carries the original participant_unique_id1, because that is part of how the check is located. The reissue that follows carries a new one, because it is a new disbursement.
Which method you use to close out the original determines when it is safe to reissue. In both cases the API response is acceptance, and the webhook event is the confirmation — what differs is how the instruction reaches the bank, and therefore how long confirmation takes.
| Method | Sent to the bank | Confirmation | Reissue |
|---|---|---|---|
| Check Stop | Real time, via API | check.stopped — follows promptly | Once confirmed |
| Check Cancel | Batch file | check.canceled — delayed until the batch is processed | Once confirmed, allowing for the delay |
check.stopped or check.canceled is what confirms a check presented for fulfillment will no longer be accepted — the API response alone does not. Reissuing before then risks paying twice, and the exposure is widest with Check Cancel, where confirmation waits on the batch.routed status with reason code 73 (Check Not Printed), where no physical check exists yet. If the check may already be in the recipient’s hands, use Check Stop.check.canceled has not arrived by the end of the next banking day, contact support with the original participant_unique_id1 before reissuing rather than treating the silence either way.Body
Unique participant identifier assigned by Ingo.
12345
Always CK for check by mail disbursements.
CK 1"CK"
Amount of the transaction.
x >= 0.01500
Funding source indicator: 1 = Cash, 2 = Check, 3 = Combo of Cash & Check, 4 = Corp Disbursement.
1, 2, 3, 4 4
Participant assigned transaction ID for the process request. Value must be unique and may not contain NPI data. Used for idempotency — a duplicate value returns an idempotent response without initiating a new push request. Appears on daily reconciliation reports.
1 - 255"35a792a5-39e6-46fa-add1-419a75d3aa9a"
Unix timestamp of the request.
1597862420
API version of the request. Current version is 11.
11
Token representing the account number and customer data as provided in the response from a previous Verify API call.
1 - 255"6218c726-3989-40ab-af84-fa6f4c932cb6"
Recipient phone number.
25"5551234567"
Optional second participant assigned transaction ID. Does not appear on daily reconciliation reports.
255"2d4ebd46-616b-4212-bc54-1f7f68514e1a"
Optional memo line printed on the check. Maximum 30 characters.
30"Invoice #12345"
Optional remittance memo data included with the check mailing. Maximum 193 characters.
193"Payment for services rendered Q2 2026"
Client assigned store ID. Required for Retail client participants.
255"STORE-001"
Client assigned clerk ID. Required for Retail client participants.
255"CLK-007"
Client assigned terminal ID. Required for Retail client participants.
255"TERM-042"
Required for clients configured for ledger service. Exclude entirely if not applicable to your integration.
Show child attributes
Show child attributes
curl --request POST \
--url https://payapi-sandbox.ingo.money/gateway/process--check \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"participant_id": 12345,
"account_type": "CK",
"amount": 500,
"source_of_funds": 4,
"participant_unique_id1": "35a792a5-39e6-46fa-add1-419a75d3aa9a",
"timestamp": 1597862420,
"version": 11,
"customer_account_token": "6218c726-3989-40ab-af84-fa6f4c932cb6",
"recipient_phone": "5555550100",
"participant_unique_id2": "2d4ebd46-616b-4212-bc54-1f7f68514e1a",
"check_memo_data": "Invoice #12345",
"remittance_memo_data": "Payment for services rendered Q2 2026",
"store_id": "STORE-001",
"clerk_id": "CLK-007",
"terminal_id": "TERM-042",
"ledger": {
"api_key": "lk_live_abc123xyz",
"user_id": "usr_00456",
"entity_type": "business",
"entity_id": "ent_00789"
}
}
'import requests
url = "https://payapi-sandbox.ingo.money/gateway/process--check"
payload = {
"participant_id": 12345,
"account_type": "CK",
"amount": 500,
"source_of_funds": 4,
"participant_unique_id1": "35a792a5-39e6-46fa-add1-419a75d3aa9a",
"timestamp": 1597862420,
"version": 11,
"customer_account_token": "6218c726-3989-40ab-af84-fa6f4c932cb6",
"recipient_phone": "5555550100",
"participant_unique_id2": "2d4ebd46-616b-4212-bc54-1f7f68514e1a",
"check_memo_data": "Invoice #12345",
"remittance_memo_data": "Payment for services rendered Q2 2026",
"store_id": "STORE-001",
"clerk_id": "CLK-007",
"terminal_id": "TERM-042",
"ledger": {
"api_key": "lk_live_abc123xyz",
"user_id": "usr_00456",
"entity_type": "business",
"entity_id": "ent_00789"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
participant_id: 12345,
account_type: 'CK',
amount: 500,
source_of_funds: 4,
participant_unique_id1: '35a792a5-39e6-46fa-add1-419a75d3aa9a',
timestamp: 1597862420,
version: 11,
customer_account_token: '6218c726-3989-40ab-af84-fa6f4c932cb6',
recipient_phone: '5555550100',
participant_unique_id2: '2d4ebd46-616b-4212-bc54-1f7f68514e1a',
check_memo_data: 'Invoice #12345',
remittance_memo_data: 'Payment for services rendered Q2 2026',
store_id: 'STORE-001',
clerk_id: 'CLK-007',
terminal_id: 'TERM-042',
ledger: {
api_key: 'lk_live_abc123xyz',
user_id: 'usr_00456',
entity_type: 'business',
entity_id: 'ent_00789'
}
})
};
fetch('https://payapi-sandbox.ingo.money/gateway/process--check', 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://payapi-sandbox.ingo.money/gateway/process--check",
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([
'participant_id' => 12345,
'account_type' => 'CK',
'amount' => 500,
'source_of_funds' => 4,
'participant_unique_id1' => '35a792a5-39e6-46fa-add1-419a75d3aa9a',
'timestamp' => 1597862420,
'version' => 11,
'customer_account_token' => '6218c726-3989-40ab-af84-fa6f4c932cb6',
'recipient_phone' => '5555550100',
'participant_unique_id2' => '2d4ebd46-616b-4212-bc54-1f7f68514e1a',
'check_memo_data' => 'Invoice #12345',
'remittance_memo_data' => 'Payment for services rendered Q2 2026',
'store_id' => 'STORE-001',
'clerk_id' => 'CLK-007',
'terminal_id' => 'TERM-042',
'ledger' => [
'api_key' => 'lk_live_abc123xyz',
'user_id' => 'usr_00456',
'entity_type' => 'business',
'entity_id' => 'ent_00789'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://payapi-sandbox.ingo.money/gateway/process--check"
payload := strings.NewReader("{\n \"participant_id\": 12345,\n \"account_type\": \"CK\",\n \"amount\": 500,\n \"source_of_funds\": 4,\n \"participant_unique_id1\": \"35a792a5-39e6-46fa-add1-419a75d3aa9a\",\n \"timestamp\": 1597862420,\n \"version\": 11,\n \"customer_account_token\": \"6218c726-3989-40ab-af84-fa6f4c932cb6\",\n \"recipient_phone\": \"5555550100\",\n \"participant_unique_id2\": \"2d4ebd46-616b-4212-bc54-1f7f68514e1a\",\n \"check_memo_data\": \"Invoice #12345\",\n \"remittance_memo_data\": \"Payment for services rendered Q2 2026\",\n \"store_id\": \"STORE-001\",\n \"clerk_id\": \"CLK-007\",\n \"terminal_id\": \"TERM-042\",\n \"ledger\": {\n \"api_key\": \"lk_live_abc123xyz\",\n \"user_id\": \"usr_00456\",\n \"entity_type\": \"business\",\n \"entity_id\": \"ent_00789\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://payapi-sandbox.ingo.money/gateway/process--check")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"participant_id\": 12345,\n \"account_type\": \"CK\",\n \"amount\": 500,\n \"source_of_funds\": 4,\n \"participant_unique_id1\": \"35a792a5-39e6-46fa-add1-419a75d3aa9a\",\n \"timestamp\": 1597862420,\n \"version\": 11,\n \"customer_account_token\": \"6218c726-3989-40ab-af84-fa6f4c932cb6\",\n \"recipient_phone\": \"5555550100\",\n \"participant_unique_id2\": \"2d4ebd46-616b-4212-bc54-1f7f68514e1a\",\n \"check_memo_data\": \"Invoice #12345\",\n \"remittance_memo_data\": \"Payment for services rendered Q2 2026\",\n \"store_id\": \"STORE-001\",\n \"clerk_id\": \"CLK-007\",\n \"terminal_id\": \"TERM-042\",\n \"ledger\": {\n \"api_key\": \"lk_live_abc123xyz\",\n \"user_id\": \"usr_00456\",\n \"entity_type\": \"business\",\n \"entity_id\": \"ent_00789\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://payapi-sandbox.ingo.money/gateway/process--check")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"participant_id\": 12345,\n \"account_type\": \"CK\",\n \"amount\": 500,\n \"source_of_funds\": 4,\n \"participant_unique_id1\": \"35a792a5-39e6-46fa-add1-419a75d3aa9a\",\n \"timestamp\": 1597862420,\n \"version\": 11,\n \"customer_account_token\": \"6218c726-3989-40ab-af84-fa6f4c932cb6\",\n \"recipient_phone\": \"5555550100\",\n \"participant_unique_id2\": \"2d4ebd46-616b-4212-bc54-1f7f68514e1a\",\n \"check_memo_data\": \"Invoice #12345\",\n \"remittance_memo_data\": \"Payment for services rendered Q2 2026\",\n \"store_id\": \"STORE-001\",\n \"clerk_id\": \"CLK-007\",\n \"terminal_id\": \"TERM-042\",\n \"ledger\": {\n \"api_key\": \"lk_live_abc123xyz\",\n \"user_id\": \"usr_00456\",\n \"entity_type\": \"business\",\n \"entity_id\": \"ent_00789\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": 100,
"client_message": "Success",
"data": {
"check_number": "100042",
"transaction_id": 2361540,
"customer_account_token": "6218c726-3989-40ab-af84-fa6f4c932cb6",
"estimated_posting_date": "08/29/2020",
"estimated_posting_time": "Payment will post 7-10 Days",
"participant_unique_id1": "35a792a5-39e6-46fa-add1-419a75d3aa9a",
"participant_unique_id2": "2d4ebd46-616b-4212-bc54-1f7f68514e1a",
"request_timestamp": 1597862480
}
}{
"status": 700,
"client_message": "Account not currently available for payment",
"data": {
"request_timestamp": 1597862480
}
}