Webhooks

Voxxi can send event notifications to your endpoint when call processing completes or fails.

Overview

Configure webhook endpoints in Voxxi Integrations. Each endpoint subscribes to one or more events.

Event types

  • Name
    call.analysis_complete
    Description

    Fired when call analysis finishes successfully.

  • Name
    call.analysis_failed
    Description

    Fired when analysis fails.

  • Name
    call.ingestion_failed
    Description

    Fired when recording ingestion fails.

Headers

Webhook deliveries are POST requests with JSON body and these headers:

  • Name
    X-Voxxi-Event
    Type
    string
    Description

    Event name, for example call.analysis_complete.

  • Name
    X-Voxxi-Timestamp
    Type
    string
    Description

    Unix timestamp (seconds) used in signature generation.

  • Name
    X-Voxxi-Signature
    Type
    string
    Description

    Signature in the format v1=<hex_hmac_sha256>.

  • Name
    X-Voxxi-Delivery-Id
    Type
    string
    Description

    Unique id for this delivery attempt.

Payload envelope

{
  "id": "delivery_uuid",
  "type": "call.analysis_complete",
  "createdAt": "2026-01-01T00:00:00.000Z",
  "data": {
    "callId": "call_uuid",
    "organizationId": "org_uuid"
  }
}

data fields vary by event type. call.analysis_complete includes analysis results, transcript/extractions, tags, and metadata.

Signature verification

The signature is HMAC-SHA256 over:

<timestamp>.<raw_request_body>

using your webhook signing secret.

Verify X-Voxxi-Signature

import crypto from 'crypto'

function verifyVoxxiSignature({ secret, timestamp, rawBody, signatureHeader }) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${timestamp}.${rawBody}`)
    .digest('hex')

  const provided = signatureHeader?.replace(/^v1=/, '')
  return Boolean(provided) && crypto.timingSafeEqual(
    Buffer.from(expected, 'hex'),
    Buffer.from(provided, 'hex')
  )
}