Tier 3 — Webhooks

Outbound Webhooks

Subscribe to real-time events from Callix. When a subscribed event fires, Callix will POST a JSON payload to your registered endpoint.

Manage via API

GET/webhooksList all registered webhook endpoints
POST/webhooksRegister a new webhook endpoint
DELETE/webhooks/:idRemove a webhook endpoint

Webhooks can also be managed in the Callix dashboard under Settings → Webhooks.

POST /webhooks

json
{
  "url": "https://your-server.com/callix-webhooks",
  "events": ["prospect.stage_changed", "payment.recorded"],
  "label": "CRM sync"
}
urlstringHTTPS endpoint to receive POST requests
eventsstring[]Array of event type strings to subscribe to
labelstring?Human-readable label for this endpoint

The response includes a secret field — store it securely, it's shown only once.

Signature verification

typescript
import crypto from "crypto"

function verifySignature(body: string, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(body)
    .digest("hex")
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  )
}

Payload shape

json
{
  "event": "prospect.stage_changed",
  "accountId": "<id>",
  "occurredAt": 1748000000000,
  "data": {
    "prospectId": "<id>",
    "previousStage": "lead",
    "newStage": "closed"
  }
}

Supported events

prospect.createdA new prospect is created in Callix
prospect.stage_changedA prospect's stage is updated
payment.recordedA payment is recorded from any source (API, Stripe, etc.)
call.completedA call record is created with a final outcome
deal_analysis.completedAn AI deal analysis finishes processing

Delivery retries

If your endpoint returns a non-2xx status, Callix retries with exponential backoff — up to 5 attempts over ~2 hours. Delivery logs are available in the dashboard under Settings → Webhooks → Activity.