Present local currencies
Prospective customers might abandon the checkout flow when prices aren’t presented in their local currency, and some payment methods might also require local currency.
For businesses in the US and Canada, present local currency prices for one-time payments by turning on automatic currency conversion using Checkout and Payment Links, without the need to update your integration.
Before you begin
Depending on the user selected currency, the CheckoutSession and the underlying PaymentIntent objects update automatically to reflect the selected currency and amount. Because presenting in a customer’s local currency changes both the underlying CheckoutSession object and the PaymentIntent’s currency, make sure that your custom integrations are set up for handling the new localized currencies.
Automatic currency conversion is a Checkout and Payment Links feature available to businesses in the US and Canada that converts prices based on location. Customers see prices converted to the local currency, along with the exchange rate and supported payment methods. They still have the option to pay in the original currency you set for your prices. Prices convert using the latest Stripe-provided exchange rate, which we lock for the lifetime of the Checkout Session (up to 24 hours) through settlement. The lock stays in place as long as the exchange rate doesn’t change by more than 2%. Specify the currency of your Checkout Session or set multi-currency prices to override automatically converted prices.
Supported currencies and integrations
Automatic currency conversion converts Checkout and Payment Links for one-time payments from USD or CAD prices for customers in the following markets:
- Austria
- Australia
- Belgium
- Canada
- Croatia
- Cyprus
- Estonia
- Finland
- France
- Germany
- Greece
- Ireland
- Italy
- Japan
- Latvia
- Lithuania
- Luxembourg
- Malta
- Mexico
- Netherlands
- Norway
- Portugal
- Singapore
- Slovakia
- Slovenia
- Spain
- Sweden
- Switzerland
- United Kingdom
- United States
Automatic currency conversion requires the currency for your prices to be the same as your default settlement currency in USD or CAD. Checkout Sessions won’t convert automatically if the currency value is set on creation. Any standard prices you create on a product and inline prices defined on line_items that use price_data automatically convert during checkout. Automatic currency conversion doesn’t apply for any Sessions with multi-currency prices, subscriptions, or the following integrations:
- Checkout Sessions using Connect parameters (for example,
application_fee_amount
,on_behalf_of
, andtransfer_data
). These are the most common Connect integrations. - Checkout Sessions using client-only integration.
- Checkout Sessions using manual capture.
For Sessions that aren’t supported by automatic currency conversion, customers are presented prices in the original currency that you’ve set your prices in.
Enable automatic currency conversion
Enable automatic currency conversion in test mode or live mode in your Automatic currency conversion settings. Disabling automatic currency conversion doesn’t affect Checkout Sessions that have already been converted. Learn more about the fees associated with automatic currency conversion.
Test currency presentment
In the Checkout Session creation method, pass in a customer_email that includes a suffix in a +location_XX
format in the local part of the email. XX
must be a valid two-letter ISO country code.
When you visit the URL for the Session created with customer_email
, you see the same currency as your customer when they’re in the specified country.
As an alternative to customer_email
, you can also create a Customer and specify their email that contains the +location_XX
suffix.
When it’s possible to present the customer’s local currency in Checkout, the Checkout Session object changes. Fields like currency
, payment_method_types
, and amount_total
reflect the local currency and price.
For Payment Links, you can use the prefilled_email
URL parameter to test currency presentment for customers in different countries. Pass in an email address that includes a suffix in a +location_XX
format in the local part of the email where XX
is a valid two-letter ISO country code.
Exchange rate
We lock the exchange rate for the duration of the Checkout Session (up to 24 hours) and guarantee the same rate for settlement if the rate doesn’t change by more than 2%. If the exchange rate changes by more than 2% from the Checkout locked rate or if you change your default settlement currency, we might use an updated exchange rate when calculating your payout.
Refunds
We issue refunds in the currency that your customer pays in using latest Stripe-provided exchange rate to calculate the refund amount. You might pay more or less to cover the refund depending on how rates change. For example, if your settlement currency is CAD and you process a 60 USD payment with a Stripe-provided rate of 1.37 CAD per 1 USD, the converted amount is 82.12 CAD (excluding Stripe fees). If the Stripe-provided rate is 1.35 CAD per 1 USD at the time of refund, the amount deducted from your account balance would be 81 CAD.
If you’re using the Dashboard to refund, we display the currency that you use for payments.
If you have a custom refund integration using the API, make sure the refund amount is in the correct currency.
API and webhooks
Depending on the user selected currency, both the CheckoutSession and the underlying PaymentIntent objects update automatically to reflect the selected currency and amount. After a user pays in local currency, the CheckoutSession object’s currency and total amount is in local currency and contains a currency_conversion
hash to reflect what the user would have paid in the default currency. Learn more about what’s deposited in your account after fees.
The CheckoutSession completed event webhook contains the currency_conversion
hash that includes the amount_total
and amount_subtotal
in the source_currency
. The amounts reflect what your customer would have paid in the source currency.
{ "id": "evt_123456789", "object": "event", "type": "checkout.session.completed", // ...other webhook attributes "data": { "object": { "id": "cs_12356789", "object": "checkout.session", "currency": "cad",
Reporting
Review your reporting and other integrations to make sure that they can handle the Webhooks and PaymentIntent objects in the local currency. To determine what your customer would have paid in the default currency, use the currency_conversion
hash on the CheckoutSession object. Use the BalanceTransactions API to determine how much you pay after fees.
Tax behavior
If you enable Stripe Tax, the same tax behavior defined on the price applies when you convert tax amounts to your customer’s local currency. Learn more about tax behavior for products and prices.
Local payment methods
Checkout only renders the payment methods that the currency supports. For example, Checkout only presents iDEAL as a payment method if prices are converted to eur
based on your customer’s location, and the customer chooses to pay in EUR. Learn more about supported currencies in your payment methods settings.