Outbound · 7 event types

Belter pushes signal back to your stack.

Subscribe to seven event types — from a finished evaluation to a frustration spike — and Belter calls your endpoint with a signed payload. Wire into Slack, PagerDuty, Zapier, your CRM, your data warehouse, or your own automation. Real-time, signed, retried.

Push · realtime HMAC-SHA256 signed Replay UI
POST → your endpoint
POST https://hooks.aurora.io/belter
Content-Type: "application/json"
X-Belter-Event: "evaluation.completed"
X-Webhook-Signature: "v1=8c2f...a3e9"
X-Belter-Delivery: "del_4a8d..."

{
  "event": "evaluation.completed",
  "data": {
    "conversation_id": "conv_84291",
    "score": 94,
    "rubric_version": 7,
    "agent": "jordan.t"
  }
}
Event types · 7

The signal you want, the moment it fires.

Each event has a stable schema, a documented payload, and at-least-once delivery with exponential-backoff retries. Subscribe to one, subscribe to all.

evaluation.completed
Fires the moment a conversation has a fresh score. Includes the score, rubric version, per-criterion breakdown, and conversation ID.
conversation.imported
A new conversation has been ingested (via native connector or REST) and is in the evaluation queue. Use to log inbound volume.
score.threshold_breached
A score (overall or per-criterion) fell below the threshold you set. Per-brand, per-team, or per-agent thresholds supported.
csat.received
A new CSAT response landed (via the CSAT API or webhook). Comes correlated to the underlying conversation.
sentiment.analyzed
Sentiment timeline computed for a finished conversation. Includes the start/end sentiment delta and inflection points.
smart_alert.created
Belter's daily anomaly detection found something — a score dip, a volume spike, a criterion slipping. With the contributing conversations attached.
frustration.detected
Real-time. Frustration LLM pass found a customer crossing your threshold. Wire to Slack to get the supervisor's attention.
Need another event?
Tell us what would close your automation loop. We add events when customers ask for them.
Security

Signed with HMAC-SHA256. Always.

Every outbound webhook includes X-Webhook-Signature. Compute the same signature with your endpoint's signing secret and compare — that's how you trust the call came from us.

Verify in Node.js
import crypto from 'crypto';

function verify(req, secret) {
  const sig = req.headers['x-webhook-signature'];
  const raw = req.rawBody;

  const expected = 'v1=' +
    crypto.createHmac('sha256', secret)
      .update(raw)
      .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(sig),
    Buffer.from(expected)
  );
}
Verify in Python
import hmac, hashlib

def verify(raw: bytes, sig: str, secret: str) -> bool:
    expected = "v1=" + hmac.new(
        secret.encode(),
        raw,
        hashlib.sha256,
    ).hexdigest()

    return hmac.compare_digest(sig, expected)

# raise if invalid; 200 if valid.
Retries
5 attempts
Exponential backoff: 30s, 5m, 30m, 2h, 12h. We give up after that.
Success
2xx + <15s
Anything else is treated as a failure and queued for retry.
Replay
7-day buffer
Failed deliveries listed in Settings · Webhooks. Click to replay individually or in bulk.
Operability

A delivery log you'd actually trust.

Every outbound call, in one place: timestamp, event, status, response code, latency, and a replay button — for the day someone deploys breaking changes to your webhook handler.

Delivery log · last 24h 3,892 OK 14 failed
Time
Event
Target
Status
Latency
14:32:08
evaluation.completed
hooks.aurora.io/belter
200
142ms
14:31:54
smart_alert.created
slack.incoming/T0···
200
88ms
14:30:12
frustration.detected
hooks.aurora.io/escalate
502
timeout
14:29:41
score.threshold_breached
pagerduty/v2/enqueue
202
204ms
14:28:33
csat.received
hubspot/v3/objects/···
200
312ms
14:27:02
conversation.imported
api.aurora.io/qa/intake
200
61ms
Common destinations

Wire it wherever your team already lives.

Slack & Teams

Pipe smart alerts and frustration spikes into the channel that already owns escalation.

PagerDuty & Opsgenie

High-severity disclosure misses and critical churn signals page the right on-call.

Zapier & n8n

No-code or self-hosted automation — the easiest path if engineering bandwidth is tight.

Warehouse & CRM

Land in Snowflake, BigQuery, Salesforce or HubSpot — score writeback alongside the rest of the customer record.

Closed loop

Belter scores it. Your stack acts on it.

Subscribe to a webhook, point us at your endpoint, and let Belter's signal flow into the systems your team already uses.