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:

TypeDescriptionFX Quote
Same-currencySource 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:

  1. Call Request FX Quote with the source and target accounts and either source_amount or target_amount.
  2. The response includes the FX rate, the resulting amounts, and expire_at — the moment until which the rate is guaranteed.
  3. Call Create Internal Transfer with the quote_id before the quote expires.
  4. 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)

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_at field, 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


Did this page help you?