user.profile.updated
Fires when name, role, country, or photo URL change.
Scope required for delivery: profile:read
GET /v1/me with the user’s access token, replace
your cached profile.
user.sea_time.updated
Fires when sea-time totals change — a new sea time entry verified, an existing
entry amended, or a recalculation.
Scope required for delivery: seatime:read
GET /v1/me/sea-time (and /recent if you display
the trend chart).
user.vessels.updated
Fires when a vessel period is added or amended.
Scope required for delivery: vessels:read
GET /v1/me/vessels. If you paginate, start from the
first page — a vessel period change can shift the sort order of any page.
user.consent.revoked
Fires when the user disconnects your integration from the DSS dashboard.
Scope required for delivery: none — this event delivers regardless of
which scopes you held. A partner who never held profile:read still needs to
know to clean up.
401 invalid_token even before this event
reaches you.
webhook.test
Fired by GET /v1/webhooks/test. Identical shape to real events; user_id
is the calling user (the access token’s subject).
Scope required for delivery: none — the test endpoint always delivers.
Delivery headers
Every delivery, regardless of event type:
The
X-DSS-Signature value is HMAC-SHA256 of <ts>.<raw-body> using your
webhook signing secret. See Verification.
Retry & give-up
We give up after 24 hours or 6 attempts total, whichever comes first.
Failed deliveries persist in our webhook delivery log; we surface gives-up
in the super-admin dashboard for the integration team to investigate
together.
Future events
We add events conservatively and announce on the changelog. Plan your handler with anunknown-event fallback that returns 2xx and
logs — adding a new event type isn’t a breaking change.
