Webhook vs email
Same event, two channels with different audiences and SLAs. Here's how we route each.
Decision tree
Event fires
↓
Is it system-relevant?
↓ ↓
Yes No
↓ ↓
Send webhook (don't send)
to every endpoint
subscribed to it
↓
Is it human-relevant?
↓ ↓
Yes No
↓ ↓
Render React Email (skip email)
template via Resend
↓
Send to audience defined
in the template config
Examples
Card minted
- Webhook: yes — your backend wants to record the card_id
- Email: yes — the cardholder wants confirmation + the (last 4) of their card
Agent intent rejected
- Webhook: yes — your monitoring stack wants to track rejection rates
- Email: no — this is operational noise, not customer-relevant
KYB approved
- Webhook: yes — your workflow may unlock live-mode features
- Email: yes — the workspace owner has been waiting for this answer
Webhook delivery failed (after all retries)
- Webhook: yes — but to a different endpoint (your "ops" endpoint), not the broken one
- Email: yes — to the workspace owner so a human notices
Reconciliation break detected
- Webhook: no — internal compliance event
- Email: yes — to workspace owner + Soren Pay on-call
Audience rules per email template
| Event | Audience | Reasoning | |---|---|---| | KYB / KYC decisions | Workspace owner OR account holder | Compliance — they need to know | | Card lifecycle | Cardholder | They carry the card | | Money movement (deposits, withdrawals, intl, checkout) | Workspace owner | They own the ledger | | Disputes | Workspace owner | They submit the evidence | | Recon breaks | Workspace owner + Soren Pay on-call | Both need to investigate |
Frequency caps
To avoid noise:
card.authorization.declined→ email never (too noisy); webhook only if opt-inwebhook_delivery.failed→ 1 email per endpoint per 24h (not per attempt)reconciliation.break→ 1 email per workspace per day max
How to subscribe
Webhooks
Dashboard → Developers → Outbound webhooks → add URL + select events.
Or API: POST /api/webhook-endpoints.
Emails
Per-workspace settings → Notifications → choose which categories. Compliance emails (KYB / KYC / OFAC) cannot be disabled.