09Integrate · Embeds

Drop-in JS for any site.

One script tag, one init call, one container div. The embed runtime calls the public-API gateway under the hood, so the same key, scopes, and per-second rates apply.

Loading

The runtime is dependency-free, ES2020, and lives at a stable versioned URL: https://www.vaanilabs.in/embed/v1/vaanivoice.js. It exposes a single global, window.Converlane, and is idempotent — including it twice is harmless.

Four init methods

window.Converlane

FieldTypeNotes
Converlane.textvoice(opts)functionMount an inline text-voice card into opts.container (CSS selector or element). Requires opts.apiKey.
Converlane.voicebot(opts)functionFloating bubble that opens a panel. opts.position: "bottom-right" | "bottom-left". Requires opts.apiKey.
Converlane.meetingAgent(opts)functionInline LiveKit room with Vikash dispatched. Requires opts.apiKey + opts.container.
Converlane.meeting(opts)functionInline LiveKit room only. Requires opts.apiKey + opts.container.

HTML — text-voice

curl
<!-- Drop on any page. Loads the embed runtime asynchronously. -->
<script src="https://www.vaanilabs.in/embed/v1/vaanivoice.js" defer></script>

<div id="my-voice-agent"></div>

<script>
window.addEventListener("DOMContentLoaded", () => {
Converlane.textvoice({
apiKey: "vv_live_YOUR_KEY_HERE",
container: "#my-voice-agent",
});
});
</script>
javascript
<!-- Drop on any page. Loads the embed runtime asynchronously. -->
<script src="https://www.vaanilabs.in/embed/v1/vaanivoice.js" defer></script>

<div id="my-voice-agent"></div>

<script>
window.addEventListener("DOMContentLoaded", () => {
Converlane.textvoice({
apiKey: "vv_live_YOUR_KEY_HERE",
container: "#my-voice-agent",
});
});
</script>
python
# The embed snippet is browser-only. From a server, use the four
# /api/public/v1/* endpoints directly — see the surface specs.
#
# A handy pattern: server-render the HTML below, but inject a
# DASHBOARD-MINTED key, never a long-lived key, into the page.
print('<script src="https://www.vaanilabs.in/embed/v1/vaanivoice.js" defer></script>')

JS — all four surfaces

curl
// Floating bubble (bottom-right by default).
Converlane.voicebot({
apiKey: "vv_live_YOUR_KEY_HERE",
position: "bottom-right", // or "bottom-left"
});

// Inline meeting room with Vikash.
Converlane.meetingAgent({
apiKey: "vv_live_YOUR_KEY_HERE",
container: "#meeting-slot",
title: "Office hours",
});

// Inline LiveKit room (no AI).
Converlane.meeting({
apiKey: "vv_live_YOUR_KEY_HERE",
container: "#room-slot",
});
javascript
// Floating bubble (bottom-right by default).
Converlane.voicebot({
apiKey: "vv_live_YOUR_KEY_HERE",
position: "bottom-right", // or "bottom-left"
});

// Inline meeting room with Vikash.
Converlane.meetingAgent({
apiKey: "vv_live_YOUR_KEY_HERE",
container: "#meeting-slot",
title: "Office hours",
});

// Inline LiveKit room (no AI).
Converlane.meeting({
apiKey: "vv_live_YOUR_KEY_HERE",
container: "#room-slot",
});
python
# The embed snippet is browser-only. From a server, use the four
# /api/public/v1/* endpoints directly — see the surface specs.
#
# A handy pattern: server-render the HTML below, but inject a
# DASHBOARD-MINTED key, never a long-lived key, into the page.
print('<script src="https://www.vaanilabs.in/embed/v1/vaanivoice.js" defer></script>')

Manage in the dashboard

Already signed up? Configure embed snippets, copy ready-to-paste markup, and rotate the key from /api-keys/embed in the dashboard.

Was this page helpful?