Skip to main content
The meetings screen has three sections: live now, upcoming and past. Every meeting carries its label, and before the call a switch to record it or not.
A meetings screen with Live now, Upcoming and Past sections. Rows read Recording (live), Will record or Won't record with a switch, Processing, Ready, or Not recorded. Notes: each section is GET /meetings with member_id and phase; Recording is phase live; Will record and Won't record are settings.recording.enabled; the switch is a meeting: settings assignment; Processing and Ready are results.status; Not recorded is past with results.status none.

The sections

member_id keeps the meetings the user is invited to, or sent the bot to, under either their email or the calendar account they connected. starts_after and starts_before narrow a section to a window. While has_more is true, request _links.next.url as it is. Cancelled meetings are listed only with phase=cancelled. Every calendar event is a meeting, including those with no link to join: they carry settings.sources["recording.enabled"].reason: "no_meeting_url" and can’t be recorded. Hide them by default, or show them without the switch. platform is meet, zoom or teams (null for other links). A participant who is one of your users carries their member_id.

The label

settings.sources["recording.enabled"] says which assignment decided, or why none did, if you want to show it: see the settings block.

The switch

Record one meeting, or skip it, whatever the user’s and the company’s rules say:
The switch applies to this occurrence only. Once the meeting has its own settings (its settings.assignments has one with own: true), flip it with PATCH /settings/{id}, and hand the meeting back to the user’s and the company’s rules with recording.enabled: "inherit". Turning a live meeting off makes the notetaker leave; what it recorded so far is kept. While a bot is still joining, this answers 503 provider_unavailable: try again a few seconds later.

Keep the list current

Your webhook endpoint receives, for the workspace’s meetings: On each one, read GET /meetings/{id} and save what it returns: events can arrive out of order, and the read is the current state. A meeting that becomes past only because its end time went by, with nothing recorded, sends no event. To attach your own ids to a meeting, PATCH /meetings/{id} with metadata.