API & integration
Webhooks
Each webhook is an HTTP POST with a JSON body, signed with
HMAC-SHA256 over <timestamp>.<body>. Verify:
$expected = hash_hmac(
'sha256',
$request->header('X-Okta-Timestamp') . '.' . $request->getContent(),
$YOUR_WEBHOOK_SECRET,
);
if (! hash_equals($expected, $request->header('X-Okta-Signature'))) abort(401);
Reject X-Okta-Timestamp outside ±5 minutes and cache
X-Okta-Delivery-Id for 15 minutes for replay protection.
Retry schedule: 30s → 2m → 10m → 1h → 6h. After 6 attempts the delivery is marked terminal and shown in "Webhook Deliveries".
Respond 2xx within 10 seconds.