Skip to main content
Every endpoint on this page requires either a Clerk-issued JWT (Authorization: Bearer <token>) or an organization API key (x-api-key: pk_…). Anonymous calls return 401 Unauthorized. See Authentication for the full setup.
Agntix uses Svix for durable webhook delivery. Webhooks are how your backend learns the moment a call starts and the moment it ends — they are the primary glue between Agntix and your downstream systems.

Why webhooks?

Adding a webhook endpoint

In the Agntix dashboard left nav, open Developer (under Integrations) and click + Add Endpoint in the top-right. A dialog opens with the following fields:
string
required
Your receiver, e.g. https://hooks.acme.com/agntix. Must be a public HTTPS URL.
string
Free-form label, e.g. "Production call events".
integer
Requests-per-second cap. Set comfortably above peak (e.g. 50 for a 10-concurrent-call burst).
string[]
required
Tick session.created and/or session.ended. See Event types for the full list.
Events delivered for outbound voice calls:
  • session.created — fires when the call is initiated (before pickup). Use it to lock the originating task as “in-flight”.
  • session.ended — fires when the call closes, with the full post-call analysis attached. This is what your pipeline consumes.

Lifecycle

  1. Create an endpoint with a public HTTPS URL via Developer → + Add Endpoint.
  2. Subscribe it to the events you care about — see Events.
  3. Receive POST requests with a svix-signature header. Verify the signature before trusting the payload — see Verifying signatures.
  4. Reply with 2xx within 15 seconds. Anything else triggers a retry with exponential backoff (24h max).

Payload shape

Session events use a flat envelope (no nested data field). The top-level id is the session UUID — use it as your idempotency key.
The full schema for each event lives on the Event types page.

Idempotency and retries

Treat the top-level id (session UUID) as the idempotency key. Don’t double-process the same id. Webhooks may be retried on non-2xx responses — respond 2xx once you’ve durably enqueued the event.
The webhook is summary-grade, not transcript-grade:
  • The full message-by-message transcript is not in the webhook.
  • Some fields may be truncated for very long calls.
  • For the complete picture, pull from GET /api/v1/chat/sessions/{id}/messages — the webhook arrives first, then you fetch on-demand.

Mapping a call back to your CRM

Production traffic almost always means many parallel calls and webhooks arrive in unpredictable order. To map each webhook back to its originating task, include a unique identifier in session_variables at trigger time:
These keys are echoed back verbatim under metadata.sessionVariables in every webhook — regardless of whether the agent prompt referenced them. See Programmatic outbound calling for the full pattern.