Skip to content
Create account or Sign in
The Stripe Docs logo
/
Ask AI
Create accountSign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
APIs & SDKsHelp
Overview
About Stripe payments
Upgrade your integration
Payments analytics
Online payments
OverviewFind your use caseUse Managed Payments
Use Payment Links
Use a prebuilt checkout page
Build a custom integration with Elements
Build an in-app integration
In-person payments
Terminal
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment scenarios
Handle multiple currencies
    Localize prices
      Adaptive Pricing
      FX Quotes API
      Manual currency prices
    Settle in additional currencies
Custom payment flows
Flexible acquiring
Orchestration
Beyond payments
Incorporate your company
Crypto
Agentic commerce
Financial Connections
Climate
Understand fraud
Radar fraud protection
Manage disputes
Verify identities
United States
English (United States)
HomePaymentsHandle multiple currenciesLocalize prices

Adaptive Pricing

Let customers pay in their local currency with Adaptive Pricing.

Note

Adaptive Pricing is only supported for Elements with the Checkout Sessions API. Adaptive Pricing isn’t supported on the Payment Intents API.

Adaptive Pricing lets your customers pay in their local currency in more than 150 countries. With Adaptive Pricing, Stripe infers the presentment currency from the customer’s public IP address, then automatically calculates the localized price and handles all currency conversion.

Use Adaptive Pricing to:

  • Display pricing in local currencies based on location using the Currency Selector Element
  • Calculate prices in real-time using an exchange rate guaranteed for 24 hours
  • Unlock payment methods that require local currency
  • Facilitate compliance when presenting supported currencies
A selector showing Euros and US Dollars as options, with Euros selected, and the order summary showing all prices in Euros.

Integration effort

Low code

Fees

View information on fees and our FAQ.

UI customization

Place the Currency Selector Element anywhere on your checkout page.

Enable Adaptive Pricing in the Dashboard
Dashboard

Manage Adaptive Pricing for Checkout in your Payments settings in the Dashboard. You can enable Adaptive Pricing in a sandbox and live mode. Disabling Adaptive Pricing doesn’t affect Checkout Sessions that have already been converted.

Localize and format prices
Client-side

It’s important to display prices consistently according to the selected currency throughout your checkout page, including line items, shipping rates, discounts, tax, and totals.

When using Embedded Components with Adaptive Pricing, the Embedded Components Session object can contain localized values if Adaptive Pricing is active. You should design your integration as though the session could contain amounts and currencies relevant to any country your buyers might be visiting your site from. This workflow relies on preformatted fields like session.total.total.amount. The Checkout Session object returned in the Stripe API remains in the same currency set in your Stripe integration with customer context available under presentment_details and it won’t match exactly with the Embedded Components Session object.

The Session object provides formatted currency values that you can use directly in your UI.

checkout.js
const { actions } = await checkout.loadActions(); const { total } = actions.getSession(); // Display the formatted amounts in your UI document.getElementById('order-total').textContent = total.total.amount;

Render the Currency Selector Element
Client-side

The Currency Selector Element is an embeddable UI component that facilitates Adaptive Pricing. Display it near the order total.

Note

You are responsible for complying with laws that apply to price localization in your or your customers’ regions. You must render the Currency Selector Element in your use of Adaptive Pricing with Elements. Stripe recommends you consult your legal counsel for advice specific to your business.

Create a container DOM element to mount the Currency Selector Element. Then create an instance of the Currency Selector Element using checkout.createCurrencySelectorElement and mount it by calling element.mount, providing either a CSS selector or the container DOM element. You can decide to only create the Currency Selector Element when the currencyOptions are populated. If there are no currencyOptions and the Currency Selector Element is mounted, nothing displays.

index.html
<div id="currency-selector"></div>
checkout.js
const currencySelectorElement = checkout.createCurrencySelectorElement(); currencySelectorElement.mount('#currency-selector');

Design best practices

We offer a configurable Currency Selector Element for your checkout page. Follow these best practices when choosing where to place your selector:

  • Add the Currency Selector near where payment details are entered, ideally directly above the Payment Element, since the selected currency might affect available payment methods.
  • If the Payment Element isn’t initially visible (due to multi-step flows or being lower on the page), position the Currency Selector near the total price display.
  • If you’re using the Express Checkout Element, we recommend placing the Currency Selector Element above the Express Checkout Element to ensure your customers know what currency they will be charged in.
  • Apply these tips to your page layouts for all screen sizes.
The Currency Selector Element placed above the Payment Element

Do

