Transfers
The remittance. Creates funding instructions, ends with a UTR.
Create a transfer#
/v1/transferssender_idstringRequiredA sender_… ID.
beneficiary_idstringRequiredAn active beneficiary with payouts_enabled: true.
amountstringRequiredDecimal string in currency.
currencystringRequiredUSD.
payout_currencystringRequiredINR.
fundingobjectRequiredrail: stablecoin or bank. For stablecoin, add asset and chain — see rails.
quote_lock_idstringFixes the rate. Omit to take the rate at conversion.
metadataobjectYour own key-value references.
{
"sender_id": "sender_01K5X8QR7M3PZ2VDNW4TBGCFH1",
"beneficiary_id": "beneficiary_01K5X8QP2A9WKXR6MJ4EYT7NDV",
"amount": "1000.00",
"currency": "USD",
"payout_currency": "INR",
"quote_lock_id": "quote_lock_01K5X8QS5H2NBVCXZ8MJQ3WRFT",
"funding": { "rail": "stablecoin", "asset": "USDT", "chain": "tron" },
"metadata": { "internal_ref": "REM-9912" }
}{
"object": "transfer",
"id": "transfer_01K5X8QT8D4RFMJ2NVWXZ9QBCH",
"sender_id": "sender_01K5X8QR7M3PZ2VDNW4TBGCFH1",
"beneficiary_id": "beneficiary_01K5X8QP2A9WKXR6MJ4EYT7NDV",
"amount": "1000.00",
"currency": "USD",
"payout_amount": "82833.30",
"payout_currency": "INR",
"rate": { "mid_market": "83.67000", "user": "82.83330", "locked": true },
"status": "funding",
"funding": {
"rail": "stablecoin",
"asset": "USDT",
"chain": "tron",
"deposit_address": "TA6DwXHASiXBNFEE1r6ZRy1L68UTkVVPi5",
"status": "awaiting_funds"
},
"payout": null,
"arrival_date": null,
"metadata": { "internal_ref": "REM-9912" },
"created": 1789041600,
"livemode": true
}Fund it#
| Rail | Returns |
|---|---|
stablecoin | deposit_address — send exactly amount of asset on chain |
bank | Account and routing numbers |
Match the chain and token exactly
Funds sent on a different chain or in a different token cannot be recovered.
The payout object#
Filled in once INR settles:
"payout": {
"status": "settled",
"amount": "82833.30",
"currency": "INR",
"unique_transaction_reference": "HDFCN52026091212345678",
"payment_advice_url": "https://...",
"settled_at": 1789048800
}unique_transaction_reference is the bank UTR — share it with the beneficiary.
Statuses#
Forward only. Never backwards.
createdquotedfundingfundeddeposit_confirmedcompliance_reviewconvertingpayout_initiatedpayout_settledcompletedHappy path#
| Status | Meaning | Your move |
|---|---|---|
created | Accepted | — |
quoted | Rate attached | — |
funding | Waiting for your funds | Send funds |
funded | Funds sent, unconfirmed | — |
deposit_confirmed | Funds received | — |
compliance_review | Regulatory checks | — |
converting | USD → INR | — |
payout_initiated | Sent to the beneficiary's bank | — |
payout_settled | Credited. UTR available | Share the UTR |
completed | Payment advice available | Store the advice |
Exceptions#
| Status | Meaning |
|---|---|
funding_failed | Funds didn't arrive as instructed |
deposit_reversed | Received funds were reversed |
compliance_input_required | More information needed — contact us |
compliance_hold | Held for review |
payout_hold | Payout paused |
payout_failed | Beneficiary bank rejected the credit |
payout_returned | Credit returned by the bank |
cancelled | Cancelled before funding |
Preview
Retry behaviour after payout_failed and payout_returned isn't final.
Rules#
- A status never moves backwards. Late or duplicate webhooks never regress it.
payout_settledmeans the bank accepted the credit. The balance may show a little later, depending on the rail.- Subscribe to
transfer.status.*webhooks instead of polling.
Retrieve#
/v1/transfers/:idList#
/v1/transfersFilter by status, beneficiary_id, created. Paginated.
Cancel#
/v1/transfers/:id/cancelBefore funds arrive only.
Preview a transfer#
/v1/transfers/:id/previewReturns the expected settlement date and a timeline accounting for weekends and Indian bank holidays.