Unexpected change in total_price field after refund in REST API

Hi everyone, I am encountering an unexpected behavior with the total_price field on the REST API /orders/{id}.json endpoint and would appreciate some insight.

The Scenario:

  • An order was created and paid on 2026-03-01. The original paid amount was 268 SEK (Item: 219 SEK + Shipping: 49 SEK).

  • Our system saved the

    total_price

    directly from the API as 268 SEK on 2026-03-02.

  • A payout balance transaction also confirms the original charge was 268 SEK.

  • On 2026-03-16, a refund of 170 SEK was processed, which included

    order_adjustments

    for refund discrepancies (+170 SEK and -170 SEK).

The Issue: When pulling the order now, the current_total_price correctly shows as 98.00 SEK (268 - 170). However, the total_price field—which we understand should remain static as the original order value—has unexpectedly shifted to 317.00 SEK.

Payload Snippet: "order": { "current_total_price": "98.00", "total_price": "317.00" }

Is it expected behavior for the static total_price field to change retroactively when a refund discrepancy occurs? Any guidance on why this shifted to 317 SEK would be incredibly helpful!

Hi, I would advise upgrading to GraphQL as REST is now deprecated and not actively supported.

Hey @Amilia_Waloh - I had a look into this and no, refund discrepancies should not change total_price. The +170/-170 order_adjustments you’re seeing are normal bookkeeping entries that balance the ledger during refund processing, and they don’t feed into how total_price is calculated. Your current_total_price of 98 SEK (268 - 170) is correct, which confirms the refund itself was handled properly.

total_price is not actually a static snapshot of the original order value. It represents the total sold amount, which excludes refunds and returns but includes any changes made through order editing. So if the order was edited at any point (items added, shipping adjusted, etc.), total_price reflects that updated sold total.

You can confirm by querying the order via GraphQL. It exposes a few fields the REST API doesn’t have, including edited and originalTotalPriceSet.

{
  order(id: "gid://shopify/Order/YOUR_ORDER_ID") {
    edited
    originalTotalPriceSet {
      shopMoney {
        amount
        currencyCode
      }
    }
    totalPriceSet {
      shopMoney {
        amount
        currencyCode
      }
    }
    currentTotalPriceSet {
      shopMoney {
        amount
        currencyCode
      }
    }
  }
}

If edited comes back true, that explains the shift. originalTotalPriceSet is the truly immutable value, representing the total price at the time of order creation. It’s only available through GraphQL, so if your system needs a reliable original total, that’s the field to use going forward.

As Luke mentioned, the REST Admin API is now legacy and won’t receive new features. This is a good example of why GraphQL is worth the move. Fields like edited, originalTotalPriceSet, and richer order adjustment data give you much more to work with when reconciling orders.

If the order was not edited, post the full order JSON (with order_adjustments, refunds, and subtotal_price included) and I can dig deeper into what caused the change.