draftOrderCalculate Mutation: availableShippingRates Missing Presentment Currency (presentmentMoney)

Hi Shopify Community & Team,

I’m working with the Admin GraphQL API, specifically the draftOrderCalculate mutation (using the latest API version).

The Issue:

When calculating a draft order for a customer in a different currency than the shop’s base currency (e.g., customer using EUR, shop base is HUF, using Shopify Markets), the calculatedDraftOrder.availableShippingRates field only returns the shipping prices in the shop’s currency.

The availableShippingRates.price field is of type MoneyV2, which only contains the amount and currencyCode corresponding to the shop’s currency (shopMoney).

This contrasts with other price fields in the same response, such as subtotalPriceSet, totalPriceSet, totalShippingPriceSet etc., which are of type MoneyBag and correctly include both shopMoney and presentmentMoney (the customer’s currency).

Example GraphQL Query Structure:

`GraphQLmutation draftOrderCalculate($input: DraftOrderInput!) {
draftOrderCalculate(input: $input) {
calculatedDraftOrder {
# Correctly includes presentmentMoney
subtotalPriceSet {
shopMoney { amount currencyCode }
presentmentMoney { amount currencyCode }
}
totalPriceSet {
shopMoney { amount currencyCode }
presentmentMoney { amount currencyCode }
}

  # PROBLEM AREA: Only returns shopMoney via MoneyV2
  availableShippingRates {
    handle
    title
    price { # This is MoneyV2, only shop currency
      amount
      currencyCode
    }
  }

  # If a shipping line IS selected, it correctly shows presentmentMoney
  shippingLine {
    originalPriceSet {
      shopMoney { amount currencyCode }
      presentmentMoney { amount currencyCode }
    }
  }
  # ... other fields
}
userErrors {
  field
  message
}

}
}
`

Use Case & Impact:

When building custom checkout experiences or backend tools that create draft orders (especially for international customers), it’s crucial to display the available shipping options with prices in the customer’s currency before they make a selection. Currently, we only get the prices in the shop’s base currency (e.g., HUF), which leads to a confusing user experience for customers expecting to see prices in their own currency (e.g., EUR).

While the selected shippingLine.originalPriceSet does return presentmentMoney correctly later, this doesn’t help when presenting the initial list of available options.

We’ve considered workarounds like calculating an implicit exchange rate from other MoneyBag fields in the response (e.g., subtotalPriceSet) and applying it manually to the HUF shipping rates. However, this feels like a hack, is prone to potential rounding discrepancies, and isn’t officially supported.

Expected Behavior:

Ideally, the availableShippingRates.price field should be of type MoneyBag (or have an equivalent field added) to include presentmentMoney, consistent with other price representations in the API response.

Question:

Is this a known limitation? Are there any official workarounds recommended? Could this be considered a bug or a feature request for improvement in future API versions?

Providing presentmentMoney directly for availableShippingRates would greatly improve the developer and user experience for multi-currency scenarios.

Thanks for your time and any insights you can provide!

Hey @lamasgergo,

Thanks for the detailed explanation! I would say this would be a feature request at this point, and I’ll be happy to pass that on to our team for you.

As for workarounds, you could look at using the storefront API for this to retrieve the available rates within the buyers context: CartDeliveryGroupConnection - Storefront API

If you have some time, this guide on the storefront API carts may be useful as well to explore for alternatives: Cart