Hey Shopify community,
We run a shipping rates app that uses the CarrierService API. We serve rate tiers based on the cart subtotal (min/max order price conditions). This works correctly for the shop’s base market, but breaks when Shopify Markets is enabled with a secondary market that applies currency conversion.
The problem: the rate request payload gives us a subtotal that has the market’s FX conversion already applied, but it is still labelled in the shop’s base currency. We have no field to recover the true base-currency subtotal or the presentment currency and rate that were applied, so we cannot map the value back to the merchant’s configured tiers.
Reproduction:
-
Shop base currency GBP. Product priced at 399 GBP.
-
Add a secondary market (e.g. Bulgaria) with EUR and Shopify’s dynamic conversion enabled.
-
Check out against the base (GB) market. The CarrierService request reports 399 GBP. Correct.
-
Check out against the secondary market. The CarrierService request reports 404.99 GBP instead of 399 GBP. The subtotal has been run through the EUR conversion but is still stamped as GBP.
Result: a merchant tier like “orders 0 to 500 GBP → flat rate” evaluates against 404.99 rather than 399. With a larger FX ratio, the divergence is much wider, and a subtotal can fall into the wrong tier entirely (we have a live merchant case where a CAD 69 order lands in the wrong tier because the request total arrives as ~49 after a 1:1 CAD to USD rate).
Questions for the platform:
- In the CarrierService callback, is there any way to obtain the un-converted subtotal in the shop’s base currency, before market FX is applied?
- Alternatively, can the payload expose the presentment currency and the exchange rate applied, so we can reverse the conversion ourselves?
- Is this the intended behaviour for CarrierService under Shopify Markets, or a known gap? (For context, Rate Functions mode does not exhibit this, which is what leads us to suspect a CarrierService-specific limitation.)
Thanks!



