Documents

Vessel document library (manuals, certificates, surveys, etc.).

GET/documents/{id}

Get a document

Returns a single document with vessel, linked equipment (if any), and uploader.

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

List a vessel's documents

Excludes archived documents by default. Supports `?cursor=` pagination on the non-search path only — `?search=` runs a bounded hybrid vector+ILIKE query (matching title/category/OCR text) and does not support cursor. Document *creation* is not on the public surface — the only create route requires a multipart file upload, not a metadata-only body (see `docs/api.md` "Known gaps").

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) | nulloptional
data[].scopeenum(vessel | global)optional
data[].documentTypestringoptionalDocumentType enum, e.g. manual, invoice, warranty, registration, insurance, survey, certificate.
data[].categorystringoptional
data[].titlestringoptional
data[].fileUrlstring | nulloptional
data[].fileSizeinteger | nulloptional
data[].mimeTypestring | nulloptional
data[].equipmentIdstring (uuid) | nulloptional
data[].expirationDatestring (date-time) | nulloptional
data[].uploadedBystring (uuid)optional
data[].tagsarray<string>optional
data[].statusstringoptional
data[].currentVersionintegeroptional
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).