Ntradex API
The Ntradex API gives your business direct access to our cross-border payments and settlement network โ covering 4800+ corridors across Africa, North America, and Australia.
Base URL
Staging
A staging environment is available for integration testing. Credentials and transactions in staging are fully isolated from production.
Rate Limits
| Tier | Limit |
|---|---|
| Standard | 100 requests / minute |
| Elevated | 500 requests / minute โ contact business@ntradex.ca |
curl -X GET \ https://api.ntradex.ca/api/v1/business/{business_id}/wallets \ -H "Authorization: Bearer YOUR_TOKEN"
const res = await fetch( `https://api.ntradex.ca/api/v1/business/${businessId}/wallets`, { headers: { 'Authorization': `Bearer ${token}` } } ); const data = await res.json();
import requests res = requests.get( f"https://api.ntradex.ca/api/v1/business/{business_id}/wallets", headers={"Authorization": f"Bearer {token}"} )
{
"message": "success",
"data": [
{
"id": "wal_cad_001",
"currency": "CAD",
"balance": 12450.00,
"is_default": true,
"status": "active"
},
{
"id": "wal_ngn_002",
"currency": "NGN",
"balance": 5800000.00,
"is_default": false,
"status": "active"
}
]
}
Authentication
The Ntradex API uses Bearer token authentication. After logging in, include the returned token in the Authorization header of every subsequent request.
Login
Authenticate your business account. Returns an access token and a list of business accounts associated with the user.
/v1/business/login| Parameter | Type | Required | Description |
|---|---|---|---|
| string | required | Business account email address | |
| password | string | optional | Account password |
| passcode | string | optional | 6-digit passcode (alternative to password) |
OTP Login (2-step)
For enhanced security, use the two-step OTP login flow.
/v1/business/login-send-otpValidates credentials and sends a one-time password to the user's registered email.
/v1/business/login-with-otpCompletes authentication using the OTP. Returns the access token.
Using the token
curl -X POST \ https://api.ntradex.ca/api/v1/business/login \ -H "Content-Type: application/json" \ -d '{"email":"ops@yourcompany.com","password":"your_password"}'
fetch('https://api.ntradex.ca/api/v1/business/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'ops@yourcompany.com', password: 'your_password' }) })
res = requests.post(
"https://api.ntradex.ca/api/v1/business/login",
json={"email": "ops@yourcompany.com", "password": "your_password"}
)
token = res.json()["data"]["token"]{
"message": "Login successful",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6...",
"user": {
"id": "usr_abc123",
"email": "ops@yourcompany.com"
},
"businesses": [
{
"id": "biz_xyz789",
"business_name": "Acme Transfers Ltd"
}
]
}
}
Customers
Customers represent your end-users or beneficiaries โ the people and entities your business sends money to. Each customer holds payout details for a specific corridor.
/v1/business/{business_id}/customers/v1/business/{business_id}/customers/v1/business/{business_id}/customers/{customer_id}/v1/business/{business_id}/customers/{customer_id}/v1/business/{business_id}/customers/recentCreate customer parameters
| Parameter | Type | Description |
|---|---|---|
| customer_name | string | Full name of the customer |
| string | Customer email | |
| phone_number | string | Customer phone number |
| currency | string | Payout currency (e.g. NGN, GHS, CAD, AUD) |
| account_number | string | Bank account number (Africa corridors) |
| bank_name | string | Bank name |
| bank_code | string | Bank sort/routing code |
| interac_e_transfer_email | string | Interac e-Transfer email (Canada) |
| bsb_code | string | BSB code (Australia) |
| iban / bic | string | IBAN and BIC (European corridors) |
| country | string | Customer's country |
| category | string | Internal customer segment |
curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/customers \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "customer_name": "Emeka Okafor", "email": "emeka@email.com", "phone_number": "+2348012345678", "currency": "NGN", "account_number": "0123456789", "bank_name": "Access Bank", "bank_code": "044", "country": "Nigeria" }'
fetch(`.../${businessId}/customers`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ customer_name: 'Emeka Okafor', currency: 'NGN', account_number: '0123456789', bank_code: '044', country: 'Nigeria' }) })
requests.post(
f".../{business_id}/customers",
headers={"Authorization": f"Bearer {token}"},
json={
"customer_name": "Emeka Okafor",
"currency": "NGN",
"account_number": "0123456789",
"bank_code": "044"
}
){
"message": "Customer created",
"data": {
"id": "cust_abc001",
"customer_name": "Emeka Okafor",
"currency": "NGN",
"bank_name": "Access Bank",
"account_number": "0123456789",
"created_at": "2026-03-27T09:00:00Z"
}
}
Wallets
Each business holds multiple wallets across currencies. Wallets are the source and destination of all money movement on the platform.
/v1/business/{business_id}/walletsReturns all wallets with live balance and currency details.
/v1/business/{business_id}/wallets/create| Parameter | Type | Required | Description |
|---|---|---|---|
| currency | string | required | ISO 4217 currency code (e.g. CAD, NGN, GHS, AUD) |
/v1/business/{business_id}/wallets/limitsReturns transaction and balance limits applicable to each wallet.
/v1/wallets/balanceGet wallet balances for the authenticated session.
curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/wallets/create \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"currency": "AUD"}'
fetch(`.../${businessId}/wallets/create`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ currency: 'AUD' }) })
requests.post(
f".../{business_id}/wallets/create",
headers={"Authorization": f"Bearer {token}"},
json={"currency": "AUD"}
){
"message": "success",
"data": [
{
"id": "wal_cad_001",
"currency": "CAD",
"balance": 12450.00,
"is_default": true,
"status": "active"
},
{
"id": "wal_ngn_002",
"currency": "NGN",
"balance": 5800000.00,
"is_default": false,
"status": "active"
}
]
}
Exchange Rates
Retrieve live exchange rates for the currency pairs available to your business. Rates are real-time and reflect current market conditions plus Ntradex's blended spread.
/v1/business/{business_id}/exchange-ratesReturns rates for all currency pairs configured for the business.
/v1/currenciesReturns the full list of currencies supported on the Ntradex network.
Key corridors
curl -X GET \ https://api.ntradex.ca/api/v1/business/biz_xyz789/exchange-rates \ -H "Authorization: Bearer YOUR_TOKEN"
fetch(`.../${businessId}/exchange-rates`, { headers: { 'Authorization': `Bearer ${token}` } } )
requests.get(
f".../{business_id}/exchange-rates",
headers={"Authorization": f"Bearer {token}"}
){
"message": "success",
"data": [
{
"from_currency": "CAD",
"to_currency": "NGN",
"rate": 1205.50,
"updated_at": "2026-03-27T12:00:00Z"
},
{
"from_currency": "CAD",
"to_currency": "GHS",
"rate": 10.84,
"updated_at": "2026-03-27T12:00:00Z"
}
]
}
Payouts
Send funds from a business wallet to a registered customer. The payout debits the specified wallet and delivers to the customer's bank account, mobile money, or Interac e-Transfer.
/v1/business/{business_id}/payout/fee| Parameter | Type | Required | Description |
|---|---|---|---|
| amount | number | required | Amount to send |
| currency | string | required | Currency of the sending wallet |
/v1/business/{business_id}/payout| Parameter | Type | Required | Description |
|---|---|---|---|
| wallet_id | string | required | ID of the sending wallet |
| customer_id | string | required | ID of the recipient customer |
| amount | number | required | Amount in the wallet's currency |
| remark | string | optional | Payment reference or memo visible to recipient |
# 1. Check fee curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/payout/fee \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"amount": 500, "currency": "CAD"}' # 2. Send payout curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/payout \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "wallet_id": "wal_cad_001", "customer_id": "cust_abc001", "amount": 500, "remark": "Invoice #1042" }'
// 1. Fee check const fee = await fetch(`.../${businessId}/payout/fee`, { method: 'POST', body: JSON.stringify({ amount: 500, currency: 'CAD' }) }).then(r => r.json()); // 2. Payout const payout = await fetch(`.../${businessId}/payout`, { method: 'POST', body: JSON.stringify({ wallet_id: 'wal_cad_001', customer_id: 'cust_abc001', amount: 500, remark: 'Invoice #1042' }) }).then(r => r.json());
fee = requests.post(
f".../{bid}/payout/fee", headers=auth,
json={"amount": 500, "currency": "CAD"}
).json()
payout = requests.post(
f".../{bid}/payout", headers=auth,
json={
"wallet_id": "wal_cad_001",
"customer_id": "cust_abc001",
"amount": 500,
"remark": "Invoice #1042"
}
).json(){
"message": "Payout initiated",
"data": {
"transaction_id": "txn_8a9b3c",
"status": "processing",
"amount": 500.00,
"currency": "CAD",
"fee": 4.50,
"recipient": "Emeka Okafor",
"created_at": "2026-03-27T12:05:00Z"
}
}
Deposits
Fund a business wallet by initiating a deposit. After initiation, the deposit must be confirmed with payment proof or a reference before it is credited.
/v1/business/{business_id}/deposit| Parameter | Type | Required | Description |
|---|---|---|---|
| wallet_id | string | required | Wallet to credit |
| amount | number | required | Amount to deposit |
| payment_method_id | string | required | Payment method to use (from /payment-methods) |
| reference | string | optional | Your internal deposit reference |
/v1/business/{business_id}/deposit/confirmConfirm a pending deposit once payment is complete.
curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/deposit \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "wallet_id": "wal_cad_001", "amount": 10000, "payment_method_id": "pm_interac_001", "reference": "DEP-2026-0042" }'
fetch(`.../${businessId}/deposit`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ wallet_id: 'wal_cad_001', amount: 10000, payment_method_id: 'pm_interac_001' }) })
requests.post(
f".../{business_id}/deposit",
headers={"Authorization": f"Bearer {token}"},
json={
"wallet_id": "wal_cad_001",
"amount": 10000,
"payment_method_id": "pm_interac_001"
}
){
"message": "Deposit initiated",
"data": {
"deposit_id": "dep_001",
"status": "pending",
"amount": 10000.00,
"currency": "CAD"
}
}
FX Exchange
Convert funds between your business wallets at the prevailing Ntradex rate. Use the fee endpoint first to show your users the exact rate and cost before they confirm.
/v1/business/{business_id}/exchange/fee| Parameter | Type | Required | Description |
|---|---|---|---|
| amount | number | required | Amount to convert |
| from_currency | string | required | Source currency (e.g. CAD) |
| to_currency | string | required | Target currency (e.g. NGN) |
/v1/business/{business_id}/exchange| Parameter | Type | Required | Description |
|---|---|---|---|
| from_wallet_id | string | required | Wallet to debit |
| to_wallet_id | string | required | Wallet to credit |
| amount | number | required | Amount in source currency |
# 1. Check fee curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/exchange/fee \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "amount": 1000, "from_currency": "CAD", "to_currency": "NGN" }' # 2. Execute exchange curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/exchange \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "from_wallet_id": "wal_cad_001", "to_wallet_id": "wal_ngn_002", "amount": 1000 }'
fetch(`.../${businessId}/exchange`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ from_wallet_id: 'wal_cad_001', to_wallet_id: 'wal_ngn_002', amount: 1000 }) })
requests.post(
f".../{business_id}/exchange",
headers={"Authorization": f"Bearer {token}"},
json={
"from_wallet_id": "wal_cad_001",
"to_wallet_id": "wal_ngn_002",
"amount": 1000
}
){
"message": "Exchange successful",
"data": {
"transaction_id": "txn_fx_001",
"from_currency": "CAD",
"to_currency": "NGN",
"amount_sent": 1000.00,
"amount_received": 1205500.00,
"rate": 1205.50,
"fee": 9.00,
"status": "completed"
}
}
Transactions
Query the full transaction history for your business with rich filtering, search, and pagination.
/v1/business/{business_id}/transactionsQuery parameters
| Parameter | Type | Description |
|---|---|---|
| transaction_type | string | Filter by type: payout, deposit, exchange |
| status | string | pending, processing, completed, failed |
| currency | string | Filter by currency code |
| amount_gt / amount_lt / amount_eq | number | Amount range filters |
| date_after / date_before / date_exact | string | Date range filters (ISO 8601) |
| search | string | Search across tracking ID, reference, beneficiary, remark |
| ordering | string | Sort field โ prefix - for descending (e.g. -created_at) |
| page / page_size | integer | Pagination (default page_size: 20) |
/v1/business/{business_id}/transactions/{transaction_id}Full detail for a single transaction, including status history and payout breakdown.
curl -G \ https://api.ntradex.ca/api/v1/business/biz_xyz789/transactions \ -H "Authorization: Bearer YOUR_TOKEN" \ --data-urlencode "status=completed" \ --data-urlencode "currency=CAD" \ --data-urlencode "ordering=-created_at" \ --data-urlencode "page_size=20"
const params = new URLSearchParams({ status: 'completed', currency: 'CAD', ordering: '-created_at', page_size: '20' }); fetch(`.../${businessId}/transactions?${params}`, { headers: { 'Authorization': `Bearer ${token}` } })
requests.get(
f".../{business_id}/transactions",
headers={"Authorization": f"Bearer {token}"},
params={
"status": "completed",
"currency": "CAD",
"ordering": "-created_at",
"page_size": 20
}
){
"message": "success",
"data": {
"count": 143,
"next": "https://api.ntradex.ca/api/v1/.../transactions?page=2",
"previous": null,
"results": [
{
"id": "txn_8a9b3c",
"type": "payout",
"status": "completed",
"amount": 500.00,
"currency": "CAD",
"created_at": "2026-03-27T12:05:00Z"
}
]
}
}
Virtual Accounts
Issue dedicated virtual bank accounts to collect inbound payments. Currently supports NGN virtual accounts for Nigerian collections via local bank transfer.
/v1/business/{business_id}/virtual-accountsReturns all virtual accounts issued to the business.
/v1/business/{business_id}/ngn-virtual-account/onboardIssue a new NGN virtual account. Transfers to this account automatically credit your NGN wallet.
curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/ngn-virtual-account/onboard \ -H "Authorization: Bearer YOUR_TOKEN"
fetch(`.../${businessId}/ngn-virtual-account/onboard`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}` } })
requests.post(
f".../{business_id}/ngn-virtual-account/onboard",
headers={"Authorization": f"Bearer {token}"}
){
"message": "Virtual account issued",
"data": {
"account_number": "0123456789",
"bank_name": "Wema Bank",
"account_name": "Acme Transfers / Ntradex",
"currency": "NGN",
"status": "active"
}
}
Payment Methods
Retrieve the payment methods available to your business for funding wallets. Available methods vary by country and configured currencies.
/v1/business/{business_id}/payment-methodsReturns all active payment methods including type, supported currencies, and deposit limits.
/v1/banks/Returns supported banks for a given country. Use when creating customers for bank transfer corridors.
curl -X GET \ https://api.ntradex.ca/api/v1/business/biz_xyz789/payment-methods \ -H "Authorization: Bearer YOUR_TOKEN"
fetch(`.../${businessId}/payment-methods`, { headers: { 'Authorization': `Bearer ${token}` } } )
requests.get(
f".../{business_id}/payment-methods",
headers={"Authorization": f"Bearer {token}"}
){
"message": "success",
"data": [
{
"id": "pm_interac_001",
"name": "Interac e-Transfer",
"currency": "CAD",
"min_amount": 10.00,
"max_amount": 25000.00,
"status": "active"
}
]
}
Team Management
Invite team members to your business account. Invited users must have a verified Ntradex account (KYC Cadre 1) before accepting.
/v1/business/{business_id}/invites/v1/business/{business_id}/invites/v1/business/invites/meReturns all pending business invites for the authenticated user.
/v1/business/invites/{invite_id}/acceptAccept a business invite. User is added to the business upon acceptance.
curl -X POST \ https://api.ntradex.ca/api/v1/business/biz_xyz789/invites \ -H "Authorization: Bearer YOUR_TOKEN" \ -H "Content-Type: application/json" \ -d '{"email": "teammate@yourcompany.com"}'
fetch(`.../${businessId}/invites`, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ email: 'teammate@yourcompany.com' }) })
requests.post(
f".../{business_id}/invites",
headers={"Authorization": f"Bearer {token}"},
json={"email": "teammate@yourcompany.com"}
){
"message": "Invite sent",
"data": {
"invite_id": "inv_001",
"email": "teammate@yourcompany.com",
"status": "pending",
"expires_at": "2026-04-03T12:00:00Z"
}
}
Errors
The Ntradex API uses standard HTTP status codes. Error responses return a JSON body with a message field and, where applicable, an errors object with field-level detail.
| Code | Meaning |
|---|---|
200 OK | Request succeeded |
201 Created | Resource created successfully |
400 Bad Request | Invalid request โ check the errors field |
401 Unauthorized | Missing or invalid Bearer token |
403 Forbidden | Authenticated but not permitted (e.g. KYB pending) |
404 Not Found | Resource does not exist |
429 Too Many Requests | Rate limit exceeded |
500 Internal Server Error | Server-side error โ contact support |
HTTP/1.1 401 Unauthorized
{
"message": "Authentication credentials were not provided.",
"errors": {}
}
HTTP/1.1 400 Bad Request
{
"message": "Validation error",
"errors": {
"customer_id": [
"Customer does not belong to this business."
],
"amount": [
"Insufficient wallet balance."
]
}
}
HTTP/1.1 403 Forbidden
{
"message": "KYB verification required before processing transactions.",
"errors": {}
}
Changelog
v1.0 โ March 2026
Initial release of the Ntradex Business API.
Includes: business registration and authentication, KYB and director management, multi-currency wallets, payouts to 40+ corridors, FX exchange, deposits, NGN virtual accounts, full transaction history with filtering and pagination, team invites, payment methods, and exchange rates.
Webhooks real-time transaction event notifications Bulk payouts batch multiple transfers in one call SDKs Node.js ยท Python ยท PHP Sandbox keys self-serve test credentials via dashboard