ITEM_UNAVAILABLE
ITEM_UNAVAILABLE
A line item, modifier group, or modifier referenced by the order is no longer present in the live catalog. Catalogs change — items get 86'd, modifier groups are reorganized — and the user's cart can drift out of sync.
Summary
| Field | Value |
|---|---|
| Appears as | errors[].code |
| Response | HTTP 200 — Order with isValid: false and a populated errors[] |
| Retry unchanged | No |
This is a reason code, not a top-level error code
ITEM_UNAVAILABLE 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.
When This Fires
POST /v1/marketfront/orders/validate— at least onelineItem.itemId,modifierGroup.modifierGroupId, ormodifier.modifierIddoes not exist in the catalog set the order was validated against.POST /v1/marketfront/orders/place— same condition surfaces at placement time (typically only if validation was skipped).
When the cart is checked against the catalog, errors[] contains one entry per offending line item with a pointer locating the exact element. When the reason comes back from the commerce partner instead, pointer is null — the partner tells us the order failed, not which element caused it.
message names the item when we can resolve its name from the catalog you validated against, and falls back to a generic sentence when we cannot. It never carries an identifier — use pointer to locate the element programmatically, and message only for display.
Recommended Action
Re-fetch the catalog and reconcile the cart with the user:
GET /v1/marketfront/stores/{storeId}— read the store's currentcatalogSetId, thenGET /v1/marketfront/catalog-sets/{catalogSetId}to pull it. Catalog sets are immutable, so re-fetching the id you already hold returns the same stale menu — you must re-read the store to pick up the new one.- Walk the
errors[]array and surface each unavailable item to the user with a "remove" or "substitute" affordance. - Have the user resolve each, then resubmit.
A blind retry will continue to fail.
Example
Code