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