Skip to content

Selling into several markets

Sell into several markets with one order per purchase_country, currency and locale — Kustom doesn't convert between them. Includes every supported locale and its fallback.

Starting playground session…
This page runs for real. The order below executes against a live Playground merchant, in a checkout you can click through.Skip to the checkout ↓

An order is bound to one purchase_country, one purchase_currency and one locale, and Kustom does not convert currencies. Selling into a second market therefore means either a second order or a change to the open one — there’s no setting that makes one order serve two markets.

Kustom Checkout reaches well over two hundred countries. A smaller set are core countries, which have their own currency and support Kustom Credit, local low-risk payment methods and cards:

Countrypurchase_countryCurrency
SwedenSESEK
NorwayNONOK
DenmarkDKDKK
FinlandFIEUR
GermanyDEEUR
AustriaATEUR
NetherlandsNLEUR
BelgiumBEEUR
FranceFREUR
SpainESEUR
PolandPLPLN
SwitzerlandCHCHF
Great BritainGBGBP
United StatesUSUSD

Each country and currency pair you intend to sell in has to be on your contract — ask your account manager to add it. Shipping and billing countries are allowlisted per merchant, and Kustom may restrict further on risk grounds, including orders that would breach EU sanctions or that carry fraud or money-laundering signals.

locale is set on Create order and Update order, and it controls language only. It has no effect on purchase country or currency, which purchase_country and purchase_currency set separately:

{
"purchase_country": "GB",
"purchase_currency": "GBP",
"locale": "en-GB"
}

Fourteen languages, and twenty-one regional variants on top of them. Send the most specific code that fits your market: a variant is a separate translation, not a formatting tweak, so fr-BE is written for Belgium and fr-CA for Canada rather than both being French with a different date format.

LanguageBaseRegional variants
Czechcs—
Danishda—
Dutchnlnl-BE
Englishenen-AT, en-AU, en-BE, en-CA, en-DE, en-DK, en-FI, en-FR, en-GB, en-IE, en-NL, en-NO, en-SE, en-US
Finnishfi—
Frenchfrfr-BE, fr-CA, fr-CH
Germandede-CH
Greekel—
Italianit—
Norwegian Bokmålnb—
Polishpl—
Portuguesept—
Spanisheses-US
Swedishsvsv-FI

English carries the most variants because it’s what a market gets when its own language isn’t the customer’s: en-DE is English for a German checkout, not a second German.

Three things that are easy to get wrong:

  • no and no-NO are remapped to nb and nb-NO. Both work. You don’t need to translate Norwegian codes yourself.
  • The fallback is English specifically, not the market’s language. A locale Kustom doesn’t carry — zh-CN, say — renders an English checkout in a Chinese market.
  • A variant falls back to its base language, so sv-SE renders sv and fr-GB renders fr. This is why the absence of a code from the table is rarely visible: something reasonable still renders.

The API can’t catch a mistake here. locale is validated for shape only — two letters, or two letters and a region — so anything well-formed is accepted and the wrong language is chosen silently. Pick from this table rather than passing through whatever your storefront happens to hold.

A .co.uk domain, a .de domain, and so on. Allow a single shipping country on the order, set purchase_country to that market and use the address_update callback to keep shipping options and prices right as the address is filled in.

This is the simpler shape: the market is decided before the checkout opens, so it can’t change underneath you.

Allow all your supported shipping countries on the order and set purchase_country to your best guess of where the customer is.

Then you must handle the country_change callback — updating the currency and the language to match the new country — as well as address_update. Without it, a customer who changes country is left with the wrong currency, which is a broken purchase rather than a cosmetic fault.

This page is also available as Markdown — append .md to its URL — and is indexed in llms.txt.