Get adjustments
List stock adjustments for your company, oldest first (by creation time), with optional filters.
A stock adjustment is a manual change to on-hand inventory that isn't a sale, purchase, or transfer — for example recording waste, theft, damage, a physical recount, or a reconciliation with the state compliance system.
Narrow the result with the product_ids, batch_ids, and location_ids filters (matching each adjustment's product_id / batch_id / location_id) and with the inserted_datetime, completion_datetime, and updated_datetime windows. When several filters are supplied an adjustment must satisfy all of them (AND).
Results are always scoped to the company the API key belongs to. The response is a paginated envelope: data holds the page of adjustments and next_page is the URL of the following page, or null on the last page.
This endpoint returns eventually consistent data, with changes taking up to 1 second to propagate in responses.
Required permission: products_permissions_view.
BearerAuthorizationBearer <token>API token generated in Distru (Settings → Distru API). Send it on every request as Authorization: Bearer YOUR_API_TOKEN.
ids[]?array<string>Restrict the result to specific stock adjustments by ID (the same ID returned as each stock adjustment's id). Repeat the bracketed key once per ID. Unknown IDs simply match nothing; an empty list is treated as no filter. At most 200 IDs may be given.
inserted_datetime?stringFilter by when the adjustment was created in Distru (its inserted_datetime). Inclusive ISO8601 range after,before separated by a comma; either bound may be omitted — after, keeps adjustments created on or after after, ,before those on or before before, and after,before those inside the closed range. A range with both bounds empty is rejected.
completion_datetime?stringFilter by the adjustment's effective date — the completion_datetime in the response. Inclusive ISO8601 range after,before separated by a comma; either bound may be omitted. A range with both bounds empty is rejected.
updated_datetime?stringFilter by when the adjustment was last modified in Distru (its updated_datetime). Same inclusive ISO8601 after,before comma range format as inserted_datetime, with either bound optional.
batch_ids[]?array<string>Restrict to adjustments made against specific batches by batch ID (as returned in each adjustment's batch_id). Repeat the bracketed key once per ID; matches ANY. Unknown IDs match nothing; an empty list is no filter. At most 200 IDs.
location_ids[]?array<string>Restrict to adjustments made at specific locations by location ID (as returned in each adjustment's location_id). Repeat the bracketed key once per ID; matches ANY. Unknown IDs match nothing; an empty list is no filter. At most 200 IDs.
product_ids[]?array<string>Restrict to adjustments of specific products by product ID (as returned in each adjustment's product_id). Repeat the bracketed key once per ID; matches ANY. A malformed ID is rejected with a 400; an unknown-but-well-formed ID matches nothing; an empty list is no filter. At most 200 IDs.
page?stringPage selector. Page size is fixed by the server; paginate by following the next_page URL in each response rather than building page selectors yourself — it is null on the last page. next_page uses page[after]=<cursor>, an opaque token marking where the next page resumes; pass it back exactly as given, and only to the endpoint that issued it. This is seek-based, so every page stays fast no matter how deep you page.
A list of stock adjustments
*/*- response
A collection of Stock Adjustments
data?array<>Stock Adjustments
next_page?stringURL for the next page of results; null when there is no next page
curl -X GET 'https://app.distru.com/public/v1/adjustments'{ "data": [ { "batch_id": null, "completion_datetime": "2026-10-13T15:03:31.435186Z", "compliance_quantity": null, "compliance_unit_type": null, "creator": { "banned": false, "deleted_at": null, "email": "[email protected]", "full_name": "FirstName5184 LastName5185", "id": "00000000-0000-0000-0000-000000000a0f", "inserted_datetime": "2026-10-13T15:03:31.429207Z", "role": { "id": "00000000-0000-0000-0000-000000000a7b", "name": "Admin 2682" }, "updated_datetime": "2026-10-13T15:03:31.429207Z" }, "description": null, "id": "00000000-0000-0000-0000-00000000007e", "inserted_datetime": "2026-10-13T15:03:31.443403Z", "license_id": null, "location_id": null, "owner_id": "00000000-0000-0000-0000-0000000009f1", "package_id": null, "product_id": "ccfa574a-c5ee-4a01-a313-fa025fe768e5", "quantity": "10", "reason": "revaluation", "total_cost": "10000", "unit_cost": "1000", "unit_type": { "id": "00000000-0000-0000-0000-00000000524f", "name": "Gram" }, "updated_datetime": "2026-10-13T15:03:31.443403Z" }, { "batch_id": null, "completion_datetime": "2026-10-13T15:03:31.603489Z", "compliance_quantity": "1", "compliance_unit_type": { "id": "00000000-0000-0000-0000-000000005251", "name": "Ounce" }, "creator": { "banned": false, "deleted_at": null, "email": "[email protected]", "full_name": "FirstName5122 LastName5123", "id": "00000000-0000-0000-0000-0000000009f1", "inserted_datetime": "2026-10-13T15:03:31.355598Z", "role": { "id": "00000000-0000-0000-0000-000000000a5c", "name": "Admin 2651" }, "updated_datetime": "2026-10-13T15:03:31.355598Z" }, "description": "A default note describing this transaction", "id": "00000000-0000-0000-0000-000000000081", "inserted_datetime": "2026-10-13T15:03:31.620517Z", "license_id": "00000000-0000-0000-0000-000000000095", "location_id": "00000000-0000-0000-0000-0000000001d0", "owner_id": null, "package_id": "00000000-0000-0000-0000-000000000043", "product_id": "a97c9ce1-5b34-4d4a-a9dd-e3163db6185a", "quantity": "1", "reason": "Voluntary Surrender", "total_cost": "900", "unit_cost": "900", "unit_type": { "id": "00000000-0000-0000-0000-000000005251", "name": "Ounce" }, "updated_datetime": "2026-10-13T15:03:31.620517Z" }, { "batch_id": "00000000-0000-0000-0000-00000000014b", "completion_datetime": "2026-10-13T15:03:31.721323Z", "compliance_quantity": null, "compliance_unit_type": null, "creator": { "banned": false, "deleted_at": null, "email": "[email protected]", "full_name": "FirstName5436 LastName5437", "id": "00000000-0000-0000-0000-000000000a8a", "inserted_datetime": "2026-10-13T15:03:31.717831Z", "role": { "id": "00000000-0000-0000-0000-000000000af6", "name": "Admin 2805" }, "updated_datetime": "2026-10-13T15:03:31.717831Z" }, "description": null, "id": "00000000-0000-0000-0000-000000000083", "inserted_datetime": "2026-10-13T15:03:31.726016Z", "license_id": null, "location_id": "00000000-0000-0000-0000-0000000001cc", "owner_id": null, "package_id": null, "product_id": "6a22ffc2-1159-41e2-84ab-f9f5c23192d4", "quantity": "1", "reason": "revaluation", "total_cost": "-800", "unit_cost": "-800", "unit_type": { "id": "00000000-0000-0000-0000-00000000524f", "name": "Gram" }, "updated_datetime": "2026-10-13T15:03:31.726016Z" } ], "next_page": null}