Repository navigation
Conversation
Covers how delivery works (from the committed audit log, at least once, unordered), the envelope and every event type with its payload schema and an example, setup through the console, CLI and admin API, signature verification with verifyWebhook in Express, Fastify and Next.js and by hand in Go, Python and Rust with a test vector, idempotency, the retry schedule, the 410 and three day disable rules, dead letters, redelivery and secret rotation. Closes #153
This was referenced Nov 8, 2026
This was referenced Nov 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #153. Adds
build/webhooks.mdx, a guide and event catalog for receiving Seamless Auth webhooks.Merge with the auth API v0.23.0 release, not before. Every route on the page needs API v0.23.0, which is held (fells-code/seamless-auth-api#566). The page opens with a caution saying so, and its versions table marks the server adapter helpers (fells-code/seamless-auth-server#279), the console page (fells-code/seamless-auth-admin-dashboard#343) and the CLI commands (fells-code/seamless-cli#359) as unreleased.
First of three stacked PRs: this one, then #166 (login hooks and custom claims, based on this branch), then #167 (SIEM streaming, based on that one). Each adds the cross-links to the pages before it, so every PR's links resolve on its own.
What it covers
webhook-idacross two endpoints).WebhookEventSchemain@seamless-auth/types0.39.0 andwebhookCatalog.ts, and an example of each. The examples were produced by running the API'swebhookEventForover sample audit rows and parsing each withWebhookEventSchema.CALLOUT_SECRET_ENCRYPTION_KEYandCALLOUT_PRIVATE_HOSTS, the URL rules, and the console, CLI and admin API (route table and a curl example).requireWebhook(Express),seamlessWebhook(Fastify),createWebhookHandlerandverifyWebhookRequest(Next.js),verifyWebhook, and hand-written verifiers for Go, Python and Rust with handler examples, plus a published test vector.webhook-id, the exact retry schedule with jitter andRetry-After, the410and three day disable rules (deliveries held while off and released on re-enable, back 30 days), dead letters with the coarse failure reasons, redelivery, and rotation with two signatures for 24 hours.How the snippets were proven
user.signed_inbody shaped by the schema, signed withopenssl dgst -sha256 -mac HMAC(independent of every verifier). The same method reproduces the Standard Webhooks specification's example signature. The auth API's ownsignedCalloutHeaders(onfeat/oidc-provider-claims) produced the identical two-signature header.go test, Go 1.27.1), Python (3.13.14) and Rust (cargo test, hmac 0.12.1, sha2 0.10.9, base64 0.22.1): each verifier on the page passes the vector with either secret alone and both, at +300 s and -300 s, and the specification example; and refuses a changed body, a wrong secret, av1a-only header, +301 s, -301 s and a missing header. The Go handler and the Axum 0.8.9 handler compile.For review
webhook-id, so the page tells readers to subscribe one endpoint per system. Exposing a shared event id would be an API change.Testing
npm run typecheck: 0 errors, 0 warnings, 0 hints.npm run lint: exit 0.npm run build: 75 pages built (re-run after the catch-up update in 281e419). The pre-commit hook ran the build again.dist. The page is indist/llms.txtand the sitemap.npm run check:matrix, and nothing against a live API (none can be until v0.23.0).