meetbot / docs

Getting Started

Dispatch your first meeting bot, verify a webhook, and pull your first recording. End-to-end in about five minutes.

meetbot is a meeting-bot API. You hand us a Google Meet, Microsoft Teams, or Zoom URL; a bot joins the call, records per-speaker audio, the tab video, captions, and chat; and a signed webhook fires when the meeting ends. Files land in your S3-compatible bucket — never ours, unless you ask.

Pricing is flat $0.30/hr, billed per minute. New accounts get $5 of free credit on signup; no card required to start.

1 · Install the SDK

bash npm install @meetbot/sdk
bash pnpm add @meetbot/sdk
bash yarn add @meetbot/sdk
bash bun add @meetbot/sdk

The SDK is MIT-licensed; the source lives at github.com/meetbot/sdk-js. Python (pip install meetbot), Go (go get github.com/meetbot/sdk-go), and Rust SDKs ship with the same shape.

2 · Get an API key

Sign in at meetbot.dev/login and create a key at /account/keys. You get a MEETBOT_API_KEY (starts with mb_live_… for prod, mb_test_… for the sandbox) and a MEETBOT_WEBHOOK_SECRET for signing webhooks.

export MEETBOT_API_KEY=mb_live_…
export MEETBOT_WEBHOOK_SECRET=whsec_…

Keys are scoped to the team that created them. Revoke any key at /account/keys and any in-flight bot dispatched with that key keeps running, but no new dispatches will succeed.

3 · Dispatch your first bot

dispatch.ts
import { createMeetbot } from "@meetbot/sdk";

const meetbot = createMeetbot({ apiKey: process.env.MEETBOT_API_KEY! });

const job = await meetbot.dispatchBot({
  url: "https://meet.google.com/abc-defg-hij",
  externalId: "session-42",
  webhooks: { onFinalize: "https://yours.example/hook" },
});

console.log(job.id, job.status);

A bot will join the meeting within 10–15 seconds. When the meeting ends — or you call meetbot.leaveBot(job.id) — we finalize the recording, upload it to your bucket, and POST the manifest to the webhook URL above.

4 · Verify the webhook signature

We sign every webhook with HMAC-SHA256 over the raw body. The signature travels in the x-meetbot-signature header as sha256=<hex>. Reject anything that doesn't verify.

webhook.ts
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);
  // event.type === "recording.finalized"
  // event.data.manifestUri → s3://your-bucket/recordings/<jobId>/manifest.json
  return new Response("ok");
}

See Webhooks: Signature Verification for working snippets in JavaScript, Python, and Go.

What next

On this page