---
title: "Send the Bubbles notetaker to join and record a meeting by link. Requires the meetings:join scope (PATs carry it implicitly). meeting_url must be a Google Meet, Microsoft Teams, Zoom, Webex, or GoTo link — any other link is rejected with 400 invalid_request and no notetaker is sent. team_id is the workspace the recording is saved into. Returns the created meeting-join resource; poll GET /v1/meetings/join/{id} for the live status and GET /v1/bubbles for the recording as it materializes."
method: POST
path: "/v1/meetings/join"
---

# Send the Bubbles notetaker to join and record a meeting by link. Requires the meetings:join scope (PATs carry it implicitly). meeting_url must be a Google Meet, Microsoft Teams, Zoom, Webex, or GoTo link — any other link is rejected with 400 invalid_request and no notetaker is sent. team_id is the workspace the recording is saved into. Returns the created meeting-join resource; poll GET /v1/meetings/join/{id} for the live status and GET /v1/bubbles for the recording as it materializes.

`POST /v1/meetings/join`

## Request

- Base URL: `https://api.usebubbles.com`
- URL: `https://api.usebubbles.com/v1/meetings/join`
- Auth: HTTP bearer

## Request body

- JoinMeetingRequest: POST /v1/meetings/join request body.
  - `meeting_url` string, required: A Google Meet, Microsoft Teams, Zoom, Webex, or GoTo meeting link.
  - `team_id` string, required: The workspace to save the recording into (see GET /v1/teams).

## Response `201`

Created.

- MeetingJoinCreated: POST /v1/meetings/join 201 response — the dispatched notetaker resource.
  - `id` string, required: The join id; poll GET /v1/meetings/join/{id}.
  - `type` 'meeting_join', required: The resource type.
  - `status` string, required: Initial status (dispatched).
  - `meeting_url` string, required: The normalized meeting link the notetaker was sent to.
  - `team_id` string, required: The workspace the recording is saved into.
  - `created_at` string, required: Dispatch instant (ISO-8601 UTC).

## Other responses

- `400`: A query parameter or request body was malformed (invalid_request).
- `401`: Missing, malformed, or wrong-kind credential (unauthorized / token_revoked / account_deleted).
- `403`: The credential lacks the required scope, or the workspace cannot access paid features (forbidden / pro_plan_required).
- `429`: Rate limit exceeded (rate_limited); see the Retry-After header.
- `500`: An unexpected server error occurred (internal_error).

---

[API](https://skmtc.dev/usebubbles/apis/bubbles-public-api.md) - [All operations](https://skmtc.dev/usebubbles/apis/bubbles-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/usebubbles/apis/bubbles-public-api/revisions/31570f5d4b05?raw)
