---
title: "Add a product to a consignment"
method: POST
path: "/consignments/{consignment_id}/products"
tags: ["Consignment Products"]
---

# Add a product to a consignment

`POST /consignments/{consignment_id}/products`

Add a product to the given consignment.

If the type is SUPPLIER then:

- Cannot add a product to a `RECEIVED` or `CANCELLED` order
- Cannot add a composite product to the order
- If a received value is provided for a consignment product for a SENT Supplier Order - the order will be automatically marked as DISPATCHED

If the type is OUTLET then:

- If a cost value is not provided for a consignment product on an OPEN Outlet order - the cost will be automatically populated after the fact using the most accurate average cost of the product at the time of marking the consignment as sent.

🔒 Requires: One of the following scopes:
- `consignments:write:stock_order` scope for `SUPPLIER` and `RETURN` consignments
- `consignments:write:stock_transfer` scope for `OUTLET` consignments
- `consignments:write:inventory_count` scope for `STOCKTAKE` consignments

## Path parameters

- `consignment_id` string, uuid, required

## Request body

- ConsignmentProductRequest
  - `data` ConsignmentProduct, required
    - `cost` string, nullable — The cost of the item.
    - `count` string, nullable — Expected item count.
    - `created_at` string — The creation timestamp in UTC.
    - `deleted_at` string, nullable — The deletion timestamp in UTC.
    - `is_included` boolean — Indicated whether the item was included via a filter. Can be `null`. For full count (no filters) always `true`.
    - `product_id` string, uuid, required — The ID of the product.
    - `product_sku` string, nullable — The SKU of the product.
    - `received` string — Observed item count.
    - `status` string — The status of the item. One of: `PENDING`, `SUCCESS`.
    - `updated_at` string — Last update timestamp in UTC.
    - `version` integer — Auto-incrementing object version number.

## Response `200`

OK

- InventoryCountItemResponse
  - `data` InventoryCountItem, required
    - `cost` string, required — The cost of the item.
    - `count` string, required — Expected item count.
    - `created_at` string, required — The creation timestamp in UTC.
    - `deleted_at` string, required — The deletion timestamp in UTC.
    - `is_included` boolean — Indicated whether the item was included via a filter. Can be `null`. For full count (no filters) always `true`.
    - `product_id` string, uuid, required — The ID of the product associated with this count item.
    - `product_sku` string
    - `received` string, required — Observed item count.
    - `status` string, required — The status of the item. One of: `PENDING`, `SUCCESS`.
    - `updated_at` string, required — Last update timestamp in UTC.
    - `version` integer, required — Auto-incrementing object version number.

---

[API](https://skmtc.dev/lightspeedhq/apis/api-2026-07.md) · [All operations](https://skmtc.dev/lightspeedhq/apis/api-2026-07/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lightspeedhq/api-2026-07/revisions/72d4ceb46dbb/schema)
