Call2MeStart free
Developers

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".

FieldRequiredNotes
typeyesShort slug, e.g. js_error, wizard_step
severityyesinfo, warning, error, critical
sourceyesWhich surface sent it
messageyesOne line, human-readable
metanoFree-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.

ShareX / TwitterLinkedIn

Ready to ship?

Spin up your first agent in 5 minutes — $5 free credit.

Build your voice agent in 10 minutes.

No code. No credit card. Just a phone number.