Description:
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

