Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
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
    Overview
    Compare Checkout Sessions and PaymentIntents
    Quickstart guides
    Design an advanced integration
    Customize look and feel
    Manage payment methods
    Collect additional information
    Build a subscriptions integration
    Dynamic updates
    Add discounts
    Collect taxes on your payments
    Let customers pay in their local currency
      Adaptive Pricing
      FX Quotes API
      Manual currency prices
    Save and retrieve customer payment methods
    Send receipts and paid invoices
    Manually approve payments on your server
    Authorize and capture a payment separately
    Elements with Checkout Sessions API beta changelog
Build an in-app integration
Payment methods
Add payment methods
Manage payment methods
Faster checkout with Link
Payment interfaces
Payment Links
Checkout
Web Elements
In-app Payments
Payment scenarios
Handle multiple currencies
Custom payment flows
Flexible acquiring
Orchestration
In-person payments
Terminal
Beyond payments
Incorporate your company
Crypto
Financial Connections
Climate
Understand fraud
Radar fraud protection
Manage disputes
Verify identities
HomePaymentsBuild a custom integration with ElementsLet customers pay in their local currency

Manual currency prices

Learn how to manually present local currencies to customers.

Payment Intents API

Manual currency prices isn’t supported on the Payment Intents API.

You can manually define prices in different currencies when you create products. Use manual currency prices when:

  • You’re supporting a region where you can accept fluctuations in the currency’s exchange rate.
  • Adaptive Pricing isn’t supported for your business or checkout configuration.

Multi-currency prices that you manually define override Adaptive Pricing for those currencies, even if it’s enabled.

Although Stripe supports manual currency prices, we recommend using Adaptive Pricing to reduce the risk of currency exchange rate fluctuations and to automatically enable support for over 100 local currencies. Contact adaptive-pricing-beta@stripe.com to request to join the preview.

Create a multi-currency price
Dashboard
Server-side

  1. Go to a product in the Dashboard.
  2. Click +Add another price to create a new price.
  3. Fill in the price and select a currency. This first currency is the price’s default currency. Make sure all of your prices have the same default currency.
  4. Click +Add a price by currency to search and select from supported currencies, adding them to your price.
  5. Use the multi-currency price you created by passing its ID into line items when you create a Checkout Session.

Create a Checkout Session
Server-side

Create a Checkout Session using the multi-currency price:

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 \ --data-urlencode return_url="https://example.com/return"

Test local currency presentment
Server-side
Client-side

To test local currency presentment, pass a customer email address that includes a suffix formatted as +location_XX. Make sure the XX value is a valid two-letter ISO country code.

For example, to test currency presentment for a customer in France, pass an email formatted as test+location_FR@example.com. When you visit the Checkout Session URL created with a location-formatted email, you see the same currency that a customer sees in the specified country.

When you create a Checkout Session, pass the location-formatted email as customer_email to simulate 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=embedded \ -d return_url="https://example.com/return" \ --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.

When it’s possible to present the customer’s local currency, the Checkout Session object changes. The currency, payment_method_types, and amount_total fields reflect the local currency and price.

OptionalSpecify a currency
Server-side

When you use multi-currency prices, the Checkout Session automatically handles currency localization for your customers. If you want to override this behavior, you can specify a currency when you create the Checkout Session.

In the following example, the currency for the Checkout Session is always EUR, regardless of the customer’s location.

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 currency=eur \ -d "line_items[0][price]"=
{{PRICE_ID}}
\ -d "line_items[0][quantity]"=1 \ -d mode=payment \ -d ui_mode=custom \ --data-urlencode return_url="https://example.com/return"

Local payment methods

The Checkout Session presents customers with popular payment methods compatible with their local currencies. For example, for customers located in the Netherlands, the Checkout Session converts prices to EUR and also present popular Dutch payment methods like iDEAL.

You can configure which payment methods you accept in your payment methods settings.

Supported integrations

The Checkout Session automatically presents the local currency to customers when the following are true:

  • The prices, shipping rates, and discounts for the Checkout Session have the relevant currency in the currency_options.
  • For a Checkout Session using Stripe Tax, the tax_behavior is specified for the relevant currency for all prices, shipping rates, and discounts for the Checkout Session.
  • You didn’t specify a currency when creating the Checkout Session.

If the relevant currency option or tax_behavior is missing, the Checkout Session presents the default currency to the customer. The default currency must be the same across all prices, shipping rates, and discounts.

Restrictions

Price localization isn’t available for Checkout Sessions that:

  • Use manual tax rates
  • Use payment_intent_data.application_fee_amount or payment_intent_data.transfer_data.amount

Fees

Stripe’s standard transaction fees apply to automatically converted transactions:

  • Cards or payment methods fee
  • International cards or payment methods fee (if applicable)
  • Currency conversion fee

See the pricing page for more details about these fees.

Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Join our early access program.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc