Cross-Border Remittance (Fiat)
Deliver value abroad in fiat, end to end: the sender funds in USD, and the recipient is paid out through the Cross Border disbursement rail. Reliant handles the delivery; the recipient never needs a wallet. For the on-chain variant, see Cross-Border Remittance (Stablecoins).
Create the sender with KYC details. An Active account status means the sender can fund.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| firstName | string | REQUIRED | Client's legal first name. | |
| lastName | string | REQUIRED | Client's legal last name. | |
| address | string | REQUIRED | Street address. | |
| city | string | REQUIRED | City. | |
| state | string | REQUIRED | State code. | |
| zip | string | REQUIRED | ZIP code. | |
| taxID | string | REQUIRED | SSN (or EIN for business accounts). | |
| dob | string (date) | REQUIRED | Date of birth (YYYY-MM-DD). | |
| clientID | string | REQUIRED | Your external identifier for this client. | |
| string | REQUIRED | Email address (validated). |
curl --request POST \
--url 'https://FQDN/api/FE/NewClient' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"firstName": "string",
"lastName": "string",
"taxID": "string",
"clientID": "sender-001",
"email": "sender@example.com"
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"firstName": "string",
"lastName": "string",
"taxID": "string",
"clientID": "sender-001",
"email": "sender@example.com"
})
};
fetch('https://FQDN/api/FE/NewClient', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/FE/NewClient"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"firstName": "string",
"lastName": "string",
"taxID": "string",
"clientID": "sender-001",
"email": "sender@example.com"
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json()){
"clientID": "sender-001",
"accountStatus": "Active"
}Active means KYC passed.- 1Sender AppFund in USDPOST /AddClientFunds
- RAMFiCredit USD balancefunds clear in about 2 business days
- 2Sender AppRead the campaignGET /Disbursement/Campaign
- 3Sender AppAdd the recipientPOST /Disbursement/Consumers
- RAMFiEmail delivery linkReliant emails the recipient
- RecipientChoose deliveryrecipient confirms cross-border payout
- RAMFiDeliver fiatReliant handles FX and local delivery
- 4Sender AppList the recipientsGET /Disbursement/Consumers
Show full interaction diagram
Fiat remittance sequence. The sender side is standard onboarding and ACH funding; delivery rides the Cross Border disbursement rail.
Draft the remittance amount from the sender's linked bank (open banking) or pull from a card with PullFromCard. Funds are pending about 2 business days before they can be disbursed.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| clientID | string | REQUIRED | The client to fund. | |
| amount | number | REQUIRED | USD amount to draft via ACH. | |
| transactionDate | string (date) | optional | Date to initiate the ACH draft (YYYY-MM-DD). | |
| externalReference | string | REQUIRED | Your unique reconciliation key. |
curl --request POST \
--url 'https://FQDN/api/FE/AddClientFunds' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"clientID": "sender-001",
"amount": 500.00,
"transactionDate": "2026-01-15",
"externalReference": "remit-fund-01"
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"clientID": "sender-001",
"amount": 500.00,
"transactionDate": "2026-01-15",
"externalReference": "remit-fund-01"
})
};
fetch('https://FQDN/api/FE/AddClientFunds', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/FE/AddClientFunds"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"clientID": "sender-001",
"amount": 500.00,
"transactionDate": "2026-01-15",
"externalReference": "remit-fund-01"
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json())1101Campaigns are configured by Reliant administrators, so the API is read-only for campaigns. Read the pre-configured cross-border campaign to get its campaignGuid and confirm the international-transfer (Cross Border) rail and its fee. Pass payeeId to fetch a single campaign.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| payeeId | integer | optional | Filter to a single campaign by payee ID. When omitted, all campaigns for the authenticated company are returned. |
curl --request GET \
--url 'https://FQDN/api/Disbursement/Campaign' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>'const options = {
method: 'GET',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>'
}
};
fetch('https://FQDN/api/Disbursement/Campaign', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/Disbursement/Campaign"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>"
}
resp = requests.get(url, headers=headers)
print(resp.json()){
"resultModel": [
{
"campaignGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"payeeId": 1024,
"disbursementAmount": 500.00,
"numberOfBeneficiaries": 1,
"internationalTransfer": true,
"internationalTransferFeePct": 1.0,
"internationalTransferFlat": 4.00,
"destinationCurrency": "USD",
"hwInstantTransfer": false
}
],
"isSuccess": true,
"errorMessage": null
}Provision the recipient into the campaign with their name, email, and amount, and mark their eligible rails. Reliant emails them a secure link to confirm delivery; FX and local payout are handled by Reliant. The response reports success per recipient.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| campaignGuid | string (UUID) | REQUIRED | The campaign to add the payees to (from Get Campaign). | |
| consumers | array<Consumer> | REQUIRED | One or more payees to provision — see the Consumer fields below. | see fields below |
| consumers[].firstName | string | REQUIRED | Payee first name. | |
| consumers[].lastName | string | REQUIRED | Payee last name. | |
| consumers[].email | string | REQUIRED | Where Reliant sends the payout-method selection link. | |
| consumers[].amount | number (decimal) | REQUIRED | Gross payout amount for this payee. | |
| consumers[].middleInitial | string | optional | Optional contact details. | |
| consumers[].phone | string | optional | Optional contact details. | |
| consumers[].streetAddress1 | string | optional | Mailing address (required for check-by-mail). | |
| consumers[].streetAddress2 | string | optional | Mailing address (required for check-by-mail). | |
| consumers[].city | string | optional | Mailing address (required for check-by-mail). | |
| consumers[].state | string | optional | Mailing address (required for check-by-mail). | |
| consumers[].zip | string | optional | Mailing address (required for check-by-mail). | |
| consumers[].taxId | string | optional | Tax identifier, where required for reporting. | |
| consumers[].miscellaneous | string | optional | Free-form reference on the payee. | |
| consumers[].ach | boolean | optional | Eligible payout rails to offer this payee. | |
| consumers[].checkMail | boolean | optional | Eligible payout rails to offer this payee. | |
| consumers[].prepaidCard | boolean | optional | Eligible payout rails to offer this payee. | |
| consumers[].routingNumber | string | optional | Bank details; apply when ach is enabled. | |
| consumers[].accountNumber | string | optional | Bank details; apply when ach is enabled. |
curl --request POST \
--url 'https://FQDN/api/Disbursement/Consumers' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>' \
--header 'Content-Type: application/json' \
--data '{
"campaignGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"consumers": [
{
"firstName": "Maria",
"lastName": "Santos",
"email": "maria@example.com",
"amount": 500.00,
"ach": true
}
]
}'const options = {
method: 'POST',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"campaignGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"consumers": [
{ "firstName": "Maria", "lastName": "Santos", "email": "maria@example.com", "amount": 500.00, "ach": true }
]
})
};
fetch('https://FQDN/api/Disbursement/Consumers', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/Disbursement/Consumers"
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>",
"Content-Type": "application/json"
}
payload = {
"campaignGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"consumers": [
{ "firstName": "Maria", "lastName": "Santos", "email": "maria@example.com", "amount": 500.00, "ach": True }
]
}
resp = requests.post(url, headers=headers, json=payload)
print(resp.json()){
"resultModel": {
"isSuccess": true,
"results": [
{
"isSuccess": true,
"errorMessages": [],
"response": { "consumerID": 90231, "email": "maria@example.com", "firstName": "Maria", "lastName": "Santos" }
}
]
},
"isSuccess": true,
"errorMessage": null
}List the campaign's recipients to confirm who is enrolled. Filter by campaignGuid (or consumerId / email). This returns recipient profiles; a payout-status field is not part of this response.
| Field | Type | Required | Description | Value |
|---|---|---|---|---|
| campaignGuid | string (UUID) | optional | Scope results to a single campaign. | |
| consumerId | integer | optional | Fetch a single consumer by ID. | |
| string | optional | Match consumers by email address. |
curl --request GET \
--url 'https://FQDN/api/Disbursement/Consumers?campaignGuid=3fa85f64-5717-4562-b3fc-2c963f66afa6' \
--header 'Authorization: Bearer <SHORT_TERM_TOKEN>' \
--header 'X-OTP: <X_OTP>'const options = {
method: 'GET',
headers: {
'Authorization': 'Bearer <SHORT_TERM_TOKEN>',
'X-OTP': '<X_OTP>'
}
};
fetch('https://FQDN/api/Disbursement/Consumers?campaignGuid=3fa85f64-5717-4562-b3fc-2c963f66afa6', options)
.then(r => r.json())
.then(console.log)
.catch(console.error);import requests
url = "https://FQDN/api/Disbursement/Consumers"
params = { "campaignGuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6" }
headers = {
"Authorization": "Bearer <SHORT_TERM_TOKEN>",
"X-OTP": "<X_OTP>"
}
resp = requests.get(url, headers=headers, params=params)
print(resp.json()){
"resultModel": [
{
"userId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"clientfname": "Maria",
"clientlname": "Santos",
"vendoraccountnumber": "string",
"vendorid": 42,
"savingsBalance": 0.00,
"dscid": 1024
}
],
"isSuccess": true,
"errorMessage": null
}CrossBorder rail. Supported corridors, FX treatment, and delivery timing are commercial details to confirm with RAMFi; this recipe documents the API mechanics.