Change a lot's status
Walks the lot through its lifecycle (active / on_hold / expired /
recalled). A mandatory reason is recorded for compliance. Status
transitions are validated by the canonical handler. Requires the
lots:write scope.
Authorizations
API key issued per entity via Settings > Developers > API Keys.
Each key carries scopes (e.g. orders:read, products:write).
Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.
Path Parameters
Body
Response
Updated lot
A lot-tracked production batch of a product. Created when receiving lot- tracked inventory and consumed via FEFO (first-expiry-first-out) at allocation time. Status walks active -> on_hold -> expired -> recalled via the change-status endpoint. Soft-delete refuses when quantity_on_hand > 0 (HTTP 409). Scope: lots:read / lots:write / lots:delete. Rule 23 SSOT: quantity_on_hand is written only by canonical inventory_transactions postings; the API never writes it directly.
"lot"
Operator-supplied or vendor-supplied lot identifier. 1..100 chars.
Per-unit landed cost at receipt (USD).
Original receive quantity. Immutable after creation.
Current on-hand. SSOT: derived via inventory_transactions.
Lifecycle state. Changed via POST /lots/{id}/change-status with mandatory reason.
active, on_hold, expired, recalled "active"
Migration provenance (e.g. versa, bubble).
Free-form caller metadata. Default {}.
Computed aggregate joined on lot_id from inventory.inventory_transactions. Only on GET /lots/{id}, not on list.

