Skip to main content
Every event envelope has this top-level shape:
Below, each event’s data block is documented.

Call lifecycle

call.started

Fires when the dialer originates a call (pre-answer).

call.answered

Fires on CHANNEL_ANSWER — the callee picked up.

call.ended

Fires on CHANNEL_HANGUP. The most common event customers subscribe to.
recording_url is null on call.ended; wait for call.recording_ready once the GCS upload completes (typically +2–5s after hangup).

call.recording_ready

Fires when the recording is uploaded and a signed URL is available.
The signed URL expires 7 days after issue. If you archive recordings, pull them down promptly.

call.transcript_ready

Fires when Gemini transcription completes (typically +30–60s after recording upload).

Lead lifecycle

lead.completed

Fires when a lead reaches a terminal state (completed, failed, dnd, or no_answer after exhausted retries).

Campaign lifecycle

campaign.started

campaign.paused

Fires on BOTH manual and auto-pause. Distinguish via data.source:

campaign.resumed

Symmetric to paused. source is "manual" in all current paths (auto-resume from safety-sweep doesn’t exist — humans re-enable).

campaign.completed

Agent lifecycle

agent.logged_in

agent.logged_out

v2 events (coming)

These will land in v1.1 / v2: