Inventory

Spare parts, consumables, and provisioning stock.

POST/inventory

Create an inventory item

Requires `vesselId` and `itemType`. Accepts either `vesselSystemId` or `category` (the server derives whichever is omitted); neither is required for provisions/consumables not tied to a system.

Request body
FieldTypeRequiredDescription
vesselIdstring (uuid)required—
itemTypeenum(spare_part | safety_equipment | consumable | provision | interior | exterior | cleaning | tools | electronics | medical | lines_rigging | navigation | tender_equipment | water_toys | other)required—
namestringrequired—
vesselSystemIdstring (uuid)optional—
categorystringoptional—
quantityintegeroptional—
unitstringoptional—
locationstringoptional—
partNumberstringoptional—
costPerUnitstringoptionalSerialized as string to preserve Decimal precision.
currencystringoptional—
supplierstringoptional—
reorderThresholdintegeroptional—
expirationDatestring (date-time)optional—
notesstringoptional—
Response
FieldTypeRequiredDescription
dataobjectrequired—
data.idstring (uuid)optional—
data.vesselIdstring (uuid)optional—
data.vesselSystemIdstring (uuid) | nulloptional—
data.vesselSystemobject | nulloptional—
data.vesselSystem.idstring (uuid)optional—
data.vesselSystem.systemKeystringoptional—
data.vesselSystem.namestringoptional—
data.itemTypestringoptionalInventoryType enum, e.g. spare_part, safety_equipment, consumable, provision.
data.namestringoptional—
data.categorystring | nulloptional—
data.subcategorystring | nulloptional—
data.quantityintegeroptional—
data.unitstring | nulloptional—
data.locationstring | nulloptional—
data.deckLevelstring | nulloptional—
data.sectionstring | nulloptional—
data.partNumberstring | nulloptional—
data.fitsEquipmentarray<string>optional—
data.brandstring | nulloptional—
data.modelstring | nulloptional—
data.costPerUnitstring | nulloptionalSerialized as string to preserve Decimal precision.
data.currencystringoptional—
data.supplierstring | nulloptional—
data.reorderThresholdinteger | nulloptional—
data.reorderQuantityinteger | nulloptional—
data.autoReorderEnabledbooleanoptional—
data.preferredSupplierIdstring (uuid) | nulloptional—
data.expirationDatestring (date-time) | nulloptional—
data.barcodestring | nulloptional—
data.photostring | nulloptional—
data.notesstring | nulloptional—
data.sourceDescriptionstring | nulloptional—
data.catalogPartIdstring (uuid) | nulloptional—
data.dataHealthFlagsarray<object>optionalDerived data-quality warnings for this row (e.g. missing reorder threshold).
data.hasOpenAutoDraftbooleanoptionalWhether a suppressed purchase-order auto-draft exists for this item's low-stock trigger.
data.vesselobjectoptional—
data.vessel.idstring (uuid)optional—
data.vessel.vesselNamestringoptional—
data.createdAtstring (date-time)optional—
data.updatedAtstring (date-time)optional—
GET/inventory/{id}

Get an inventory item

Returns a single inventory item with vessel and vessel-system summaries.

Path parameters
NameInTypeRequiredDescription
idpathstring (uuid)required—
Response
FieldTypeRequiredDescription
dataobjectrequired—
data.idstring (uuid)optional—
data.vesselIdstring (uuid)optional—
data.vesselSystemIdstring (uuid) | nulloptional—
data.vesselSystemobject | nulloptional—
data.vesselSystem.idstring (uuid)optional—
data.vesselSystem.systemKeystringoptional—
data.vesselSystem.namestringoptional—
data.itemTypestringoptionalInventoryType enum, e.g. spare_part, safety_equipment, consumable, provision.
data.namestringoptional—
data.categorystring | nulloptional—
data.subcategorystring | nulloptional—
data.quantityintegeroptional—
data.unitstring | nulloptional—
data.locationstring | nulloptional—
data.deckLevelstring | nulloptional—
data.sectionstring | nulloptional—
data.partNumberstring | nulloptional—
data.fitsEquipmentarray<string>optional—
data.brandstring | nulloptional—
data.modelstring | nulloptional—
data.costPerUnitstring | nulloptionalSerialized as string to preserve Decimal precision.
data.currencystringoptional—
data.supplierstring | nulloptional—
data.reorderThresholdinteger | nulloptional—
data.reorderQuantityinteger | nulloptional—
data.autoReorderEnabledbooleanoptional—
data.preferredSupplierIdstring (uuid) | nulloptional—
data.expirationDatestring (date-time) | nulloptional—
data.barcodestring | nulloptional—
data.photostring | nulloptional—
data.notesstring | nulloptional—
data.sourceDescriptionstring | nulloptional—
data.catalogPartIdstring (uuid) | nulloptional—
data.dataHealthFlagsarray<object>optionalDerived data-quality warnings for this row (e.g. missing reorder threshold).
data.hasOpenAutoDraftbooleanoptionalWhether a suppressed purchase-order auto-draft exists for this item's low-stock trigger.
data.vesselobjectoptional—
data.vessel.idstring (uuid)optional—
data.vessel.vesselNamestringoptional—
data.createdAtstring (date-time)optional—
data.updatedAtstring (date-time)optional—
PATCH/inventory/{id}

Update an inventory item

Partial update — any writable `InventoryItem` field. `category` and `vesselSystemId` are dual-accept (supplying one derives the other when possible).

