What you receive
Every delivery looks like this:- Payloads stay small and our signing surface stays minimal.
- Scope is re-evaluated at fetch time. If the user revoked between event
firing and your fetch, the fetch fails cleanly (
401 invalid_token) instead of leaking stale data.
Delivery model
Reliability
- At-least-once delivery. You may see the same event twice — dedupe on
id. - Retry schedule:
+1m, +5m, +30m, +2h, +6h. We give up after 24h (or 6 attempts total, whichever comes first). - Response budget: 5 seconds. If your handler takes longer we treat it as a failure and retry.
- Idempotency key is the event
id, stable across every attempt.
Order
Webhooks are not ordered. Multiple events for the same user can arrive out of order, especially after retries. Always fetch the latest state from the API rather than trying to apply an event as a delta — the event tells you “something changed,” the API call tells you “this is the new value.”Registering your endpoint
During onboarding you’ll give us:- A single HTTPS URL.
- A signing secret rotation contact (an email we ping when we plan to rotate).
client_secret. Store it next to your other secrets. The
client_secret and webhook_secret rotate independently — rotating either
one does not affect the other.
To change your webhook URL or rotate the secret in sandbox, email
admin@digitalseaservice.com.
Production rotation is handled by your DSS account contact.
Testing your handler
Once your URL and secret are registered, callGET /v1/webhooks/test with a
valid access token and we’ll fire a webhook.test event to your URL. It’s
the same shape and signing as every other event — use it to validate
signature verification before any real user authorises you.
200 OK with the event_id, delivery_id, and
the target_url we enqueued the delivery against:
What’s next
Event catalogue
Every event we send, with payload examples and recommended action.
Signature verification
Drop-in code samples in Python and Node — copy these verbatim.

