Process webhooks securely
Webhooks deliver published events asynchronously. Register a public HTTPS endpoint and use the test delivery before monitoring an integration.
Verify HMAC
For HMAC delivery, the secret is returned once during registration. Save it immediately in a secret store. Calculate HMAC-SHA256 over x-akflow-timestamp, a period and the unmodified HTTP body; compare it with x-akflow-signature in constant time.
signed_payload = x-akflow-timestamp + "." + raw_request_body expected = HMAC-SHA256(webhook_secret, signed_payload)
Verify before parsing or formatting JSON. Return a 2xx response promptly after successful acceptance, then process the event from your own queue.
Idempotency and failures
- De-duplicate deliveries using the stable event or idempotency identifier from the contract.
- Repeated delivery must have the same result and must not create a second business action.
- Return
2xxonly after acceptance; timeouts and other statuses can be retried. - Alert on persistent signature errors, backlog and repeated delivery failures.
One-time secret
The webhook secret cannot be read again. Rotate it through controlled new registration and deactivate the old registration only after verification.