---
title: "Create stock adjustments"
method: POST
path: "/stock_adjustments"
tags: ["Inventory"]
---

# Create stock adjustments

`POST /stock_adjustments`

Creates one or more stock adjustments in a single batch (1–1000 items per request).

🔒 Requires: `inventory:write` scope

## Request body

- CreateStockAdjustmentsRequest — A batch of 1–1000 stock adjustments to create.
  - `stock_adjustments` CreateStockAdjustmentItem[], required — The stock adjustments to create.
    - `custom_inventory_adjustment_reason_id` string, uuid — Required when `reason` is `CUSTOM`; must be omitted otherwise.
    - `outlet_id` string, uuid, required — The ID of the outlet where the adjustment is recorded.
    - `product_id` string, uuid, required — The ID of the product to adjust.
    - `quantity` string, required — Quantity to adjust. Must be a numeric string (e.g. `"1"` or `"-3"`). Negative for DAMAGE/EXPIRY/etc., positive for STOCK_FOUND/SAMPLE_FOR_SALE.
    - `reason` 'DAMAGE' | 'EXPIRY' | 'INTERNAL_USE' | 'THEFT' | 'DONATION' | 'STOCK_FOUND' | 'SAMPLE_FOR_SALE' | 'CUSTOM', required — The reason for a stock adjustment. Negative reasons (require `quantity` < 0): `DAMAGE`, `EXPIRY`, `INTERNAL_USE`, `THEFT`, `DONATION`. Positive reasons (require `quantity` > 0): `STOCK_FOUND`, `SAMPLE_FOR_SALE`. For `CUSTOM`, the sign must match the referenced custom reason's `type`.

## Response `201`

The stock adjustments were successfully created.

- StockAdjustmentBatchResponse — The response wrapper for a batch stock adjustment create.
  - `data` StockAdjustment[], required — The stock adjustments that were created, in the same order as the request.
    - `created_at` string, date-time, required — The creation timestamp in RFC 3339 format.
    - `custom_inventory_adjustment_reason_id` string, uuid — The ID of the custom reason. Present only when `reason` is `CUSTOM`; omitted otherwise.
    - `id` string, uuid, required — Auto-generated object ID.
    - `outlet_id` string, uuid, required — The ID of the outlet where the adjustment was recorded.
    - `product_id` string, uuid, required — The ID of the product that was adjusted.
    - `quantity` string, required — Quantity to adjust.
    - `reason` 'DAMAGE' | 'EXPIRY' | 'INTERNAL_USE' | 'THEFT' | 'DONATION' | 'STOCK_FOUND' | 'SAMPLE_FOR_SALE' | 'CUSTOM', required — The reason for a stock adjustment. Negative reasons (require `quantity` < 0): `DAMAGE`, `EXPIRY`, `INTERNAL_USE`, `THEFT`, `DONATION`. Positive reasons (require `quantity` > 0): `STOCK_FOUND`, `SAMPLE_FOR_SALE`. For `CUSTOM`, the sign must match the referenced custom reason's `type`.
    - `updated_at` string, date-time, required — The last update timestamp in RFC 3339 format.
    - `user_id` string, uuid, required — The ID of the user who created the adjustment.
    - `version` integer, required — Auto-incrementing object version number.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `422` — Unprocessable Entity

---

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