# ORDER_TOTAL_DIFFERENT

# ORDER_TOTAL_DIFFERENT

The order total submitted at placement does not match the total computed by the server. This guards against stale price data on the client.

## Summary

| Field | Value |
|---|---|
| Appears as | `errors[].code` |
| Response | HTTP `200` — `Order` with `isValid: false` and a populated `errors[]` |
| Retry unchanged | No — re-validate first |

:::note[This is a reason code, not a top-level error code]
`ORDER_TOTAL_DIFFERENT` is an `errors[].code` value on the order. It is **not** a top-level
`ProblemDetail.errorCode`, so it carries no HTTP status, `errorCategory`, or `retryable` field of its
own. See [Unified OrderError shape](/distribution-partners/marketfront-api/guides/order-lifecycle#unified-ordererror-shape).
:::

## When This Fires

- **`POST /v1/marketfront/orders/place`** — the `amounts.total` (or any subordinate amount) on the request differs from the total computed by re-pricing the cart against the live catalog.
- **`POST /v1/marketfront/orders/validate`** — the same echo check runs on the validate path, comparing the amounts you sent against the partner's re-priced basket.

The most common cause is a price change between the `validate` call and the `place` call (the user's session held a stale catalog), or a client-side rounding mismatch.

`pointer` is `/amounts/total` when we can attribute the mismatch to the total, and `null` when a commerce partner reports the re-price without telling us which element moved.

## Recommended Action

Re-fetch the canonical totals and confirm with the user before retrying:

1. Re-call `POST /v1/marketfront/orders/validate` to retrieve the fresh `amounts` block.
2. Diff against what the user previously saw and surface any change ("the price of one of your items has changed").
3. On user confirmation, resubmit `place` with the updated `amounts`.

Do not blindly retry with a server-supplied total — the user must accept the new amount.

## Example

```json
{
  "isValid": false,
  "errors": [
    {
      "code": "ORDER_TOTAL_DIFFERENT",
      "message": "The order total has changed. Please review your order and try again.",
      "pointer": "/amounts/total"
    }
  ]
}
```
