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
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.
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
Bot quickstart →
Full end-to-end example: dispatch, listen, fetch the manifest, download per-speaker audio.
Billing →
Flat $0.30/hr, $5 free credit, Stripe portal at /account/billing.
Regions →
Single EU region today. US-East / US-West / APAC on the roadmap.
Failure sub-codes →
The granular failure taxonomy (waiting_for_host, host_denied, etc.) — shipping in M1.