Real-Time Webhooks & Event Streams

Subscribe to cryptographically signed HMAC-SHA256 event streams across DISHA 4.0 HCOS runtime stages.

🔑 HMAC Signing Docs📥 Download AsyncAPI Spec
1Active Endpoints
9Total Event Types
HMAC-SHA256Signature Algorithm
At-least-onceDelivery Guarantee

Endpoint Configuration & Delivery Health

3 configured endpoints

ACTIVEwhk_7a8f90b12

https://api.tenant.com/v1/disha-events

disha.zkpg.proof.created.v1disha.enclave.state.updated.v1disha.sa.state.transitioned.v1
Secret:••••••••••••••••••••••••••••••••
HTTP 20024ms
Last delivery: 8/10/2026, 1:50:00 PM
FAILING · RETRYwhk_3c4d5e6f7

https://integrations.enterprise.io/hooks/disha-zkp

disha.zkpg.proof.created.v1disha.zkpg.proof.failed.v1
Secret:••••••••••••••••••••••••••••••••
HTTP 5035000ms
Last delivery: 8/10/2026, 12:45:00 PM
PAUSEDwhk_9g8h7i6j5

https://monitoring.ops-team.net/disha-alerts

disha.system.status.alert.v1disha.pil.policy.evaluated.v1
Secret:••••••••••••••••••••••••••••••••
HTTP 20087ms
Last delivery: 8/9/2026, 8:00:00 AM

Interactive Event Catalog & Payload Inspector

Browse all HCOS event triggers, inspect payload schemas, and test delivery configurations.

🔍
9 Events
Stage 1 PILPOLICY_VERIFICATION_FAILED

disha.pil.policy.evaluated.v1

Fired when a PIL policy gate evaluation completes. Contains verdict, applied rules, and signal metadata.

Stage Origin

Stage 1 PIL

Category

POLICY_VERIFICATION_FAILED

🔑 HMAC-SHA256 Signature Verification Guide

Every webhook delivery includes a X-Disha-Signature-256 header. Verify it using: HMAC_SHA256(secretKey, timestamp + "." + rawBody)

🔐

Signature Header

X-Disha-Signature-256

Present on every delivery

⏱️

Timestamp Header

X-Disha-Timestamp

Unix epoch (seconds)

🧮

Algorithm

HMAC-SHA256

Industry standard

🛡️

Replay Protection

5-minute window

Reject stale timestamps

const crypto = require('crypto');

function verifyDISHASignature(
  secretKey,
  timestamp,
  rawBody,
  receivedSig
) {
  const payload = `${timestamp}.${rawBody}`;
  const expected = crypto
    .createHmac('sha256', secretKey)
    .update(payload, 'utf8')
    .digest('hex');
  
  const expectedSig = `sha256=${expected}`;
  
  // Constant-time comparison to prevent timing attacks
  return crypto.timingSafeEqual(
    Buffer.from(expectedSig),
    Buffer.from(receivedSig)
  );
}

// Express.js middleware example
app.post('/webhooks/disha', express.raw({ type: '*/*' }), (req, res) => {
  const timestamp = req.headers['x-disha-timestamp'];
  const signature = req.headers['x-disha-signature-256'];
  
  if (!verifyDISHASignature(
    process.env.DISHA_WEBHOOK_SECRET,
    timestamp,
    req.body.toString(),
    signature
  )) {
    return res.status(401).json({ error: 'Invalid signature' });
  }
  
  const event = JSON.parse(req.body);
  console.log('Verified event:', event.eventType);
  res.json({ received: true });
});