message.created, member.joined, etc.) and receive HTTP POSTs to your URL when they occur. Build integrations, sync to external systems, trigger workflows, or power analytics — without polling.
Overview
- Scope: Per-agency. Each subscription is tied to one agency.
- Permission: Only agency owners and admins can manage subscriptions.
- Delivery: Events are POSTed asynchronously (via BullMQ when Redis is available).
- Signing: Optional
secretfor HMAC-SHA256 verification. - Retries: Failed deliveries retry up to 3 times with exponential backoff.
Event types
Creating a subscription
- API
- SDK
Webhook payload
Each event POST includes:Common fields
Event-specific payloads
message.created
message.created
message.updated
message.updated
message.deleted
message.deleted
member.joined / member.left
member.joined / member.left
member.kicked / member.banned / member.unbanned
member.kicked / member.banned / member.unbanned
member.promoted / member.demoted
member.promoted / member.demoted
agency.created
agency.created
agency.updated
agency.updated
invite.created
invite.created
invite.redeemed
invite.redeemed
Verifying signatures
If you set asecret, each request includes:
Response
Your endpoint should respond with HTTP 2xx within 15 seconds. Non-2xx responses trigger retries.API reference
List event types (public)
{ events: string[], description: string }.
List subscriptions
Create subscription
Update subscription
Delete subscription
SDK reference
URL safety
Webhook URLs are validated. Localhost, private IPs, and internal hosts may be rejected depending on server configuration. See Hooks (Webhooks) for URL validation details.Scaling
When
REDIS_URL is set, event delivery uses a BullMQ queue. Failed jobs are retried with exponential backoff. Without Redis, delivery is inline (blocking the request path).