Path parameters
NameInTypeRequiredDescription
idpathstring (uuid)required—
Request body
FieldTypeRequiredDescription
namestringoptional—
vesselSystemIdstring (uuid) | nulloptional—
categorystring | nulloptional—
quantityintegeroptional—
unitstring | nulloptional—
locationstring | nulloptional—
costPerUnitstring | nulloptionalSerialized as string to preserve Decimal precision.
currencystringoptional—
reorderThresholdinteger | nulloptional—
notesstring | nulloptional—
Response
FieldTypeRequiredDescription
dataobjectrequired—
data.idstring (uuid)optional—
data.vesselIdstring (uuid)optional—
data.vesselSystemIdstring (uuid) | nulloptional—
data.vesselSystemobject | nulloptional—
data.vesselSystem.idstring (uuid)optional—
data.vesselSystem.systemKeystringoptional—
data.vesselSystem.namestringoptional—
data.itemTypestringoptionalInventoryType enum, e.g. spare_part, safety_equipment, consumable, provision.
data.namestringoptional—
data.categorystring | nulloptional—
data.subcategorystring | nulloptional—
data.quantityintegeroptional—
data.unitstring | nulloptional—
data.locationstring | nulloptional—
data.deckLevelstring | nulloptional—
data.sectionstring | nulloptional—
data.partNumberstring | nulloptional—
data.fitsEquipmentarray<string>optional—
data.brandstring | nulloptional—
data.modelstring | nulloptional—
data.costPerUnitstring | nulloptionalSerialized as string to preserve Decimal precision.
data.currencystringoptional—
data.supplierstring | nulloptional—
data.reorderThresholdinteger | nulloptional—
data.reorderQuantityinteger | nulloptional—
data.autoReorderEnabledbooleanoptional—
data.preferredSupplierIdstring (uuid) | nulloptional—
data.expirationDatestring (date-time) | nulloptional—
data.barcodestring | nulloptional—
data.photostring | nulloptional—
data.notesstring | nulloptional—
data.sourceDescriptionstring | nulloptional—
data.catalogPartIdstring (uuid) | nulloptional—
data.dataHealthFlagsarray<object>optionalDerived data-quality warnings for this row (e.g. missing reorder threshold).
data.hasOpenAutoDraftbooleanoptionalWhether a suppressed purchase-order auto-draft exists for this item's low-stock trigger.
data.vesselobjectoptional—
data.vessel.idstring (uuid)optional—
data.vessel.vesselNamestringoptional—
data.createdAtstring (date-time)optional—
data.updatedAtstring (date-time)optional—
GET/inventory/vessel/{vesselId}

List a vessel's inventory

Supports `?cursor=` pagination on the standard path only — the `status=lowstock` filter (raw SQL comparing `quantity` to `reorderThreshold`) is a bounded result set and does not support cursor.

Path parameters
NameInTypeRequiredDescription
vesselIdpathstring (uuid)required—
Query parameters
NameInTypeRequiredDescription
cursorquerystringoptionalOpaque pagination cursor from a previous response's `pagination.cursor`. Omit this param entirely for the first page of cursor mode; pass `cursor=` (empty) is also accepted as "start from the beginning in cursor mode." Omitting `cursor` altogether (not even as an empty string) falls back to legacy `?page=` semantics on endpoints that still support it.
limitqueryintegeroptional—
Response
FieldTypeRequiredDescription
dataarray<object>required—
data[].idstring (uuid)optional—
data[].vesselIdstring (uuid)optional—
data[].vesselSystemIdstring (uuid) | nulloptional—
data[].vesselSystemobject | nulloptional—
data[].vesselSystem.idstring (uuid)optional—
data[].vesselSystem.systemKeystringoptional—
data[].vesselSystem.namestringoptional—
data[].itemTypestringoptionalInventoryType enum, e.g. spare_part, safety_equipment, consumable, provision.
data[].namestringoptional—
data[].categorystring | nulloptional—
data[].subcategorystring | nulloptional—
data[].quantityintegeroptional—
data[].unitstring | nulloptional—
data[].locationstring | nulloptional—
data[].deckLevelstring | nulloptional—
data[].sectionstring | nulloptional—
data[].partNumberstring | nulloptional—
data[].fitsEquipmentarray<string>optional—
data[].brandstring | nulloptional—
data[].modelstring | nulloptional—
data[].costPerUnitstring | nulloptionalSerialized as string to preserve Decimal precision.
data[].currencystringoptional—
data[].supplierstring | nulloptional—
data[].reorderThresholdinteger | nulloptional—
data[].reorderQuantityinteger | nulloptional—
data[].autoReorderEnabledbooleanoptional—
data[].preferredSupplierIdstring (uuid) | nulloptional—
data[].expirationDatestring (date-time) | nulloptional—
data[].barcodestring | nulloptional—
data[].photostring | nulloptional—
data[].notesstring | nulloptional—
data[].sourceDescriptionstring | nulloptional—
data[].catalogPartIdstring (uuid) | nulloptional—
data[].dataHealthFlagsarray<object>optionalDerived data-quality warnings for this row (e.g. missing reorder threshold).
data[].hasOpenAutoDraftbooleanoptionalWhether a suppressed purchase-order auto-draft exists for this item's low-stock trigger.
data[].vesselobjectoptional—
data[].vessel.idstring (uuid)optional—
data[].vessel.vesselNamestringoptional—
data[].createdAtstring (date-time)optional—
data[].updatedAtstring (date-time)optional—
paginationobjectoptionalCanonical cursor-pagination block. On endpoints not yet retrofitted for true cursor support, `cursor` is a best-effort display-only value (not decodable, no `?cursor=` branch accepts it back) — see each endpoint's description for whether it has full cursor support.
pagination.cursorstring | nulloptionalOpaque token for the next page, or `null` when `hasMore` is `false`.
pagination.limitintegerrequired—
pagination.hasMorebooleanrequired—
pagination.totalintegerrequiredTotal row count matching the filter (not just this page).