International Bank Transfers
Send funds internationally from your Atlas account to a recipient's bank account using the International Bank Transfer API.
International bank transfers let you send funds from your Atlas wallet to a recipient's bank account in another country. Use this when you need to pay overseas contractors, vendors, or partners directly into their foreign bank accounts.
Gathering recipient details
International transfers are funded from your Atlas wallet in the same currency you're sending. Since swaps on Atlas originate from NGN, you must first swap NGN to your target currency and hold sufficient balance before initiating the transfer. Supported payout currencies are USD, EUR, and GBP.
Tip
See the Swapping between Currency Pairs guide to learn how to fund your foreign currency wallet.
Collect the following before making the API call:
Recipient details
- Full name (first, last), email address, and phone number
- Bank account number
- Bank SWIFT code
Foreign bank details
The foreign_bank object describes the recipient's bank and the banks involved in routing the transfer.
bank_nameandswift_code- the recipient's bankaddress- the recipient's bank's physical addressrouting_number- required only for US banks (ABA routing number).correspondent_bank_nameandcorrespondent_bank_swift_code- the correspondent bank that bridges your transaction to the recipient's local banking networkintermediary_bank_nameandintermediary_bank_address- the intermediary bank, if one is involved in the routing chain
Addresses
You'll need the recipient's billing and shipping addresses.
Initiating the transfer
Make a POST request to the Initiate International Bank Transfer endpoint with the recipient and bank routing details.
Important
Ensure your Atlas wallet has sufficient balance in the transfer currency
before initiating. Minimum amounts are USD 1,500 for USD payouts, EUR
1,000 for Euro payouts, and GBP 1,000 for pound sterling payouts. The
request will fail with a 422 if funds are insufficient.
curl -X POST "https://atlas.tryduplo.com/api/v1/payout/bank-transfer/international" \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"amount": 1500.00,
"type": "bank_transfer",
"currency": "USD",
"narration": "Contractor payment - April",
"source_reference": "IBT_APRIL_2026_001",
"save_as_beneficiary": true,
"recipient": {
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "+12025550142",
"recipient_type": "individual",
"account_number": "6172444979",
"swift_code": "WFBIUS6S",
"account_name": "John Doe",
"bank_name": "Wells Fargo Bank",
"foreign_bank": {
"bank_name": "Wells Fargo Bank",
"swift_code": "WFBIUS6S",
"routing_number": "121000248",
"address": "420 Montgomery Street, San Francisco, CA 94104, USA",
"correspondent_bank_name": "JP Morgan Chase Bank",
"correspondent_bank_swift_code": "CHASUS33",
"intermediary_bank_name": "Bank of America",
"intermediary_bank_address": "100 N Tryon St, Charlotte, NC 28255, USA"
},
"billing_address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"postal_code": "10001",
"country": "United States"
},
"shipping_address": {
"street": "123 Main Street",
"city": "New York",
"state": "NY",
"postal_code": "10001",
"country": "United States"
}
}
}'On success, you receive a confirmation that the transfer has been initiated:
{
"requestId": "a16b8b8c-659b-49e7-ae1b-d363707a0153",
"requestTimestamp": "2026-04-16 21:13:58.261",
"message": "Payout initiated successfully.",
"statusCode": 200,
"data": {
"id": "019d9824-abfb-723b-8007-63335a5b760e",
"recipientAccountName": "John Doe",
"recipientAccountNumber": "6172444979",
"recipientBankName": "Wells Fargo Bank",
"sourceReference": "IBT_APRIL_2026_001",
"reference": "TRN_GWEWGFBEXWTD",
"paymentChannel": "Bank Transfer",
"sessionId": null,
"parentTransactionReference": null,
"amount": {
"value": 1500,
"currency": "USD",
"formatted": "USD1500"
},
"balance": {
"value": 24300,
"currency": "USD",
"formatted": "USD24300"
},
"status": "Pending",
"narration": "Contractor payment - April",
"createdAt": "2026-04-16 22:13:53"
}
}Atlas will also send an OUTFLOW_PENDING_EVENT webhook when it receives your payout request. After your request has processed, you will either get an OUTFLOW_SUCCESS_EVENT or an OUTFLOW_FAILED_EVENT depending on the final status of your transfer.
Set save_as_beneficiary: true to store the recipient's details for future transfers. You can view all your saved beneficiaries on the Atlas UI.
Paying a company recipient
When the recipient is a business rather than an individual, set recipient_type to "company" and include a company_details object:
{
"recipient_type": "company",
"company_details": {
"name": "Acme Corporation Ltd",
"registration_number": "RC123456",
"tax_id": "TIN123456789"
}
}All other fields remain the same. The account_name should match the legal company name registered with the recipient's bank.
Attaching supporting documents
You can attach supporting documents to a transfer by passing a metadata object with a beneficiary_supporting_documents array. Each item in the array is a URL pointing to the document.
"metadata": {
"beneficiary_supporting_documents": [
"https://example.com/invoice.pdf",
"https://example.com/contract.pdf"
]
}Include this at the top level of the request body alongside amount, currency, and other fields.
Related guides
How is this guide?
Last updated on