Equipment

Onboard equipment/systems tracked per vessel.

POST/equipment

Create equipment

Registers a new piece of onboard equipment. Requires `equipmentType` and either `systemCategory` or `vesselSystemId` (the server resolves whichever one you omit from the other when possible). Attempts an automatic catalog-model link on create and returns any suggested manufacturer maintenance kits for the matched model.

Request body
FieldTypeRequiredDescription
vesselIdstring (uuid)required
equipmentTypestringrequired
systemCategorystringoptional
vesselSystemIdstring (uuid)optional
makestringoptional
modelstringoptional
serialNumberstringoptional
installDatestring (date-time)optional
hoursAtInstallintegeroptional
currentHoursintegeroptional
capacityobjectoptional
locationOnVesselstringoptional
warrantyExpiresstring (date-time)optional
notesstringoptional
Response
FieldTypeRequiredDescription
dataanyrequired
cURL
curl -sS -X POST "https://api.owlmar.com/v1/equipment" \
-H "Authorization: Bearer $OWLMAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"vesselId": "'"$VESSEL_ID"'",
"systemCategory": "propulsion",
"equipmentType": "Main Engine — Port",
"make": "MAN",
"model": "D2862 LE466"
}'
GET/equipment/{id}

Get equipment

Returns a single equipment record with its 10 most recent maintenance events, documents, and catalog model info.

Path parameters
NameInTypeRequiredDescription
idpathstring (uuid)required
Response
FieldTypeRequiredDescription
dataanyrequired
PATCH/equipment/{id}

Update equipment

Partial update. Any writable `Equipment` field may be included; only the fields present in the body are changed. Setting `currentHours` server-stamps `currentHoursAt` and re-evaluates any hours-based maintenance schedules, returning `dueSchedules` for anything that crossed into due/due-soon as a result.

Path parameters
NameInTypeRequiredDescription
idpathstring (uuid)required
Request body
FieldTypeRequiredDescription
systemCategorystringoptional
vesselSystemIdstring (uuid) | nulloptional
equipmentTypestringoptional
makestring | nulloptional
modelstring | nulloptional
serialNumberstring | nulloptional
installDatestring (date-time) | nulloptional
hoursAtInstallinteger | nulloptional
currentHoursinteger | nulloptional
capacityobject | nulloptional
locationOnVesselstring | nulloptional
warrantyExpiresstring (date-time) | nulloptional
notesstring | nulloptional
Response
FieldTypeRequiredDescription
dataanyrequired
cURL
curl -sS -X PATCH "https://api.owlmar.com/v1/equipment/$EQUIPMENT_ID" \
-H "Authorization: Bearer $OWLMAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"currentHours": 4821}'
GET/equipment/vessel/{vesselId}

List a vessel's equipment

Returns non-archived equipment for a vessel, each annotated with `hoursStatus` (hours-based service-due computation). Supports opaque cursor pagination via `?cursor=` — omit `cursor` entirely for the first page, then pass back the `cursor` value from `pagination.cursor` for subsequent pages until `pagination.hasMore` is `false`. Default sort without `?cursor=` is by `systemCategory`; the cursor-paginated path always sorts `(createdAt DESC, id DESC)`.

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[].systemCategorystringoptional
data[].vesselSystemIdstring (uuid) | nulloptional
data[].vesselSystemobject | nulloptional
data[].vesselSystem.idstring (uuid)optional
data[].vesselSystem.systemKeystringoptional
data[].vesselSystem.namestringoptional
data[].equipmentTypestringoptional
data[].makestring | nulloptional
data[].modelstring | nulloptional
data[].serialNumberstring | nulloptional
data[].installDatestring (date-time) | nulloptional
data[].hoursAtInstallinteger | nulloptional
data[].currentHoursinteger | nulloptional
data[].currentHoursAtstring (date-time) | nulloptional
data[].capacityobject | nulloptional
data[].locationOnVesselstring | nulloptional
data[].warrantyExpiresstring (date-time) | nulloptional
data[].photosarray<string>optional
data[].notesstring | nulloptional
data[].equipmentModelIdstring (uuid) | nulloptional
data[].equipmentModelobject | nulloptional
data[].equipmentModel.idstring (uuid)optional
data[].equipmentModel.modelNamestring | nulloptional
data[].equipmentModel.manualUrlstring | nulloptional
data[].equipmentModel.manualContentHashstring | nulloptional
data[].equipmentModel.manualDiscoveryStatusstring | nulloptional
data[].equipmentModel.manualDiscoverySourcestring | nulloptional
data[].equipmentModel.maintenanceScheduleobject | nulloptional
data[].equipmentModel.manufacturerobjectoptional
data[].equipmentModel.maintenanceKitsarray<object>optional
data[].hoursStatusarray<object>optionalDerived hours-based service-due status per applicable maintenance kit/schedule.
data[].archivedAtstring (date-time) | nulloptional
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).
cURL
curl -sS "https://api.owlmar.com/v1/equipment/vessel/$VESSEL_ID?cursor=&limit=25" \
-H "Authorization: Bearer $OWLMAR_API_KEY"