Internal Account to Account Transfers
Transfers between Modulr Accounts
The Modulr Create a Payment (and batch equivalent) endpoints support internal (often known as book transfers) between your accounts on the platform.
The currency of the source and destination ACCOUNT on the Modulr platform must be the same or a validation error will be returned
To create an internal transfer, simply specify the type as ACCOUNT and provide your destination account
{
"destination": {
"type": "ACCOUNT",
"id": "A2100001"
},
"sourceAccountId": "A2100000",
"currency": "EUR",
"amount": 100,
"reference": "Example"
}Transfers between accounts in different currencies (New)
Where enabled in your contract, you can transfer funds between accounts within a customer in differing currencies. Modulr handles the foreign exchange (FX), offering rates close to the Mid-Market Rate (MMR) and competitive with other providers. Currency conversions are only supported where one of the currencies is GBP, EUR, or USD.
Currencies Supported
The following currencies are supported for transfers between accounts with currency conversion (FX).
| Currency Tier | Currencies |
|---|---|
| 1 | GBP, EUR, USD |
| 2 |
The Tier of currency determines the rate (in basis points, bps) above the Live FX Rate as determined by Modulr and its providers at the time of exchange. See default rates for currency exchange for more details
Restrictions
- Internal transfers including currency conversion cannot be performed as future dated payments.
- Both source and destination account belong to the same customer
- The payment does not require approval under the customer profile
Making a transfer that includes currency conversion
To perform an internal transfer including currency conversion is straightforward using the standard Create a Payment (and batch equivalent) endpoints.
The currency field determines which side of the exchange is fixed.
Either set it to the source account's currency to send an exact amount (with the destination amount determined by the rate),
or to the destination account's currency to receive an exact amount (with the source amount determined by the rate). The two examples below illustrate both cases:
An internal transfer of £1000 GBP from the source account to the equivalent amount of EUR (as determined by the rate) in the destination account
{
"destination": {
"type": "ACCOUNT",
"id": "A2100001"
},
"sourceAccountId": "A2100000",
"currency": "GBP",
"amount": 1000,
"reference": "Example"
}An internal transfer of €1100 to the destination account, deducting an equivalent amount of GBP (as determined by the rate) from the source account.
{
"destination": {
"type": "ACCOUNT",
"id": "A2100001"
},
"sourceAccountId": "A2100000",
"currency": "EUR",
"amount": 1100,
"reference": "Example"
}Notifications (webhooks) for the Payment Out and Payment In to the source and destination accounts respectively will contain details on the rates applied to the transaction, the Live FX rate and Mid-Market rate for reference.
These can also be retrieved at any time by inspecting the payment using the GET Payments endpoint providing the payment ID
All internal transfers are immediate including currency conversion using the exchange rate available to you in contract for the currency pair.
Using a previously obtained quote in the internal transfer
It is possible to call a separate currency conversion Quote API which will return a quote with a specific validity period that can be used when calling the Payment API to confirm a transfer with the rate given in the quote.
In this case, an additional block fx is included in the call to the create a payment.
{
"destination": {
"type": "ACCOUNT",
"id": "A2100001"
},
"sourceAccountId": "A2100000",
"currency": "EUR",
"amount": 1100,
"reference": "Example",
"fx": {
"quoteId": "FQR1234567"
}
}This example would execute the transfer at the rate agreed in quote FQR1234567 if it is within the validity period of the quote. If the validity period has expired, the transfer will not be executed and an error returned.
Note: The quote function is not required in many circumstances. It is intended for a Customer Experience (CX) where you wish to display a rate to your end user for acceptance before executing the internal transfer with currency conversion. For automated actions (e.g. treasury movements) the create payment API can be called without this parameter and the rate will be the available rate for the currency pair.
Updated about 12 hours ago

