On this page
Node.js SDK
@respiresoft/meet, typed, ESM and CJS, Node 18 or newer, no dependencies.
npm i @respiresoft/meetPublishing. The SDK packages are not on npm, PyPI, Packagist or the Go module proxy yet. Until they are, the REST API works from any language over plain HTTPS: every REST reference page has a curl example.
For a task by task start see the server quick start. Every REST operation has a Node example on the REST reference pages.
Reference from the package README#
Server SDK for the Meet API (rooms, meeting tokens, live control, sessions, recordings, webhooks, usage). Node 18+, ESM and CJS, zero dependencies, typed.
npm i @respiresoft/meetimport { Meet } from "@respiresoft/meet";
const meet = new Meet({ apiKey: process.env.MEET_API_KEY }); // mk_test_... or mk_live_...
const room = await meet.rooms.create({ name: "order-1042", privacy: "private" });
const { token } = await meet.rooms.createToken(room.name, { name: "Ann", role: "host", ttl: 3600 });
// browser: import { embed } from "@respiresoft/meet-embed"; embed("#meeting", { url: room.url, token });
for await (const r of meet.rooms.list()) console.log(r.name); // every page, automaticallySurface#
meet.whoami() |
project and mode of the key |
meet.rooms |
create list get update delete createToken checkToken presence end eject mute muteAll message updateLive |
meet.sessions |
list get transcript(id, {format: "json"|"txt"|"vtt"|"srt", lang}) chat |
meet.recordings |
list get downloadLink delete |
meet.webhooks |
list create get update delete test rollSecret deliveries listEvents getEvent redeliver, plus verify constructEvent sign |
meet.usage |
get estimate |
Meet.webhooks.verify(rawBody, header, secret, {tolerance}) |
Meet-Signature check, no key needed; throws SignatureError |
Meet.webhooks.constructEvent(rawBody, header, secret) |
verify, then parse |
await Meet.tokens.verify(token, {jwksUrl, jwks, room}) |
EdDSA check of a meeting token with Node crypto; pass jwks to stay offline; throws TokenError |
- Lists return a first page you can
await(page.data,page.has_more,await page.next()) or iterate directly withfor await, which followsstarting_afterfor you. - Retries: 429 (honours
Retry-After), 5xx and network errors,maxRetries(default 2) with jittered backoff. Every POST carries anIdempotency-Key(a fresh UUID, the same across retries; pass{ idempotencyKey }as the last argument to choose it). - Errors:
MeetErrorwithcode,status,requestId,param,retryAfter;MeetConnectionError(status 0) when no answer came. - Options:
new Meet({ apiKey, baseUrl, maxRetries, timeout, fetch }). Env fallbacks:MEET_API_KEY,MEET_BASE_URL.
Webhook receiver (verify the raw body, never a re-serialised object):
app.post("/meet-webhook", express.raw({ type: "*/*" }), (req, res) => {
const event = Meet.webhooks.constructEvent(req.body, req.get("Meet-Signature"), process.env.MEET_WEBHOOK_SECRET);
res.sendStatus(204);
});