Webhooks

Receive real-time notifications when events occur in your Auralytik account. Register an endpoint, choose the events you care about, and we will POST a signed JSON payload to your server every time an event fires.

Endpoints

MethodPathScopeDescription
GET/api/v1/webhookswebhooks:manageList all webhook registrations
POST/api/v1/webhookswebhooks:manageCreate a new webhook (returns signing secret)
PATCH/api/v1/webhooks/{id}webhooks:manageUpdate URL, events, or active status
DELETE/api/v1/webhooks/{id}webhooks:manageDelete / deactivate a webhook
POST/api/v1/webhooks/{id}/testwebhooks:manageSend a test event to the webhook
GET/api/v1/webhooks/{id}/deliverieswebhooks:manageView delivery history and statuses

Event Types

EventDescription
evaluation.completedEvaluation finished AI processing
audio.transcribedAudio transcription complete
audio.processedAudio fully processed (transcription + evaluation)
voice-call.completedVoice bot call ended
export.readyAnalytics export ready for download
usage.quota_warningUsage reached 80% of quota
api-key.rotatedAPI key was rotated

Create a Webhook

curl -X POST https://api.auralytik.ai/api/v1/webhooks \
  -H "X-Api-Key: ak_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-server.com/webhooks/auralytik",
    "events": ["evaluation.completed", "audio.processed"],
    "description": "Production webhook"
  }'

Response:

{
  "id": "wh_8f3a1b2c",
  "url": "https://your-server.com/webhooks/auralytik",
  "events": ["evaluation.completed", "audio.processed"],
  "description": "Production webhook",
  "active": true,
  "signing_secret": "whsec_k7G2...xQ9",
  "created_at": "2026-03-30T14:22:00Z"
}

Store the signing_secret securely -- it is only returned once at creation time.

Payload Example

Every delivery is an HTTP POST with a JSON body. The outer envelope is the same for all event types; the data object varies per event.

{
  "id": "evt_9d4e2f1a",
  "event": "evaluation.completed",
  "timestamp": "2026-03-30T14:25:00Z",
  "data": {
    "evaluation_id": "eval_abc123",
    "engagement_id": "eng_xyz789",
    "campaign": "Customer Support Q1",
    "score": 87,
    "channel": "voice",
    "duration_seconds": 245
  }
}

Signature Verification

Every webhook delivery includes an X-Webhook-Signature header. Always verify this signature before processing the payload to ensure the request originated from Auralytik and has not been tampered with.

  1. Read the raw request body (do not parse it first).
  2. Compute HMAC-SHA256(signing_secret, raw_body) and hex-encode the result.
  3. Compare the computed value with the X-Webhook-Signature header using a constant-time comparison function to prevent timing attacks.
  4. Reject the request with a 401 status if the signatures do not match.
// 1. Extract signature from header
signature = request.headers["X-Webhook-Signature"]

// 2. Compute expected signature
expected = HMAC_SHA256(signing_secret, request.raw_body)

// 3. Compare using constant-time comparison
if not constant_time_equal(expected, signature):
    return 401  // Reject the request

// 4. Process the event
process(request.body)

Retry Policy

A delivery is considered successful when your server responds with a 2xx status code within the timeout window. If a delivery fails, we retry with exponential back-off:

AttemptDelayTimeout
1Immediate10 s
21 minute10 s
35 minutes10 s

Automatic deactivation: If a webhook fails every delivery for 7 consecutive days, it will be automatically deactivated. You can re-enable it at any time via the API or dashboard.

Ready to get started?

Generate an API key with the webhooks:manage scope and register your first endpoint.

Request API Access