Vessels

Vessel records the caller's API key can see (owned or team-member access).

GET/vessels

List vessels

Returns every vessel the API key's creator-user owns or has team-member access to. Deliberately a **bare array of `Vessel` objects wrapped only by the envelope** (`{ data: Vessel[] }`) — there is no `pagination` block on this endpoint (see "Known gaps" in `docs/api.md`: the multi-vessel downgrade-lock annotation needs the full owned-vessel set to compute `isLocked`/`lockReason` correctly, so this endpoint isn't cursor-paginated). Owned vessels beyond the caller's plan's vessel limit are annotated with `isLocked: true` rather than omitted.

Response
FieldTypeRequiredDescription
dataarray<object>required
data[].idstring (uuid)optional
data[].ownerIdstring (uuid)optional
data[].vesselNamestringoptional
data[].makestring | nulloptional
data[].modelstring | nulloptional
data[].yearinteger | nulloptional
data[].hullNumberstring | nulloptional
data[].vesselTypestring | nulloptionalVesselType enum, e.g. motor_yacht, sailing_yacht, catamaran.
data[].statusstringoptionalVesselStatus enum, e.g. in_service, laid_up, in_refit.
data[].engineTypestring | nulloptional
data[].engineCountinteger | nulloptional
data[].homePortstring | nulloptional
data[].homePortLatnumber | nulloptional
data[].homePortLonnumber | nulloptional
data[].homePortResolvedstring | nulloptional
data[].homePortNeedsReviewbooleanoptional
data[].lengthnumber | nulloptional
data[].beamnumber | nulloptional
data[].draftnumber | nulloptional
data[].airDraftnumber | nulloptional
data[].loaTotalnumber | nulloptional
data[].displacementinteger | nulloptional
data[].grossTonnageinteger | nulloptional
data[].fuelCapacityinteger | nulloptional
data[].waterCapacityinteger | nulloptional
data[].maxAccommodationinteger | nulloptional
data[].maxRangeinteger | nulloptional
data[].cruisingSpeednumber | nulloptional
data[].imoNumberstring | nulloptional
data[].mmsistring | nulloptional
data[].callSignstring | nulloptional
data[].flagStatestring | nulloptional
data[].complianceProfilestring | nulloptional
data[].multiCurrencyEnabledbooleanoptional
data[].defaultCurrencystringoptional
data[].photostring | nulloptional
data[].dataConsistencyWarningsarray<object> | nulloptional
data[].ownerobjectoptional
data[].owner.idstring (uuid)optional
data[].owner.firstNamestring | nulloptional
data[].owner.lastNamestring | nulloptional
data[].owner.emailstring | nulloptional
data[].owner.phonestring | nulloptional
data[].owner.profilePhotostring | nulloptional
data[].captainobject | nulloptional
data[].captain.idstring (uuid)optional
data[].captain.firstNamestring | nulloptional
data[].captain.lastNamestring | nulloptional
data[].captain.emailstring | nulloptional
data[].captain.phonestring | nulloptional
data[].captain.profilePhotostring | nulloptional
data[].permissionsobjectoptionalPer-feature read/full permission map computed for the impersonated user.
data[].isLockedbooleanoptionalPresent only when this owned vessel is over the caller's plan's vessel-count limit.
data[].lockReasonstringoptional
data[].createdAtstring (date-time)optional
data[].updatedAtstring (date-time)optional
cURL
curl -sS "https://api.owlmar.com/v1/vessels" \
-H "Authorization: Bearer $OWLMAR_API_KEY"
GET/vessels/{id}

Get a vessel

Returns a single vessel with its captain, permissions, and (unlike the list endpoint) the most recent equipment, maintenance events, documents, and trip logs nested inline (each capped at the most recent 10 rows — use the dedicated list endpoints for full history). 404 if the vessel doesn't exist or the caller has no access.

Path parameters
NameInTypeRequiredDescription
idpathstring (uuid)required
Response
FieldTypeRequiredDescription
dataanyrequiredGET /vessels/{id} — Vessel plus the 10 most recent nested equipment/maintenance/documents/trips and full inventory.
cURL
curl -sS "https://api.owlmar.com/v1/vessels/$VESSEL_ID" \
-H "Authorization: Bearer $OWLMAR_API_KEY"