---
title: "Create a new inventory adjustment"
method: POST
path: "/inventory/adjustments"
tags: ["InventoryAdjustments"]
---

# Create a new inventory adjustment

`POST /inventory/adjustments`

Records a stock adjustment — a positive or negative change to
the quantity of a product at a location. The adjustment is
timestamped and attributed to the calling user for audit.

## Request body

- object
  - `product_id` string, uuid, required — `Product` whose stock level is being adjusted. The product must be configured on the same brand as the caller; cross-brand adjustments are rejected with `422`.
  - `quantity` integer, required — Signed change to the on-hand stock count. Positive values increase stock (e.g. a receipt or correction upwards); negative values decrease it (e.g. waste, transfers out).
  - `reason_code` string — Machine-readable reason for the adjustment, used for reporting. Common values are `waste`, `transfer`, `correction` and `theft`. Free text — define your own codes as needed.
  - `reason_description` string — Optional human-readable explanation that staff and auditors see alongside the adjustment. Use this to add detail that the `reason_code` doesn't capture.
  - `location_id` integer, nullable — `InventoryLocation` the stock is moving from. Optional for sites that don't track per-location stock; required when the product is location-aware.
  - `site_id` string, uuid — Site the adjustment is recorded against. Used for site-level inventory reporting and to enforce the caller's site permissions.

## Response `201`

A single inventory adjustment.

- object
  - `data` InventoryAdjustment, required — A single stock adjustment — a positive or negative change to the quantity of an inventory product at a location. Adjustments capture the reason (e.g. waste, transfer, sale) and the user who made the change so that stock movement can be audited.
    - `id` string, uuid — The ID of the adjustment.
    - `organisation_id` string, uuid — The ID of the organisation this adjustment belongs to.
    - `site_id` string, uuid — The ID of the site this adjustment belongs to.
    - `product_id` string, uuid, required — The ID of the product this adjustment is for.
    - `quantity` integer, required — The amount of the adjustment, which may be positive or negative.
    - `reason_code` string — A reason code for the adjustment, e.g. `waste` or `transfer`.
    - `reason_description` string — A free-text reason for the adjustment.
    - `location_id` integer, nullable — The ID of the location the stock is moving from.
    - `created_at` string, date-time — The date and time the adjustment was created.

## Other responses

- `401` — The user is unauthenticated
- `403` — The authenticated user does not have permission.
- `422` — The request didn't pass validation

---

[API](https://skmtc.dev/try/apis/trybe-api.md) · [All operations](https://skmtc.dev/try/apis/trybe-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/try/trybe-api/revisions/f37f92702da5/schema)
