Working with Multiple Currencies

    Better understand working with multiple currencies when using Connect.

    Stripe supports processing charges in 135+ currencies so you can present prices in a customer’s native currency, improving sales and helping customers avoid conversion costs.

    The country of the Stripe account in which the charge is being made determines which currencies you can use:

    A currency conversion then occurs if the presentment currency—that used in the charge request—differs from the settlement currency: that accepted by a bank account or debit card.

    Supported settlement currencies can be found in our payouts documentation. Supported presentment currencies can be found in the currencies documentation.

    Currency conversions

    When any Stripe account—platform or connected—receives payments in multiple currencies, Stripe accumulates separate balances for each currency. If possible, Stripe automatically sends payouts to an associated bank account (or debit card) for each currency, thereby avoiding exchange fees.

    When it’s time to pay out a currency balance to a bank account (or debit card):

    • If there is a bank account for that currency, no conversion occurs
    • If there are multiple bank accounts available for a given currency, Stripe uses the one set as default_for_currency
    • If there is not a bank account for that currency, we automatically convert those funds to your default currency

    If you regularly charge in multiple currencies, you may be able to establish multiple bank accounts to have multiple settlement currencies and avoid conversions.

    Currency conversions always use the current exchange rates provided by our banking partners, with an additional conversion fee also applied by Stripe. There are a number of online resources for conversion calculation, such as Open Exchange Rates or the Google Currency Converter, that can help you estimate current market rates. However, these numbers can fluctuate and they may not reflect Stripe’s rates at the time a payment is processed.

    Application fees

    Connect supports the ability to take application fees on direct charges. Although the charge itself—and the currency used—is controlled by the connected account, the application fee has its own behavior:

    • If your platform has a bank account for the settlement currency, no conversion occurs
    • If your platform does not have a bank account for the settlement currency, the application fee is converted to your platform’s default currency

    Note the behavior is tied to the settlement currency—that going to your bank account or debit card—not the original presentment currency.

    If your platform doesn’t use application fees and instead just retains a portion of its charges, those funds are paid out and converted, or not converted, just the same as any other charge on the platform account.

    Converting balances

    When using destination charges, application fees are not converted; your platform always receives application fees in the connected account’s settlement currency. However, we recommend platforms do not use application fees for destination charges; instead the platform should just transfer less of the charge amount to the connected account via the destination[amount] parameter.

    Should you create charges on the platform using the destination or on_behalf_of parameters, it’s possible to accumulate balances in a variety of currencies. Because you may not 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.

    These currency conversions are created as manual payouts with currency set as the currency of the source balance:

    curl https://api.stripe.com/v1/payouts \
       -u {PLATFORM_SECRET_KEY}: \
       -d amount=1000 \
       -d currency=etb
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    Stripe::Payout.create(
      :amount => 1000,
      :currency => 'etb',
    )
    
    # Set your secret key: remember to change this to your live secret key in production
    # See your keys here: https://dashboard.stripe.com/account/apikeys
    stripe.api_key = "sk_test_BQokikJOvBiI2HlWgH4olfQ2"
    
    stripe.Payout.create(
      amount=1000,
      currency="etb",
    )
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    \Stripe\Stripe::setApiKey("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
    
    \Stripe\Payout::create(array(
      'amount' => 1000,
      'currency' => "etb",
    ));
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    Stripe.apiKey = "sk_test_BQokikJOvBiI2HlWgH4olfQ2";
    
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("amount", 1000);
    params.put("currency", "etb");
    
    Payouts.create(params);
    
    // Set your secret key: remember to change this to your live secret key in production
    // See your keys here: https://dashboard.stripe.com/account/apikeys
    var stripe = require("stripe")("sk_test_BQokikJOvBiI2HlWgH4olfQ2");
    
    stripe.payouts.create(
      {
        amount: 1000,
        currency: 'etb',
      }
    );
    

    As long as there are sufficient funds in the balance for the specified currency, Stripe automatically converts the funds to the default bank account’s currency.

    Example scenarios

    To better understand working with multiple currencies in Connect, consider the following three scenarios:

    Charge in USD, platform settles in USD, connected account settles in EUR

    Your platform account accepts a charge in USD and supports USD as a settlement currency. The connected account settles in EUR.

    The funds sent to the connected account are converted to EUR. For direct charges, the application fee is collected in USD. For destination charges, the fee that the platform retains is collected in EUR.

    Charge in USD, platform settles in EUR, connected account settles in EUR

    Your platform account accepts a charge in USD but settles in EUR. The connected account also settles in EUR.

    The funds sent to the connected account are converted to EUR. The fee that the platform retains is collected in EUR, for either direct charges or destination charges.

    Charge in USD, platform settles in EUR, connected account settles in USD

    Your platform account accepts a charge in USD but settles in EUR. The connected account settles in USD.

    The funds sent to the connected account are not converted (they stay in USD). For direct charges, the application fee is converted to EUR. For destination charges, the application fee is collected in USD.

    Further reading

    Discover what other Connect functionality is available!