Skip to content

Webhooks

Webhooks let Hyponema notify your system about events outside the request that caused them.

Hyponema signs outbound webhook requests with HMAC-SHA256 and retries failed deliveries with exponential backoff.

Delivery is at most once per (tenant_id, event_id) queue entry. Retries for the same event are tracked by attempt number so repeated worker runs do not duplicate attempts.

Endpoints can be automatically disabled after repeated failures and a long window without success. Monitor delivery attempts during beta rollout.

  • Verify the HMAC signature before processing.
  • Make handlers idempotent using the event ID.
  • Return a 2xx response only after durable acceptance.
  • Keep processing fast; offload long work to your own queue.
  • Alert on repeated verification or processing failures.

Endpoints are workspace-scoped. Use the dashboard at Settings → Webhooks, or:

Terminal window
# Create an endpoint
curl -X POST "https://api.hyponema.ai/workspaces/$WORKSPACE_ID/webhooks" \
-H "Authorization: Bearer $HYPONEMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/hyponema",
"events": ["post_call_transcription", "dsar.ready"]
}'
# List
curl "https://api.hyponema.ai/workspaces/$WORKSPACE_ID/webhooks" \
-H "Authorization: Bearer $HYPONEMA_API_KEY"
# Inspect recent delivery attempts
curl "https://api.hyponema.ai/workspaces/$WORKSPACE_ID/webhooks/$ENDPOINT_ID/deliveries?limit=50" \
-H "Authorization: Bearer $HYPONEMA_API_KEY"

The URL must be HTTPS and must resolve to a public host (loopback / link-local / private hosts are rejected). The signing secret is returned once on creation — store it in your secret manager.

EventFires when
post_call_transcriptionA conversation has ended and the transcript is persisted.
escalation.triggeredA no-go-zone guard escalated a turn.
dsar.readyA DSAR export job has completed and is ready to download.
fatigue.alertThe fatigue-detection windowing fired for a user.
usage.thresholdA usage threshold (plan limit or alert) was crossed.
subscription.changedA Stripe subscription transitioned status.
invoice.paidA Stripe invoice was paid.
invoice.failedA Stripe invoice payment failed.
kb.source_ingestedA knowledge-base source finished ingestion.
turn.persistence_failedA conversation turn failed to persist.
webhook.disabledHyponema auto-disabled an endpoint after repeated failures.

Subscribe to the event names you need; an empty events list disables delivery without removing the endpoint.

Each request carries an HMAC-SHA256 signature header computed over the raw body. Verify it with the endpoint’s signing secret. Match the timestamp window your platform expects and reject requests outside it.