Remittances
Pay individuals abroad in local currency — one at a time or thousands at once.
✅ What you can buildSend money to individuals in 30+ countries, paid into their bank account or mobile wallet in local currency. Fund your account once, then pay recipients one at a time or thousands from a single instruction.
📘 Is this you?
- You operate a remittance app or money transfer service
- Your customers send money home to family abroad
- You are a payment provider paying out on behalf of your own customers
How money moves for your business
You keep a funded balance with TransFi. When your customer initiates a transfer, you create a payout and the recipient receives local currency. Because the money legally comes from your customer rather than from you, both the sender and the recipient are registered and verified separately.
Your balance → recipient's local bank or wallet, on your sender's behalf
Flows you'll use
| Flow Guide | Why you need it |
|---|---|
| Instant Payouts | Fund each transfer as you make it, straight to the recipient — Flow 3 (fiat → fiat) or Flow 2 (crypto → fiat) |
| Payouts | Pay from a pre-funded balance — Flow 10 (fiat), Flow 12 (crypto) |
| Add Funds | Top up the balance ahead of a payout run — Flow 5 or 6 |
| Who's on Each Side | Register and verify the sender whose money you are moving (PoBo) |
→ Every flow number refers to one of the thirteen on the Flow Guides page.
Your integration, end to end
- Find out what a sender requires —
POST /v3/senders/mandatory-fields. Requirements vary by country and currency, so fetch them rather than hard-coding - Create the sender —
POST /v3/senders/individual - Verify the sender —
POST /v3/kyc/standard, then send them to the returned kycUrl - Find out what a recipient requires —
POST /v3/recipients/mandatory-fields - Create the recipient — POST
/v3/recipients/individual - Quote the transfer —
GET /v3/exchange-ratesfor the rate and full fee breakdown - Create the payout —
POST /v3/orderswithorderType: "payout" - Handle the webhook — confirm to your customer that the money arrived
Sample call sequence
# 1 — What does a sender in this corridor need?
curl -X POST 'https://sandbox-api.transfi.com/v3/senders/mandatory-fields' \
-H 'Authorization: Basic YOUR_BASE64_CREDENTIALS' \
-H 'mid: YOUR_MID' \
-H 'Content-Type: application/json' \
-d '{ "type": "individual", "country": "GB", "currencyType": "fiat" }'
# -> returns "inputs": the exact fields to collect, with validation rules
# 2 — Create the sender from those fields
curl -X POST 'https://sandbox-api.transfi.com/v3/senders/individual' \
-H 'Authorization: Basic YOUR_BASE64_CREDENTIALS' \
-H 'mid: YOUR_MID' \
-H 'Content-Type: application/json' \
-d '{ ...the fields returned by mandatory-fields... }'
# -> { "data": { "userId": "UX-SENDER-ID" } }
# 3 — Verify the sender
curl -X POST 'https://sandbox-api.transfi.com/v3/kyc/standard' \
-H 'Authorization: Basic YOUR_BASE64_CREDENTIALS' \
-H 'mid: YOUR_MID' \
-H 'Content-Type: application/json' \
-d '{ "userId": "UX-SENDER-ID" }'
# -> { "data": { "kycUrl": "https://..." } }
# 4 — Quote the transfer
curl -X GET 'https://sandbox-api.transfi.com/v3/rates?orderType=payout&fromCurrency=GBP&toCurrency=PHP&amount=200' \
-H 'Authorization: Basic YOUR_BASE64_CREDENTIALS' \
-H 'mid: YOUR_MID'
# 5 — Pay the recipient
curl -X POST 'https://sandbox-api.transfi.com/v3/orders' \
-H 'Authorization: Basic YOUR_BASE64_CREDENTIALS' \
-H 'mid: YOUR_MID' \
-H 'Content-Type: application/json' \
-d '{
"userId": "UX-RECIPIENT-ID",
"orderType": "payout",
"purposeCode": "family_support",
"partnerId": "remit-3001",
"source": { "currency": "USDT" },
"destination": { "currency": "PHP", "amount": "14000",
"paymentType": "bank_transfer" }
}'
A recipient can become a sender If someone you have paid later needs to send money, don't create them again. Promote the existing record with Change Individual User Role after checking what is needed via Role Change Mandatory Fields.
Set up first
- Top up your balance — payouts draw from it. Required, not optional
- Configure webhooks — for confirming delivery to your customer
- Understand verification — mandatory for anyone sending funds
Good to know for your industry
- Requirements are per corridor. Always fetch mandatory fields at runtime — a sender in one country needs different data from another.
- Purpose codes matter. Every order carries a
purposeCodedescribing why money is moving. See Purpose Codes. - Supporting documents. Some corridors need evidence beyond identity. Use Share Additional Docs for higher-volume senders.
- Transaction limits depend on the verification level reached — check Get Transaction Limits.
Go-live checklist
- Sender and recipient creation built from mandatory-fields, not hard-coded
- Verification flow live, including handling rejections
- Balance funded
- Purpose codes mapped to your transfer reasons
- Webhook signature verification tested
APIs you'll use
| Purpose | Endpoint |
|---|---|
| Sender requirements | Get Sender Mandatory Fields |
| Create a sender | Individual · Business |
| Recipient requirements | Get Recipient Mandatory Fields |
| Create a recipient | Individual · Business |
| Verify a sender | Standard KYC · Advanced KYC · KYC Status |
| Rate and fees | Get Exchange Rates |
| Create the payout | Create Order |
| Limits | Get Transaction Limits |
Updated about 6 hours ago
Did this page help you?