> ## 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 production batch

> Records the production of a finished item from a recipe. Consumes ingredient inventory and adds the produced output to stock. 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 production occurred.
</ParamField>

<ParamField body="recipe_snapshot_id" type="string" required>
  UUID of the published recipe snapshot used. Retrieve this from the [recipes lookup endpoint](/en/boh-api/recipes/recipes-lookup).
</ParamField>

<ParamField body="actual_output" type="object" required>
  The actual quantity produced:

  <Expandable title="actual_output fields">
    <ParamField body="quantity" type="number" required>Quantity produced in display unit.</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 to base unit.</ParamField>
    <ParamField body="base_unit_id" type="string" required>Base unit UUID.</ParamField>
    <ParamField body="qty_base" type="number" required>Produced quantity in base unit.</ParamField>
  </Expandable>
</ParamField>

<ParamField body="produced_at" type="string">
  ISO 8601 timestamp of production (defaults to `now()`).
</ParamField>

<ParamField body="output_lot_code" type="string">
  Lot code to assign to produced output (max 128 chars).
</ParamField>

<ParamField body="output_expires_at" type="string">
  Expiry timestamp for the produced lot.
</ParamField>

<ParamField body="input_overrides" type="object[]">
  Override the default ingredient consumption amounts:

  <Expandable title="override fields">
    <ParamField body="ingredient_kind" type="string" required>`ITEM` or `ITEM_TAG`.</ParamField>
    <ParamField body="ingredient_item_id" type="string" required>UUID of the ingredient item.</ParamField>
    <ParamField body="quantity_override_base" type="number">Override quantity in base units. Replaces the recipe default.</ParamField>
    <ParamField body="lot_id_hint" type="string">Preferred lot UUID to consume from.</ParamField>
  </Expandable>
</ParamField>

<ParamField body="notes" type="string">
  Optional notes (max 500 chars).
</ParamField>

<ParamField body="metadata" type="object">
  Free-form extra data.
</ParamField>

<ResponseField name="tracking_id" type="string">Polling token.</ResponseField>
<ResponseField name="inventory_transaction_id" type="string">Transaction UUID.</ResponseField>
<ResponseField name="production_batch_id" type="string">Created production batch UUID.</ResponseField>
<ResponseField name="idempotent" type="boolean">`true` if duplicate.</ResponseField>

<RequestExample>
  ```json theme={null}
  {
    "idempotency_key": "prod-2026-08-07-001",
    "external_user_id": "user_kitchen",
    "store_id": "str_main_01...",
    "recipe_snapshot_id": "snap_mole_v3_01...",
    "actual_output": {
      "quantity": 2,
      "unit_id": "unit_lt_01...",
      "unit_label": "lt",
      "unit_to_base_factor": 1000,
      "base_unit_id": "unit_ml_01...",
      "qty_base": 2000
    },
    "produced_at": "2026-08-07T07:00:00.000Z",
    "notes": "Morning prep"
  }
  ```
</RequestExample>

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