Work with multiple currencies
Manage multiple currencies across charges, transfers, payouts and application fees.
Stripe supports processing charges in 135+ currencies. This allows you to present prices in a customer’s native currency and avoid currency conversion costs for customers. Local presentment can also improve customer conversion and payment authorisation rates.
Currency conversion (FX) can occur in payments, transfers, payouts, application fees, and other types of transactions. FX takes place when the starting currency of a funds flow is different from the destination currency. For example, payments FX occurs when the presentment currency differs from the settlement currency. On transfers, FX occurs when the balance of the platform sending the transfer is in a different currency than the balance of the connected account receiving it.
Use the FX Quotes API in Connect
Use the FX Quotes API to localise prices in your customers’ currencies and reduce any uncertainty around changing exchange rates. You can specify an FX quote when creating a PaymentIntent
with your customer’s presentment currency. You can also specify an FX quote when creating a transfer to confirm the settlement amount on the connected account. For details, see FX quotes.
Example FX scenarios
Across different Connect charge types, FX occurs in the following different ways.
Direct charges
Direct charges are always converted to the connected account’s default currency from the presentment currency. The application fee is converted to the platform’s default currency.
For example, say you accept a charge for a connected account in USD. The connected account receives funds in EUR. The funds sent to the connected account convert to EUR and the application fee converts back to your platform in USD from EUR.
You can use extended rate quotes from the FX Quotes API to reduce FX uncertainty on direct charges. When creating a direct charge, pass the FX quote ID into the payment intent. Specify the end-customers currency as the from_
. Specify your connected account’s default settlement currency as the to_
.
Create an FX quote
Although direct charges are in the connected account’s default currency, your platform receives the application fees for direct charges in your platform’s default currency. Using the extended rate quotes on direct charges in the FX Quotes API doesn’t affect the FX rate at which application fees convert.
Bank account or debit card availability | Conversion action |
---|---|
Available for the settlement currency | No conversion |
Not available for the settlement currency | Stripe converts the application fee based on the platform account’s default currency |
If your platform doesn’t use application fees and retains a portion of the charges instead, those funds are paid out the same way as other charges on the platform account.
Destination charges without on_behalf_of
When processing destination charges without on_
, Stripe first converts them from the presentment currency to the platform’s default currency. The funds sent to the connected account then convert to the connected account’s default currency.
- If you use
application_
, we collect the application fee after the conversion to the connected account’s default currency. The fee remains in that currency when added to the platform.fee_ amount - If you use
transfer_
, we collect the fee after the first currency conversion and it remains in the platform’s default currency.data[amount]
Note
This charge flow is subject to Stripe’s regional and cross-border policies.
For example, say you accept a destination charge for a connected account in EUR. The connected account settles in GBP, and your platform settles in USD. The charge converts from EUR to USD, and the funds sent to the connected account convert to GBP.
- If you use
application_
, the application fee amount converts from EUR to GBP and we take it from the amount that settles on the connected account.fee_ amount - If you use
transfer_
, the fee is retained in USD after converting it from the initial presentment currency.data[amount]
You can use extended rate quotes from the FX Quotes API to reduce FX uncertainty on destination charges without on_
. When creating a charge, pass the FX quote ID into the payment intent. In the above example this gives you certainty about the FX rate used for the conversion from EUR (the end-customer currency) to USD (the platform currency). In FX quotes, specify the end-customer’s currency as the from_
. Specify your platform’s default settlement currency as the to_
. You can’t use FX quotes for any conversion occurring on the transfer from the platform to the connected account, nor on any conversion of the application fees.
Creating an FX quote
We don’t convert application fees collected using the application_
parameter aren’t again for destination charges – platforms always receive application fees in the connected account’s settlement currency. Use the transfer_
parameter to transfer less of the transaction amount and collect fees in the platform’s default settlement currency.
Destination charges with on_behalf_of
When processing destination charges with on_
, Stripe first converts them from the presentment currency to the connected account’s default currency. The application fee remains in the connected account’s currency, regardless of whether you use application_
or transfer_
.
For example, the connected account accepts a charge in USD but settles in EUR. The charge converts to EUR and we send it to the connected account in EUR. We collect the fee in EUR, regardless of whether you use application_
or transfer_
.
You can use extended rate quotes from the FX Quotes API to reduce FX uncertainty on destination charges with on_behalf_of. When creating a charge, pass the FX Quote ID into the payment intent. In the above example this gives you certainty of the FX rate used for the conversion from USD (the end-customer currency) to EUR (the connected account currency). In FX quotes, specify the end-customers currency as the from_
. Specify your connected account’s default settlement currency as the to_
.
Creating an FX quote
We don’t convert application fees collected using the application_
parameter again for destination charges – platforms always receive application fees in the connected account’s settlement currency. Use the transfer_
parameter to transfer less of the transaction amount and collect fees in the platform’s default settlement currency.
If you create charges on the platform using the destination
or on_
parameters, you might accumulate balances in multiple currencies. If you don’t have bank accounts for these other currencies, Stripe provides a way to pay out balances in non-default currencies to your platform’s default bank account.
Stripe converts the currencies and they’re represented as manual payouts with currency
set as the currency of the source balance:
As long as there are sufficient funds in the balance for the specified currency, Stripe automatically converts the funds to the default bank account’s currency. We don’t support using FX quotes on payouts.
Note
This charge flow is subject to Stripe’s regional and cross-border policies.
Separate charges and transfers without on_behalf_of
We convert separate charges to the platform’s default currency from the presentment currency and the platform later transfers the funds to the connected account. The application_
and transfer_
parameters aren’t used to collect fees, because the platform can choose the appropriate amount to send at transfer time.
Take a USD charge as an example. The platform account’s default currency is GBP. Currency conversion from USD to GBP occurs as part of the charge leg. When the platform transfers these funds to a connected account with EUR as their default currency, another currency conversion occurs, this time from GBP to EUR.
You can use extended rate quotes from the FX Quotes API to reduce FX uncertainty when using separate charges and transfers without on_
. This applies on both the charge leg and the stand-alone transfer leg.
FX quote for the payment
FX quote for the transfer
When creating a charge, pass the FX quote ID into the payment intent. In the above example, this gives you certainty of the FX rate used for the conversion from USD (end-customer currency) to GBP (Connect platform currency). In FX quotes, specify the end-customer’s currency as the from_
. Specify your platform’s default settlement currency as the to_
.
When creating a transfer, pass the FX quote ID into the transfer. In the above example, this gives you certainty of the FX rate used for the conversion from GBP (the Connect platform currency) to EUR (the connected account currency). In FX quotes, specify the Connect platform’s currency as the from_
. Specify your connected account’s default currency as the to_
.
Note
This charge flow is subject to Stripe’s regional and cross-border policies.
Separate charges and transfers with on_behalf_of
We convert separate charges to the connected account’s default currency from the presentment currency, and the platform later transfers the funds to the connected account. We don’t use the application_
and transfer_
parameters to collect fees, because the platform can choose the appropriate amount to send at transfer time.
Take a USD charge as an example. The platform account’s default currency is GBP. Currency conversion from USD to GBP occurs as part of the charge leg. When the platform transfers these funds to a connected account with EUR as their default currency, another currency conversion occurs, this time from GBP to EUR.
You can use extended rate quotes from the FX Quotes API to reduce FX uncertainty when using separate charges and transfers with on_
. This applies on both the charge leg and the stand-alone transfer leg
FX quote for the payment
FX quote for the transfer
When creating a charge, pass the FX quote ID into the payment intent. In the above example this gives you certainty of the FX rate used for the conversion from USD (end-customer currency) to GBP (Connect platform currency). In FX quotes, specify the end-customers currency as the from_
. Specify your platform’s default settlement currency as the to_
.
When creating a transfer, pass the FX quote ID into the transfer. In the above example this gives you certainty of the FX rate used for the conversion from GBP (Connect platform currency) to EUR (connected account currency). In FX quotes, specify the Connect platform’s currency as the from_
. Specify your connected account’s default currency as the to_
.
Note
This charge flow is subject to Stripe’s regional and cross-border policies.
FX on refunds
When you refund a payment that was originally converted to another currency, we use the live FX rate at the time of the refund. This is true regardless of whether you used FX quotes to set your FX rate on the original payment. Stripe doesn’t charge an FX fee for any conversion on the refund. Stripe doesn’t refund the FX fee charged on the original transaction.
FX on payouts
The settlement currency is the currency that you can receive payouts in. See the supported settlement currencies.
Depending on bank account or debit card availability, the following occurs when paying out a balance:
Bank account or debit card availability | Conversion action |
---|---|
Available for the currency | No conversion |
Multiple bank accounts or debit cards available for the currency | No conversion – Stripe uses the bank account or debit card set as default_ |
Not available for the currency | Stripe converts the payout balance based on the Stripe account’s default currency |