> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fire.rest/llms.txt
> Use this file to discover all available pages before exploring further.

# Create waste event

> Records inventory discarded or consumed outside a normal sale. Lines can reference items, item tags, or subrecipe snapshots. Returns HTTP 202.

<ParamField header="x-api-key" type="string" required>
  API key with `inventory:write` scope.
</ParamField>

<ParamField path="vendorId" type="string" required>
  Vendor UUID.
</ParamField>

<ParamField body="idempotency_key" type="string" required>
  Idempotency key (1–128 chars).
</ParamField>

<ParamField body="external_user_id" type="string" required>
  Actor for audit trail.
</ParamField>

<ParamField body="store_id" type="string" required>
  UUID of the store where waste occurred.
</ParamField>

<ParamField body="waste_reason_id" type="string" required>
  UUID of the waste reason (configured in Catalog → Waste reasons).
</ParamField>

<ParamField body="notes" type="string">
  Optional notes.
</ParamField>

<ParamField body="lines" type="object[]" required>
  Waste lines (at least 1). Each line has a `consume_by` discriminator:

  <Expandable title="Item line (consume_by: ITEM)">
    <ParamField body="consume_by" type="string" required>`"ITEM"`</ParamField>
    <ParamField body="item_id" type="string" required>UUID of the item.</ParamField>
    <ParamField body="qty" type="number" required>Quantity in display unit.</ParamField>
    <ParamField body="qty_base" type="number" required>Quantity in base unit.</ParamField>
    <ParamField body="base_unit_id" type="string" required>Base unit UUID.</ParamField>
    <ParamField body="unit_id" type="string">Display unit UUID.</ParamField>
    <ParamField body="unit_label" type="string">Display unit label.</ParamField>
    <ParamField body="unit_to_base_factor" type="number" required>Conversion factor.</ParamField>
    <ParamField body="unit_cost" type="number">Cost per unit for valuation.</ParamField>
    <ParamField body="inventory_lot_id" type="string">Lot UUID.</ParamField>
  </Expandable>

  <Expandable title="Item tag line (consume_by: ITEM_TAG)">
    <ParamField body="consume_by" type="string" required>`"ITEM_TAG"`</ParamField>
    <ParamField body="item_tag_id" type="string" required>UUID of the item tag group.</ParamField>
    <ParamField body="qty_base" type="number" required>Quantity in base unit to waste across all items in the tag.</ParamField>
    <ParamField body="base_unit_id" type="string" required>Base unit UUID.</ParamField>
  </Expandable>

  <Expandable title="Subrecipe line (consume_by: SUBRECIPE)">
    <ParamField body="consume_by" type="string" required>`"SUBRECIPE"`</ParamField>
    <ParamField body="subrecipe_snapshot_id" type="string" required>UUID of the published subrecipe snapshot.</ParamField>
    <ParamField body="qty" type="number" required>Number of subrecipe portions wasted.</ParamField>
  </Expandable>
</ParamField>

<ResponseField name="tracking_id" type="string">Polling token.</ResponseField>
<ResponseField name="inventory_transaction_id" type="string">Transaction UUID.</ResponseField>
<ResponseField name="waste_event_id" type="string">Created waste event UUID.</ResponseField>
<ResponseField name="idempotent" type="boolean">`true` if duplicate.</ResponseField>

<RequestExample>
  ```json theme={null}
  {
    "idempotency_key": "waste-2026-08-07-001",
    "external_user_id": "user_kitchen",
    "store_id": "str_main_01...",
    "waste_reason_id": "wr_expired_01...",
    "notes": "Found during morning prep",
    "lines": [
      {
        "consume_by": "ITEM",
        "item_id": "itm_tomato_01...",
        "qty": 2,
        "qty_base": 2000,
        "base_unit_id": "unit_g_01...",
        "unit_id": "unit_kg_01...",
        "unit_label": "kg",
        "unit_to_base_factor": 1000
      }
    ]
  }
  ```
</RequestExample>

<ResponseExample>
  ```json 202 theme={null}
  {
    "tracking_id": "trk_01j5k...",
    "inventory_transaction_id": "txn_01j5k...",
    "waste_event_id": "wst_01j5k...",
    "idempotent": false
  }
  ```
</ResponseExample>
