Internal Transfers
Move funds between Infinia virtual accounts, in the same currency or across currencies with FX quotes and rate locking.
What are Internal Transfers?
An Internal Transfer moves funds between two Infinia virtual accounts. There are two types of internal transfers:
| Type | Description | FX Quote |
|---|---|---|
| Same-currency | Source and target accounts share the same currency. Funds are moved without any conversion. | Not used |
| Cross-currency (FX) | Source and target accounts hold different currencies. Funds are converted at an FX rate, locked in advance with a quote. | Used to lock the rate |
Internal transfers are the building block for treasury operations, on-ramp and off-ramp conversions, and pre-funding client accounts (see Fund Flows).
Same-Currency Transfers
When the source and target accounts hold the same currency, simply call Create Internal Transfer with the source and target account IDs and the amount. No quote is involved and no conversion is applied.
Settlement time. Same-currency transfers are not always instant. Virtual accounts may be held at different underlying banks, so the settlement time depends on where the source and target accounts are held:
- Same bank: the transfer is typically reflected immediately.
- Different banks: the transfer is executed over interbank rails and may take longer to settle.
Track completion through the transfer's status and the internal transfer webhook, rather than assuming immediate settlement.
Cross-Currency (FX) Transfers
When the source and target accounts hold different currencies, the transfer involves a currency conversion. The exchange rate is locked in advance with an FX quote, which you then reference when executing the transfer.
Flow:
- Call Request FX Quote with the source and target accounts and either
source_amountortarget_amount. - The response includes the FX
rate, the resulting amounts, andexpire_at— the moment until which the rate is guaranteed. - Call
Create Internal Transferwith thequote_idbefore the quote expires. - The transfer executes at the locked rate. Results are notified via webhook.
A quote must be used before its
expire_at. If it expires, request a new quote — expired quotes cannot be executed.
Longer quote lock times (requested_lock_time)
requested_lock_time)By default, quotes are valid for a short window. In some currencies we support longer-lived quotes: pass requested_lock_time (in seconds, between 5 and 1800) when requesting the quote to ask for a longer validity window.
Keep in mind:
- Longer-lived quotes must be requested beforehand to your account manager — the feature has to be enabled for your account before you can use
requested_lock_time. - A longer lock time results in a wider spread, making the quote more expensive — you are paying for rate protection.
- This feature is not supported in all markets. The actual expiration is always returned in the
expire_atfield, so rely on that value rather than the requested one.
Longer quote lock times are currently available for MXN, with locks of up to 30 minutes (1800 seconds). Reach out to your account manager to enable them, or if you need extended quotes in other currencies.
Learn more
- Internal Transfers API Reference
- FX Quotes API Reference
- Fund Flows — how internal transfers implement on-ramp, off-ramp, and pre-funding patterns
- Supported Currency & Stablecoin Pairs
Updated 1 day ago

