A reference guide for building AI agents: every method, how to authenticate, and the permissions each one needs.
The Fireflies API is how an app or AI agent works with a Fireflies workspace: reading a meeting transcript with its sentences and summary, listing the people on a team, uploading audio to transcribe, or clipping a moment into a soundbite. Access is granted through an API key, and that key inherits the access of the person it belongs to, so it can reach only what that person can and admin-only actions still need an admin. A single area can also push an event when a transcript is ready, so an integration is notified instead of polling.
How an app or AI agent connects to Fireflies determines what it can reach. There is a route for making calls, a route for receiving an event when a transcript is ready, and a hosted server that exposes Fireflies tools to agents, and each is governed by the API key behind it and the access that key inherits from its owner.
Fireflies exposes a single GraphQL endpoint at https://api.fireflies.ai/graphql. A read is a query (transcripts, users, bites) and a write is a mutation (uploadAudio, createBite, setUserRole, deleteTranscript). Every call is a POST authenticated with an API key sent as a Bearer token, and list queries page with limit (max 50) and skip.
Fireflies POSTs a JSON payload to an HTTPS endpoint registered in the dashboard's Developer settings, or to a URL passed on an audio upload, when a transcript finishes processing. The payload names the meeting, the event type, and any client_reference_id. Each request carries an x-hub-signature header, a SHA-256 HMAC the receiver verifies before trusting it.
A hosted Model Context Protocol server at https://api.fireflies.ai/mcp exposes around twenty Fireflies tools to AI agents across meetings and transcripts, meeting management, channels, soundbites, users and teams, and automation logs. It authenticates with OAuth or an API key. Two tools, fireflies_search and fireflies_fetch, are experimental and may not reach every account.
Fireflies authenticates every first-party call with an API key sent as a Bearer token in the Authorization header. The key is generated from the Integrations section of a Fireflies account and is tied to that one user, so it has no scopes of its own and instead inherits whatever access its owner has. There is no separate test or live mode.
The hosted MCP server can authenticate an agent with OAuth instead of a raw API key, so consent is granted through a sign-in flow rather than by sharing a key. The resulting access still reflects what the connecting user can reach in Fireflies.
The Fireflies API is split into areas an agent can act on, like meeting transcripts, the people on a team, audio uploads, soundbites, and live meetings. Reads return recorded conversations and their summaries, while writes can upload audio, change a team member's role, or remove a transcript.
Read recorded meetings with their sentences and summaries, and manage them.
Read the people on a team and change a member's role.
Upload audio or video for Fireflies to transcribe.
Read and create short clips taken from a meeting.
Add the Fireflies bot to a meeting in progress and clip live moments.
Filter by method, access, or permission, or search any path. Select a row for version detail, rate limits, the related webhook event, and the source.
| Method | Endpoint | What it does | Access | Permission | Version | |
|---|---|---|---|---|---|---|
Transcripts (meetings)Read recorded meetings with their sentences and summaries, and manage them.7 | ||||||
| POST | query transcripts | List meeting transcripts, filtered by keyword, date range, people, channel, or mine, with limit and skip for paging. | read | transcripts:read | Current | |
Returns only transcripts the key's owner can access. Max limit is 50 per page. Acts ontranscript Permission (capability) transcripts:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | query transcript | Fetch one transcript by id, including its sentences, summary, speakers, attendees, and media links. | read | transcripts:read | Current | |
Returns object_not_found if the id is unknown or the key's owner lacks access. Acts ontranscript Permission (capability) transcripts:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | mutation deleteTranscript | Permanently delete a transcript by id. | write | transcripts:write | Current | |
An owner can delete their own meeting; deleting another member's needs admin, else require_elevated_privilege. Acts ontranscript Permission (capability) transcripts:writeVersionAvailable since the API’s base version Webhook eventNone Rate limit10 requests per minute (all tiers) SourceOfficial documentation ↗ | ||||||
| POST | query active_meetings | List meetings currently in progress, with their state. | read | transcripts:read | Current | |
Returns only meetings the key's owner can see. Acts onactive_meeting Permission (capability) transcripts:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | mutation updateMeetingTitle | Change the title of an existing meeting transcript. | write | transcripts:write | Current | |
Title is limited to 256 characters. Acts ontranscript Permission (capability) transcripts:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | mutation updateMeetingPrivacy | Change the privacy level of a meeting transcript. | write | transcripts:write | Current | |
Changes who in the workspace can see the meeting. Acts ontranscript Permission (capability) transcripts:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | mutation shareMeeting | Share a meeting transcript with people by email. | write | transcripts:write | Current | |
Up to 50 email addresses per request. Acts ontranscript Permission (capability) transcripts:writeVersionAvailable since the API’s base version Webhook eventNone Rate limit10 requests per hour (all tiers) SourceOfficial documentation ↗ | ||||||
Users (team)Read the people on a team and change a member's role.4 | ||||||
| POST | query users | List the users on a team, with fields like email, name, role, transcript count, and minutes consumed. | read | users:read | Current | |
Returns users within the key owner's team only. Acts onuser Permission (capability) users:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | query user | Fetch one user by id; with no id, returns the owner of the API key. | read | users:read | Current | |
Querying a user outside the owner's organization returns object_not_found. Acts onuser Permission (capability) users:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | mutation setUserRole | Set a team member's role to admin or user. | write | users:write | Current | |
Admin-only; a non-admin key returns require_elevated_privilege. Acts onuser Permission (capability) users:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | query user_groups | List the user groups on a team and their members. | read | users:read | Current | |
Returns groups within the key owner's team. Acts onuser_group Permission (capability) users:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
Audio uploadUpload audio or video for Fireflies to transcribe.1 | ||||||
| POST | mutation uploadAudio | Upload audio or video from a URL for Fireflies to transcribe, optionally with a webhook URL and client_reference_id. | write | audio:write | Current | |
Paid plans only; free accounts return paid_required. File must be at least 50KB unless bypass_size_check is set. Acts onaudio_upload Permission (capability) audio:writeVersionAvailable since the API’s base version Webhook event transcription_completeRate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
Soundbites (bites)Read and create short clips taken from a meeting.3 | ||||||
| POST | query bites | List soundbites, filtered by mine, transcript_id, or my_team, with limit and skip for paging. | read | bites:read | Current | |
At least one of mine, transcript_id, or my_team is required, else args_required. Max limit is 50. Acts onbite Permission (capability) bites:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | query bite | Fetch one soundbite by id, including its timing, captions, and creator. | read | bites:read | Current | |
Returns object_not_found if the id is unknown or out of reach. Acts onbite Permission (capability) bites:readVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
| POST | mutation createBite | Create a soundbite from a transcript by start and end time, with an optional name, summary, and visibility. | write | bites:write | Current | |
privacies sets visibility to public, team, or participants. Summary is limited to 500 characters. Acts onbite Permission (capability) bites:writeVersionAvailable since the API’s base version Webhook eventNone Rate limitStandard limits apply SourceOfficial documentation ↗ | ||||||
Live meetingsAdd the Fireflies bot to a meeting in progress and clip live moments.2 | ||||||
| POST | mutation addToLiveMeeting | Add the Fireflies bot to a meeting in progress by its link, to record and transcribe live. | write | live:write | Current | |
An unsupported meeting URL returns unsupported_platform. Duration ranges 15 to 120 minutes. Acts onlive_meeting Permission (capability) live:writeVersionAvailable since the API’s base version Webhook eventNone Rate limit3 requests per 20 minutes (all tiers) SourceOfficial documentation ↗ | ||||||
| POST | mutation createLiveSoundbite | Create a soundbite during a live meeting from a natural-language prompt. | write | live:write | Current | |
Organizer or admin only; consumes AI credits and returns require_ai_credits when none remain. Acts onlive_soundbite Permission (capability) live:writeVersionAvailable since the API’s base version Webhook eventNone Rate limit10 requests per hour (all tiers) SourceOfficial documentation ↗ | ||||||
Fireflies can notify an app when a meeting has finished processing and its transcript is ready. It sends a small JSON payload naming the transcript, so an integration learns a recording is ready without polling.
| Event | What it signals | Triggered by |
|---|---|---|
Transcription complete | Fires when a meeting has finished processing and its transcript is ready. The JSON payload names the meeting (meetingId), the event type, and any client_reference_id set on the upload. | mutation uploadAudio |
Fireflies limits how many calls an app can make, and the ceiling depends on the plan of the account whose key is used, with a few methods carrying their own tighter limit.
Fireflies meters calls against the plan of the account whose key is used, not against a per-method cost. A free account is allowed 50 requests per day, a Pro account 500 per day, and a Business or Enterprise account 60 requests per minute. Separate from that account ceiling, a handful of methods carry their own limit that applies on every plan: adding the bot to a live meeting is capped at 3 requests per 20 minutes, creating a live soundbite and sharing a meeting at 10 per hour, and deleting a transcript at 10 per minute. Going over returns a too_many_requests error carrying a retryAfter timestamp to wait for before retrying.
List queries such as transcripts, users, and bites page through results with skip (how many to step past) and limit (how many to return). The maximum limit is 50 per call, so a larger set is read by stepping skip forward in pages of up to 50.
An audio upload must be at least 50KB unless bypass_size_check is set for very short clips. A meeting title is limited to 256 characters, a soundbite summary to 500, and a keyword search to 255. The client_reference_id passed on an upload, echoed back on the webhook, may be up to 128 characters.
The status codes an agent should handle, and what to do about each.
| Status | Code | Meaning | What to do |
|---|---|---|---|
| 400 | invalid_arguments | One or more arguments were invalid, for example a value outside its allowed range. | Read the field constraints in the error metadata and correct the arguments before resending. |
| 400 | args_required | A required argument was missing, for example calling bites without mine, transcript_id, or my_team. | Supply one of the mandatory arguments named in the error metadata. |
| 400 | payload_too_small | An uploaded file is under the 50KB minimum. | Submit a file larger than 50KB, or set bypass_size_check for a very short clip. |
| 400 | unsupported_platform | The meeting URL passed to addToLiveMeeting is not a supported platform. | Use a link from a supported platform, like Zoom, Google Meet, or Microsoft Teams. |
| 402 | require_ai_credits | The account has no AI credits left for an operation that consumes them, like creating a live soundbite. | Upgrade the plan or add AI credits, then retry. |
| 403 | forbidden | The key's owner is not authorized to perform the requested action. | Confirm the owner has permission for the operation, or use a key that does. |
| 403 | paid_required | The operation is restricted to paid plans, for example uploading audio on a free account. | Upgrade to the required tier (Pro or higher) and retry. |
| 403 | require_elevated_privilege | An admin-only action was attempted with a non-admin key, like setting a user's role or deleting another member's meeting. | Use a key belonging to a team admin, or have an admin perform the action. |
| 404 | object_not_found | The requested object does not exist or is not visible to the key's owner. | Verify the id and confirm the key's owner has access to that resource. |
| 429 | too_many_requests | A rate limit was exceeded, either the plan's call ceiling or a method's own limit. | Wait until the retryAfter timestamp in the error, then retry, and slow the request rate. |
| 500 | invariant_violation | An unexpected internal error on the Fireflies side. | Retry, and contact Fireflies support if it persists. |
Fireflies serves a single, continuously updated API and tracks notable changes through a numbered changelog rather than a dated version an integration pins to.
Fireflies serves a single, continuously updated GraphQL API and records notable changes in a numbered changelog rather than a dated version an integration pins to.
deleteTranscript was widened so a user can delete their own meetings.
Added live-transcript signals to the Transcript schema.
Introduced sharing and access-revocation for meetings.
Added channels for organizing meetings.
Launched the AskFred AI meeting assistant with its own queries and mutations.
Added a way to read meetings in progress.
Applied a tighter limit to transcript deletion.
Added Realtime API support for live meeting events.
Added the ability to add the bot to a meeting in progress.
Added soundbites (bites) to the API.
There is no version to pin; follow the changelog for new fields and behavior changes.
Fireflies API changelog ↗Bollard AI sits between a team's AI agents and Fireflies. Grant each agent exactly the access it needs, read or write, area by area, and every call is checked and logged.