Webhook Security
Every webhook delivery from Orbit includes an HMAC-SHA256 signature in theX-Devotel-Signature header. Always verify this signature to ensure the request genuinely came from Orbit and hasn’t been tampered with.
How Signature Verification Works
- Orbit computes an HMAC-SHA256 hash of the raw request body using your webhook signing secret
- The hash is sent in the
X-Devotel-Signatureheader as a hex string - Your server recomputes the hash and compares it to the header value
Verification Examples
Node.js
Python
Go
Security Best Practices
- Always verify signatures — never process webhooks without checking the signature
- Use timing-safe comparison — prevents timing attacks (
crypto.timingSafeEqualin Node.js,hmac.compare_digestin Python) - Use HTTPS — your webhook endpoint must use HTTPS to protect payloads in transit
- Rotate secrets — rotate your webhook signing secret periodically in Settings > Webhooks
- Idempotency — use the event
idfield to deduplicate, since Orbit guarantees at-least-once delivery - Respond quickly — return a
2xxwithin 30 seconds; process heavy work asynchronously - IP allowlisting — optionally restrict incoming webhooks to Orbit’s IP ranges (available in the dashboard under Settings > Security)
Signing Secret
Your webhook signing secret is generated when you create a webhook. Retrieve it from the dashboard under Webhooks > [Your Webhook] > Signing Secret, or via the API:whsec_ and should be stored securely — never expose it in client-side code or logs.