/api/v2/). Additive changes (new endpoints,
new optional response fields) are not breaking. Removing a field, changing a
type, or tightening a scope is breaking and ships under a new path version.
2026-09-22 — item-sized scopes
Five new scopes, each filtering one block within a response your key already reads. Every existing tier that could already see a block keeps seeing it — these scopes were added tomanagement, recruiter and vessel automatically,
so no partner on those tiers loses anything. An external partner’s
per-contract scopes are unaffected unless CrewPass adds these to your contract
— in particular, crew:profile:read alone no longer implies the contact or
professional block for a scope_overrides-based partner that hasn’t been
upgraded (it always has for management / recruiter / vessel).
Profile (GET /api/v2/employers/me/crew/{id}/profile)
crew:contact:read(new): gatesemail,phone,country_code.crew:professional:read(new): gatesnationality,languages,skills,years_experience,bioandprofile_photo_url— this is the old base profile in full, minusname/rankand the contact fields above.crew:experience:read(new): gatesemployment_historyonly.crew:personal:read(new): gatesdate_of_birth,address,passportandvisas.crew:profile:full:readstill works exactly as before — it’s now a compatibility alias forcrew:experience:read+crew:personal:readtogether (unchanged: it never included the professional-block fields above).- Only
nameandrankneed nothing beyondcrew:profile:read.
GET /api/v2/employers/me/crew/{id}/photo) — Behaviour change: now
also needs crew:professional:read (the photo is part of the professional
block), on top of the existing crew:profile:read gate.
Documents (GET /api/v2/employers/me/crew/{id}/documents and its download
endpoint) — Behaviour change: a document whose classification.document_class
is medical now needs the new crew:medical:read scope; otherwise it’s
left out of the list and its download link 404s.
Compliance (POST /api/v2/employers/me/crew/{id}/compliance-checks) — Behaviour
change: a medical requirement row’s satisfied_by document details now need
crew:medical:read too. The row’s status and group are never hidden.
Two scopes, connections:read and connections:write, are declared for a
future surface and are not granted to any tier yet.
2026-09-22 — webhooks: crew who join your fleet
No change to any payload or field.- Crew who join your fleet arrive in full. When a crew member is added to one
of your vessels, you receive a
crew.document.processedfor each document they already hold, plus their current compliance, status and profile. Registering an endpoint still sends no backlog. - Update events carry a change.
crew.document.updated,crew.compliance.changedandcrew.status.changedare sent only when a value in their payload changes, so a recalculation that leaves every figure the same sends nothing. See Webhooks.
2026-09-18 — webhook delivery, stated plainly
No change to any payload or field. This writes down how delivery behaves, so you can build a receiver against it:- Changes reach you within about 15 minutes. CrewPass checks your fleet on a schedule rather than at the instant of a write.
- Registering an endpoint does not send you a backlog. Read the current state through the API once; webhooks keep you in step from there.
- Events are not ordered. Each one says how something looks now.
crew.document.updatedcovers any visible change to a document you already have, not only a change of verification status.- There is no “document removed” event. See Webhooks.
2026-09-17 — document classification and vessel IMO numbers
Documents now tell you what they are, as codes you can map to your own document types, so you no longer need to work it out from the title. Every change is additive except the two marked Behaviour change and Value change. Documents (GET /api/v2/employers/me/crew/{id}/documents and the
crew.document.* webhooks)
classification(new): what the document is. It gives thedocument_class, thecategory_code, the CrewPass certificate type it was matched to (catalogue_title, with a stableid),stcw_regulationandstcw_codes,level,is_refresher,flag_state,coc_capacities, and thesourcesit was built from. See Classify documents.- Document codes (new page): every value a
classification can contain. Each classification includes the
taxonomy_version(the version of this list) it was built with. review_status(new): the result of CrewPass’s review, separate from expiry.is_expiredandno_expiry(new): tell a document that doesn’t expire apart from one whose expiry date wasn’t recorded.is_currentandsuperseded_by(new): show when a certificate has been replaced by a newer edition.- Behaviour change: only documents CrewPass has finished processing are
shared. Documents still being processed, and older uploads from before
CrewPass’s current document processing, are no longer listed, counted in
documents_expiring, or available to download. A new upload appears as soon as processing completes. - Value change:
issuerisnullwhen the issuing authority isn’t known, instead of a placeholder such as “Unknown”.
GET /api/v2/employers/me/fleet)
vessel_imo(new): the vessel’s IMO number, so you can match vessels without relying on names.nullwhen CrewPass doesn’t hold one.- Documentation correction: each crew member’s status on the vessel is returned
in
status(for exampleactiveorinvited), as it always has been. The Crew guide previously called this fieldverification_status.
- Endpoints are now grouped by task (Account, Fleet, Crew, Documents, Compliance), with clearer names and descriptions. Page addresses in the API reference have changed.
2026-07-02 — compliance as a unified requirement matrix
POST /api/v2/employers/me/crew/{id}/compliance-checks now returns a full
requirement matrix, so you can see at a glance exactly which requirements a crew
member holds, which document satisfies each, and what is still outstanding.
requirements[]— one row per requirement, grouped asmedical,stcw,certificate, orqualification. Each row has its ownstatus(met·expiring·expired·missing·pending), plustitle, optionalexpiry_date, anddays_until_expiry.satisfied_by[]— the actual document(s) meeting each requirement, each withdocument_id,title,expiry_date, and a brandeddownload_pathyou can fetch directly. Empty when the requirement is unmet.- STCW rows carry per-module detail under
modules[]. summary— totals per status that always reconcile withrequirements[].overall_statuswithcompliance_source— the verdict comes straight from the CrewPass compliance engine (live_evaluator). If the engine is briefly unavailable the response falls back to the stored projection and flags it viacompliance_source, so the provenance of every verdict is explicit.
2026-06-30 — richer crew profile & document detail
Several read fields now carry more detail and map more precisely to the underlying records. All changes are additive except the two field-value changes noted below.- Profile
phoneis now returned in full international (E.164) form (dial code- national number, e.g.
+447700900000), with a new ISOcountry_codealongside it. Value change:phonepreviously returned the national number only.
- national number, e.g.
- Profile
address.full_address(new) gives the composed single-line address;line1staysnullwhen no street was supplied. - Employment history
sourcenow reports the verification level of each entry —self_reportedoremployer_verified. Value change: it previously returned the dashboard origin (crew_dashboard/employer_dashboard). - Documents now return only current, live documents — rejected, replaced/deduplicated, and inactive placeholders are excluded from listings, expiring counts, and downloads, so what you see reflects what a crew member actually holds.
2026-06-23 — simpler read authentication (no request signing)
Reads now authenticate with just your API key as a Bearer token over TLS — request signing has been dropped from all reads, so there is nothing to sign on a GET. HMAC signing is retained only for verifying outbound webhook deliveries. See Authentication. No request or response shapes changed; only the read auth requirement is simpler.2026-06 — v1 management read surface + webhooks
The v1 management-company surface: read-only plus webhooks, on top of the auth → scope → rate-limit → HMAC → isolation → consent → audit spine. Your fleet is derived from your CrewPass employer account; there is nothing to attach. EndpointsGET /api/v2/partners/me— identity + granted scopes.GET /api/v2/employers/me/vessels— your vessels (vessels:fleet:read).GET /api/v2/employers/me/fleet— crew across your vessels, with verification + background-check status and documents-expiring counts, paginated (vessels:fleet:read+ per-crewcrew:status:read).POST /api/v2/employers/me/crew/lookup— resolve a crew member by email (crew:status:read).GET /api/v2/employers/me/crew/{id}/profile— base profile, plus an identity block undercrew:profile:full:read.GET /api/v2/employers/me/crew/{id}/photo— branded photo proxy (crew:profile:read).GET /api/v2/employers/me/crew/{id}/documents— documents with issuer + verification status (crew:documents:read).GET /api/v2/employers/me/crew/{id}/documents/{document_id}/download— short-lived, branded file link (crew:documents:download).POST /api/v2/employers/me/crew/{id}/compliance-checks— compliance as a unified requirement matrix (crew:compliance:read).
crew.document.processed,crew.document.updated,crew.compliance.changed,crew.status.changed,crew.profile.updated. See Webhooks.