Skip to main content
Fonoster sends these events to your webhooks as HTTPS POST requests. Each request carries one event in a JSON envelope. To set up a webhook and check its signature, see Receive events with webhooks.

Request

Headers

A receiver accepts a request when one of the signatures matches and the timestamp is within 300 seconds of its clock. See Verify the signature.

Envelope

Every event has the same envelope.
string
required
The event’s ID, starting with evt_. It stays the same on every retry and every resend. Use it to skip events you’ve already handled.
string
required
The event name, such as call.ended.
string
required
When the event happened, in ISO 8601 UTC, such as 2026-10-15T14:03:22.114Z. Events can arrive out of order: sort by this field.
string
required
The workspace the event belongs to.
object
required
The event’s fields, described below for each event.

Delivery

Events never carry a transcript, a recording or a secret.

call.started

Sent when a call reaches an application, inbound or outbound. If the call goes to the application’s fallback, appRef is the application that answered.
string
required
The call’s ref. The same ref names its call record.
string
required
The application that answered the call.
string
required
The calling number or address.
string
required
The called number or address.
string
required
inbound or outbound.

call.ended

Sent when a call that reached an application ends. A call that sent call.started sends call.ended.
string
required
The call’s ref.
string
required
The application that answered the call.
string
required
The calling number or address.
string
required
The called number or address.
string
required
inbound or outbound.
integer
required
The call’s length in seconds, rounded. After a cold transfer, it counts until the transferred call ends.
string
required
Why the call ended. One of the values below.

call.failed

Sent when a call never reaches an application: the number you called was busy or didn’t answer, the call was rejected, or neither the application nor its fallback could be reached. A failed call sends no call.started or call.ended.
string
required
The call’s ref.
string
The application the call was meant for. It may be empty or missing.
string
required
The calling number or address.
string
required
The called number or address.
string
required
inbound or outbound.
string
required
Why the call failed. Common values are below; treat any other value as a generic failure.

call_record.sealed

Sent each time a new version of a call record is sealed. Version 1 is sealed after the call ends. Later versions come from changes, such as a part being deleted. No event is sent when a record is erased.
string
required
The call’s ref.
integer
required
The record version that was sealed, starting at 1.
string
required
Where to fetch that version: /api/records/<callRef>?version=<version>, relative to the API’s host. An operator can set a different base. Fetch it with your access token.

provider.deprecated

Sent once to each workspace that names the item in a saved application or agent, when Fonoster deprecates a provider, model or voice. See Providers and models.
string
required
The catalog ID that was deprecated, such as groq/llama-3.3-70b-versatile.
string
required
The catalog ID to move to.
string
required
The retirement date, as YYYY-MM-DD.

Retired events

The 0.27 Autopilot eventsHook events are gone. Creating a webhook with one of their names is refused with the replacement.