Skip to main content
POST
Create a lot

Authorizations

Authorization
string
header
required

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.

Headers

Idempotency-Key
string

Client-generated unique key for idempotent POST/PATCH/DELETE operations. Alias for the Idempotency parameter. Max 255 chars. On retry with the same key, the original response is returned without re-executing the operation. Keys expire after 24 hours.

Maximum string length: 255

Body

application/json
product_id
string<uuid>
required
lot_code
string
required

1..100 chars.

vendor_id
string<uuid> | null
manufacture_date
string<date> | null
expiration_date
string<date> | null
received_at
string<date-time> | null
cost
number<float> | null
quantity_received
number<float>
default:0
notes
string | null
metadata
object | null

Response

Created 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.

id
string<uuid>
read-only
object
string
Example:

"lot"

entity_id
string<uuid>
read-only
product_id
string<uuid>
lot_code
string

Operator-supplied or vendor-supplied lot identifier. 1..100 chars.

vendor_id
string<uuid> | null
manufacture_date
string<date> | null
expiration_date
string<date> | null
received_at
string<date-time> | null
cost
number<float> | null

Per-unit landed cost at receipt (USD).

quantity_received
number<float>

Original receive quantity. Immutable after creation.

quantity_on_hand
number<float>
read-only

Current on-hand. SSOT: derived via inventory_transactions.

quantity_consumed
number<float>
read-only
quantity_written_off
number<float>
read-only
status
enum<string>

Lifecycle state. Changed via POST /lots/{id}/change-status with mandatory reason.

Available options:
active,
on_hold,
expired,
recalled
Example:

"active"

notes
string | null
external_source
string | null

Migration provenance (e.g. versa, bubble).

external_id
string | null
metadata
object

Free-form caller metadata. Default {}.

inventory_summary
object
read-only

Computed aggregate joined on lot_id from inventory.inventory_transactions. Only on GET /lots/{id}, not on list.

created_at
string<date-time>
read-only
updated_at
string<date-time>
read-only