Skip to content
Sign in
An image of the Stripe logo
Create account
Sign in
Home
Payments
Finance automation
Banking as a service
Developer tools
No-code
All products
Home
Payments
Finance automation
Home
Payments
Finance automation
Banking as a service
Developer tools
Overview
Online payments
In-person payments
Multiparty payments
After the payment
Add payment methods
Fraud detection
Payment Links
Stripe Checkout UI
    Overview
    How Checkout works
    Quickstart
    Fulfill your orders
    Migrate payment methods to the Dashboard
    Migrate from legacy Checkout
    Migrate Checkout to use Prices
    Customize your integration
    Customize branding
    Collect taxes
    Collect tax IDs
    Collect phone numbers
    Post-payment invoices
    Make line item quantities adjustable
    Add custom fields
    Let customers decide what to pay
    Boost revenue
    Present local currencies
    Configure subscription upsells
    Configure cross-sells
    Recover abandoned carts
    Collect consent for promotional emails
    Analyze conversion funnel
    Additional features
    Add discounts
    Add shipping
    Start a free trial without collecting payment details
    Set billing cycle date
    Manage limited inventory
    Guest customers
Stripe Elements UI
Financial Connections
Crypto
Identity
Climate
About the APIs
Regulation support
Implementation guides
Testing
Checkout
·
HomePayments

Present local currencies

Present prices and charge payments in your customer’s local currency using Checkout or Payment Links.

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, and transfer_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.

Command Line
curl https://api.stripe.com/v1/checkout/sessions \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
: \ -d "line_items[0][price]"="{{PRICE_ID}}" \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d success_url="https://example.com/success" \ -d cancel_url="https://example.com/cancel" \ --data-urlencode customer_email="test+location_FR@example.com"

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.

Was this page helpful?
Need help? Contact Support.
Watch our developer tutorials.
Check out our product changelog.
Questions? Contact Sales.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Login to your Stripe account and press Control + Backtick on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g. )
The Stripe Shell is best experienced on desktop.
$