# 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 |
|---|---|
| HTTP status | `400` |
| `errorCategory` | `availability` |
| `retryable` | `false` |

## When This Fires

- **`POST /v1/marketfront/orders/validate`** — at least one `lineItem.itemId`, `modifierGroup.modifierGroupId`, or `modifier.modifierId` does 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).

The `errors[]` array contains one entry per offending line item with a `jsonPath` pointing at the exact element.

## Recommended Action

Re-fetch the catalog and reconcile the cart with the user:

1. `GET /v1/marketfront/stores/{storeId}` — read the store's current `catalogSetId`, then
   `GET /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.
2. Walk the `errors[]` array and surface each unavailable item to the user with a "remove" or "substitute" affordance.
3. Have the user resolve each, then resubmit.

A blind retry will continue to fail.

## Example

```json
{
  "type": "https://developer.gett-tech.com/errors/ITEM_UNAVAILABLE",
  "title": "Bad Request",
  "status": 400,
  "detail": "Item 9d2f… is not available in the catalog",
  "instance": "/v1/marketfront/orders/validate",
  "requestId": "req_abc123",
  "timestamp": "2026-04-27T14:30:00.000Z",
  "errorCode": "ITEM_UNAVAILABLE",
  "errorCategory": "availability",
  "retryable": false,
  "errors": [
    { "reason": "ITEM_UNAVAILABLE", "message": "Item 9d2f… is not available in the catalog", "jsonPath": "$.Cart.LineItems[0]" }
  ]
}
```
