Platform
Webhooks.
Identity, in your stack.
React to sign-ups, wallet links, consent grants, member changes — every identity-relevant event Synq emits. HMAC-SHA256 signed, exponential-backoff retries, auto-disable on repeated failures, and a one-click test trigger in the Dashboard.
Signing
HMAC-SHA256
Per-subscription secret
Retries
Exponential
Up to 5 attempts with backoff
Failure handling
Auto-disable
On repeated 4xx / 5xx
Verify a delivery in five lines
Webhooks arrive as JSON with an x-synq-signature header. Verify with HMAC-SHA256 against your subscription secret. The @synqid/js helper does the constant-time comparison for you.
import { createHmac, timingSafeEqual } from 'node:crypto'
const SYNQ_SECRET = process.env.SYNQ_WEBHOOK_SECRET!
export function POST(req: Request) {
const sig = req.headers.get('x-synq-signature') ?? ''
const body = await req.text()
const expected = createHmac('sha256', SYNQ_SECRET)
.update(body)
.digest('hex')
if (
sig.length !== expected.length ||
!timingSafeEqual(Buffer.from(sig), Buffer.from(expected))
) {
return new Response('bad signature', { status: 401 })
}
const event = JSON.parse(body)
// event.id — idempotency key, dedupe on this
// event.type — 'user.created' | 'wallet.linked' | ...
// event.data — typed event-specific payload
// event.brand — brand slug the event happened under
return new Response('ok')
}Event catalog
Every identity event you can subscribe to
Subscriptions are Org-wide, with a per-Brand filter if you only want events from one product surface.
| user.created | A new user signed up in your Org |
|---|---|
| user.updated | Profile fields changed |
| user.deleted | A user was deleted (or scheduled for deletion) |
| wallet.linked | A wallet was linked to a user |
| wallet.unlinked | A wallet was removed from a user |
| connection.added | A new social or email connection was added |
| connection.removed | A connection was unlinked |
| grant.created | A user authorized an App for the first time |
| grant.revoked | A user revoked an App’s access |
| member.invited | A teammate was invited to the Org |
| member.joined | An invited teammate accepted |
| member.removed | A teammate left or was removed |
Read more
Common questions
Wire identity into the rest of your stack.
One endpoint, one signing secret, every identity event you care about — durably delivered, replayable, audit-trailed.