Place the Currency Selector above the Payment Element. If you’re only accepting cards, you can also place it directly below the Payment Element.

Mark your integration as ready for Adaptive Pricing
Client-side

Once you have localized and formatted your prices and rendered the currency selector, mark your integration as ready for Adaptive Pricing by setting the adaptivePricing.allowed parameter when you initialize checkout.

checkout.js
const checkout = stripe.initCheckout({ clientSecret, // Mark your integration as ready for Adaptive Pricing adaptivePricing: { allowed: true } }); // Use `checkout` to build your checkout page

After your integration is marked as ready, you can manage Adaptive Pricing in your Payments settings in the Dashboard, or per Checkout Session using the adaptive_pricing.enabled parameter.

Configure local payment methods
Dashboard

Adaptive Pricing can increase the usage of local payment methods by ensuring customers have the option to pay in their local currency and with payment methods most relevant to them. As an example, 70% of all e-commerce transactions in the Netherlands use iDEAL, but it only works with EUR. You can configure which payment methods you accept in your payment methods settings if you use dynamic payment methods. Adaptive Pricing provides access to the following payment methods that require presenting in local currency:

  • Amazon Pay
  • Bancontact
  • BLIK
  • EPS
  • iDEAL
  • Link
  • P24
  • Pix
  • South Korean cards
  • Naver Pay
  • Kakao Pay
  • PAYCO
  • Revolut Pay
  • Samsung Pay
  • Wechat Pay

Testing

To test local currency presentment, pass in a location-formatted 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.

For example, to test currency presentment for a customer in France, pass in an email like test+location_FR@example.com.

When you view your checkout page with the Currency Selector Element and Payment Element using a CheckoutSession created with a location-formatted email, you see the same currency as a customer does in the specified country.

When you create a Checkout Session, pass the location-formatted email as customer_email to simulate Checkout from a particular country.

Command Line
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/checkout/sessions \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d "line_items[0][price]"={{PRICE_ID}} \ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d ui_mode=custom \ -d "adaptive_pricing[enabled]"=true \ -d return_url={{RETURN_URL}} \ --data-urlencode customer_email="test+location_FR@example.com"

You can also create a Customer and specify their email that contains the +location_XX suffix. Stripe test cards work as usual.

Restrictions

Adaptive Pricing isn’t available for businesses using Elements with the Payment Intents API.

Adaptive Pricing isn’t supported for Indian businesses.

Additionally, Adaptive Pricing requires the currency for your prices to be one of your settlement currencies. Prices automatically convert during checkout. This applies to prices you create and reference with a price ID and prices you create inline with price_data when you create a Checkout Session.

If you process payments through a platform, we require your platform’s integration currency to be the settlement currency of the merchant of record on the charge.

Adaptive Pricing doesn’t apply for Checkout Sessions that:

  • Contain explicitly defined manual currency prices.
  • Are in subscription mode.
  • Use capture_method as manual.
  • Use custom amounts.

Checkout Sessions that aren’t supported by Adaptive Pricing present prices in the original currency that you’ve set your prices in.

See our support page for more information.

Supported currencies

Businesses in supported regions can automatically convert prices to the local currencies of their customers in the following markets:

North America

  • Antigua and Barbuda (XCD)
  • Aruba (AWG)
  • Bahamas (BSD)
  • Barbados (BBD)
  • Belize (BZD)
  • Bermuda (BMD)
  • Canada (CAD)
  • Cayman Islands (KYD)
  • Costa Rica (CRC)
  • Dominica (XCD)
  • Dominican Republic (DOP)
  • Grenada (XCD)
  • Guatemala (GTQ)
  • Haiti (HTG)
  • Honduras (HNL)
  • Mexico (MXN)
  • Jamaica (JMD)
  • Panama (PAB)
  • Saint Kitts and Nevis (XCD)
  • Saint Lucia (XCD)
  • Saint Vincent and the Grenadines (XCD)
  • Trinidad and Tobago (TTD)
  • United States (USD)

South America

  • Brazil (BRL)
  • Bolivia (BOB)
  • Colombia (COP)
  • Chile (CLP)
  • Falkland Islands (FKP)
  • Guyana (GYD)
  • Paraguay (PYG)
  • Peru (PEN)
  • Uruguay (UYU)

Europe

  • Albania (ALL)
  • Andorra (EUR)
  • Austria (EUR)
  • Belgium (EUR)
  • Bosnia and Herzegovina (BAM)
  • Croatia (EUR)
  • Cyprus (EUR)
  • Czech Republic (CZK)
  • Denmark (DKK)
  • Estonia (EUR)
  • Finland (EUR)
  • France (EUR)
  • Germany (EUR)
  • Gibraltar (GIP)
  • Greece (EUR)
  • Hungary (HUF)
  • Iceland (ISK)
  • Ireland (EUR)
  • Italy (EUR)
  • Latvia (EUR)
  • Lithuania (EUR)
  • Luxembourg (EUR)
  • Malta (EUR)
  • Monaco (EUR)
  • Moldova (MDL)
  • Montenegro (EUR)
  • Netherlands (EUR)
  • North Macedonia (MKD)
  • Norway (NOK)
  • Poland (PLN)
  • Portugal (EUR)
  • Romania (RON)
  • San Marino (EUR)
  • Serbia (RSD)
  • Slovakia (EUR)
  • Slovenia (EUR)
  • Spain (EUR)
  • Sweden (SEK)
  • Switzerland (CHF)
  • Ukraine (UAH)
  • United Kingdom (GBP)
  • Vatican City (EUR)

Asia

  • Afghanistan (AFN)
  • Armenia (AMD)
  • Azerbaijan (AZN)
  • Bangladesh (BDT)
  • Brunei (BND)
  • Cambodia (KHR)
  • China (CNY)
  • Georgia (GEL)
  • Hong Kong (HKD)
  • India (INR)
  • Indonesia (IDR)
  • Israel (ILS)
  • Japan (JPY)
  • Kazakhstan (KZT)
  • Kyrgyzstan (KGS)
  • Macau (MOP)
  • Malaysia (MYR)
  • Maldives (MVR)
  • Mongolia (MNT)
  • Nepal (NPR)
  • Pakistan (PKR)
  • Philippines (PHP)
  • Qatar (QAR)
  • Saudi Arabia (SAR)
  • Singapore (SGD)
  • South Korea (KRW)
  • Sri Lanka (LKR)
  • Taiwan (TWD)
  • Tajikistan (TJS)
  • Thailand (THB)
  • Turkey (TRY)
  • United Arab Emirates (AED)
  • Uzbekistan (UZS)
  • Vietnam (VND)
  • Yemen (YER)

Oceania

  • Australia (AUD)
  • French Polynesia (XPF)
  • New Caledonia (XPF)
  • New Zealand (NZD)
  • Wallis and Futuna (XPF)

Africa

  • Angola (AOA)
  • Algeria (DZD)
  • Benin (XOF)
  • Botswana (BWP)
  • Burkina Faso (XOF)
  • Burundi (BIF)
  • Cameroon (XAF)
  • Cape Verde (CVE)
  • Central African Republic (XAF)
  • Chad (XAF)
  • Côte d'Ivoire (XOF)
  • Djibouti (DJF)
  • Equatorial Guinea (XAF)
  • Gabon (XAF)
  • Gambia (GMD)
  • Guinea (GNF)
  • Guinea-Bissau (XOF)
  • Kenya (KES)
  • Liberia (LRD)
  • Madagascar (MGA)
  • Mali (XOF)
  • Mauritius (MUR)
  • Morocco (MAD)
  • Mozambique (MZN)
  • Namibia (NAD)
  • Niger (XOF)
  • Republic of the Congo (XAF)
  • Rwanda (RWF)
  • Saint Helena (SHP)
  • São Tomé and Príncipe (STD)
  • Senegal (XOF)
  • South Africa (ZAR)
  • Tanzania (TZS)
  • Togo (XOF)
  • Uganda (UGX)
  • Zambia (ZMW)

Pricing

  • You pay 0%
  • Your customers pay 2-4%

You don’t directly pay any additional Stripe fees for Adaptive Pricing, as all such fees are paid for by your customers. The Stripe-provided exchange rate you present to your customers includes a conversion fee of between 2-4%, increasing their purchase price by a corresponding amount. Stripe determines the fee, which varies for the purposes of increasing customer conversion. Your customer doesn’t pay this fee if they choose to pay in your integration currency, but their bank’s exchange rate and fees might apply. For detailed information about current Stripe fees, see our pricing page.

Exchange rate

Stripe uses the mid-market exchange rate and applies a fee to guarantee the rate through settlement.

Learn more about how Stripe handles currency conversions and Adaptive Pricing fees.

Refunds

You can issue a refund in your integration currency, and Stripe refunds your customer in the currency they used to make the payment. The refund uses the same exchange rate as the original transaction, so there are no extra costs for you, and your customer gets back the exact amount they paid.

Learn more about how Stripe helps you manage refunds.

See also

  • Adaptive Pricing FAQ
Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc