- Project webhooks — broadcast and validation events for the project as a whole, configured once in the project dashboard.
- Space digest webhooks — a separate per-space delivery system that sends a daily activity digest to a URL you configure on each space individually.
Configuration
Webhooks are configured per project in the dashboard. You need to set:- Webhook URL — the endpoint on your server that Sublay will call
- Webhook secret — a shared secret used to sign outgoing requests and verify incoming responses
- Subscribed events — the specific event types you want to receive (you only get called for events you opt into)
Event Types
Broadcast Events (Non-blocking)
These fire after an operation completes. Your server is notified but the original operation is not affected by your response.
The
notification.created event is the primary mechanism for bridging Sublay’s in-app notification system to push notifications, email, or any other delivery channel your app uses.
Validation Events (Blocking)
These fire before an operation is committed. Sublay waits for your response. If you respond with{ "valid": true }, the operation proceeds. Any other response (or no response) causes the operation to be rejected.
If no webhook is configured for your project, or if an event type is not in your subscribed list, all validation webhooks pass automatically — your server does not need to be present for your project to function.
Payload Format
All webhook deliveries use the same envelope:Signature Verification
Every webhook request includes two headers that allow you to verify the request came from Sublay and has not been tampered with.
To verify on your server:
1
Read the headers
Extract
X-Signature and X-Timestamp from the incoming request.2
Recompute the expected signature
Compute:
HMAC-SHA256(webhookSecret, "{timestamp}.{JSON.stringify(body)}") as a hex string, where timestamp is the value from X-Timestamp and body is the raw JSON body.3
Compare using a constant-time comparison
Compare the expected signature to the received
X-Signature. Use a constant-time comparison function to prevent timing attacks.4
Reject if the signatures do not match
Return a non-2xx response. Do not process the request.
Responding to Validation Events
For validation webhooks, your server must respond with a signed JSON body indicating whether the operation should proceed. To allow the operation:X-Response-Signature header:
Common Use Cases
Push Notification Bridge
Subscribe tonotification.created. When your webhook receives it, forward the notification to your push provider (FCM, APNs, Expo, OneSignal, etc.) for the target user.
The data field contains the notification parameters including the recipient user ID, notification type, and any associated entity or comment.
Content Moderation Gate
Subscribe tocomment.created or entity.created (validation events). In your handler, check the content against a blocklist or moderation API. Return { "valid": false } to reject content that fails your rules before it is ever stored.
Audit Logging
Subscribe to broadcast complete events (user.created.complete, entity.created.complete, etc.) to maintain an external audit log or pipe activity into an analytics system or data warehouse.
Space Digest Webhooks
The space digest system is separate from project webhooks. Each space can be configured with its own digest webhook URL and secret, independent of the project-level webhook settings. When the digest is enabled for a space, Sublay sends a daily summary of the past 24 hours of activity to that space’s digest webhook URL. The cron runs hourly and delivers the digest at the configured schedule hour in the space’s timezone. The digest payload uses thespace.digest event type:
data object contains the assembled digest — new entities, new members, and summary counts for the period.
Configuration is per space (not per project). Each space has:
digestEnabled— whether the digest is activedigestWebhookUrl— where to POST the digestdigestWebhookSecret— used for HMAC-SHA256 signing (same mechanism as project webhooks)digestScheduleHour— the hour of day to send (0–23)digestTimezone— the timezone for the schedule
Space digests are available on Pro and Growth plans only. If there is no new activity in the 24-hour window, the digest is skipped for that day.

