When a Shopify Function returns a fixedAmount discount for subscription items in a multi-currency store, the first order applies the discount correctly, but subsequent subscription renewal orders apply an
additional currency conversion, making the discount significantly larger than intended.
Native Shopify automatic discounts do not have this issue.
Steps to reproduce:
Set up a store with a default currency of USD and enable AUD as a presentment currency
Create a Discount Function that returns a fixedAmount discount (e.g., A$3 off per item)
The function correctly returns the amount “in the currency of the cart” as documented in ProductDiscountCandidateFixedAmount.amount
A customer in AUD adds 2 items to cart with a subscription selling plan
Complete checkout — first order discount is correct (A$6.00 = A$3 × 2)
Check the subscription contract’s renewal subtotal — the discount has been re-converted from shop currency, resulting in A$10.02 instead of A$6.00
Expected behavior:
The fixedAmount returned by the discount function is in the cart’s presentment currency (AUD). Subscription renewals should use this value as-is in AUD, not treat it as shop currency (USD) and convert again.
Actual behavior:
The stored discount amount (6.00) is treated as USD on renewal and converted to AUD again: $6.00 Ă— ~1.67 (AUD/USD rate) = A$10.02.
Notes:
Percentage-type discounts from Functions work correctly on subscription renewals (they are currency-agnostic)
Native Shopify automatic discounts with fixed amounts work correctly on subscription renewals
Only Function-based fixedAmount discounts are affected
The presentmentCurrencyRate and ProductDiscountCandidateFixedAmount schema docs say the amount should be “in the currency of the cart” — the function follows this correctly
The issue seems to have started on March 7. This is a critical issue, because when the currency rate is large (for example MXN) discount essentially becomes 100% and the orders are free.
Hi @dostu, thanks for flagging this with us.
Appreciate the reproduction steps with the pricing breakdowns as always
I’ll need to check our logs to investigate this. Can you provide a Function ID or handle we can use? Let me know if you’d prefer to share this via DM and I’ll send you a message.
It’s 3b161a02-cb63-a3a0-19ac-dc1e5502820a1c892efd (discount-function-v4). And here’s the subscription contract id of an example affected order 82534138224. Let me know if you need more examples.
Hey @dostu, thanks again for those details.
I can confirm what you are seeing is not expected and we are looking in to a fix. In the meantime, the workaround is to use percentage-based discounts instead of fixedAmount for stores with multiple currencies and subscriptions. Percentage discounts aren’t affected.
I don’t have a timeline on a fix at this point. We are tracking it and will update you here once it is resolved.
Yes, we are doing percentage discount as a workaround for new subscriptions now. It has it’s own flaws (per item cents rounding) but works for now. We’re worried about the subscriptions which were created in the meantime though. Thanks for looking into it