Skip to Content
SimulatorsShopifyPrices in a market's currency

Simulators

Prices in a market’s currency

Test an app that sells in a second currency, such as Norwegian kroner for Norway. Create an active market for the country and a price list in its currency:

ADMIN="$RYSTIC_URL/admin/api/2026-10/graphql.json"
STOREFRONT="$RYSTIC_URL/api/2026-10/graphql.json"
curl -s -X POST "$RYSTIC_URL/_rystic/scenario" -d '{"name":"shopify_apparel_storefront"}'
curl -s "$ADMIN" -H "X-Shopify-Access-Token: shpat_placeholder" -H "Content-Type: application/json" -d '{"query": "mutation { marketCreate(input: {name: \"Norway\", handle: \"norway\", status: ACTIVE, conditions: {regionsCondition: {regions: [{countryCode: NO}]}}}) { market { id status } userErrors { message } } }"}' | jq -c '.data.marketCreate.market | {id, status}'
# -> {"id":"gid://shopify/Market/1001","status":"ACTIVE"}
curl -s "$ADMIN" -H "X-Shopify-Access-Token: shpat_placeholder" -H "Content-Type: application/json" -d '{"query": "mutation { priceListCreate(input: {name: \"Norway NOK\", currency: NOK, parent: {adjustment: {type: PERCENTAGE_DECREASE, value: 0}}}) { priceList { id currency } userErrors { message } } }"}' | jq -c '.data.priceListCreate.priceList | {id, currency}'
# -> {"id":"gid://shopify/PriceList/1","currency":"NOK"}

Give the market status: ACTIVE, since only an active market prices its countries.

Attach the price list to the market

catalogCreate puts the price list on the market. Give the catalog status: ACTIVE, name the market in context.marketIds and the list in priceListId:

curl -s "$ADMIN" -H "X-Shopify-Access-Token: shpat_placeholder" -H "Content-Type: application/json" -d '{"query": "mutation { catalogCreate(input: {title: \"Norway\", status: ACTIVE, context: {marketIds: [\"gid://shopify/Market/1001\"]}, priceListId: \"gid://shopify/PriceList/1\"}) { catalog { id priceList { currency } } userErrors { message } } }"}' | jq -c '.data.catalogCreate | {id: .catalog.id, currency: .catalog.priceList.currency, userErrors}'
# -> {"id":"gid://shopify/MarketCatalog/1","currency":"NOK","userErrors":[]}
curl -s "$ADMIN" -H "X-Shopify-Access-Token: shpat_placeholder" -H "Content-Type: application/json" -d '{"query": "{ market(id: \"gid://shopify/Market/1001\") { catalogs(first: 5) { nodes { id } } } }"}' | jq -c '.data.market.catalogs.nodes'
# -> [{"id":"gid://shopify/MarketCatalog/1"}]

Set a price and read it for the country

Set a fixed price with priceListFixedPricesAdd. contextualPricing on the Admin API and Storefront reads under @inContext(country:) return it for Norway, and other countries keep the store’s currency:

curl -s "$ADMIN" -H "X-Shopify-Access-Token: shpat_placeholder" -H "Content-Type: application/json" -d '{"query": "mutation { priceListFixedPricesAdd(priceListId: \"gid://shopify/PriceList/1\", prices: [{variantId: \"gid://shopify/ProductVariant/1040\", price: {amount: \"2190\", currencyCode: NOK}}]) { userErrors { message } } }"}' | jq -c '.data.priceListFixedPricesAdd.userErrors'
# -> []
curl -s "$ADMIN" -H "X-Shopify-Access-Token: shpat_placeholder" -H "Content-Type: application/json" -d '{"query": "{ productVariant(id: \"gid://shopify/ProductVariant/1040\") { contextualPricing(context: {country: NO}) { price { amount currencyCode } } } }"}' | jq -c '.data.productVariant.contextualPricing.price | {amount, currencyCode}'
# -> {"amount":"2190.0","currencyCode":"NOK"}
curl -s "$STOREFRONT" -H "X-Shopify-Storefront-Access-Token: placeholder" -H "Content-Type: application/json" -d '{"query": "query @inContext(country: NO) { product(handle: \"cedar-rain-shell\") { variants(first: 1) { nodes { price { amount currencyCode } } } } }"}' | jq -c '.data.product.variants.nodes[0].price | {amount, currencyCode}'
# -> {"amount":"2190.0","currencyCode":"NOK"}
curl -s "$STOREFRONT" -H "X-Shopify-Storefront-Access-Token: placeholder" -H "Content-Type: application/json" -d '{"query": "query @inContext(country: US) { product(handle: \"cedar-rain-shell\") { variants(first: 1) { nodes { price { amount currencyCode } } } } }"}' | jq -c '.data.product.variants.nodes[0].price | {amount, currencyCode}'
# -> {"amount":"189.0","currencyCode":"USD"}

These second-currency prices follow Shopify’s documentation (unconfirmed against a live store). Limitations lists where they differ from Shopify.

Last updated on