Endpoint
POST/api/public/v1/meeting/rooms
Same room-creation backend as meeting-agent; we simply skip the Vikash dispatch step. Cheaper per second, identical response shape.
What's identical to meeting-agent
Request body fields, response shape, host token semantics, and the Google-Meet-style join URL all behave the same way. See the meeting-agent spec for the deep field reference.
What differs
Per-row differences
| Field | Type | Notes |
|---|---|---|
AI participant | absent | No Vikash. No transcription. The room is empty until your participants join. |
flow_id | ignored | Accepted in the body for forward-compat but has no effect — there is no agent to follow a flow. |
price | 1 paise / sec | An eighth of meeting-agent's rate. |
surface field | "meeting" | Echoes meeting in the response and in usage rollups. |
Errors
| Status | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | Standard auth failure. |
| 402 | insufficient_balance | Wallet at zero, no autopay. |
| 403 | scope_denied | Key missing the meeting scope. |
| 429 | rate_limited | Per-key budget exceeded. |
| 502 | upstream_error | LiveKit room creation failed. |
Examples
curl -X POST https://www.vaanilabs.in/api/public/v1/meeting/rooms \
-H "Authorization: Bearer $VAANI_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Investor sync", "max_participants": 8 }'
# Response 200 — same shape as meeting-agent, but no Vikash dispatched.
# {
# "room_url": "https://vaanilabs.in/meet/xxx-xxxx-xxx",
# "room_name": "<livekit room name>",
# "host_token": "<short-lived JWT>",
# "session_token": "<HMAC-signed surface token>",
# "expires_at": "2026-04-25T13:00:00.000Z",
# "surface": "meeting"
# }const res = await fetch(
"https://www.vaanilabs.in/api/public/v1/meeting/rooms",
{
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.VAANI_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ title: "Investor sync", max_participants: 8 }),
},
);
const { room_url } = await res.json();
window.location.href = room_url; // bring the host into the roomr = requests.post(
"https://www.vaanilabs.in/api/public/v1/meeting/rooms",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"title": "Investor sync", "max_participants": 8},
timeout=12,
)
data = r.json()
print(data["room_url"])