Webhook Signatures
When you configure a webhook secret for your inbound domain, every webhook request is signed so you can verify it came from JetEmail and hasn’t been tampered with.Signature Headers
Each signed webhook request includes these headers:How the Signature is Computed
The signature is computed using HMAC-SHA256 with your webhook secret. The signing input combines the webhook ID, timestamp, and request body:X-Webhook-Signature header.
Verifying Signatures
- Node.js
- Python
- PHP
- Go
- Ruby
Security Best Practices
Always Verify Signatures
Never process inbound webhook payloads without verifying the signature first. This prevents attackers from sending fake emails to your endpoint.
Use HTTPS
Always use HTTPS for your webhook endpoint to ensure email content is encrypted in transit.
Use Timing-Safe Comparison
Use constant-time string comparison functions to prevent timing attacks when verifying signatures.
Validate the Timestamp
Check that the
X-Webhook-Timestamp is recent (within 5 minutes) to prevent replay attacks.