Trips

Trip / voyage logs.

POST/trips

Create a trip log

Requires `vesselId` and `departureTime`. `status: in_progress` with `engineInputs`/`fuelInputs` triggers vessel-vital write-back at trip start.

Request body
FieldTypeRequiredDescription
vesselIdstring (uuid)required
departureTimestring (date-time)required
departureLocationobjectoptional
arrivalTimestring (date-time)optional
arrivalLocationobjectoptional
captainstringoptional
crewarray<string>optional
purposestringoptional
distanceNmnumberoptional
fuelConsumednumberoptional
maxSpeednumberoptional
avgSpeednumberoptional
weatherSummarystringoptional
passengerCountintegeroptional
notesstringoptional
statusenum(scheduled | in_progress | completed | paused | cancelled)optional
engineInputsarray<object>optionalNew-shape vital inputs — only meaningful with status=in_progress.
fuelInputsarray<object>optional
Response
FieldTypeRequiredDescription
dataobjectrequired
data.idstring (uuid)optional
data.vesselIdstring (uuid)optional
data.tripNamestring | nulloptional
data.tripReferencestring | nulloptional
data.departureTimestring (date-time)optional
data.departureLocationobject | nulloptional
data.arrivalTimestring (date-time) | nulloptional
data.arrivalLocationobject | nulloptional
data.captainstring | nulloptional
data.crewarray<string>optional
data.purposestring | nulloptional
data.distanceNmnumber | nulloptional
data.fuelConsumednumber | nulloptional
data.maxSpeednumber | nulloptional
data.avgSpeednumber | nulloptional
data.weatherSummarystring | nulloptional
data.passengerCountinteger | nulloptional
data.notesstring | nulloptional
data.statusenum(scheduled | in_progress | completed | paused | cancelled)optional
data.engineHoursStartobject | nulloptional
data.engineHoursEndobject | nulloptional
data.createdAtstring (date-time)optional
data.updatedAtstring (date-time)optional
GET/trips/{id}

Get a trip log

Lazily backfills geocoded lat/lon on departure/arrival locations that only have a place name, returning the enriched coordinates immediately.

Path parameters
NameInTypeRequiredDescription
idpathstring (uuid)required
Response
FieldTypeRequiredDescription
dataanyrequired
GET/trips/vessel/{vesselId}

List a vessel's trip logs

Supports `?cursor=` pagination on every sort except `sortBy=duration` (a raw-SQL computed-column sort with no defined cursor ordering — falls back to `?page=` semantics).

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[].tripNamestring | nulloptional
data[].tripReferencestring | nulloptional
data[].departureTimestring (date-time)optional
data[].departureLocationobject | nulloptional
data[].arrivalTimestring (date-time) | nulloptional
data[].arrivalLocationobject | nulloptional
data[].captainstring | nulloptional
data[].crewarray<string>optional
data[].purposestring | nulloptional
data[].distanceNmnumber | nulloptional
data[].fuelConsumednumber | nulloptional
data[].maxSpeednumber | nulloptional
data[].avgSpeednumber | nulloptional
data[].weatherSummarystring | nulloptional
data[].passengerCountinteger | nulloptional
data[].notesstring | nulloptional
data[].statusenum(scheduled | in_progress | completed | paused | cancelled)optional
data[].engineHoursStartobject | nulloptional
data[].engineHoursEndobject | 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).