We’re seeing inconsistent and unexpected behavior recently, when using appliedDiscount on draftOrderCreate with valueType: FIXED_AMOUNT, especially when presentmentCurrencyCode is set.
According to the docs for DraftOrderAppliedDiscountInput, the value field for FIXED_AMOUNT is described as a fixed amount in the shop currency. However, the actual behavior appears different, and also becomes incorrect when amountWithCurrency is provided.
Scenario 1: Only value is provided
Setup
-
Shop currency: USD
-
Presentment currency: CAD
-
Mutation:
draftOrderCreate -
appliedDiscount.valueType = FIXED_AMOUNT -
appliedDiscount.value = 5 -
amountWithCurrencyis not provided
Example input
{
"input": {
"presentmentCurrencyCode": "CAD",
"appliedDiscount": {
"title": "Test Discount",
"description": "Test",
"value": 5,
"valueType": "FIXED_AMOUNT"
},
"lineItems": [
{
"variantId": "gid://shopify/ProductVariant/XXXXX",
"quantity": 1
}
]
}
}
Observed behavior
A discount of 5 CAD is applied.
Expected behavior
Since the docs state that value is in the shop currency for FIXED_AMOUNT, we would expect:
-
value: 5to mean 5 USD -
Shopify to convert that amount to the equivalent CAD value for the draft order presentment currency
Instead, it appears that value is being treated as if it were already in the presentment currency.
Scenario 2: amountWithCurrency is provided
We also tested providing amountWithCurrency explicitly to control the discount in the presentment currency.
Example input
{
"input": {
"presentmentCurrencyCode": "CAD",
"appliedDiscount": {
"title": "Test Discount",
"description": "Test",
"value": 5,
"valueType": "FIXED_AMOUNT",
"amountWithCurrency": {
"amount": "5.00",
"currencyCode": "CAD"
}
},
"lineItems": [
{
"variantId": "gid://shopify/ProductVariant/XXXXX",
"quantity": 1
}
]
}
}
Observed behavior
The resulting applied discount is still not correct / does not match the expected interpretation of the fields.
In particular, providing both:
-
value: 5(documented as shop currency) -
amountWithCurrency: 5.00 CAD
does not produce behavior that is clear or consistent with the documentation.
This makes it unclear:
-
whether
valueis actually interpreted in shop currency or presentment currency -
whether
amountWithCurrencyoverridesvalue -
whether both fields are expected to represent equivalent amounts across currencies
-
which field is considered the source of truth when both are present
Why this is problematic
The current behavior makes it difficult to implement multi-currency draft order discounts correctly.
From the docs, developers would reasonably assume:
-
valueis always in shop currency -
amountWithCurrencyis the explicit amount in the target / presentment currency -
when both are supplied, Shopify should apply them consistently
But based on our tests:
-
valuealone appears to behave like a presentment-currency amount -
supplying
amountWithCurrencydoes not resolve the issue and can still produce an incorrect result
Expected clarification
Could you please clarify the intended behavior for DraftOrderAppliedDiscountInput when valueType = FIXED_AMOUNT?
Specifically:
-
When
amountWithCurrencyis omitted, isvalueinterpreted in shop currency or presentment currency? -
When
amountWithCurrencyis provided, which field is the source of truth? -
Are
valueandamountWithCurrency.amountexpected to represent the same discount in different currencies? -
If so, how should developers populate both fields correctly?
-
If not, is the documentation for
valueincorrect?
Requested outcome
Please confirm whether this is:
-
a documentation issue
-
an API bug
-
or expected behavior that needs clearer documentation and examples
At the moment, it is not possible to determine the correct way to send a fixed discount for a draft order in a non-shop presentment currency with confidence.