Events: recording what happens in your app
Post events to Call2Me from your own frontend, and read live audio over the voice WebSocket. There is no event-streaming WebSocket — this page documents what actually exists.
Updated October 5, 2026
An earlier version of this page documented a wss://api.call2me.app/v1/events
transcript stream with subscribe, transcript.partial and agent.state
messages. None of that exists. It was removed on 5 October 2026 after the
endpoints were checked against the live API. This page now describes only what
is real.
POST /v1/events — record an event
/v1/events is HTTP, not a WebSocket, and it flows into Call2Me. Your
frontend posts a single event; the platform stores it and routes severe ones
to alerting.
curl -X POST https://api.call2me.app/v1/events \
-H "Authorization: Bearer $CALL2ME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "js_error",
"severity": "error",
"source": "dashboard",
"message": "Cannot read property of undefined",
"meta": { "page": "/agents" }
}'
One event per request — the endpoint does not take an array.
It always returns 202, even when the event is dropped. That is deliberate: telemetry must never make the caller retry, and a retry loop on a failing endpoint is worse than a lost event. Do not treat 202 as "stored".
| Field | Required | Notes |
|---|---|---|
type | yes | Short slug, e.g. js_error, wizard_step |
severity | yes | info, warning, error, critical |
source | yes | Which surface sent it |
message | yes | One line, human-readable |
meta | no | Free-form object; keep it free of personal data |
Severity decides what happens next: error and critical reach alerting,
everything else is archived only.
GET /v1/events — read them back
Returns the events recorded for your workspace, newest first. Useful for debugging what your own frontend reported.
curl https://api.call2me.app/v1/events \
-H "Authorization: Bearer $CALL2ME_API_KEY"
The voice WebSocket
There is exactly one WebSocket, and it carries audio, not transcripts:
wss://api.call2me.app/v1/voice/{agent_id}
It exists so you can talk to an agent from a browser without a phone number.
The message types are start, audio (base64 frames), stop and end —
a two-way audio channel, not an observability feed.
Getting transcripts
Transcripts are available once the call is over:
curl https://api.call2me.app/v1/calls/{call_id} \
-H "Authorization: Bearer $CALL2ME_API_KEY"
The response carries the full turn-by-turn transcript. For a structured export, see vCon export.
When you want to be told something happened
Use webhooks. They fire after a call ends or is analysed and carry the payload with them. Events record what happened; webhooks tell you about it.
Frequently asked
Q.Is there a WebSocket that streams live transcripts?
No. An earlier version of this page described one; it never existed. Live audio runs over `wss://api.call2me.app/v1/voice/{agent_id}`, which is a two-way audio channel for testing an agent in the browser, not a transcript feed. For transcripts, fetch the call once it ends — `GET /v1/calls/{call_id}` returns the full turn-by-turn transcript.
Q.What is POST /v1/events for then?
It is an ingestion endpoint: your frontend posts events into Call2Me so they land in the event archive and, when severe enough, in alerting. The dashboard uses it for its own onboarding telemetry and JavaScript errors. It always returns 202 and you should not retry.
Q.How do I get notified when a call ends?
Use webhooks. They fire after discrete events and carry the payload; see the webhooks page. Events are for recording what happened, not for being notified.