# Use the FX Quotes API in Connect Select which currencies to localize, lock in exchange rates, and decide whether to pass along fees to your customers. Use the [FX Quotes API](https://docs.stripe.com/api/fx_quotes.md?api-version=2025-07-30.preview) to localize prices in your customers’ currencies and reduce any uncertainty around changing exchange rates. You can specify an FX quote when creating a [PaymentIntent](https://docs.stripe.com/api/payment_intents/create.md) with your customer’s presentment currency. You can also specify an FX quote when [creating a transfer](https://docs.stripe.com/api/transfers/create.md) to confirm the settlement amount on the connected account. For details, see [FX quotes](https://docs.stripe.com/api/fx_quotes.md?api-version=2025-07-30.preview). ## Example FX scenarios Across different Connect [charge types](https://docs.stripe.com/connect/charges.md#types), FX occurs in the following different ways. > #### Multi-currency settlement > > If the connected account has enabled the presentment currency through [multi-currency settlement](https://docs.stripe.com/connect/multicurrency-settlement.md), Stripe converts to that currency instead of the default currency described in the following examples. ### Direct charges [Direct charges](https://docs.stripe.com/connect/direct-charges.md) are always converted to the connected account’s default currency from the [presentment currency](https://docs.stripe.com/currencies.md#presentment-currencies). The [application fee](https://docs.stripe.com/connect/direct-charges.md#collect-fees) 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](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#quote-durations-and-rate-changes) from the FX Quotes API to reduce FX uncertainty on direct charges. When creating a direct charge, pass the [FX quote ID into the PaymentIntent](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#use-localized-prices-payments). Specify the end customer’s currency as the `from_currency`. Specify your connected account’s default settlement currency as the `to_currency`. #### Create an FX quote ```curl curl https://api.stripe.com/v1/fx_quotes \ -u "<>:" \ -H "Stripe-Version: 2025-03-31.preview" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d to_currency=gbp \ -d "from_currencies[]=usd" \ -d "from_currencies[]=eur" \ -d lock_duration=hour \ -d "usage[type]=payment" ``` Although direct charges are in the connected account’s default currency, your platform receives the [application fees](https://docs.stripe.com/api.md#application_fees) for [direct charges](https://docs.stripe.com/connect/direct-charges.md) 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](https://docs.stripe.com/connect/destination-charges.md) without `on_behalf_of`, Stripe first converts them from the [presentment currency](https://docs.stripe.com/currencies.md#presentment-currencies) 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_fee_amount`, we collect the [application fee](https://docs.stripe.com/connect/destination-charges.md?fee-type=application-fee#collect-fees) after the conversion to the connected account’s default currency. The fee remains in that currency when added to the platform. - If you use `transfer_data[amount]`, we collect the fee after the first currency conversion and it remains in the platform’s default currency. > This charge flow is subject to Stripe’s regional and [cross-border policies](https://docs.stripe.com/connect/cross-border-payouts.md). 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_fee_amount`, the application fee amount converts from EUR to GBP and we take it from the amount that settles on the connected account. - If you use `transfer_data[amount]`, the fee is retained in USD after converting it from the initial presentment currency. You can use [extended rate quotes](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#quote-durations-and-rate-changes) from the FX Quotes API to reduce FX uncertainty on destination charges without `on_behalf_of`. When creating a charge, pass the [FX quote ID into the PaymentIntent](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#use-localized-prices-payments). 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_currency`. Specify your platform’s default settlement currency as the `to_currency`. You can’t use FX quotes for any conversion occurring on the transfer from the platform to the connected account, or on any conversion of the application fees. #### Creating an FX quote ```curl curl https://api.stripe.com/v1/fx_quotes \ -u "<>:" \ -H "Stripe-Version: 2025-03-31.preview" \ -d to_currency=gbp \ -d "from_currencies[]=usd" \ -d "from_currencies[]=eur" \ -d lock_duration=hour \ -d "usage[type]=payment" \ -d "usage[payment][destination]={{CONNECTEDACCOUNT_ID}}" ``` We don’t convert application fees collected using the `application_fee_amount` parameter again for [destination charges](https://docs.stripe.com/connect/destination-charges.md). Platforms always receive application fees in the connected account’s settlement currency. Use the `transfer_data[amount]` 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](https://docs.stripe.com/connect/destination-charges.md) with `on_behalf_of`, Stripe first converts them from the [presentment currency](https://docs.stripe.com/currencies.md#presentment-currencies) to the connected account’s default currency. The [application fee](https://docs.stripe.com/connect/destination-charges.md?fee-type=application-fee#collect-fees) remains in the connected account’s currency, regardless of whether you use `application_fee_amount` or `transfer_data[amount]`. 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_fee_amount` or `transfer_data[amount]`. You can use [extended rate quotes](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#quote-durations-and-rate-changes) 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 PaymentIntent](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#use-localized-prices-payments). 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 customer’s currency as the `from_currency`. Specify your connected account’s default settlement currency as the `to_currency`. #### Creating an FX quote ```curl curl https://api.stripe.com/v1/fx_quotes \ -u "<>:" \ -H "Stripe-Version: 2025-03-31.preview" \ -d to_currency=gbp \ -d "from_currencies[]=usd" \ -d "from_currencies[]=eur" \ -d lock_duration=hour \ -d "usage[type]=payment" \ -d "usage[payment][on_behalf_of]={{CONNECTEDACCOUNT_ID}}" \ -d "usage[payment][destination]={{CONNECTEDACCOUNT_ID}}" ``` We don’t convert application fees collected using the `application_fee_amount` parameter again for [destination charges](https://docs.stripe.com/connect/destination-charges.md). Platforms always receive application fees in the connected account’s settlement currency. Use the `transfer_data[amount]` 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_behalf_of` 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](https://docs.stripe.com/connect/currencies/fx-quotes-api.md#fx-on-payouts) with `currency` set as the currency of the source balance: ```curl curl https://api.stripe.com/v1/payouts \ -u "<>:" \ -d amount=1000 \ -d currency=xaf ``` If 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. > This charge flow is subject to Stripe’s regional and [cross-border policies](https://docs.stripe.com/connect/cross-border-payouts.md). ### Separate charges and transfers without on_behalf_of We convert [separate charges](https://docs.stripe.com/connect/separate-charges-and-transfers.md) to the platform’s default currency from the [presentment currency](https://docs.stripe.com/currencies.md#presentment-currencies) and the platform later transfers the funds to the connected account. The `application_fee_amount` and `transfer_data[amount]` 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. 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](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#quote-durations-and-rate-changes) from the FX Quotes API to reduce FX uncertainty when using separate charges and transfers without `on_behalf_of`. This applies on both the charge and the stand-alone transfer. #### FX quote for the payment ```curl curl https://api.stripe.com/v1/fx_quotes \ -u "<>:" \ -H "Stripe-Version: 2025-03-31.preview" \ -d to_currency=gbp \ -d "from_currencies[]=usd" \ -d "from_currencies[]=cad" \ -d lock_duration=hour \ -d "usage[type]=payment" ``` #### FX quote for the transfer ```curl curl https://api.stripe.com/v1/fx_quotes \ -u "<>:" \ -H "Stripe-Version: 2025-03-31.preview" \ -d to_currency=eur \ -d "from_currencies[]=gbp" \ -d lock_duration=five_minutes \ -d "usage[type]=transfer" \ -d "usage[transfer][destination]={{CONNECTEDACCOUNT_ID}}" ``` When creating a charge, pass the [FX quote ID into the PaymentIntent](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#use-localized-prices-payments). In the above example, this gives you certainty of the FX rate used for the conversion from USD (the end customer currency) to GBP (the Connect Platform currency). In FX quotes, specify the end customer’s currency as the `from_currency`. Specify your platform’s default settlement currency as the `to_currency`. When creating a transfer, pass the [FX quote ID into the transfer](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#use-localized-prices-payments). 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_currency`. Specify your connected account’s default currency as the `to_currency`. > This charge flow is subject to Stripe’s regional and [cross-border policies](https://docs.stripe.com/connect/cross-border-payouts.md). ### Separate charges and transfers with on_behalf_of We convert [separate charges](https://docs.stripe.com/connect/separate-charges-and-transfers.md) to the connected account’s default currency from the [presentment currency](https://docs.stripe.com/currencies.md#presentment-currencies), and the platform later transfers the funds to the connected account. We don’t use the `application_fee_amount` and `transfer_data[amount]` 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 connected account’s default currency is EUR. Currency conversion from USD to EUR occurs as part of the charge. There is no currency conversion during the transfer because the funds are already in the connected account’s currency. You can use [extended rate quotes](https://docs.stripe.com/payments/currencies/localize-prices/fx-quotes-api.md#quote-durations-and-rate-changes) from the FX Quotes API to reduce FX uncertainty when using separate charges and transfers with `on_behalf_of`. #### FX quote for the charge ```curl curl https://api.stripe.com/v1/fx_quotes \ -u "<>:" \ -H "Stripe-Version: 2025-03-31.preview" \ -d to_currency=gbp \ -d "from_currencies[]=usd" \ -d lock_duration=hour \ -d "usage[type]=payment" \ -d "usage[payment][on_behalf_of]={{CONNECTEDACCOUNT_ID}}" ``` > This charge flow is subject to Stripe’s regional and [cross-border policies](https://docs.stripe.com/connect/cross-border-payouts.md). ### 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](https://support.stripe.com/questions/h2-2023-changes-to-currency-conversion-fees-for-refunds) charged on the original transaction. ### FX on payouts The settlement currency is the currency that you can receive *payouts* (A payout is the transfer of funds to an external account, usually a bank account, in the form of a deposit) in. See the [supported settlement currencies](https://docs.stripe.com/connect/payouts-connected-accounts.md#supported-settlement). Depending on bank account or debit card availability, the following occurs when paying out a [balance](https://docs.stripe.com/connect/account-balances.md): | 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_for_currency` | | Not available for the currency | Stripe converts the payout balance based on the Stripe account’s default currency |