Skip to main content
Webhooks push an agent’s call events to your backend as they happen, so you don’t poll the Ringg API. The dashboard calls a subscription an Event Subscription.

Before you start

An API key

To manage subscriptions with the API.

An agent ID

Subscriptions belong to one agent.

Event types

Subscribing an agent to an event its channel never fires, such as chat_completed on a voice agent, is rejected with 400. For most integrations, all_processing_completed is enough: one request with the transcript, recording and both analyses. Add earlier events only when your product shows live progress. WhatsApp payloads are in WhatsApp events.

Configure subscriptions

In the dashboard

Open the agent’s Event Subscription tab, add the callback URL, the events and any headers, and save. The full walkthrough, including the rules the form enforces, is in Event Subscription.

Adding an event subscription in the dashboard

With the API

Send Edit Assistant (PATCH /agent/v1) with operation: "edit_event_subscriptions" and the agent’s complete subscription list in event_subscriptions.
Subscribe to all_processing_completed
A successful request returns:
Each subscription takes:
string[]
required
One or more events from the table above, delivered to this URL. Put several in one subscription to get live progress and the final result at the same endpoint, for example ["call_started", "call_completed", "all_processing_completed"].
string
required
Your HTTPS endpoint.
string
required
GET, POST, PUT or PATCH. Use POST unless your endpoint needs otherwise.
object
String keys and values Ringg sends to your endpoint with every event. They don’t authenticate your call to Ringg; X-API-KEY does that.
Rules for the list:
  • The list you send replaces the agent’s existing subscriptions. Include every subscription you want to keep; one you leave out is removed. Send [] to remove them all.
  • Up to 4 subscriptions per event type on one agent, and no callback_url and event type pair twice; either fails with 400 (limits and duplicates).

Endpoint requirements

  • Use HTTPS and accept the method you configured.
  • Return a 2xx status within 30 seconds; see success criteria. Store the event first, then process it in your own queue.
  • Handle the same event arriving twice (next section).
  • Log call_id, event_type and the time you received it, for debugging.

Idempotency key

Deduplicate on call_id plus event_type (chat_id plus event_type for WhatsApp). If a record with that key exists, update it instead of inserting a new one.
Deduplicate on call_id + event_type
Voicemail redials and callbacks are separate calls with their own call_id. Link them with parent_call_id; see Linking retries and callbacks.

Authentication patterns

Put a secret you control in the subscription’s headers, which Ringg sends with every event, and reject requests that don’t carry it. For example:
  • Authorization: Bearer your-webhook-receiver-token
  • X-Webhook-Secret: your-shared-secret
  • Authentication at an API gateway in front of your service

Success criteria

Anything else is a failed delivery: another status code, no answer within 30 seconds, a refused connection, an invalid TLS certificate or a DNS failure.

Retry logic

A 4xx response other than 429 is final and never retried. Other failures are retried: So return a 5xx for a temporary problem, not a 4xx. Because deliveries are retried:
  • The same event can arrive more than once. Deduplicate on call_id plus event_type (idempotency key).
  • An event can be lost if your endpoint stays down. After an outage, fetch the calls you missed with Get Call History and Get Call Details.
Keep the handler fast: store the event, return 2xx, and do the work afterwards.

Common configuration issues

Subscription limits and duplicates

To send call_completed to two URLs, list both in one request:
Two URLs for call_completed
event_subscriptions is the agent’s complete list, so a later request that sends only the second subscription removes the first. Keep the full list in your own configuration and send it whole on every change. When several internal services need the same event, one URL that fans out is simpler than several subscriptions:
Fan out one delivery

Agent ID errors

A subscription request with a wrong or deleted agent_id fails with 404. List your agents with Get Assistants and copy the right id:
List agents

Events not arriving

Check that the subscription lists your URL and the event (in the dashboard under the agent’s Event Subscription, or with Get Assistant by ID). Then confirm the URL is reachable over HTTPS from the public internet with a valid certificate.
It fires only for a call that has a recording. Calls that never connected have none; check the call’s status in Logs.
The secret in the subscription’s headers doesn’t match what your endpoint expects. Update the header value and save the full list again.

Next steps

Read the payloads

Every field Ringg sends for each event, and a handler prompt.

Handle failures

Success criteria, retries and common setup mistakes.