Webhooks
Owlat supports both outbound customer webhooks and inbound provider webhooks.
Owlat supports both outbound customer webhooks and inbound provider webhooks.
Outbound customer webhooks
Configure in Settings → Webhooks.
Supported outbound events:
email.sentemail.deliveredemail.openedemail.clickedemail.bouncedemail.complainedcontact.createdlist.unsubscribed
Delivery notes
- Endpoint must accept
POST - Use publicly reachable HTTP/HTTPS URLs
- Private/local network hosts are rejected
- Failed deliveries are tracked and can be retried
Signature verification
Webhook secrets use the whsec_... format and are generated at webhook creation.
Every delivery includes these headers:
| Header | Description |
|---|---|
X-Signature | HMAC-SHA256 hex digest of the JSON payload body |
X-Timestamp | Unix timestamp (seconds) when the request was sent |
X-Webhook-Id | The webhook ID |
Content-Type | application/json |
User-Agent | Owlat-Webhooks/1.0 |
Payload shape
{
"event": "email.delivered",
"timestamp": "2026-03-15T12:00:00.000Z",
"data": { /* event-specific data */ }
}
Verification example (Node.js)
import crypto from 'crypto'
function verifyWebhookSignature(
payload: string,
signature: string,
secret: string
): boolean {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex')
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
)
}
// In your webhook handler:
const payload = await request.text()
const signature = request.headers.get('X-Signature')!
const isValid = verifyWebhookSignature(payload, signature, webhookSecret)
Retry behavior
Failed deliveries are retried up to 3 attempts:
- Immediate
- After 1 minute
- After 5 minutes
Each request has a 30-second timeout. Endpoints that resolve to private/local network IPs are rejected.
Inbound provider webhook route
Owlat receives provider status updates at:
POST /webhooks/resend
Handled provider events include:
email.sentemail.deliveredemail.delivery_delayedemail.openedemail.clickedemail.bouncedemail.complained
These events update send status, contact activity, blocklist behavior, and campaign analytics.