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
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.- 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_urland event type pair twice; either fails with400(limits and duplicates).
Endpoint requirements
- Use HTTPS and accept the method you configured.
- Return a
2xxstatus 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_typeand the time you received it, for debugging.
Idempotency key
Deduplicate oncall_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
call_id. Link them with parent_call_id; see Linking retries and callbacks.
Authentication patterns
Put a secret you control in the subscription’sheaders, which Ringg sends with every event, and reject requests that don’t carry it. For example:
Authorization: Bearer your-webhook-receiver-tokenX-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
A4xx 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_idplusevent_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.
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 deletedagent_id fails with 404. List your agents with Get Assistants and copy the right id:
List agents
Events not arriving
No requests reach my server
No requests reach my server
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.
recording_completed never arrives
recording_completed never arrives
It fires only for a call that has a recording. Calls that never connected have none; check the call’s status in Logs.
My server rejects the requests with 401
My server rejects the requests with 401
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.