Skip to content
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.createdA new user signed up in your Org
user.updatedProfile fields changed
user.deletedA user was deleted (or scheduled for deletion)
wallet.linkedA wallet was linked to a user
wallet.unlinkedA wallet was removed from a user
connection.addedA new social or email connection was added
connection.removedA connection was unlinked
grant.createdA user authorized an App for the first time
grant.revokedA user revoked an App’s access
member.invitedA teammate was invited to the Org
member.joinedAn invited teammate accepted
member.removedA 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.