Developers
Two plain requests: one returns a recording in any preset voice, the other brings your agent into a live call.
{"voice": "lilt","language": "fr","title": "Welcome to Hearthlane","text": "Bienvenue chez Hearthlane. Je suis Neri…"}
{"mode": "video","fallback": "audio"}
Response201 Created
{"id": "ses_41Hd","participant": "Neri · AI agent","state": "connecting"}
Neri AI agent connected · 0:04 Neri joins as a named participant who can hear, speak and show video. Nothing else is requested.
Neri · AI agent would like to join
Allowed
Not asked
Retry video or carry on by audio. The session keeps Neri's configuration and tells your code what changed.
Video lost 10:04:51 Video connection lost
Neri is still in the call. Choose how to continue.
Retry videoContinue with audioHandle it
session.on("video_failed", (event) => {event.continueWithAudio() // or event.retryVideo()})
Retry video reconnects the camera while the audio carries on.
Continue with audio keeps the same voice, personality and facts.
Minutes follow the mode. From the switch, they count as audio-call minutes.
Webhooks
Point one endpoint at Voicelabs and follow recordings and sessions as they happen.
{"type": "session.handoff","session": "ses_41Hd","agent": "neri","reason": "billing","to": "Sela Renn's team"}
| Event | When it fires | Includes |
|---|---|---|
session.connecting |
The agent is joining the call | id, mode |
session.connected |
The agent is in, named as an AI agent | participant, mode |
session.video_failed |
The video connection dropped | reason, options |
session.mode_changed |
The call moved between video and audio | from, to, config |
session.handoff |
A person was brought in at your handoff point | reason, to, summary |
session.ended |
The call is over and its minutes are counted | audio_minutes, video_minutes |
| Event | When it fires | Includes |
|---|---|---|
audio.ready |
A generated recording can be played | id, voice, language, duration |
audio.failed |
Generation stopped before the end | id, reason |
transcript.ready |
A timestamped transcript is ready to edit | id, lines |
dub.ready |
A dubbed version kept the voice and timing | id, from, to, duration |
The minutes in audio.ready and session.ended match the meters on your bill. See pricing
Cast it, rehearse it, then invite it into the call.