Webhooks
Events that arrive on time.
Donum sends a signed event for every moment worth knowing. Delivery sent, approval granted, run failed. Your services pick it up, act on it, and move on.
https://realm.xyz/hooks/donum
7 events subscribed · last 2m ago
https://ops.realm.xyz/slack-bridge
3 events subscribed · last 1h ago
https://staging.realm.xyz/webhooks
7 events subscribed · last retrying
Live stream
Six events per workflow run.
- 08:00:00schedule.triggerwf_monthly_investor · March runScheduler
- 08:00:02source.refreshstripe · hubspot · ga4System
- 08:02:14run.draftedrep_9f2c · draft v3Donum AI
- 08:02:16approval.requestedAva ChenNotifier
- 08:14:22approval.grantedAva Chen approvedAva Chen
- 08:14:24delivery.sent10 recipients · PDF 1.4 MBNotifier
Verify in four lines
HMAC in one minute.
import { createHmac, timingSafeEqual } from 'node:crypto'
export function verifyDonumSignature(raw: string, sig: string, secret: string) {
const expected = createHmac('sha256', secret).update(raw).digest('hex')
return timingSafeEqual(Buffer.from(sig, 'hex'), Buffer.from(expected, 'hex'))
}Every payload ships with this header. No library required, just hmac-sha256.
Always verify against the raw body. Parsing first will fail the check.
Guards against timing attacks. The one detail every signing verifier gets wrong.
Event catalog
Six events, named honestly.
Webhooks are the quiet way to connect Donum to the rest of your stack. They trigger your onboarding flow when a report is delivered. They page someone when a connection expires. They write a row in your data warehouse.
Questions
Two sentences each.
Are webhooks available on all plans?+
Yes. Pro has up to five endpoints. Agency has unlimited endpoints and higher retry budgets.
How do I verify a signature?+
Every payload includes a Donum-Signature header. Sample code exists in TypeScript and Python in the docs.
Can I test from localhost?+
Yes. Use a tunnel like ngrok, or replay events from the console to your local endpoint.
What about event order?+
Events may arrive out of order but each one carries a monotonic sequence id per object.