draftOrderCreate: appliedDiscount with FIXED_AMOUNT behaves inconsistently with presentmentCurrencyCode and amountWithCurrency

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

  • amountWithCurrency is 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: 5 to 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 value is actually interpreted in shop currency or presentment currency

  • whether amountWithCurrency overrides value

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

  • value is always in shop currency

  • amountWithCurrency is the explicit amount in the target / presentment currency

  • when both are supplied, Shopify should apply them consistently

But based on our tests:

  • value alone appears to behave like a presentment-currency amount

  • supplying amountWithCurrency does 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:

  1. When amountWithCurrency is omitted, is value interpreted in shop currency or presentment currency?

  2. When amountWithCurrency is provided, which field is the source of truth?

  3. Are value and amountWithCurrency.amount expected to represent the same discount in different currencies?

  4. If so, how should developers populate both fields correctly?

  5. If not, is the documentation for value incorrect?


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.

Hey @ayoub, your analysis is spot on. The DraftOrderAppliedDiscountInput docs state that value for FIXED_AMOUNT is “a fixed amount in your shop currency,” and the DraftOrderAppliedDiscountType enum says the same. I reproduced the behavior on a test store and confirmed that value is being treated as the presentment currency rather than the shop currency.

This has been raised with the relevant team and is actively being investigated. I also tested providing both value and amountWithCurrency together, and the result was a double-conversion where neither field was honored correctly. The docs don’t define how these two fields interact in a multi-currency context, so I’d avoid relying on amountWithCurrency as a workaround.

For now, PERCENTAGE type discounts work correctly across currencies and aren’t affected by this issue (I validated that as well). If a percentage isn’t viable for your use case, I’d suggest monitoring this thread for updates.

If you can share an x-request-id from one of your requests, I can link your case to the ongoing investigation so the team has your scenario as a reference. I’ll update this thread once I hear back.

Hey @Donal-Shopify , thank you for confirming this, I will keep monitoring this thread for updates.