Attendee API Documentation

repository·main·Indexed 20 days ago

https://github.com/attendee-labs/attendee

An open-source API for managing meeting bots on platforms like Zoom, Google Meet, and Microsoft Teams. Attendee abstracts media stream and meeting state complexity, providing tools for recording, real-time transcription, and meeting bot lifecycle management. It includes features for calendar integration via Google and Microsoft OAuth, a management CLI for bot execution and scheduling, and endpoints for retrieving transcripts and deleting bot data.

Tokens
20.3K
Snippets
44
Records
109
Agent score
71%

What's inside Attendee

  1. How webhooks work in Attendee

    main

    Webhooks provide real-time updates to your server, eliminating the need to poll the Attendee API. They notify your server when events occur such as bots joining meetings, recordings becoming available, chat messages being sent, or calendar updates.

    Attendee supports two scopes of webhooks:

    1. Project-level webhooks: Configured via the UI, these apply to all bots within a specific project.
    2. Bot-level webhooks: Configured via the API during bot creation, these apply only to that specific bot.

    Note on Priority: If a bot has both project-level and bot-level webhooks configured, the bot-level webhooks will be used instead of the project-level ones.

  2. Understand the Scheduled Bot State Lifecycle

    main

    Scheduled bots follow a specific state progression to manage resource allocation before joining a meeting:

    1. scheduled: The initial state. The bot is queued and waiting for the time when resources will be allocated.
    2. staged: Resources have been allocated and the bot is ready, waiting for the exact join_at time.
    3. joining: At the specified join_at time, the bot actively attempts to join the meeting.
    4. Subsequent States: Once joined, the bot follows standard lifecycle states (e.g., joined, recording).
  3. How Attendee-managed Zoom RTMS works

    main

    Attendee uses Zoom's Realtime Media Streams (RTMS) to provide access to live audio, video, transcripts, and screenshare data without using a visible bot participant.

    Key Concepts

    • App Sessions: The primary entity in Attendee for RTMS. When a user activates an RTMS app in a Zoom meeting, Zoom sends a webhook to your app, which you then forward to Attendee to create an App Session.
    • RTMS vs Bots:
      • No Bot Participant: RTMS does not add a participant to the call; there is no "bot has joined" notification.
      • User-Controlled: The user controls when the app connects by opening the RTMS app in Zoom. The user can also pause recording at any time.
      • Data Flow: RTMS is receive-only. It cannot send data (like chat messages or audio) back into the meeting. If you need bidirectional communication, you must use a bot.
      • No OBF Token: RTMS does not require On Behalf Of (OBF) tokens or complex join token logic.
  4. How Signed In Bots work

    main

    By default, Attendee bots operate in an anonymous mode (similar to an incognito window). Signed In Bots log in to a specific user account on the meeting platform before joining.

    Benefits

    • Appearance: Bots appear as normal users with avatars instead of anonymous users, avoiding 'Unverified' labels.
    • Access: Required for meetings that prohibit anonymous participants.

    Trade-offs

    • Slightly longer join times.
    • Requires initial setup of credentials or authentication flows.
  5. Compare Third-party-based vs Closed Caption-based Transcription

    main

    Attendee provides two transcription methods. Choose based on your requirements for latency, quality, and cost:

    Third-party-based Transcription

    • Source: Per-participant audio segments.
    • Quality: High (depends on provider).
    • Latency: Higher (due to segment processing).
    • Cost: Incurs costs from the provider (e.g., Deepgram, OpenAI).
    • Features: Supports word-level timestamps (except OpenAI) and perfect speaker diarization for Zoom/Google Meet.
    • Setup: Requires adding API keys in the dashboard.

    Closed Caption-based Transcription

    • Source: Built-in captions from the meeting platform (Zoom, Google Meet).
    • Quality: Generally lower.
    • Latency: Lower (near-instantaneous).
    • Cost: Free.
    • Features: No word-level timestamps; perfect speaker diarization.
    • Setup: No setup required.
  6. Understand Participant Event Types

    main

    Attendee tracks participant actions within a meeting to enable attendance tracking or automated triggers. Note that the Attendee bot itself is not considered a participant and will not appear in these events.

    There are four supported event types:

    • Join: A participant has joined the meeting.
    • Leave: A participant has left the meeting.
    • Speech Start: A participant has started speaking.
    • Speech Stop: A participant has stopped speaking.
  7. How Attendee-managed Zoom OAuth works

    main

    Attendee-managed Zoom OAuth allows your Zoom Bots to use specific Zoom SDK tokens generated from stored user credentials. This enables two main capabilities:

    1. Local Recording Token: Allows bots to record meetings without host permission. Attendee tracks meetings via Zoom webhooks to map meeting URLs to the correct host credentials.
    2. Onbehalf Token: Associates the bot with the user it is joining on behalf of. Note: After March 2, 2026, all bots joining external meetings must use this token.

    Workflow:

    1. User authorizes your Zoom app via OAuth.
    2. Your app sends the authorization code to Attendee.
    3. Attendee exchanges the code for credentials and stores them.
    4. When a bot joins a meeting, Attendee uses the stored credentials to generate the required token (Local Recording or Onbehalf).

    If you prefer to manage credentials yourself, you can pass raw tokens to Attendee using the callback_settings.zoom_tokens_url parameter in the POST /api/v1/bots request.

  8. Configure Attendee Bot settings

    main

    Bots can be customized via several configuration categories:

    Transcription Settings

    • Language selection
    • Automatic language detection
    • Provider-specific options

    Recording Settings

    • Recording type: Choose between Audio and Video or Audio Only.
    • Recording view: Choose between Speaker View or Gallery View.

    Automatic Leave Settings

    Control how the bot exits a meeting based on conditions:

    • Timeout for waiting to be admitted to the meeting.
    • Timeout for silence before leaving.
    • Timeout for being the only participant in the meeting.
    • Maximum meeting duration before the bot leaves.

    Webhooks

    Subscribe to events for:

    • Bot state changes
    • Transcript updates
  9. Understand Attendee Bot capabilities and lifecycle

    main

    In the Attendee platform, a bot is an automated participant that joins virtual meetings (Zoom, Google Meet, or Microsoft Teams) to perform tasks.

    Capabilities

    • Recording: Audio and video capture.
    • Transcription: Real-time conversation transcription.
    • Speech: Injecting arbitrary audio into the meeting.
    • Avatars: Displaying images via a virtual webcam.
    • Chat: Recording and sending chat messages.

    Bot Lifecycle States

    Bots transition through several states during their lifecycle:

    • ready: Initial state upon creation.
    • joining: Attempting to join the meeting.
    • joined - not recording: Joined but not currently capturing data.
    • joined - recording: Joined and actively recording.
    • joined - recording paused: Joined but recording is temporarily paused.
    • joined - recording permission denied: Joined but lacks recording permissions.
    • waiting_room: Bot is stuck in the meeting's waiting room.
    • joining_breakout_room / leaving_breakout_room: Moving between breakout rooms.
    • leaving: Bot is exiting the meeting.
    • post_processing: Processing recordings after the meeting.
    • ended: Tasks complete; recordings and transcripts are ready for download.
    • fatal_error: Unrecoverable error encountered.
    • scheduled: Scheduled for a future meeting.
    • staged: Resources allocated, awaiting scheduled time.
    • data_deleted: All associated data has been purged.
  10. Manage Bot Login Groups

    main

    Bot logins for Microsoft Teams and Google Meet are organized into bot login groups (managed via Settings -> Bot Logins in the dashboard).

    Purpose

    Groups allow you to control which identity a bot uses. A common pattern is to create one group per customer so that bots appear with that customer's specific name and avatar.

    Usage

    When calling the create bot endpoint, pass the login_group_name inside teams_settings or google_meet_settings. If omitted, Attendee defaults to the oldest group for that platform.

    Scaling and Concurrency

    • Google Meet: Uses round-robin assignment within a group. Because of Google's account concurrency limits, you should include multiple duplicate logins in a single group.
      • Formula: MAX_NUMBER_OF_CONCURRENT_MEETINGS / 20.
    • Microsoft Teams: No specific concurrency limit; a single login per group is usually sufficient.