08Reference · Surface

Meeting — a LiveKit room, nothing more.

POST provisions a LiveKit room with a Google-Meet-style join URL and host-seat token. No AI participant, no transcription. Use when you want raw multi-party audio/video at the lowest possible per-second rate.

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

FieldTypeNotes
AI participantabsentNo Vikash. No transcription. The room is empty until your participants join.
flow_idignoredAccepted in the body for forward-compat but has no effect — there is no agent to follow a flow.
price1 paise / secAn eighth of meeting-agent's rate.
surface field"meeting"Echoes meeting in the response and in usage rollups.

Errors

StatusCodeMeaning
401invalid_api_keyStandard auth failure.
402insufficient_balanceWallet at zero, no autopay.
403scope_deniedKey missing the meeting scope.
429rate_limitedPer-key budget exceeded.
502upstream_errorLiveKit room creation failed.

Examples

curlmeeting.sh
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"
# }
javascriptmeeting.js
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 room
pythonmeeting.py
r = 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"])

Was this page helpful?