00Reference · Overview

One key. Four surfaces. Per-second billing.

The Converlane public API exposes the same low-latency voice and meeting infrastructure that powers vaanilabs.in — text-voice agents, voicebots, AI-hosted meetings, and bare LiveKit rooms — over a single Bearer-token gateway.

What this is

A handful of POST endpoints that hand you back short-TTL signed tokens for live transports. No SDK to install, no webhook dance. Mint a key, send a request, hold a connection.

Every request authenticates with Authorization: Bearer vv_live_…, every key is scope-gated and rate-limited per minute, and every session is metered against your wallet. There is one canonical base URL: https://www.vaanilabs.in.

The four surfaces

Pick the surface that fits the conversation you want to host. Voice surfaces give you a WebSocket; meeting surfaces give you a room URL.

Text-voice

4paise / sec

Browser-side voice agent. Mic in, voice out, full-duplex over a single WebSocket. Pair with a flow for branching conversations.

Read the spec →

Voicebot

4paise / sec

Same engine as text-voice, scoped separately so embed-snippet usage shows up cleanly on your dashboard.

Read the spec →

Meeting agent

8paise / sec

A LiveKit room with Vikash — our hosted AI participant — joined automatically. You get a join URL and a host token.

Read the spec →

Meeting

1paise / sec

A LiveKit room only. No AI participant, no transcription. Use when you want raw multi-party audio/video at cost.

Read the spec →

Quickstart — 90 seconds

Get a key from the dashboard key manager, fire one request, hold the WebSocket. That's the whole loop.

curlquickstart.sh
# 1. Create a key in the dashboard, then export it.
export VAANI_API_KEY="vv_live_YOUR_KEY_HERE"

# 2. Open a text-voice session.
curl -X POST https://www.vaanilabs.in/api/public/v1/textvoice/session \
-H "Authorization: Bearer $VAANI_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
javascriptquickstart.js
const apiKey = "vv_live_YOUR_KEY_HERE";

// Open a text-voice session.
const res = await fetch(
"https://www.vaanilabs.in/api/public/v1/textvoice/session",
{
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({}),
},
);
const { ws_url, ws_token } = await res.json();

// Connect the live transport.
const ws = new WebSocket(ws_url);
ws.onmessage = (e) => console.log("frame:", e.data);
pythonquickstart.py
import os, requests, websockets, asyncio

API_KEY = os.environ["VAANI_API_KEY"]

r = requests.post(
"https://www.vaanilabs.in/api/public/v1/textvoice/session",
headers={"Authorization": f"Bearer {API_KEY}"},
json={},
timeout=10,
)
r.raise_for_status()
session = r.json()

async def stream():
async with websockets.connect(session["ws_url"]) as ws:
async for frame in ws:
print("frame:", frame)

asyncio.run(stream())

Table of contents

Was this page helpful?