SDKs
TypeScript / JavaScript SDK
Official @meetbot/sdk for Node.js 22+. Typed HTTP client, webhook signature verification, full surface for the meetbot orchestrator API.
The official TypeScript SDK is @meetbot/sdk on npm. Source is MIT
at github.com/meetbot-dev/meetbot/tree/main/packages/sdk.
Install
bash npm install @meetbot/sdk bash pnpm add @meetbot/sdk bash yarn add @meetbot/sdk bash bun add @meetbot/sdk Requires Node 22+. ESM-only (no CommonJS shim — Node 22 ships native ESM).
Auth
import { createMeetbot } from "@meetbot/sdk";
const meetbot = createMeetbot({
apiKey: process.env.MEETBOT_API_KEY!, // mb_live_… or mb_test_…
baseUrl: "https://api.meetbot.dev", // optional; this is the default
});Get a key at meetbot.dev/account/keys.
Method reference
| Method | HTTP | Returns |
|---|---|---|
meetbot.dispatchBot(input) | POST /api/v1/jobs | Promise<Job> |
meetbot.getJob(id) | GET /api/v1/jobs/{id} | Promise<Job | null> |
meetbot.cancelJob(id) | DELETE /api/v1/jobs/{id} | Promise<void> |
meetbot.requestRecordingPermission(id) | POST /api/v1/jobs/{id}/request-recording-permission | Promise<RequestRecordingPermissionResult> |
verifyWebhookSignature({ body, header, secret }) | n/a — local | boolean |
Bot-control verbs (pause_recording, resume_recording, stop_recording,
leave_call, send_chat_message, pin_participant) are wired into the
SDK in M1.1.
Example 1 — dispatch a bot
import { createMeetbot } from "@meetbot/sdk";
const meetbot = createMeetbot({ apiKey: process.env.MEETBOT_API_KEY! });
const job = await meetbot.dispatchBot({
externalId: "lesson-2026-05-09-pavel",
meetingUrl: "https://meet.google.com/abc-defg-hij",
displayName: "Acme Notetaker",
webhooks: {
onFinalize: "https://api.acme.example/meetbot/finalize",
},
});
console.log("dispatched", job.id, "→", job.status);Example 2 — verify a webhook
import { verifyWebhookSignature } from "@meetbot/sdk";
export async function POST(req: Request) {
const raw = await req.text();
const ok = verifyWebhookSignature({
body: raw,
header: req.headers.get("x-meetbot-signature"),
secret: process.env.MEETBOT_WEBHOOK_SECRET!,
});
if (!ok) return new Response("invalid signature", { status: 401 });
const event = JSON.parse(raw);
// …handle event.data.event
return new Response("ok");
}The full algorithm and gotchas are at Webhooks: Signature Verification.
Example 3 — auto-leave + custom metadata
const job = await meetbot.dispatchBot({
externalId: "q2-board-meeting-acme",
meetingUrl: "https://meet.google.com/xyz-abcd-efg",
joinAt: new Date("2026-05-15T14:00:00Z"),
metadata: { customer_id: "cust_4711", workspace: "acme-prod" },
autoLeave: {
afterEntryDelaySeconds: 300, // leave if not let in within 5m
afterMaxSeconds: 7200, // cap at 2h
onBotDetected: true, // leave if Otter/Fireflies/Read shows up
},
});Errors
MeetbotHttpError carries a numeric status and an optional machine-
readable code from the orchestrator's error envelope:
import type { MeetbotHttpError } from "@meetbot/sdk";
try {
await meetbot.dispatchBot({ externalId: "bad", meetingUrl: "not-a-url" });
} catch (err) {
const e = err as MeetbotHttpError;
if (e.status === 400) console.error("validation:", e);
if (e.status === 401) console.error("auth:", e);
if (e.status === 429) console.error("rate limit:", e);
throw err;
}See also
- Bot Quickstart — end-to-end walkthrough
- Failure sub-codes —
failureCodetaxonomy - Webhooks: Signature Verification
- Python SDK — same surface in Python