Stage Disbursement
Stage a disbursement notification for a single recipient via Notify v3.
curl --request POST \
--url https://payapi-sandbox.ingo.money/gateway/v3/notify \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"participant_id": 12345,
"amount": "250.00",
"workflow_id": 1,
"participant_unique_id1": "a4f1b2c3-d456-789e-f012-34567890abcd",
"participant_unique_id2": "b5e2c3d4-e567-890f-a123-456789012345",
"tracer_id": "trc-20260422-001",
"recipient": {
"customer_id": "cust-001",
"first_name": "Alex",
"last_name": "Rivera",
"email": "johnny.rockets@example.com",
"mobile": "5555550100",
"address1": "100 Innovation Way",
"address2": "",
"city": "Anytown",
"state": "GA",
"zip": "00000",
"phone": "5555550100"
},
"authentication_records": [
{
"field_label": "Last 4 SSN",
"field_order": 1,
"validation_type": 1,
"match_failure_type": 1,
"value_format": "XXXX",
"client_provided_value": "1234"
}
],
"notification_records": [
{
"field_label": "Account",
"client_provided_value": "Checking Account ending 5678"
}
]
}
'import requests
url = "https://payapi-sandbox.ingo.money/gateway/v3/notify"
payload = {
"participant_id": 12345,
"amount": "250.00",
"workflow_id": 1,
"participant_unique_id1": "a4f1b2c3-d456-789e-f012-34567890abcd",
"participant_unique_id2": "b5e2c3d4-e567-890f-a123-456789012345",
"tracer_id": "trc-20260422-001",
"recipient": {
"customer_id": "cust-001",
"first_name": "Alex",
"last_name": "Rivera",
"email": "johnny.rockets@example.com",
"mobile": "5555550100",
"address1": "100 Innovation Way",
"address2": "",
"city": "Anytown",
"state": "GA",
"zip": "00000",
"phone": "5555550100"
},
"authentication_records": [
{
"field_label": "Last 4 SSN",
"field_order": 1,
"validation_type": 1,
"match_failure_type": 1,
"value_format": "XXXX",
"client_provided_value": "1234"
}
],
"notification_records": [
{
"field_label": "Account",
"client_provided_value": "Checking Account ending 5678"
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
participant_id: 12345,
amount: '250.00',
workflow_id: 1,
participant_unique_id1: 'a4f1b2c3-d456-789e-f012-34567890abcd',
participant_unique_id2: 'b5e2c3d4-e567-890f-a123-456789012345',
tracer_id: 'trc-20260422-001',
recipient: {
customer_id: 'cust-001',
first_name: 'Alex',
last_name: 'Rivera',
email: 'johnny.rockets@example.com',
mobile: '5555550100',
address1: '100 Innovation Way',
address2: '',
city: 'Anytown',
state: 'GA',
zip: '00000',
phone: '5555550100'
},
authentication_records: [
{
field_label: 'Last 4 SSN',
field_order: 1,
validation_type: 1,
match_failure_type: 1,
value_format: 'XXXX',
client_provided_value: '1234'
}
],
notification_records: [
{field_label: 'Account', client_provided_value: 'Checking Account ending 5678'}
]
})
};
fetch('https://payapi-sandbox.ingo.money/gateway/v3/notify', 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/v3/notify",
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,
'amount' => '250.00',
'workflow_id' => 1,
'participant_unique_id1' => 'a4f1b2c3-d456-789e-f012-34567890abcd',
'participant_unique_id2' => 'b5e2c3d4-e567-890f-a123-456789012345',
'tracer_id' => 'trc-20260422-001',
'recipient' => [
'customer_id' => 'cust-001',
'first_name' => 'Alex',
'last_name' => 'Rivera',
'email' => 'johnny.rockets@example.com',
'mobile' => '5555550100',
'address1' => '100 Innovation Way',
'address2' => '',
'city' => 'Anytown',
'state' => 'GA',
'zip' => '00000',
'phone' => '5555550100'
],
'authentication_records' => [
[
'field_label' => 'Last 4 SSN',
'field_order' => 1,
'validation_type' => 1,
'match_failure_type' => 1,
'value_format' => 'XXXX',
'client_provided_value' => '1234'
]
],
'notification_records' => [
[
'field_label' => 'Account',
'client_provided_value' => 'Checking Account ending 5678'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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/v3/notify"
payload := strings.NewReader("{\n \"participant_id\": 12345,\n \"amount\": \"250.00\",\n \"workflow_id\": 1,\n \"participant_unique_id1\": \"a4f1b2c3-d456-789e-f012-34567890abcd\",\n \"participant_unique_id2\": \"b5e2c3d4-e567-890f-a123-456789012345\",\n \"tracer_id\": \"trc-20260422-001\",\n \"recipient\": {\n \"customer_id\": \"cust-001\",\n \"first_name\": \"Alex\",\n \"last_name\": \"Rivera\",\n \"email\": \"johnny.rockets@example.com\",\n \"mobile\": \"5555550100\",\n \"address1\": \"100 Innovation Way\",\n \"address2\": \"\",\n \"city\": \"Anytown\",\n \"state\": \"GA\",\n \"zip\": \"00000\",\n \"phone\": \"5555550100\"\n },\n \"authentication_records\": [\n {\n \"field_label\": \"Last 4 SSN\",\n \"field_order\": 1,\n \"validation_type\": 1,\n \"match_failure_type\": 1,\n \"value_format\": \"XXXX\",\n \"client_provided_value\": \"1234\"\n }\n ],\n \"notification_records\": [\n {\n \"field_label\": \"Account\",\n \"client_provided_value\": \"Checking Account ending 5678\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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/v3/notify")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"participant_id\": 12345,\n \"amount\": \"250.00\",\n \"workflow_id\": 1,\n \"participant_unique_id1\": \"a4f1b2c3-d456-789e-f012-34567890abcd\",\n \"participant_unique_id2\": \"b5e2c3d4-e567-890f-a123-456789012345\",\n \"tracer_id\": \"trc-20260422-001\",\n \"recipient\": {\n \"customer_id\": \"cust-001\",\n \"first_name\": \"Alex\",\n \"last_name\": \"Rivera\",\n \"email\": \"johnny.rockets@example.com\",\n \"mobile\": \"5555550100\",\n \"address1\": \"100 Innovation Way\",\n \"address2\": \"\",\n \"city\": \"Anytown\",\n \"state\": \"GA\",\n \"zip\": \"00000\",\n \"phone\": \"5555550100\"\n },\n \"authentication_records\": [\n {\n \"field_label\": \"Last 4 SSN\",\n \"field_order\": 1,\n \"validation_type\": 1,\n \"match_failure_type\": 1,\n \"value_format\": \"XXXX\",\n \"client_provided_value\": \"1234\"\n }\n ],\n \"notification_records\": [\n {\n \"field_label\": \"Account\",\n \"client_provided_value\": \"Checking Account ending 5678\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://payapi-sandbox.ingo.money/gateway/v3/notify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"participant_id\": 12345,\n \"amount\": \"250.00\",\n \"workflow_id\": 1,\n \"participant_unique_id1\": \"a4f1b2c3-d456-789e-f012-34567890abcd\",\n \"participant_unique_id2\": \"b5e2c3d4-e567-890f-a123-456789012345\",\n \"tracer_id\": \"trc-20260422-001\",\n \"recipient\": {\n \"customer_id\": \"cust-001\",\n \"first_name\": \"Alex\",\n \"last_name\": \"Rivera\",\n \"email\": \"johnny.rockets@example.com\",\n \"mobile\": \"5555550100\",\n \"address1\": \"100 Innovation Way\",\n \"address2\": \"\",\n \"city\": \"Anytown\",\n \"state\": \"GA\",\n \"zip\": \"00000\",\n \"phone\": \"5555550100\"\n },\n \"authentication_records\": [\n {\n \"field_label\": \"Last 4 SSN\",\n \"field_order\": 1,\n \"validation_type\": 1,\n \"match_failure_type\": 1,\n \"value_format\": \"XXXX\",\n \"client_provided_value\": \"1234\"\n }\n ],\n \"notification_records\": [\n {\n \"field_label\": \"Account\",\n \"client_provided_value\": \"Checking Account ending 5678\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": 100,
"client_message": "Success",
"data": {
"notification_id": 9876543,
"tracer_id": "trc-20260422-001",
"participant_unique_id1": "PARTNER-REF-001",
"participant_unique_id2": "PARTNER-REF-002",
"request_timestamp": 1700000000
},
"time": "0.85"
}{
"status": 400,
"client_message": "Validation Error",
"data": {
"errors": {
"recipient.email": "Field is required"
},
"participant_unique_id1": "PARTNER-REF-001",
"participant_unique_id2": "PARTNER-REF-002",
"request_timestamp": 1700000000
},
"time": "0.85"
}Authorizations
HMAC-SHA512 signed Authorization header. See the Authentication page for the complete signing guide.
Body
authentication_records[] is required by default but may be optional based on client OTAC configuration. recipient.mobile conditionality depends on OTAC configuration.
Unique participant identifier assigned by Ingo.
12345
Dollar amount of the disbursement. Must be greater than 0 with a maximum of 2 decimal places.
10"250.00"
Ingo-assigned workflow identifier that determines the disbursement flow configuration. Defaults to 1 if not otherwise specified by your Ingo integration manager.
1
Participant assigned transaction ID. Must be unique. Used for idempotency — a duplicate value returns an idempotent response. Appears on daily reconciliation reports.
1 - 100"a4f1b2c3-d456-789e-f012-34567890abcd"
Information about the disbursement recipient. Provide either first_name + last_name or business_name — not both. business_name requires client-level configuration. mobile conditionality depends on OTAC configuration.
Show child attributes
Show child attributes
Optional second participant assigned transaction ID.
100"b5e2c3d4-e567-890f-a123-456789012345"
Array of authentication challenge records used to verify the recipient's identity before releasing the disbursement. Required by default — may be optional based on client OTAC configuration. Maximum 20 records.
1 - 20 elementsShow child attributes
Show child attributes
Optional array of supplemental notification records displayed in the recipient notification. Certain records may be required based on client configuration.
Show child attributes
Show child attributes
IETF locale code specifying the language for the notification. Conditional on alternate_language_enabled client configuration.
ar-SA, cs-CZ, da-DK, de-DE, en-GB, en-US, es-ES, es-US, fa-IR, fi-FI, fr-FR, hmn-Latn, it-IT, ja-JP, km-KH, ko-KR, nb-NO, nl-NL, pl-PL, pt-BR, ru-RU, sv-SE, tl-PH, tr-TR, vi-VN, zh-CN, zh-Hans, zh-TW 8"en-US"
Optional URL to a document to be embedded in the recipient notification. Required when the client is configured for document embedding (document_embedding_enabled).
2048"https://example.com/documents/agreement.pdf"
Response
Notification submitted successfully
Numeric code describing the status of the API request. 100 = Success.
100
Text description associated with the status code.
"Success"
Response data for the staged notification.
Show child attributes
Show child attributes
Server-side request processing time in seconds.
"0.85"
curl --request POST \
--url https://payapi-sandbox.ingo.money/gateway/v3/notify \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"participant_id": 12345,
"amount": "250.00",
"workflow_id": 1,
"participant_unique_id1": "a4f1b2c3-d456-789e-f012-34567890abcd",
"participant_unique_id2": "b5e2c3d4-e567-890f-a123-456789012345",
"tracer_id": "trc-20260422-001",
"recipient": {
"customer_id": "cust-001",
"first_name": "Alex",
"last_name": "Rivera",
"email": "johnny.rockets@example.com",
"mobile": "5555550100",
"address1": "100 Innovation Way",
"address2": "",
"city": "Anytown",
"state": "GA",
"zip": "00000",
"phone": "5555550100"
},
"authentication_records": [
{
"field_label": "Last 4 SSN",
"field_order": 1,
"validation_type": 1,
"match_failure_type": 1,
"value_format": "XXXX",
"client_provided_value": "1234"
}
],
"notification_records": [
{
"field_label": "Account",
"client_provided_value": "Checking Account ending 5678"
}
]
}
'import requests
url = "https://payapi-sandbox.ingo.money/gateway/v3/notify"
payload = {
"participant_id": 12345,
"amount": "250.00",
"workflow_id": 1,
"participant_unique_id1": "a4f1b2c3-d456-789e-f012-34567890abcd",
"participant_unique_id2": "b5e2c3d4-e567-890f-a123-456789012345",
"tracer_id": "trc-20260422-001",
"recipient": {
"customer_id": "cust-001",
"first_name": "Alex",
"last_name": "Rivera",
"email": "johnny.rockets@example.com",
"mobile": "5555550100",
"address1": "100 Innovation Way",
"address2": "",
"city": "Anytown",
"state": "GA",
"zip": "00000",
"phone": "5555550100"
},
"authentication_records": [
{
"field_label": "Last 4 SSN",
"field_order": 1,
"validation_type": 1,
"match_failure_type": 1,
"value_format": "XXXX",
"client_provided_value": "1234"
}
],
"notification_records": [
{
"field_label": "Account",
"client_provided_value": "Checking Account ending 5678"
}
]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
participant_id: 12345,
amount: '250.00',
workflow_id: 1,
participant_unique_id1: 'a4f1b2c3-d456-789e-f012-34567890abcd',
participant_unique_id2: 'b5e2c3d4-e567-890f-a123-456789012345',
tracer_id: 'trc-20260422-001',
recipient: {
customer_id: 'cust-001',
first_name: 'Alex',
last_name: 'Rivera',
email: 'johnny.rockets@example.com',
mobile: '5555550100',
address1: '100 Innovation Way',
address2: '',
city: 'Anytown',
state: 'GA',
zip: '00000',
phone: '5555550100'
},
authentication_records: [
{
field_label: 'Last 4 SSN',
field_order: 1,
validation_type: 1,
match_failure_type: 1,
value_format: 'XXXX',
client_provided_value: '1234'
}
],
notification_records: [
{field_label: 'Account', client_provided_value: 'Checking Account ending 5678'}
]
})
};
fetch('https://payapi-sandbox.ingo.money/gateway/v3/notify', 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/v3/notify",
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,
'amount' => '250.00',
'workflow_id' => 1,
'participant_unique_id1' => 'a4f1b2c3-d456-789e-f012-34567890abcd',
'participant_unique_id2' => 'b5e2c3d4-e567-890f-a123-456789012345',
'tracer_id' => 'trc-20260422-001',
'recipient' => [
'customer_id' => 'cust-001',
'first_name' => 'Alex',
'last_name' => 'Rivera',
'email' => 'johnny.rockets@example.com',
'mobile' => '5555550100',
'address1' => '100 Innovation Way',
'address2' => '',
'city' => 'Anytown',
'state' => 'GA',
'zip' => '00000',
'phone' => '5555550100'
],
'authentication_records' => [
[
'field_label' => 'Last 4 SSN',
'field_order' => 1,
'validation_type' => 1,
'match_failure_type' => 1,
'value_format' => 'XXXX',
'client_provided_value' => '1234'
]
],
'notification_records' => [
[
'field_label' => 'Account',
'client_provided_value' => 'Checking Account ending 5678'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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/v3/notify"
payload := strings.NewReader("{\n \"participant_id\": 12345,\n \"amount\": \"250.00\",\n \"workflow_id\": 1,\n \"participant_unique_id1\": \"a4f1b2c3-d456-789e-f012-34567890abcd\",\n \"participant_unique_id2\": \"b5e2c3d4-e567-890f-a123-456789012345\",\n \"tracer_id\": \"trc-20260422-001\",\n \"recipient\": {\n \"customer_id\": \"cust-001\",\n \"first_name\": \"Alex\",\n \"last_name\": \"Rivera\",\n \"email\": \"johnny.rockets@example.com\",\n \"mobile\": \"5555550100\",\n \"address1\": \"100 Innovation Way\",\n \"address2\": \"\",\n \"city\": \"Anytown\",\n \"state\": \"GA\",\n \"zip\": \"00000\",\n \"phone\": \"5555550100\"\n },\n \"authentication_records\": [\n {\n \"field_label\": \"Last 4 SSN\",\n \"field_order\": 1,\n \"validation_type\": 1,\n \"match_failure_type\": 1,\n \"value_format\": \"XXXX\",\n \"client_provided_value\": \"1234\"\n }\n ],\n \"notification_records\": [\n {\n \"field_label\": \"Account\",\n \"client_provided_value\": \"Checking Account ending 5678\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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/v3/notify")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"participant_id\": 12345,\n \"amount\": \"250.00\",\n \"workflow_id\": 1,\n \"participant_unique_id1\": \"a4f1b2c3-d456-789e-f012-34567890abcd\",\n \"participant_unique_id2\": \"b5e2c3d4-e567-890f-a123-456789012345\",\n \"tracer_id\": \"trc-20260422-001\",\n \"recipient\": {\n \"customer_id\": \"cust-001\",\n \"first_name\": \"Alex\",\n \"last_name\": \"Rivera\",\n \"email\": \"johnny.rockets@example.com\",\n \"mobile\": \"5555550100\",\n \"address1\": \"100 Innovation Way\",\n \"address2\": \"\",\n \"city\": \"Anytown\",\n \"state\": \"GA\",\n \"zip\": \"00000\",\n \"phone\": \"5555550100\"\n },\n \"authentication_records\": [\n {\n \"field_label\": \"Last 4 SSN\",\n \"field_order\": 1,\n \"validation_type\": 1,\n \"match_failure_type\": 1,\n \"value_format\": \"XXXX\",\n \"client_provided_value\": \"1234\"\n }\n ],\n \"notification_records\": [\n {\n \"field_label\": \"Account\",\n \"client_provided_value\": \"Checking Account ending 5678\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://payapi-sandbox.ingo.money/gateway/v3/notify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"participant_id\": 12345,\n \"amount\": \"250.00\",\n \"workflow_id\": 1,\n \"participant_unique_id1\": \"a4f1b2c3-d456-789e-f012-34567890abcd\",\n \"participant_unique_id2\": \"b5e2c3d4-e567-890f-a123-456789012345\",\n \"tracer_id\": \"trc-20260422-001\",\n \"recipient\": {\n \"customer_id\": \"cust-001\",\n \"first_name\": \"Alex\",\n \"last_name\": \"Rivera\",\n \"email\": \"johnny.rockets@example.com\",\n \"mobile\": \"5555550100\",\n \"address1\": \"100 Innovation Way\",\n \"address2\": \"\",\n \"city\": \"Anytown\",\n \"state\": \"GA\",\n \"zip\": \"00000\",\n \"phone\": \"5555550100\"\n },\n \"authentication_records\": [\n {\n \"field_label\": \"Last 4 SSN\",\n \"field_order\": 1,\n \"validation_type\": 1,\n \"match_failure_type\": 1,\n \"value_format\": \"XXXX\",\n \"client_provided_value\": \"1234\"\n }\n ],\n \"notification_records\": [\n {\n \"field_label\": \"Account\",\n \"client_provided_value\": \"Checking Account ending 5678\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": 100,
"client_message": "Success",
"data": {
"notification_id": 9876543,
"tracer_id": "trc-20260422-001",
"participant_unique_id1": "PARTNER-REF-001",
"participant_unique_id2": "PARTNER-REF-002",
"request_timestamp": 1700000000
},
"time": "0.85"
}{
"status": 400,
"client_message": "Validation Error",
"data": {
"errors": {
"recipient.email": "Field is required"
},
"participant_unique_id1": "PARTNER-REF-001",
"participant_unique_id2": "PARTNER-REF-002",
"request_timestamp": 1700000000
},
"time": "0.85"
}