# Fireflies > ## Documentation Index --- # Source: https://docs.fireflies.ai/schema/active-meeting.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # ActiveMeeting > Schema for ActiveMeeting Unique identifier for the active meeting Title of the active meeting Email address of the meeting organizer The URL link to join the meeting (e.g., Zoom, Google Meet, Microsoft Teams link) ISO 8601 formatted timestamp indicating when the meeting started (e.g., `2024-01-15T10:00:00.000Z`) ISO 8601 formatted timestamp indicating when the meeting is scheduled to end (e.g., `2024-01-15T11:00:00.000Z`) Privacy setting for the meeting. Possible values: * `link`: Anyone with the link can access * `owner`: Only the owner can access * `participants`: Only meeting participants can access * `teammates_and_participants`: Team members and participants can access * `participating_teammates`: Only teammates who participated can access * `teammates`: All team members can access Current state of the meeting. Possible values: * `active`: Meeting is currently in progress * `paused`: Meeting has been paused ## Additional Resources Query active meetings in progress Schema for completed meeting transcripts --- # Source: https://docs.fireflies.ai/schema/input/active-meetings-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # GetActiveMeetingsInput > Schema for GetActiveMeetingsInput Filter active meetings by a specific user's email address. **Permission requirements:** * **Regular users**: Can only query their own active meetings (must pass their own email or omit this field) * **Admins**: Can query active meetings for any user in their team If this field is omitted, the query returns active meetings for the authenticated user. The email must be valid and belong to a user in the same team as the requester. Filter active meetings by their state. Accepts an array of [MeetingState](/schema/enum/meeting-state) values. **Possible values:** * `active`: Meetings that are currently in progress * `paused`: Meetings that have been paused If this field is omitted, the query returns meetings in both `active` and `paused` states by default. --- # Source: https://docs.fireflies.ai/graphql-api/query/active-meetings.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Active Meetings > Query active meetings in progress ## Overview The active\_meetings query is designed to fetch a list of meetings that are currently active (in progress). This endpoint allows you to monitor ongoing meetings for users in your team. ## Arguments Filter active meetings by a specific user's email address. **Permission requirements:** * **Regular users**: Can only query their own active meetings (must pass their own email or omit this field) * **Admins**: Can query active meetings for any user in their team If this field is omitted, the query returns active meetings for the authenticated user. The email must be valid and belong to a user in the same team as the requester. Filter active meetings by their state. Accepts an array of [MeetingState](/schema/enum/meeting-state) values. **Possible values:** * `active`: Meetings that are currently in progress * `paused`: Meetings that have been paused If this field is omitted, the query returns meetings in both `active` and `paused` states by default. ## Schema Fields available to the [ActiveMeeting](/schema/active-meeting) query ## Usage Example ```graphql theme={null} query ActiveMeetings($email: String, $states: [MeetingState!]) { active_meetings(input: { email: $email, states: $states }) { id title organizer_email meeting_link start_time end_time privacy state } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query ActiveMeetings { active_meetings { id title organizer_email meeting_link start_time } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query ActiveMeetings { active_meetings { id title organizer_email meeting_link start_time } }' }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query ActiveMeetings { active_meetings { id title organizer_email meeting_link start_time } }"}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); String json = "{\"query\":\"query ActiveMeetings { active_meetings { id title organizer_email meeting_link start_time } } \"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "active_meetings": [ { "id": "meeting-id-1", "title": "Team Standup", "organizer_email": "user@example.com", "meeting_link": "https://zoom.us/j/123456789", "start_time": "2024-01-15T10:00:00.000Z", "state": "active" }, { "id": "meeting-id-2", "title": "Client Review", "organizer_email": "user@example.com", "meeting_link": "https://meet.google.com/abc-defg-hij", "start_time": "2024-01-15T14:30:00.000Z", "state": "paused" } ] } } ``` ## Error Codes List of possible error codes that may be returned by the `active_meetings` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user email you are trying to query does not exist or is not in the same team as the requesting user.

You do not have permission to query active meetings for other users. Regular users can only query their own active meetings. Admin privileges are required to query other users' active meetings.

## Additional Resources Query completed meetings and transcripts Join an active meeting with Fireflies.ai bot --- # Source: https://docs.fireflies.ai/graphql-api/mutation/add-to-live.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Add to Live > Use the API to add the Fireflies.ai bot to an ongoing meeting ## Overview The `addToLiveMeeting` mutation allows you to add the Fireflies.ai bot to an ongoing meeting. It is rate limited to 3 requests per 20 minutes. ## Arguments A valid http URL for the meeting link, i.e. gooogle meet, zoom, etc Title or name of the meeting, this will be used to identify the transcribed file. If title is not provided, a default title will be set automatically Maximum length is 256 characters. Password for the meeting, if applicable. Maximum length is 32 characters. Meeting duration in minutes. Defaults to 60 minutes if param is not provided Minimum is 15 and maximum is 120. Language of the meeting. Defaults to English if not provided. For a complete list of language codes, please view [Language Codes](/miscellaneous/language-codes) Maximum length is 5 characters. Array of [Attendees](/schema/input/attendee) for expected meeting participants. ## Usage Example To upload an audio file, provide the necessary input parameters to the mutation. Here's an example of how this mutation could be used: ```graphql theme={null} mutation AddToLiveMeeting($meetingLink: String!) { addToLiveMeeting(meeting_link: $meetingLink) { success } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation AddToLiveMeeting($meetingLink: String!) { addToLiveMeeting(meeting_link: $meetingLink) { success } }", "variables": { "meetingLink": "https://meet.google.com/code-here" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: ` mutation AddToLiveMeeting($meetingLink: String!) { addToLiveMeeting(meeting_link: $meetingLink) { success } } `, variables: { meetingLink: 'https://meet.google.com/code-here' } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' mutation AddToLiveMeeting($meetingLink: String!) { addToLiveMeeting(meeting_link: $meetingLink) { success } } ''', 'variables': {'meetingLink': 'https://meet.google.com/code-here'} } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```java java theme={null} import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"mutation AddToLiveMeeting($meetingLink: String!) { addToLiveMeeting(meeting_link: $meetingLink) { success } }\", \"variables\": {\"meetingLink\": \"https://meet.google.com/code-here\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "addToLiveMeeting": { "success": true, } } } ``` ## FAQ

The `addToLive` mutation has a limit of 3 requests per 20 minutes.

You may view API Rate limits [here](/fundamentals/limits).
## Error Codes List of possible error codes that may be returned by the `addToLiveMeeting` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

You have exceeded the rate limit for the `addToLiveMeeting` mutation. It is limited to 3 requests per 20 minutes. Please try again later.

The language code you provided is invalid. Please refer to the [Language Codes](/miscellaneous/language-codes) page for a list of valid language codes.

The user account has been cancelled. Please contact support if you encounter this error.

The meeting platform URL provided is not supported. Please use a supported meeting platform such as Zoom, Google Meet, Microsoft Teams, etc.

## Additional Resources Use the API to upload audio to Fireflies.ai Create notifications using webhooks --- # Source: https://docs.fireflies.ai/examples/advanced.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Advanced > Library of advanced usage examples ## Overview Explore advanced usage examples that build on top of the Fireflies.ai API. This page is regularly updated ### [Find questions from external participants](https://replit.com/@firefliesai/Firefliesai-Find-questions-from-external-participants?v=1) This replit allows you to query questions asked by participants who do not belong to your organization. It can be useful in deriving insights and analysis for client calls, interviews, etc. ### [Fetch meetings from multiple users](https://replit.com/@firefliesai/Firefliesai-Fetch-meetings-for-multiple-users?v=1) This replit allows you to fetch meetings from multiple users by providing it a list of API keys. Please read our privacy policy and terms of usage for more details ### [Verify webhook requests](https://replit.com/@firefliesai/Firefliesai-Verifying-webhook-requests?v=1) This replit allows you to verify webhook requests by checking the signature and the payload. ## Fireflies.ai Replit Explore the complete list of usage examples at [replit.com/@firefliesai](https://replit.com/@firefliesai) ## Additional Resources Basic usage examples Create notifications using webhooks --- # Source: https://docs.fireflies.ai/schema/aifilter.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AIFilter > Schema for AIFilter Description Description Description Description Description Description Description ## Additional Resources Schema for Sentence Schema for Analytics --- # Source: https://docs.fireflies.ai/schema/analytics.md # Source: https://docs.fireflies.ai/graphql-api/query/analytics.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Analytics > Querying conversation and meeting analytics for teams and users ## Overview The analytics query fetches detailed conversation and meeting metrics for teams and users across a specified date range. ## Arguments The `start_time` parameter filters results starting from a specific datetime (ISO 8601 format). The `end_time` parameter filters results up to a specific datetime (ISO 8601 format). ## Schema Fields available to the [Analytics](/schema/analytics) query. ## Usage Example ```graphql theme={null} query Analytics($startTime: String, $endTime: String) { analytics(start_time: $startTime, end_time: $endTime) { team { conversation { average_filler_words average_filler_words_diff_pct average_monologues_count average_monologues_count_diff_pct average_questions average_questions_diff_pct average_sentiments { negative_pct neutral_pct positive_pct } average_silence_duration average_silence_duration_diff_pct average_talk_listen_ratio average_words_per_minute longest_monologue_duration_sec longest_monologue_duration_diff_pct total_filler_words total_filler_words_diff_pct total_meeting_notes_count total_meetings_count total_monologues_count total_monologues_diff_pct teammates_count total_questions total_questions_diff_pct total_silence_duration total_silence_duration_diff_pct } meeting { count count_diff_pct duration duration_diff_pct average_count average_count_diff_pct average_duration average_duration_diff_pct } } users { user_id user_name user_email conversation { talk_listen_pct talk_listen_ratio total_silence_duration total_silence_duration_compare_to total_silence_pct total_silence_ratio total_speak_duration total_speak_duration_with_user total_word_count user_filler_words user_filler_words_compare_to user_filler_words_diff_pct user_longest_monologue_sec user_longest_monologue_compare_to user_longest_monologue_diff_pct user_monologues_count user_monologues_count_compare_to user_monologues_count_diff_pct user_questions user_questions_compare_to user_questions_diff_pct user_speak_duration user_word_count user_words_per_minute user_words_per_minute_compare_to user_words_per_minute_diff_pct } meeting { count count_diff count_diff_compared_to count_diff_pct duration duration_diff duration_diff_compared_to duration_diff_pct } } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query Analytics($startTime: String, $endTime: String) { analytics(start_time: $startTime, end_time: $endTime) { team { conversation { average_filler_words } } } }", "variables": { "startTime": "2024-01-01T00:00:00Z", "endTime": "2024-01-31T23:59:59Z" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query Analytics($startTime: String, $endTime: String) { analytics(start_time: $startTime, end_time: $endTime) { team { conversation { average_filler_words } } } }', variables: { startTime: '2024-01-01T00:00:00Z', endTime: '2024-01-31T23:59:59Z' } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query Analytics($startTime: String, $endTime: String) { analytics(start_time: $startTime, end_time: $endTime) { team { conversation { average_filler_words } } } }", "variables": {"startTime": "2024-01-01T00:00:00Z", "endTime": "2024-01-31T23:59:59Z"}}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); String json = "{\"query\":\"query Analytics($startTime: String, $endTime: String) { analytics(start_time: $startTime, end_time: $endTime) { team { conversation { average_filler_words } } } }\", \"variables\":{\"startTime\":\"2024-01-01T00:00:00Z\", \"endTime\":\"2024-01-31T23:59:59Z\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "analytics": { "team": { "conversation": { "average_filler_words": 15 } } } } } ``` ## Error Codes List of possible error codes that may be returned by the `analytics` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

You need to be on a Business or higher plan to query analytics.

The user does not have admin privileges to view analytics for team.

## Additional Resources Querying list of transcripts Querying list of users --- # Source: https://docs.fireflies.ai/schema/app-output.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AppOutput > Schema for AppOutput The ID of the meeting transcript. The ID of the user who owns the AI App The ID of the AI App The timestamp in milliseconds from epoch when the output was generated The title of the AI App The prompt given to the AI App The response generated by the AI App ## Additional Resources Schema for Apps Schema for Transcript --- # Source: https://docs.fireflies.ai/schema/apps.md # Source: https://docs.fireflies.ai/graphql-api/query/apps.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AI Apps > Querying list of AI App outputs ## Overview The apps query fetches the results of the AI App for all the meetings it ran successfully. ## Arguments The `app_id` parameter retrieves all outputs against a specific AI App. The `transcript_id` parameter retrieves all outputs against a specific meeting/transcript. Number of records to skip over. Helps paginate results when used in combination with the `limit` param. Maximum number of `apps` outputs to fetch in a single query. The default query fetches 10 records, which is the maximum for a single request. ## Schema Fields available to the [AI Apps](/schema/apps) query ## Usage Example ```graphql theme={null} query GetAIAppsOutputs($appId: String, $transcriptId: String, $skip: Float, $limit: Float) { apps(app_id: $appId, transcript_id: $transcriptId, skip: $skip, limit: $limit) { outputs { transcript_id user_id app_id created_at title prompt response } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query GetAIAppsOutputs($transcriptId: String) { apps(transcript_id: $transcriptId) { outputs { transcript_id user_id app_id created_at title prompt response } } }", "variables": { "transcriptId": "your_transcript_id" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query GetAIAppsOutputs($transcriptId: String) { apps(transcript_id: $transcriptId) { outputs { transcript_id user_id app_id created_at title prompt response } } }', variables: { transcriptId: 'your_transcript_id' } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query GetAIAppsOutputs($transcriptId: String) { apps(transcript_id: $transcriptId) { outputs { transcript_id user_id app_id created_at title prompt response } } }", "variables": {"transcriptId": "transcript_id"}}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); String json = "{\"query\":\"query GetAIAppsOutputs($transcriptId: String) { apps(transcript_id: $transcriptId) { outputs { transcript_id user_id app_id created_at title prompt response } } } \", \"variables\":{\"transcriptId\":\"transcript_id\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "apps": [ { "transcript_id": "transcript-id", "user_id": "user-id", "app_id": "app-id", "title": "Weekly sync" } ] } } ``` ## Additional Resources Querying transcript details Querying list of transcripts --- # Source: https://docs.fireflies.ai/getting-started/ask-docs.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Chat with Fireflies AI Assistant > Navigate Fireflies.ai Documentation using the AI Assistant ## Overview Welcome to the Fireflies.ai Documentation, your essential guide to unlocking the full potential of our API. We understand that diving into a new API can be daunting, and finding the specific information you need shouldn't add to that challenge. That's why we've designed our documentation to be both comprehensive and user-friendly, ensuring you get the answers you need without the hassle. ## Explore with Fireflies AI Assistant With our AI assistant, navigating the documentation becomes as intuitive as having a conversation. Whether you're looking for detailed API endpoints, integration guides, or troubleshooting tips, our integrated AI assistant is here to assist you every step of the way. ### How to Use Fireflies AI Assistant Getting started is simple: 1. **Access the Search Bar:** Click on the search bar at the top of the page, or use the shortcut `CMD + K` (for Mac users) or `Ctrl + K` (for Windows and Linux users) to jump straight to it. 2. **Ask Your Question:** Type in your question just as you would when talking to ChatGPT. Whether it's a broad query about API capabilities or a specific request for code examples, the AI Assistant is ready to provide you with precise answers. Foundational guide to the core aspects of the Fireflies API Join the Developer Program to build integrations with Fireflies.ai --- # Source: https://docs.fireflies.ai/schema/askfred-message.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AskFredMessage > Schema definition for individual messages in AskFred conversation threads ## Overview The `AskFredMessage` type represents a single question-answer exchange within an AskFred conversation thread. Each message contains the user's query, the AI-generated response, and optional follow-up suggestions. ## Fields Unique identifier for the message ID of the parent thread this message belongs to The question or query submitted by the user The AI-generated response to the query, formatted according to the specified format\_mode Array of suggested follow-up questions based on the context of the conversation Current status of the message processing. See [AskFredMessageStatus](#askfredmessagestatus) below. ISO 8601 timestamp when the message was created ISO 8601 timestamp when the message was last updated ## AskFredMessageStatus An enum representing the processing status of a message: The query is currently being processed The query has been successfully processed and answered The query processing failed ## Example ```json theme={null} { "id": "msg_001", "thread_id": "thread_abc123", "query": "What were the main action items from the meeting?", "answer": "Based on the meeting transcript, here are the main action items:\n\n1. **Marketing Team** - Prepare Q4 campaign strategy by March 25th\n2. **Product Team** - Finalize feature roadmap by March 20th\n3. **Engineering** - Complete API v2 architecture review by March 18th", "suggested_queries": [ "Who is responsible for the Q4 campaign strategy?", "What features are planned for the roadmap?", "What are the API v2 requirements?" ], "status": "completed", "created_at": "2024-03-15T10:30:00Z", "updated_at": "2024-03-15T10:30:15Z" } ``` ## Format Modes The `answer` field can be formatted in different ways based on the `format_mode` parameter used when creating or continuing a thread: ### Markdown Format Rich text with headers, lists, bold/italic text, and other markdown features for enhanced readability. ### Plaintext Format Concise text without any formatting, suitable for systems that don't support markdown. ## Related Types Parent thread containing messages Response wrapper for newly created messages --- # Source: https://docs.fireflies.ai/schema/askfred-response.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AskFredResponse > Response wrapper for AskFred mutations ## Overview The `AskFredResponse` type is a wrapper object returned by AskFred mutations when creating or continuing conversation threads. It contains the newly generated message with the AI's response to your query. ## Fields The generated message containing the query, answer, and metadata. See [AskFredMessage](/schema/askfred-message) for detailed field descriptions. ## Example ```json theme={null} { "message": { "id": "msg_001", "thread_id": "thread_abc123", "query": "What were the key decisions made in today's meeting?", "answer": "Based on today's meeting, here are the key decisions made:\n\n1. **Product Launch Date**: Confirmed for April 15th, 2024\n2. **Budget Allocation**: Approved $250K for Q2 marketing initiatives\n3. **Team Structure**: Decided to hire 3 additional engineers\n4. **Partnership Strategy**: Approved collaboration with TechCorp", "suggested_queries": [ "What are the specific marketing initiatives planned?", "What roles are we hiring for engineering?", "What are the terms of the TechCorp partnership?" ], "status": "completed", "created_at": "2024-03-15T14:30:00Z", "updated_at": "2024-03-15T14:30:05Z" } } ``` ## Related Types Detailed message structure Thread containing multiple messages --- # Source: https://docs.fireflies.ai/schema/askfred-thread-summary.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AskFredThreadSummary > Lightweight schema for AskFred thread listings ## Overview The `AskFredThreadSummary` type provides a lightweight representation of an AskFred conversation thread, ideal for displaying thread lists without the overhead of loading all messages. This type is returned when querying multiple threads. ## Fields Unique identifier for the thread Title of the thread, typically derived from the first question asked ID of the specific meeting/transcript this thread is associated with (if applicable) ID of the user who created the thread ISO 8601 timestamp when the thread was created ## Example ```json theme={null} { "id": "thread_abc123", "title": "Q4 Planning Meeting Action Items", "transcript_id": "transcript_xyz789", "user_id": "user_123", "created_at": "2024-03-15T10:30:00Z" } ``` ## Example Query ```graphql theme={null} query GetThreadsSummary { askfred_threads { id title transcript_id created_at } } ``` ## Related Types Full thread type with messages Individual messages within threads --- # Source: https://docs.fireflies.ai/schema/askfred-thread.md # Source: https://docs.fireflies.ai/graphql-api/query/askfred-thread.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AskFred Thread > Get a specific AskFred conversation thread with all its messages ## Overview The `askfred_thread` query retrieves a specific AskFred conversation thread by its ID, including the complete message history. This query provides full details about a thread including all questions asked, answers received, and suggested follow-up queries. ## Arguments The unique identifier of the AskFred thread to retrieve ## Schema Fields available to the [AskFredThread](/schema/askfred-thread) query: * `id`: Unique identifier for the thread * `title`: Thread title * `transcript_id`: Associated transcript/meeting ID (if applicable) * `user_id`: ID of the user who created the thread * `created_at`: Timestamp when the thread was created * `messages`: Array of [AskFredMessage](/schema/askfred-message) objects containing: * `id`: Message identifier * `thread_id`: Parent thread ID * `query`: The question asked * `answer`: The AI-generated response * `suggested_queries`: Array of suggested follow-up questions * `status`: Message processing status (processing, completed, failed) * `error`: Error message if the query failed * `created_at`: When the message was created * `updated_at`: When the message was last updated ## Usage Example ```graphql theme={null} query GetAskFredThread($threadId: String!) { askfred_thread(id: $threadId) { id title transcript_id user_id created_at messages { id thread_id query answer suggested_queries status error created_at updated_at } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "query GetThread($id: String!) { askfred_thread(id: $id) { id title transcript_id messages { query answer suggested_queries status } } }", "variables": { "id": "thread_abc123" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const threadId = 'thread_abc123'; const data = { query: ` query GetAskFredThread($id: String!) { askfred_thread(id: $id) { id title transcript_id user_id created_at messages { id query answer suggested_queries status created_at } } } `, variables: { id: threadId } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.error(e); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } thread_id = 'thread_abc123' query = ''' query GetAskFredThread($id: String!) { askfred_thread(id: $id) { id title transcript_id user_id created_at messages { id query answer suggested_queries status created_at } } } ''' variables = { 'id': thread_id } data = { 'query': query, 'variables': variables } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```json Response theme={null} { "data": { "askfred_thread": { "id": "thread_abc123", "title": "What were the action items from the Q4 planning meeting?", "transcript_id": "transcript_xyz789", "user_id": "user_123", "created_at": "2024-03-15T10:30:00Z", "messages": [ { "id": "msg_001", "query": "What were the action items from the Q4 planning meeting?", "answer": "Based on the Q4 planning meeting, here are the key action items:\n\n1. **Product Development** - Sarah to finalize the feature roadmap by March 20th\n2. **Marketing Campaign** - John to prepare Q4 marketing strategy presentation by March 25th\n3. **Budget Review** - Finance team to provide updated budget allocations by March 18th\n4. **Customer Success** - Emma to compile customer feedback report by end of week", "suggested_queries": [ "Who is responsible for the product roadmap?", "What is the timeline for the marketing strategy?", "What were the budget concerns discussed?" ], "status": "completed", "created_at": "2024-03-15T10:30:00Z" }, { "id": "msg_002", "query": "What were the budget concerns discussed?", "answer": "The main budget concerns discussed in the meeting were:\n\n1. **Resource Allocation** - Need to balance investment between product development and marketing\n2. **Headcount** - Discussion about hiring 3 new engineers vs 2 engineers and 1 marketing specialist\n3. **Tool Costs** - Review of current software subscriptions to identify cost-saving opportunities\n4. **Travel Budget** - Proposed 20% reduction in Q4 travel budget due to increased virtual meeting effectiveness", "suggested_queries": [ "What was the final decision on headcount?", "Which software subscriptions were identified for review?", "How much is the current travel budget?" ], "status": "completed", "created_at": "2024-03-15T10:32:00Z" } ] } } } ``` ## Related Get a summary of all your threads Add a follow-up question to this thread --- # Source: https://docs.fireflies.ai/graphql-api/query/askfred-threads.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AskFred Threads > Get a summary of all AskFred conversation threads for the current user ## Overview The `askfred_threads` query retrieves a summary of all AskFred conversation threads belonging to the authenticated user. This query provides a lightweight overview of threads without including the full message history, making it ideal for listing and browsing conversations. ## Arguments Filter threads to only those associated with a specific transcript ID ## Schema Fields available to the [AskFredThreadSummary](/schema/askfred-thread-summary) query: * `id`: Unique identifier for the thread * `title`: Thread title (typically derived from the first question) * `transcript_id`: Associated transcript/meeting ID (if applicable) * `user_id`: ID of the user who created the thread * `created_at`: Timestamp when the thread was created ## Usage Example ```graphql theme={null} query GetAskFredThreads { askfred_threads { id title transcript_id user_id created_at } } ``` ### With Filter ```graphql theme={null} query GetFilteredThreads($transcriptId: String) { askfred_threads(transcript_id: $transcriptId) { id title transcript_id user_id created_at } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "query { askfred_threads { id title transcript_id user_id created_at } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: ` query GetAskFredThreads { askfred_threads { id title transcript_id user_id created_at } } ` }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.error(e); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } query = ''' query GetAskFredThreads { askfred_threads { id title transcript_id user_id created_at } } ''' data = { 'query': query } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```json Response theme={null} { "data": { "askfred_threads": [ { "id": "thread_abc123", "title": "What were the action items from the Q4 planning meeting?", "transcript_id": "transcript_xyz789", "user_id": "user_123", "created_at": "2024-03-15T10:30:00Z" }, { "id": "thread_def456", "title": "Summary of customer feedback discussions", "transcript_id": null, "user_id": "user_123", "created_at": "2024-03-14T14:20:00Z" } ] } } ``` ## Related Retrieve complete thread with message history Start a new AskFred conversation --- # Source: https://docs.fireflies.ai/schema/input/attendee.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Attendee > Schema for Attendee Display name of the attendee as it appears in meeting platforms like Google Chat, Zoom, etc. Email address of the attendee. Maximum length is 20 characters. Phone number of the attendee. --- # Source: https://docs.fireflies.ai/schema/input/audio-upload-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AudioUploadInput > Schema for AudioUploadInput URL from which the audio file will be fetched. This should be a direct link to the audio resource. Title assigned to the uploaded file. If not provided, the file's original name will be used as its title. Maximum length is 256 characters. Array of [Attendee](/schema/attendee) objects, as defined in the [Attendee](/schema/attendee) schema. Each element in this array represents an attendee. Max length of 100 attendees. Custom language code for the meeting Custom identifier set by the user during upload. You may use this to identify your uploads in your events. Maximum length is 128 characters. Boolean value that specifies whether the content video needs to be saved. Authentication configuration for downloading the media file. Use this when your audio/video file requires authentication. Supports bearer token and basic authentication methods. If not provided, defaults to no authentication (publicly accessible URL). See [DownloadAuthInput](/schema/input/download-auth-input) for the complete schema definition. --- # Source: https://docs.fireflies.ai/schema/audio-upload-status.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # AudioUploadStatus > Schema for AudioUploadStatus Indicates whether the AudioUpload request was a success or not. Title of the uploaded file. Message from AudioUpload request. ## Additional Resources Schema for Transcript Use the API to upload audio to Fireflies.ai --- # Source: https://docs.fireflies.ai/fundamentals/authorization.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Authorization > Authenticating your requests with the Fireflies API ## Overview The Fireflies API implements token-based authentication, which ensures that only authorized users can access certain data and functionalities. ### Token-Based Authentication We use a standard bearer token authentication mechanism. This means that to make authorized requests to the API, you must include an `Authorization` header with a valid token. ### Acquiring a Token Follow these steps to obtain your API key for the Fireflies API: 1. Log in to your account at [fireflies.ai](https://app.fireflies.ai) 2. Navigate to the [Integrations](https://app.fireflies.ai/integrations) section 3. Click on [Fireflies API](https://app.fireflies.ai/integrations/custom/fireflies) 4. Copy and store your API key securely ### Making an Authenticated Request To make an authenticated request, add the `Authorization` header followed by the word `Bearer` and your API key. ### Example of an Authenticated Request Header ```plaintext theme={null} Authorization: Bearer your_api_key ``` ### Example request with Authorization header ```curl curl theme={null} curl \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "{ user { name integrations } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: '{ user { name integrations } }' }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': '{ user { name integrations } }' } response = requests.post(url, json=data, headers=headers) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String url = "https://api.fireflies.ai/graphql"; String json = "{\"query\":\"{ user { name integrations } }\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(HttpRequest.BodyPublishers.ofString(json, StandardCharsets.UTF_8)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` Ensure to replace `your_api_key` with your actual API key. ## Best Practices for Token Security * **Keep it Secret:** Treat your API key like a password. Never expose it in client-side code or share it publicly. * **Store Securely:** Store the API key securely in your application, ideally in environment variables or secure storage solutions. Improper handling of API keys can lead to security vulnerabilities. Always ensure API keys are used and stored securely. ## Troubleshooting * **Invalid key:** If you receive an error regarding an invalid API key, verify that the API key hasn't expired and that it's correctly included in the request header. * **Missing key:** Ensure that the `Authorization` header is present in your requests requiring authentication. If you encounter issues with authentication or have questions about API key management, please contact our support team. ## FAQ

This error can signal an issue in your Authorization header. Please ensure that you are including the `Authorization` header with the word `Bearer` and your API key.

## Additional Resources Make your first request in under 5 minutes Error standards for the Fireflies API --- # Source: https://docs.fireflies.ai/schema/input/basic-auth-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # BasicAuthInput > Schema for BasicAuthInput - HTTP Basic authentication configuration The `BasicAuthInput` type configures HTTP Basic authentication for downloading media files. When provided, Fireflies will include an `Authorization: Basic ` header when downloading your media file. ## Fields The username for basic authentication. This field is optional - if not provided, only the password will be used. When provided, the value will be trimmed of leading/trailing whitespace. The password for basic authentication. This field is required when using basic auth. The password must be a non-empty string and will be trimmed of leading/trailing whitespace. ## Usage HTTP Basic authentication is commonly used with: * Web servers with `.htaccess` protection * Internal company file servers * Legacy systems requiring username/password authentication * Simple authentication schemes for private media hosting ## Examples ### With Username and Password ```graphql theme={null} mutation { uploadAudio(input: { url: "https://files.company.com/recordings/meeting.mp3" title: "Sales Call" download_auth: { type: basic_auth basic: { username: "api-user" password: "secure-password-123" } } }) { success message } } ``` ### Password Only When the server only requires a password (username is optional): ```graphql theme={null} mutation { uploadAudio(input: { url: "https://protected.example.com/audio.mp3" title: "Meeting Recording" download_auth: { type: basic_auth basic: { password: "access-key-here" } } }) { success message } } ``` ## How It Works When you provide basic authentication credentials: 1. Fireflies combines the username and password as `username:password` 2. The combined string is base64-encoded 3. The encoded value is sent as `Authorization: Basic ` 4. The media file is downloaded using this authentication header For example, if you provide: * Username: `user` * Password: `pass` Fireflies will send: `Authorization: Basic dXNlcjpwYXNz` ## Security Considerations * **HTTPS Required**: The media URL must use HTTPS to ensure credentials are transmitted securely * **Credential Storage**: Credentials are used only for downloading the file and are not stored permanently * **Access Control**: Use credentials with minimal required permissions (read-only access to the specific file) * **Credential Rotation**: For production use, consider rotating credentials regularly ## Related Types * [DownloadAuthInput](/schema/input/download-auth-input) - Parent authentication configuration * [BearerTokenAuthInput](/schema/input/bearer-token-auth-input) - Alternative authentication method * [DownloadAuthType](/schema/enum/download-auth-type) - Authentication type enum --- # Source: https://docs.fireflies.ai/examples/basic.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Basic > Library of basic usage examples ## Overview Explore basic usage examples for the Fireflies.ai API to get you started quickly. These basic usage examples simplify interact with the API through Javascript code. ## Basic examples Basic examples that allow you to perform basic operations with the Fireflies.ai API, like fetching transcripts or setting user role. 1. [Create soundbite from meeting](https://replit.com/@firefliesai/Firefliesai-Create-soundbite-from-a-meeting?v=1) 2. [Set user role](https://replit.com/@firefliesai/Firefliesai-Set-user-role?v=1) 3. [Upload audio](https://replit.com/@firefliesai/Firefliesai-Upload-audio?v=1) 4. [Download meeting video](https://replit.com/@firefliesai/Firefliesai-Download-video-from-meeting?v=1) 5. [Get audio/video url](https://replit.com/@firefliesai/Firefliesai-Get-audiovideo-url?v=1) 6. [Get transcript summary](https://replit.com/@firefliesai/Firefliesai-Get-transcript-summary-from-a-meeting?v=1) ## Fireflies.ai Replit Explore the complete list of usage examples at [replit.com/@firefliesai](https://replit.com/@firefliesai) ## Additional Resources Advanced usage examples Make your first request in under 5 minutes --- # Source: https://docs.fireflies.ai/schema/input/bearer-token-auth-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # BearerTokenAuthInput > Schema for BearerTokenAuthInput - bearer token authentication configuration The `BearerTokenAuthInput` type configures bearer token authentication for downloading media files. When provided, Fireflies will include an `Authorization: Bearer ` header when downloading your media file. ## Fields The bearer token to use for authentication. This token will be sent as `Authorization: Bearer ` when downloading the media file. The token must be a non-empty string and will be trimmed of leading/trailing whitespace. ## Usage Bearer token authentication is commonly used with: * Cloud storage services (AWS S3, Google Cloud Storage, Azure Blob Storage) * API-protected media servers * OAuth 2.0 protected resources * JWT-authenticated endpoints ## Example ```graphql theme={null} mutation { uploadAudio(input: { url: "https://storage.example.com/recordings/meeting.mp3" title: "Team Meeting" download_auth: { type: bearer_token bearer: { token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.dozjgNryP4J3jVmNHl0w5N_XgL0n3I9PlFUP0THsR8U" } } }) { success message } } ``` ## Security Considerations * **Token Expiry**: Ensure your bearer token has sufficient lifetime for Fireflies to download the file (typically a few minutes to hours) * **Token Scope**: Use tokens with minimal required permissions (read-only access to the specific file) * **Token Rotation**: For production use, consider using short-lived tokens and rotating them regularly * **HTTPS Only**: The media URL must use HTTPS to ensure the token is transmitted securely ## Related Types * [DownloadAuthInput](/schema/input/download-auth-input) - Parent authentication configuration * [BasicAuthInput](/schema/input/basic-auth-input) - Alternative authentication method * [DownloadAuthType](/schema/enum/download-auth-type) - Authentication type enum --- # Source: https://docs.fireflies.ai/schema/bite.md # Source: https://docs.fireflies.ai/graphql-api/query/bite.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Bite > Querying bite details ## Overview The bite query is designed to fetch details associated with a specific bite ID. ## Arguments Unique identifier of the bite ## Schema Fields available to the [Bite](/schema/bite) query ## Usage Example ```graphql theme={null} query Bite($biteId: ID!) { bite(id: $biteId) { transcript_id name id thumbnail preview status summary user_id start_time end_time summary_status media_type created_at created_from { description duration id name type } captions { end_time index speaker_id speaker_name start_time text } sources { src type } privacies user { first_name last_name picture name id } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query Bite($biteId: ID!) { bite(id: $biteId) { user_id name status summary } }", "variables": { "biteId": "your_bite_id" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query Bite($biteId: ID!) { bite(id: $biteId) { user_id name status summary } }', variables: { biteId: 'your_bite_id' } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query Bite($biteId: ID!) { bite(id: $biteId) { user_id name status summary } }", "variables": {"biteId": "your_bite_id"}}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"query Bite($biteId: ID!) { bite(id: $biteId) { user_id name status summary } }\", \"variables\": {\"biteId\": \"your_bite_id\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "bite": { "user_id": "user-id", "id": "bite-id", } } } ``` ## Additional Resources Querying list of bites Use the API to create a bite --- # Source: https://docs.fireflies.ai/graphql-api/query/bites.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Bites > Querying list of bites ## Overview The bites query is designed to fetch a list of bites against input arguments. ## Arguments The `mine` parameter, when set to true, fetches results specific to the owner of the API key You can use `transcript_id` to query all bites against a specific transcript. The `my_team` parameter, when set to true, fetches results for the owner of the API key Maximum number of bites to fetch in a single query. Maximum of 50 Number of records to skip over. Helps paginate results when used in combination with the `limit` param. ## Schema Fields available to the [Bites](/schema/bite) query ## Usage Example ```graphql theme={null} query Bites($mine: Boolean) { bites(mine: $mine) { transcript_id name id thumbnail preview status summary user_id start_time end_time summary_status media_type created_at created_from { description duration id name type } captions { end_time index speaker_id speaker_name start_time text } sources { src type } privacies user { first_name last_name picture name id } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query Bites($mine: Boolean) { bites(mine: $mine) { user_id name end_time } }", "variables": { "mine": true } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query Bites($mine: Boolean) { bites(mine: $mine) { user_id name end_time } }', variables: { mine: true } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query Bites($mine: Boolean) { bites(mine: $mine) { user_id name end_time } }", "variables": {"mine": true }}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"query Bites($mine: Boolean) { bites(mine: $mine) { user_id name end_time } }\", \"variables\": {\"mine\": true}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "bites": [ { "user_id": "user-id", "id": "bite-id", }, { "user_id": "user-id", "id": "bite-id-2", } ] } } ``` ## Error Codes List of possible error codes that may be returned by the `bites` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

You must provide at least one of the following arguments: `mine`, `transcript_id`, `my_team` to the bites query

## Additional Resources Querying bite details Use the API to create a bite --- # Source: https://docs.fireflies.ai/additional-info/change-log.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Changelog > Recent updates to the Fireflies API ## Overview This document maintains a chronologically ordered list of notable changes for each version of the Fireflies API. It's designed to make it easier for you to keep track of new features, improvements, and bug fixes. ### 2.20.0 Added `workspace_users` field to [Transcript](/schema/transcript) schema. Returns an array of email addresses of Fireflies users who participated in the meeting and are also members of the requesting user's team/workspace. ### 2.19.0 Added `channels` query to fetch all channels accessible to the user. Returns public channels and private channels where the user is a member. See [Channels](/graphql-api/query/channels). Added `channel` query to fetch a single channel by ID. See [Channel](/graphql-api/query/channel). Added new [Channel](/schema/channel) schema with `id`, `title`, `is_private`, `created_at`, `updated_at`, `created_by`, and `members` fields. Added new [ChannelMember](/schema/channel-member) schema with `user_id`, `email`, and `name` fields for channel member details. ### 2.18.0 Added `state` field to [ActiveMeeting](/schema/active-meeting) schema to indicate whether a meeting is `active` or `paused`. Added `states` filter to [Active Meetings](/graphql-api/query/active-meetings) query to filter meetings by state. Returns both `active` and `paused` meetings by default when no filter is provided. Added new [MeetingState](/schema/enum/meeting-state) enum with values `active` and `paused`. ### 2.17.0 Added `download_auth` field to [Upload Audio](/graphql-api/mutation/upload-audio) mutation to support authenticated downloads. Allows uploading media files that require bearer token or HTTP basic authentication. See [DownloadAuthInput](/schema/input/download-auth-input) for details. Added new schema types for authenticated downloads: [BearerTokenAuthInput](/schema/input/bearer-token-auth-input), [BasicAuthInput](/schema/input/basic-auth-input), and [DownloadAuthType](/schema/enum/download-auth-type) enum. ### 2.16.0 Introduced **AskFred**, an AI-powered meeting assistant that enables natural language querying of meeting transcripts. Create conversation threads, ask follow-up questions, and analyze single or multiple meetings with intelligent, context-aware responses. See [AskFred Overview](/askfred/overview). Added `askfred_threads` query to list all conversation threads with summary information. See [AskFred Threads](/graphql-api/query/askfred-threads). Added `askfred_thread` query to retrieve a specific thread with full message history. See [AskFred Thread](/graphql-api/query/askfred-thread). Added `createAskFredThread` mutation to start new conversations with questions about meetings. See [Create AskFred Thread](/graphql-api/mutation/create-askfred-thread). Added `continueAskFredThread` mutation to add follow-up questions to existing threads. See [Continue AskFred Thread](/graphql-api/mutation/continue-askfred-thread). Added `deleteAskFredThread` mutation to remove conversation threads. See [Delete AskFred Thread](/graphql-api/mutation/delete-askfred-thread). Added new schemas: [AskFredThread](/schema/askfred-thread), [AskFredMessage](/schema/askfred-message), [AskFredThreadSummary](/schema/askfred-thread-summary), and [AskFredResponse](/schema/askfred-response). ### 2.15.0 Added `updateMeetingChannel` mutation to set the channel for one or more meetings. Supports batch updates of 1–5 transcripts to a single channel and requires meeting owner or team admin privileges. See [Update Meeting Channel](/graphql-api/mutation/update-meeting-channel). ### 2.14.0 Added `active_meetings` query to retrieve meetings currently in progress. Allows fetching active meetings for users in your team with role-based access control. See [Active Meetings](/graphql-api/query/active-meetings). ### 2.13.0 Added rate limiting to the `deleteTranscript` mutation. It is limited to 10 requests per minute across all user tiers. When exceeded, the API returns HTTP 429 `too_many_requests`. See [Delete Transcript](/graphql-api/mutation/delete-transcript). ### 2.12.0 Added `updateMeetingPrivacy` mutation to update meeting privacy settings. Allows meeting owners and team admins to change privacy levels between link, owner, participants, teammatesandparticipants, and teammates. See [Update Meeting Privacy](/graphql-api/mutation/update-meeting-privacy). ### 2.11.0 Added `channels` field to [Transcript](/schema/transcript) schema. Returns an array of [Channel](/schema/channel) objects containing channel IDs associated with the meeting. ### 2.10.0 Added new `meeting_attendance` field to [Transcript](/schema/transcript) schema providing participant join and leave times from meeting events data. Added new [MeetingAttendance](/schema/meeting-attendance) schema with `name`, `join_time`, and `leave_time` fields for tracking participant attendance. ### 2.9.0 Added `channel_id` parameter to [Transcripts](/graphql-api/query/transcripts) query to filter meetings by specific channel. Accepts a single channel ID string. ### 2.8.0 Added array fields `organizers` and `participants` to [Transcripts](/graphql-api/query/transcripts) query for filtering by multiple email addresses. Previous single email fields `organizer_email` and `participant_email` are now deprecated. ### 2.7.1 Added validation for [Add to Live](/graphql-api/mutation/add-to-live) to only allow supported meeting platforms as `meeting_link`. Added new error type [UnsupportedPlatform](/miscellaneous/error-codes#unsupported-platform) that is thrown when an unsupported `meeting_link` is provided to `Add to Live`. ### 2.7.0 Added new `user_groups` query to fetch user groups with optional `mine` filter. See [User Groups](/graphql-api/query/user-groups) Enhanced [UserGroup](/schema/user-groups) schema with `members` field Added new [UserGroupMember](/schema/user-group-member) schema for user group member details ### 2.6.3 Made improvements to the performance and stability of the Fireflies API. ### 2.6.2 Updated `transcripts` query to allow text search within meeting transcript (/query/transcripts)\[Transcripts] ### 2.6.1 Updated `uploadAudio` mutation to include `bypass_size_check` boolean, allowing processing of audio files smaller than the standard 50kb minimum size. ### 2.6.0 Added [Realtime API](/realtime-api/overview) support. ### 2.5.1 Added `user_groups` field to [User](/schema/user) query. ### 2.5.0 Added query `analytics` to query team and user analytics for meetings and conversations. See [Analytics](/graphql-api/analytics) Added query `transcript.analytics` to query analytics per meeting. See [Transcript](/graphql-api/transcript) or [Transcripts](/graphql-api/transcripts) ### 2.4.6 Fixed bug in `transcripts.title` query not returning correct results ### 2.4.5 Reduced the minimum file size for `uploadAudio` mutation to 50kb. ### 2.4.4 Field `client_reference_id` in [AudioUpload](/graphql-api/mutation/upload-audio) was limited to 32 characters as part of input validation. It has now been increased to 128 characters. ### 2.4.3 Added length validation for all input fields. ### 2.4.2 Added `updateMeetingTitle` mutation to update meeting titles. For more details, view [Update Meeting Title](/graphql-api/mutation/update-meeting-title) ### 2.4.1 Made improvements to the performance and stability of the Fireflies API. ### 2.4.0 Added `mine` field to [Transcripts](/graphql-api/query/transcripts) query Added breaking changes to [Transcripts](/graphql-api/query/transcripts) query that allows you to only use one of the following fields: `organizer_email`, `participant_email`, `user_id`, `mine` at a time ### 2.3.17 Added `meeting_link` field to [Transcript](/schema/transcript) schema ### 2.3.16 Added `apps` query to fetch AI App Outputs. For more details, view [Apps](/graphql-api/query/apps) ### 2.3.15 Fixed bug in `transcripts` query where it was not returning the correct match. ### 2.3.14 Added support for webhook auth. For more details, view the [Webhooks](/graphql-api/webhooks) page ### 2.3.13 Added new fields to summary to [Summary](/schema/summary) schema ### 2.3.12 Added fields `cal_id` and `calendar_type` to [Transcript](/schema/transcript) schema ### 2.3.11 Fixed bug in `transcript.sentences` query where it was incorrectly returning null Made improvements to the performance and stability of the Fireflies API. ### 2.3.10 Added field `attendees` to [addToLive](/graphql-api/mutation/add-to-live) mutation ### 2.3.9 Added field `meeting_info` for meeting metadata. Updated `uploadAudio` mutation to allow saving video ### 2.3.8 Added field `speakers` in transcript. Updated docs to include error codes and their explanations. View details [here](/miscellaneous/error-codes) ### 2.3.7 Added new fields for `transcript.summary`. View details on the [Summary](/schema/summary) schema page ### 2.3.6 Updated docs for webhooks to include webhook schema Added `client_reference_id` field for audio upload ### 2.3.5 Added argument `custom_language` for `uploadAudio`. ### 2.3.4 Added query argument `fromDate` and `toDate` for `transcripts`. View more details [here](/graphql-api/query/transcripts). Field `date` has been deprecated in favor of these arguments ### 2.3.3 Added mutation for `addToLiveMeeting`. View more details [here](/graphql-api/mutation/add-to-live) ### 2.3.2 Made improvements to the performance and stability of the Fireflies API. ### 2.3.1 Added field `calendar_id`. This field represents calId for google calendar and iCalUID for outlook calendar. For more details, view [Transcript](/schema/transcript) ### 2.3.0 Added queries for [Transcript Summary](/schema/summary). For more details, view [Summary](/schema/summary) schema and [Transcript](/schema/transcript) schema ### 2.2.0 Added queries for [bites](/graphql-api/query/bites) and [bite](/graphql-api/query/bite). For more details, view [Bites](/schema/bite) schema Added mutation for Create Bite that allows you to progmatically create bites. For more details, view [CreateBite](/graphql-api/mutation/create-bite) mutation ### 2.1.1 Fixed bugs in [Transcripts](/graphql-api/query/transcripts) query ### 2.1.0 Added `video_url` field for [Transcript](schema/transcript) schema ### 2.0.7 Made improvements to the performance and stability of the Fireflies API. ### 2.0.6 Made improvements to the performance and stability of the Fireflies API. ### 2.0.5 Fixed bug in in [Transcripts](graphql-api/query/transcripts) query for `fireflies_users` field ### 2.0.4 Fixed bug in in [Transcripts](graphql-api/query/transcripts) query for `audio_url` field ### 2.0.3 Made improvements to the performance and stability of the Fireflies API. ### 2.0.2 Fixed bug in [Transcripts](/graphql-api/query/transcripts) query arguments ### 2.0.1 Fixed schema inconsistency in [AudioUpload](/graphql-api/mutation/upload-audio) mutation. Fixed schema inconsistency in [SetUserRole](/graphql-api/mutation/set-user-role) mutation ### 2.0.0 Field `transcript/host_email` has been deprecated. More details in [Transcript](/schema/transcript) --- # Source: https://docs.fireflies.ai/schema/channel-member.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # ChannelMember > Schema for ChannelMember Unique identifier for the channel member. Email address of the channel member. Display name of the channel member. ## Additional Resources Schema for Channel Query list of channels --- # Source: https://docs.fireflies.ai/schema/channel.md # Source: https://docs.fireflies.ai/graphql-api/query/channel.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Channel > Querying channel details ## Overview The channel query is designed to fetch details of a specific channel by its ID. The user must have access to the channel (either it's a public channel in their team, or they are a member of the private channel). ## Arguments The unique identifier of the channel to fetch. ## Schema Fields available to the [Channel](/schema/channel) query ## Usage Example ```graphql theme={null} query Channel($channelId: ID!) { channel(id: $channelId) { id title is_private created_by created_at updated_at members { user_id email name } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query Channel($channelId: ID!) { channel(id: $channelId) { id title is_private members { user_id email } } }", "variables": { "channelId": "your_channel_id" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query Channel($channelId: ID!) { channel(id: $channelId) { id title is_private members { user_id email } } }', variables: { channelId: 'your_channel_id' } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query Channel($channelId: ID!) { channel(id: $channelId) { id title is_private members { user_id email } } }", "variables": {"channelId": "your_channel_id"}}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"query Channel($channelId: ID!) { channel(id: $channelId) { id title is_private members { user_id email } } }\", \"variables\": {\"channelId\": \"your_channel_id\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "channel": { "id": "channel-id-1", "title": "Engineering", "is_private": false, "members": [ { "user_id": "user-id-1", "email": "john@example.com", "name": "John Doe" }, { "user_id": "user-id-2", "email": "jane@example.com", "name": "Jane Smith" } ] } } } ``` ## Error Codes List of possible error codes that may be returned by the `channel` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

The channel ID you are trying to query does not exist or you do not have access to it.

## Additional Resources Query list of channels Schema for Channel --- # Source: https://docs.fireflies.ai/graphql-api/query/channels.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Channels > Querying list of channels ## Overview The channels query is designed to fetch a list of channels accessible to the authenticated user. This includes public channels in the user's team and private channels where the user is a member. ## Arguments This query does not require any arguments. ## Schema Fields available to the [Channel](/schema/channel) query ## Usage Example ```graphql theme={null} query Channels { channels { id title is_private created_by created_at updated_at members { user_id email name } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query Channels { channels { id title is_private members { user_id email } } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query Channels { channels { id title is_private members { user_id email } } }' }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query Channels { channels { id title is_private members { user_id email } } }"}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); String json = "{\"query\":\"query Channels { channels { id title is_private members { user_id email } } }\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "channels": [ { "id": "channel-id-1", "title": "Engineering", "is_private": false, "members": [ { "user_id": "user-id-1", "email": "john@example.com", "name": "John Doe" }, { "user_id": "user-id-2", "email": "jane@example.com", "name": "Jane Smith" } ] }, { "id": "channel-id-2", "title": "Private Project", "is_private": true, "members": [ { "user_id": "user-id-1", "email": "john@example.com", "name": "John Doe" } ] } ] } } ``` ## Additional Resources Query a single channel by ID Schema for Channel --- # Source: https://docs.fireflies.ai/fundamentals/concepts.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # General concepts > Foundational guide to the core aspects of the Fireflies API ## Overview This section serves as a primer on the essential features of the Fireflies API. It covers the requirements to make authenticated requests to the Fireflies API, key GraphQL concepts and a breakdown of core components like queries, mutations, schema and data types. ### Host The Fireflies API is hosted at [https://api.fireflies.ai](https://api.fireflies.ai) ### Authorization The Fireflies API requires a valid API key for all requests. Please see [Authorization](/fundamentals/authorization) for more information ## GraphQL API Concepts Welcome to our GraphQL API! GraphQL is a powerful query language designed for APIs, offering clients the ability to request exactly what they need and nothing more. ### Queries Queries are used to fetch data in GraphQL. They are akin to the `GET` request in REST. A basic query might look like this: Queries are read-only and won’t modify your data. ```graphql graphql theme={null} query { user(id: "1") { name email } } ``` ### Mutations Mutations allow you to modify data – create, update, or delete. Mutations should be used with caution as they change server-side data. ```graphql graphql theme={null} mutation { setUserRole(user_id: "1", role: "user") { id name } } ``` ## Schema and Types ### Schema Definition The schema defines the API's capabilities, including types, queries, mutations, and more.

Understanding GraphQL Schema

The schema is a contract between client and server, defining how clients can access data.

#### Data Types **Standard Types:** Int, Float, String, Boolean, ID. **Custom Types:** Defining complex data structures. Custom types are user-defined and can include combinations of standard types. #### Best Practices 1. Optimize query performance by requesting for only necessary data. 2. Use variables in queries to enhance readability and flexibility ## Additional Resources For more in-depth information, visit [GraphQL Documentation](https://graphql.org/learn/). Make your first request in under 5 minutes Query generation and API exploration --- # Source: https://docs.fireflies.ai/schema/contact.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Contact > Schema for Contact Email address of the contact. Full name of the contact. URL to the contact's profile picture. May be null if no picture is available. The date of the last meeting with this contact in ISO 8601 format (YYYY-MM-DD). May be null if no meeting date is available. ## Additional Resources Query contacts using the API Query users in your team --- # Source: https://docs.fireflies.ai/graphql-api/query/contacts.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Contacts > Querying list of contacts ## Overview The contacts query is designed to fetch a list of all contacts associated with the authenticated user. Contacts are people who have participated in meetings with the user, and include information such as email, name, profile picture, and the date of their last meeting together. ## Schema Fields available to the [Contact](/schema/contact) query ## Usage Example ```graphql theme={null} query Contacts { contacts { email name picture last_meeting_date } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "{ contacts { email name picture last_meeting_date } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: '{ contacts { email name picture last_meeting_date } }' }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "{ contacts { email name picture last_meeting_date } }"}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"{ contacts { email name picture last_meeting_date } }\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "contacts": [ { "email": "john.doe@example.com", "name": "John Doe", "picture": "https://example.com/photo.jpg", "last_meeting_date": "2024-12-05" }, { "email": "jane.smith@example.com", "name": "Jane Smith", "picture": null, "last_meeting_date": "2024-11-28" } ] } } ``` ## Additional Resources Querying user details Querying list of users --- # Source: https://docs.fireflies.ai/graphql-api/mutation/continue-askfred-thread.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Continue AskFred Thread > Continue an existing AskFred conversation with follow-up questions ## Overview The `continueAskFredThread` mutation allows you to add follow-up questions to an existing AskFred conversation thread. This maintains the context of previous questions and answers, enabling more sophisticated multi-turn conversations about your meeting data. ## Arguments The ID of the existing thread to continue Your follow-up question or query. Maximum 2000 characters. Language code for the response (e.g., 'en' for English, 'es' for Spanish). See [Language Codes](/miscellaneous/language-codes) for full list. Response format: 'markdown' for rich formatting or 'plaintext' for simple text ## Returns Returns an `AskFredResponse` object containing the generated message with the answer to your follow-up query. ## Usage Example ```graphql theme={null} mutation ContinueThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status created_at } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation ContinueThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status } } }", "variables": { "input": { "thread_id": "thread_abc123", "query": "Can you provide more details about the budget allocation?", "response_language": "en", "format_mode": "markdown" } } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const input = { thread_id: "thread_abc123", query: "Can you provide more details about the budget allocation?", response_language: "en", format_mode: "markdown" }; const data = { query: ` mutation ContinueAskFredThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status created_at } } } `, variables: { input } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.error(e); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } input_data = { "thread_id": "thread_abc123", "query": "Can you provide more details about the budget allocation?", "response_language": "en", "format_mode": "markdown" } query = ''' mutation ContinueAskFredThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status created_at } } } ''' data = { 'query': query, 'variables': {'input': input_data} } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```json Response theme={null} { "data": { "continueAskFredThread": { "message": { "id": "msg_003", "thread_id": "thread_abc123", "query": "Can you provide more details about the budget allocation?", "answer": "Certainly! Here are the detailed budget allocations discussed in the meeting:\n\n## Q4 Budget Breakdown ($150K Total)\n\n### Engineering (60% - $90K)\n- **Infrastructure Improvements**: $30K\n - Cloud services optimization\n - Database scaling\n - Security enhancements\n- **Feature Development**: $45K\n - Mobile app features: $25K\n - API v2 development: $20K\n- **Technical Debt**: $15K\n - Code refactoring\n - Legacy system migration\n\n### Design & UX (25% - $37.5K)\n- **User Research**: $10K\n- **Design System Updates**: $15K\n- **Prototype Development**: $12.5K\n\n### Marketing & Growth (15% - $22.5K)\n- **Content Creation**: $7.5K\n- **Paid Acquisition Tests**: $10K\n- **Partnership Development**: $5K\n\nThe CFO emphasized maintaining a 10% contingency within each category for unexpected costs.", "suggested_queries": [ "Who is responsible for managing each budget category?", "What are the key milestones for the infrastructure improvements?", "How will the budget be tracked and reported?" ], "status": "completed", "created_at": "2024-03-15T10:35:00Z" } } } } ``` ## Error Codes

The specified thread\_id does not exist or you don't have access to it

You have insufficient AI credits to continue the thread. Please upgrade your plan or purchase additional credits.

The language code you provided is invalid. Please refer to the [Language Codes](/miscellaneous/language-codes) page for a list of valid language codes.

## Related Get complete thread with all messages Start a new conversation thread --- # Source: https://docs.fireflies.ai/graphql-api/mutation/create-askfred-thread.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Create AskFred Thread > Create a new AskFred conversation thread with a question about your meetings ## Overview The `createAskFredThread` mutation allows you to start a new AskFred conversation by asking questions about your meeting transcripts. You can ask about a specific meeting or search across multiple meetings using filters. AskFred uses AI to analyze your meeting data and provide intelligent, context-aware answers. ## Arguments Your question or query about the meeting(s). Maximum 2000 characters. ID of a specific transcript/meeting to query. If provided, the question will be answered based only on this meeting. Filters to search across multiple meetings. Only used if transcript\_id is not provided. Filter meetings from this date/time (ISO 8601 format). Cannot be more than 1 year in the past. If not provided, defaults to 30 days before end\_time. Filter meetings until this date/time (ISO 8601 format). If not provided, defaults to today. Filter by specific channel/integration IDs Filter by meeting organizer email addresses Filter by participant email addresses Filter by specific transcript IDs Language code for the response (e.g., 'en' for English, 'es' for Spanish). See [Language Codes](/miscellaneous/language-codes) for full list. Response format: 'markdown' for rich formatting or 'plaintext' for simple text ## Returns Returns an `AskFredResponse` object containing the generated message with the answer to your query. ## Usage Example ### Query a Specific Meeting ```graphql theme={null} mutation CreateThreadForMeeting($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status created_at } } } ``` ### Query Across Multiple Meetings ```graphql theme={null} mutation CreateThreadWithFilters($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation CreateThread($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status } } }", "variables": { "input": { "query": "What were the main decisions made in the product planning meeting?", "transcript_id": "transcript_xyz789", "response_language": "en", "format_mode": "markdown" } } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; // Example 1: Query a specific meeting const inputForSpecificMeeting = { query: "What were the action items discussed?", transcript_id: "transcript_xyz789", response_language: "en", format_mode: "markdown" }; // Example 2: Query across meetings with filters const inputWithFilters = { query: "What customer concerns were raised this week?", filters: { start_time: "2024-03-10T00:00:00Z", end_time: "2024-03-17T00:00:00Z", participants: ["customer@example.com"] }, response_language: "en", format_mode: "markdown" }; const data = { query: ` mutation CreateAskFredThread($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status created_at } } } `, variables: { input: inputForSpecificMeeting } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.error(e); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } # Example 1: Query a specific meeting input_specific = { "query": "What were the action items discussed?", "transcript_id": "transcript_xyz789", "response_language": "en", "format_mode": "markdown" } # Example 2: Query across meetings with filters input_filtered = { "query": "What customer concerns were raised this week?", "filters": { "start_time": "2024-03-10T00:00:00Z", "end_time": "2024-03-17T00:00:00Z", "participants": ["customer@example.com"] }, "response_language": "en", "format_mode": "markdown" } query = ''' mutation CreateAskFredThread($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id query answer suggested_queries status created_at } } } ''' data = { 'query': query, 'variables': {'input': input_specific} } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```json Response theme={null} { "data": { "createAskFredThread": { "message": { "id": "msg_001", "thread_id": "thread_new123", "query": "What were the main decisions made in the product planning meeting?", "answer": "Based on the product planning meeting transcript, here are the main decisions made:\n\n## Product Roadmap\n- **Q4 Focus**: Prioritize mobile app improvements and API v2 development\n- **Feature Freeze**: No new features after November 15th to focus on stability\n\n## Resource Allocation\n- **Team Expansion**: Approved hiring 2 senior engineers and 1 UX designer\n- **Budget**: Allocated $150K for Q4 development initiatives\n\n## Timeline\n- **Beta Release**: Scheduled for December 1st\n- **Public Launch**: Targeted for January 15th\n\n## Strategic Partnerships\n- **Integration Partners**: Approved partnerships with Slack and Microsoft Teams\n- **API Access**: Will provide early access to 5 strategic partners", "suggested_queries": [ "What specific mobile app improvements were discussed?", "Who will be responsible for the API v2 development?", "What were the concerns raised about the timeline?" ], "status": "completed", "created_at": "2024-03-15T10:30:00Z" } } } } ``` ## Error Codes

Validation error occurred. Common causes:

  • Query exceeds 2000 character limit or is empty
  • Both transcript\_id and filters are provided (only one is allowed)
  • start\_time is more than 1 year in the past
  • start\_time is not before end\_time

The specified transcript\_id does not exist or you don't have access to it

You don't have access to AI credits. Upgrade your plan to use AskFred.

The provided response\_language code is not supported. See Language Codes for valid options.

## Related Add follow-up questions to continue the conversation View all your AskFred conversation threads --- # Source: https://docs.fireflies.ai/graphql-api/mutation/create-bite.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Create bite > Use the API to create a bite ## Overview The `createBite` mutation allows you to create a bite through the API. ## Arguments ID of the transcript Name of the bite Maximum length is 256 characters. Start time of the bite in seconds End time of the bite in seconds Type of the bite, either 'video' or 'audio' Array specifying the visibility of the Soundbite. Possible values are 'public', 'team', and 'participants'. For example, \["team", "participants"] indicates visibility to both team members and participants, while \["public"] denotes full public access. Summary for the bite Maximum length is 500 characters. ## Usage Example To create a bite, provide the necessary input parameters to the mutation. Here's an example of how this mutation could be used: ```graphql theme={null} mutation Mutation($transcriptId: ID!, $startTime: Float!, $endTime: Float!) { createBite(transcript_id: $transcriptId, start_time: $startTime, end_time: $endTime) { status name id } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation CreateBite($transcriptId: ID!, $startTime: Float!, $endTime: Float!) { createBite(transcript_id: $transcriptId, start_time: $startTime, end_time: $endTime) { summary status id } }", "variables": { "transcriptId": "your_transcript_id", "startTime": 0, "endTime": 5 } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: `mutation CreateBite($transcriptId: ID!, $startTime: Float!, $endTime: Float!) { createBite(transcript_id: $transcriptId, start_time: $startTime, end_time: $endTime) { summary status id } }`, variables: { transcriptId: 'your_transcript_id', startTime: 0, endTime: 5 } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' mutation CreateBite($transcriptId: ID!, $startTime: Float!, $endTime: Float!) { createBite(transcript_id: $transcriptId, start_time: $startTime, end_time: $endTime) { summary status id } } ''', 'variables': { 'transcriptId': "your_transcript_id", 'startTime': 0, 'endTime': 5 } } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()['data']) else: print(response.text) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"mutation CreateBite($transcriptId: ID!, $startTime: Float!, $endTime: Float!) { createBite(transcript_id: $transcriptId, start_time: $startTime, end_time: $endTime) { summary status id } }\", \"variables\": {\"transcriptId\": \"your_transcript_id\", \"startTime\": 0, \"endTime\": 5}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "createBite": { "name": "bite-name", "status": "pending", } } } ``` ## Additional Resources Querying list of bites Querying bite details --- # Source: https://docs.fireflies.ai/schema/input/create-live-action-item-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # CreateLiveActionItemInput > Schema for CreateLiveActionItemInput The ID of the live meeting to create the action item for Natural language description of the action item to create. Fred will interpret this prompt and create the appropriate action item. Min / max of 5 / 255 characters. --- # Source: https://docs.fireflies.ai/graphql-api/mutation/create-live-action-item.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Create Live Action Item > Use the API to create an action item during a live meeting ## Overview The `createLiveActionItem` mutation allows you to create an action item during a live meeting through the API. The action item is created using natural language processing via Fred, Fireflies' AI assistant. This mutation is rate-limited to 10 requests per hour across all user tiers. It also requires AI credits to be available on the user's account. ## Arguments Input object containing the meeting ID and prompt for the action item. See [CreateLiveActionItemInput](/schema/input/create-live-action-item-input) for details. ## Response Whether the action item was created successfully ## Usage Example To create a live action item, provide the meeting ID and a natural language prompt: ```graphql theme={null} mutation CreateLiveActionItem($input: CreateLiveActionItemInput!) { createLiveActionItem(input: $input) { success } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation CreateLiveActionItem($input: CreateLiveActionItemInput!) { createLiveActionItem(input: $input) { success } }", "variables": { "input": { "meeting_id": "your_meeting_id", "prompt": "Follow up with the client about the proposal" } } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: `mutation CreateLiveActionItem($input: CreateLiveActionItemInput!) { createLiveActionItem(input: $input) { success } }`, variables: { input: { meeting_id: 'your_meeting_id', prompt: 'Follow up with the client about the proposal' } } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' mutation CreateLiveActionItem($input: CreateLiveActionItemInput!) { createLiveActionItem(input: $input) { success } } ''', 'variables': { 'input': { 'meeting_id': 'your_meeting_id', 'prompt': 'Follow up with the client about the proposal' } } } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()['data']) else: print(response.text) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"mutation CreateLiveActionItem($input: CreateLiveActionItemInput!) { createLiveActionItem(input: $input) { success } }\", \"variables\": {\"input\": {\"meeting_id\": \"your_meeting_id\", \"prompt\": \"Follow up with the client about the proposal\"}}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "createLiveActionItem": { "success": true } } } ``` ## Error Codes List of possible error codes that may be returned by the `createLiveActionItem` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user account has been cancelled. Please contact support if you encounter this error.

The meeting with the specified ID was not found or you do not have access to it.

You do not have permission to create action items for this meeting. Only the meeting organizer or team admin can create live action items.

Your account does not have sufficient AI credits to perform this operation. Please upgrade your plan or purchase additional credits.

You have exceeded the rate limit for this mutation. The limit is 10 requests per hour. Please wait before making additional requests.

## Additional Resources Query live action items for a meeting Pause or resume recording for a live meeting --- # Source: https://docs.fireflies.ai/schema/input/create-live-soundbite-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # CreateLiveSoundbiteInput > Schema for CreateLiveSoundbiteInput The ID of the live meeting to create the soundbite for Natural language description of the soundbite to create. Fred will interpret this prompt and create the appropriate soundbite. Min / max of 5 / 255 characters. --- # Source: https://docs.fireflies.ai/graphql-api/mutation/create-live-soundbite.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Create Live Soundbite > Use the API to create a soundbite during a live meeting ## Overview The `createLiveSoundbite` mutation allows you to create a soundbite during a live meeting through the API. The soundbite is created using natural language processing via Fred, Fireflies' AI assistant. **Rate Limit:** This mutation is rate-limited to 10 requests per hour across all user tiers. If you exceed this limit, you will receive a `too_many_requests` error with a `retryAfter` timestamp indicating when you can make requests again. **AI Credits:** This mutation requires AI credits to be available on the user's account. ## Arguments Input object containing the meeting ID and prompt for the soundbite. See [CreateLiveSoundbiteInput](/schema/input/create-live-soundbite-input) for details. ## Response Whether the soundbite was created successfully ## Usage Example To create a live soundbite, provide the meeting ID and a natural language prompt: ```graphql theme={null} mutation CreateLiveSoundbite($input: CreateLiveSoundbiteInput!) { createLiveSoundbite(input: $input) { success } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation CreateLiveSoundbite($input: CreateLiveSoundbiteInput!) { createLiveSoundbite(input: $input) { success } }", "variables": { "input": { "meeting_id": "your_meeting_id", "prompt": "Create a soundbite from the last 2 minutes" } } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: `mutation CreateLiveSoundbite($input: CreateLiveSoundbiteInput!) { createLiveSoundbite(input: $input) { success } }`, variables: { input: { meeting_id: 'your_meeting_id', prompt: 'Create a soundbite from the last 2 minutes' } } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' mutation CreateLiveSoundbite($input: CreateLiveSoundbiteInput!) { createLiveSoundbite(input: $input) { success } } ''', 'variables': { 'input': { 'meeting_id': 'your_meeting_id', 'prompt': 'Create a soundbite from the last 2 minutes' } } } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()['data']) else: print(response.text) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"mutation CreateLiveSoundbite($input: CreateLiveSoundbiteInput!) { createLiveSoundbite(input: $input) { success } }\", \"variables\": {\"input\": {\"meeting_id\": \"your_meeting_id\", \"prompt\": \"Create a soundbite from the last 2 minutes\"}}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "createLiveSoundbite": { "success": true } } } ``` ## Error Codes List of possible error codes that may be returned by the `createLiveSoundbite` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user account has been cancelled. Please contact support if you encounter this error.

The meeting with the specified ID was not found or you do not have access to it.

You do not have permission to create soundbites for this meeting. Only the meeting organizer or team admin can create live soundbites.

Your account does not have sufficient AI credits to perform this operation. Please upgrade your plan or purchase additional credits.

You have exceeded the rate limit of 10 requests per hour. Wait until the time specified in the `retryAfter` field before making additional requests.

## Additional Resources Create a soundbite for a completed meeting Pause or resume recording for a live meeting --- # Source: https://docs.fireflies.ai/graphql-api/mutation/delete-askfred-thread.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Delete AskFred Thread > Delete an AskFred conversation thread and all its messages ## Overview The `deleteAskFredThread` mutation allows you to permanently delete an AskFred conversation thread along with all its associated messages. This action is irreversible. ## Arguments The unique identifier of the AskFred thread to delete ## Returns Returns the deleted `AskFredThread` object if successful, allowing you to confirm the deletion details. ## Usage Example ```graphql theme={null} mutation DeleteThread($id: String!) { deleteAskFredThread(id: $id) { id title transcript_id user_id created_at } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation DeleteThread($id: String!) { deleteAskFredThread(id: $id) { id title transcript_id created_at } }", "variables": { "id": "thread_abc123" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const threadId = 'thread_abc123'; const data = { query: ` mutation DeleteAskFredThread($id: String!) { deleteAskFredThread(id: $id) { id title transcript_id user_id created_at } } `, variables: { id: threadId } }; axios .post(url, data, { headers: headers }) .then(result => { console.log('Thread deleted:', result.data); }) .catch(e => { console.error('Error deleting thread:', e); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } thread_id = 'thread_abc123' query = ''' mutation DeleteAskFredThread($id: String!) { deleteAskFredThread(id: $id) { id title transcript_id user_id created_at } } ''' variables = { 'id': thread_id } data = { 'query': query, 'variables': variables } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print('Thread deleted:', response.json()) else: print('Error:', response.text) ``` ```json Response theme={null} { "data": { "deleteAskFredThread": { "id": "thread_abc123", "title": "What were the action items from the Q4 planning meeting?", "transcript_id": "transcript_xyz789", "user_id": "user_123", "created_at": "2024-03-15T10:30:00Z" } } } ``` ## Important Notes Deletion is permanent and cannot be undone ## Error Codes

The specified thread ID does not exist or you don't have access to it

## Related View all your threads before deletion Review thread content before deletion --- # Source: https://docs.fireflies.ai/graphql-api/mutation/delete-transcript.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Delete Transcript > Use the API to manage transcript deletion ## Overview The `deleteTranscript` mutation is designed to delete a specific transcript by its ID. **Rate Limit:** This mutation is rate-limited to 10 requests per minute across all user tiers. If you exceed this limit, you will receive a `too_many_requests` error with a `retryAfter` timestamp indicating when you can make requests again. ## Arguments Transcript ID ## Usage Example To delete a transcript, provide the unique id of the transcript as an argument to the mutation. The returned subfields will be from the deleted transcript. Here’s an example of how this mutation could be used: ```graphql theme={null} mutation deleteTranscript($id: String!) { deleteTranscript(id: $id) { id title host_email organizer_email fireflies_users participants date transcript_url audio_url duration } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{"query": "mutation($transcriptId: String!) { deleteTranscript(id: $transcriptId) { title date duration organizer_email } }", "variables": {"transcriptId": "your_transcript_id"}}' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: ` mutation($transcriptId: String!) { deleteTranscript(id: $transcriptId) { title date duration organizer_email } } `, variables: { transcriptId: 'transcript_id' } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' mutation($transcriptId: String!) { deleteTranscript(id: $transcriptId) { title date duration organizer_email } } ''', 'variables': {'transcriptId': 'your_transcript_id'} } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```java java theme={null} import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String json = "{\"query\":\"mutation($transcriptId: String!) { deleteTranscript(id: $transcriptId) { title date duration organizer_email } }\",\"variables\":{\"transcriptId\":\"your_transcript_id\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "deleteTranscript": { "duration": "1", "date": 1699570138000, "organizer_email": "justin@fly.ai", "title": "Video title" } } } ``` ## Error Codes List of possible error codes that may be returned by the `deleteTranscript` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user does not have admin privileges to delete the transcript.

You have exceeded the rate limit of 10 requests per minute. Wait until the time specified in the `retryAfter` field before making additional requests.

## Additional Resources Querying list of transcripts Update meeting privacy --- # Source: https://docs.fireflies.ai/additional-info/deprecated.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Deprecated > Fields marked for removal ## Overview This page lists all the fields that have been deprecated. Deprecated fields are fields that are no longer recommended for use and may be removed in future versions. Please note that using deprecated fields can lead to compatibility issues in future releases. The following fields have been deprecated: ### [Transcript](/schema/transcript) `host_email`: Use `organizer_email` instead. ### [Transcripts](/graphql-api/query/transcripts) `date`: Use `fromDate` and `toDate` to query a time range. `title`: Use `keyword` and `scope` instead of `title` `organizer_email`: Use the `organizers` array field to filter by one or more organizer email addresses. `participant_email`: Use the `participants` array field to filter by one or more participant email addresses. --- # Source: https://docs.fireflies.ai/getting-started/developer-program.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Join the Developer Program > Join the Developer Program to build integrations with Fireflies.ai ## Overview Welcome to the Fireflies.ai Developer Program! This exclusive program offers developers a chance to explore, test, and integrate with our APIs for a limited period of three months. This program is tailored for developers eager to create seamless integrations and unlock the full capabilities of Fireflies.ai. Participants will gain access to premium features and higher rate limits, ensuring a swift and successful project development. ## Program Benefits As a member of the Fireflies.ai Developer Program, you’ll enjoy: * **Full Business Tier Access**: Complimentary access to all Business Tier features, tools, and resources * **Integration Support**: Get guidance on how to connect the API seamlessly with your application * **Enhanced API Access**: Enjoy expanded rate limits and access to premium features designed for high-demand integrations * **Community and Updates**: Be part of our developer community and receive the latest updates, tutorials, and API news ## How to Apply Interested in joining? Follow these simple steps to apply for the program: 1. **Fill Out the Application Form**: [Apply here](https://fireflies-developer.paperform.co) 2. **Verification**: Once you submit the form, our team will review your application. Please note that this process is manual and may take a few business days 3. **Approval Notification**: If your application is approved, you’ll receive a confirmation email with details about your program access ## Application Requirements To qualify for the Developer Program, please ensure you have: * **A clear project plan**: Briefly describe how Fireflies.ai will integrate with your application * **A company email**: A company email is preferred for verification purposes * **GitHub Repository**: Optionally, include a GitHub link to your code or previous work to help us understand your technical expertise * **Additional Comments**: Any additional information that can help us assess your project’s alignment with our platform goals ## What to Do After You've Built Your Integration Once you've successfully built your integration with Fireflies.ai, you can apply to be listed as an official partner integration. To get your integration listed, please submit the [Partner Submission Form](https://yhw88ruu.paperform.co/) or contact us at [partners@fireflies.ai](mailto:partners@fireflies.ai). ### Requirements for Listing as Partner Integration To be listed as a partner integration, you'll need to provide: 1. **Your SOC2 report**: Security compliance documentation 2. **A public helpdesk article to assist users**: Documentation to help users set up and use your integration 3. **A support email for users to reach out**: Contact information for integration support 4. **A short and long description for the listing**: Marketing copy describing your integration 5. **Your company logo in SVG format**: High-quality logo for display on our integrations page ## Program Terms * **Duration**: The complimentary Business Tier access lasts for three months from the date of approval * **Feedback**: We may reach out for feedback to better understand your experience and how we can enhance our API We look forward to seeing what you’ll build and are excited to support your development journey! ## Additional Resources Welcome to Fireflies public API documentation Authenticating your requests with the Fireflies API --- # Source: https://docs.fireflies.ai/getting-started/docs-mcp-server.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Docs MCP Server > Connect your AI tools to Fireflies documentation using MCP for instant access to API references, guides, and code examples. ### Overview The Fireflies Documentation MCP Server enables AI tools to search and retrieve information directly from the Fireflies documentation. This allows you to ask questions about the Fireflies API, find code examples, understand features, and get implementation guidance without leaving your development environment. ### What is MCP? Model Context Protocol (MCP) is an open standard that enables AI applications to securely connect to external data sources and tools. With the Fireflies Documentation MCP Server, your AI tools can search across all Fireflies documentation including API references, guides, and code examples. ### Server Details The Fireflies Documentation MCP Server is available at: ``` https://docs.fireflies.ai/mcp ``` This server provides a `SearchFireflies` tool that searches across the Fireflies knowledge base to find relevant information, code examples, API references, and guides. ### Configuration by Platform Claude supports MCP servers through its Connectors feature. To connect Fireflies documentation: 1. Open [Claude Settings](https://claude.ai/settings/connectors) 2. Click **Add Connector** 3. Enter the server URL: `https://docs.fireflies.ai/mcp` 4. Save and start asking questions about Fireflies Once connected, Claude can search the Fireflies documentation to answer your questions about the API, implementation patterns, and best practices. For Claude Desktop, add the following configuration to your `claude_desktop_config.json` file: **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json` **Windows:** `%APPDATA%\Claude\claude_desktop_config.json` **Linux:** `~/.config/Claude/claude_desktop_config.json` ```json theme={null} { "mcpServers": { "fireflies-docs": { "command": "npx", "args": [ "mcp-remote", "https://docs.fireflies.ai/mcp" ] } } } ``` After saving the configuration, restart Claude Desktop. You can then ask Claude questions about Fireflies documentation directly. VS Code supports MCP servers through GitHub Copilot. Create a `.vscode/mcp.json` file in your project: ```json theme={null} { "servers": { "fireflies-docs": { "type": "http", "url": "https://docs.fireflies.ai/mcp" } } } ``` After configuration, use Copilot Chat in agent mode to query Fireflies documentation. Cursor supports MCP servers through its settings. To configure: 1. Open Cursor Settings (Cmd/Ctrl + ,) 2. Navigate to **Features > MCP Servers** 3. Click **Add New MCP Server** 4. Configure with the following details: * **Name:** `fireflies-docs` * **Type:** `url` * **Server URL:** `https://docs.fireflies.ai/mcp` Alternatively, add to your `~/.cursor/mcp.json` file: ```json theme={null} { "mcpServers": { "fireflies-docs": { "url": "https://docs.fireflies.ai/mcp" } } } ``` After configuration, you can ask Cursor's AI assistant questions about Fireflies documentation. Windsurf supports MCP servers through its configuration. Add the following to your `~/.codeium/windsurf/mcp_config.json` file: ```json theme={null} { "mcpServers": { "fireflies-docs": { "serverUrl": "https://docs.fireflies.ai/mcp" } } } ``` After saving, restart Windsurf to enable the Fireflies documentation search. ### Available Tool The server provides one tool for searching documentation: **Description:** Search across the Fireflies knowledge base to find relevant information, code examples, API references, and guides. **Parameters:** * `query` (string, required) - A query to search the content with **Example:** ```json theme={null} { "query": "how to upload audio files" } ``` **Returns:** Contextual content with titles and direct links to the documentation pages. ### Example Queries Once configured, you can ask your AI tool questions like: * "How do I authenticate with the Fireflies API?" * "Show me an example of uploading audio for transcription" * "What fields are available in the transcript query?" * "How do I set up webhooks for Fireflies?" * "What are the rate limits for the API?" * "How do I search transcripts by date range?" ### Troubleshooting **Server not connecting:** * For Claude Desktop: Ensure you have Node.js installed (required for `npx mcp-remote`) * Check that the URL is exactly `https://docs.fireflies.ai/mcp` * Restart your AI application after configuration changes **No results returned:** * Try rephrasing your query with different keywords * Be specific about what you're looking for (e.g., "GraphQL mutation for uploading audio" instead of just "upload") ### Additional Resources Connect AI tools to your meeting data with the Fireflies MCP Server Complete reference for all available MCP tools for meeting data --- # Source: https://docs.fireflies.ai/schema/input/download-auth-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # DownloadAuthInput > Schema for DownloadAuthInput - authentication configuration for media downloads The `DownloadAuthInput` type configures authentication for downloading media files during audio upload. This allows you to upload files that are hosted on private servers or require authentication. ## Fields The authentication method to use when downloading the media file. Must be one of: * `none` - No authentication (publicly accessible URL) * `bearer_token` - Bearer token authentication * `basic_auth` - HTTP Basic authentication See [DownloadAuthType](/schema/enum/download-auth-type) for details. Bearer token configuration. Required when `type` is `bearer_token`, must not be provided for other types. See [BearerTokenAuthInput](/schema/input/bearer-token-auth-input) for the complete schema definition. Basic authentication configuration. Required when `type` is `basic_auth`, must not be provided for other types. See [BasicAuthInput](/schema/input/basic-auth-input) for the complete schema definition. ## Validation Rules The `DownloadAuthInput` type enforces mutual exclusivity between authentication methods: * When `type` is `bearer_token`, only the `bearer` field should be provided * When `type` is `basic_auth`, only the `basic` field should be provided * When `type` is `none`, neither `bearer` nor `basic` should be provided Providing fields for multiple authentication types will result in a validation error. ## Examples ### Bearer Token Authentication ```graphql theme={null} { type: bearer_token bearer: { token: "your-bearer-token-here" } } ``` ### Basic Authentication ```graphql theme={null} { type: basic_auth basic: { username: "your-username" password: "your-password" } } ``` ### No Authentication (Default) When the media file is publicly accessible, you can either omit the `download_auth` field entirely or explicitly set it to `none`: ```graphql theme={null} { type: none } ``` ## Use Cases ### Private Cloud Storage Use bearer token authentication for files stored in private cloud storage with token-based access: ```graphql theme={null} mutation { uploadAudio(input: { url: "https://storage.example.com/recordings/meeting-123.mp3" title: "Team Standup" download_auth: { type: bearer_token bearer: { token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } } }) { success message } } ``` ### Protected Web Servers Use basic authentication for files hosted on web servers with HTTP Basic Auth: ```graphql theme={null} mutation { uploadAudio(input: { url: "https://recordings.company.com/meeting-123.mp3" title: "Client Call" download_auth: { type: basic_auth basic: { username: "api-user" password: "secure-password" } } }) { success message } } ``` ## Related Types * [BearerTokenAuthInput](/schema/input/bearer-token-auth-input) - Bearer token configuration * [BasicAuthInput](/schema/input/basic-auth-input) - Basic auth configuration * [DownloadAuthType](/schema/enum/download-auth-type) - Authentication type enum * [AudioUploadInput](/schema/input/audio-upload-input) - Parent input type --- # Source: https://docs.fireflies.ai/schema/enum/download-auth-type.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # DownloadAuthType > Enum for DownloadAuthType - authentication methods for media downloads The `DownloadAuthType` enum specifies the authentication method to use when downloading media files during audio upload. ## Values No authentication required. The media file is publicly accessible. This is the default when `download_auth` is not provided. Bearer token authentication. Requires the `bearer` field with a token. Fireflies will send `Authorization: Bearer ` when downloading the file. HTTP Basic authentication. Requires the `basic` field with username and/or password. Fireflies will send `Authorization: Basic ` when downloading the file. ## Usage The `DownloadAuthType` enum is used in the [DownloadAuthInput](/schema/input/download-auth-input) type to specify which authentication method should be used: ```graphql theme={null} input DownloadAuthInput { type: DownloadAuthType! bearer: BearerTokenAuthInput basic: BasicAuthInput } ``` ## Examples ### No Authentication (Default) ```graphql theme={null} mutation { uploadAudio(input: { url: "https://public-storage.com/audio.mp3" title: "Public Recording" # download_auth omitted - defaults to 'none' }) { success message } } ``` Or explicitly: ```graphql theme={null} mutation { uploadAudio(input: { url: "https://public-storage.com/audio.mp3" title: "Public Recording" download_auth: { type: none } }) { success message } } ``` ### Bearer Token ```graphql theme={null} mutation { uploadAudio(input: { url: "https://protected-storage.com/audio.mp3" title: "Protected Recording" download_auth: { type: bearer_token bearer: { token: "your-token-here" } } }) { success message } } ``` ### Basic Authentication ```graphql theme={null} mutation { uploadAudio(input: { url: "https://private-server.com/audio.mp3" title: "Private Recording" download_auth: { type: basic_auth basic: { username: "user" password: "pass" } } }) { success message } } ``` ## Choosing the Right Authentication Method | Method | Use When | Example Use Cases | | -------------- | -------------------------------- | --------------------------------------------------------------------------- | | `none` | File is publicly accessible | Public S3 buckets, CDN-hosted files, public web servers | | `bearer_token` | File requires OAuth or API token | Private cloud storage, API-protected resources, JWT-authenticated endpoints | | `basic_auth` | File requires username/password | Web servers with `.htaccess`, internal file servers, legacy systems | ## Related Types * [DownloadAuthInput](/schema/input/download-auth-input) - Authentication configuration using this enum * [BearerTokenAuthInput](/schema/input/bearer-token-auth-input) - Bearer token configuration * [BasicAuthInput](/schema/input/basic-auth-input) - Basic auth configuration * [AudioUploadInput](/schema/input/audio-upload-input) - Parent input type --- # Source: https://docs.fireflies.ai/miscellaneous/error-codes.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Error codes > Error codes and their explanations ## Overview This page lists the error codes and their corresponding reasons for the Fireflies.ai API. You can refer to this page to understand the meaning and possible causes of different error codes that you may encounter while using the API. It provides a comprehensive reference for troubleshooting and resolving issues. Please visit [Errors](/fundamentals/errors) page for more details ## API Errors ### `invalid_arguments` Returned when invalid arguments are passed to a query or mutation ```json theme={null} { "errors": [ { ... other fields for error "message": "Invalid argument(s) were provided", "code": "invalid_arguments", "extensions": { "code": "invalid_arguments", "status": 400, "metadata": { "fields": [ { "name": "fromDate", "message": "fromDate must be a Date instance", "constraints": [ { "type": "isDate", "message": "fromDate must be a Date instance" } ] } ] } } } ] } ``` ### `object_not_found` Returned when the subject of your query or mutation is not found. For example, querying a non-existent userId would throw an `object_not_found` error of the type `User` ```json theme={null} { "errors": [ { ... other fields for error "message": "User not found", "code": "object_not_found", "extensions": { "code": "object_not_found", "status": 404, "metadata": { "objectType": "User" } } } ], } ``` ### `forbidden` Returned when you are not allowed to perform an action ```json theme={null} { "errors": [ { ... other fields for error "message": "You are not authorized to perform this action", "code": "forbidden", "extensions": { "code": "forbidden", "status": 403, } } ] } ``` ### `paid_required` Returned when you are required to be subscribed to a paid plan for the Fireflies.ai platform. The error will also mentioned the required `tier` for such actions. For example, making a request to `uploadAudio` as a free user will throw a `paid_required` error with tier `pro_or_higher`, which means that you need to be subscribed to a Pro or Higher plan to perform this action ```json theme={null} { "errors": [ { ... other fields for error "message": "You need to be subscribed to a paid plan to perform this action", "code": "paid_required", "extensions": { "code": "paid_required", "status": 403, "metadata": { "tier": "pro_or_higher" }, } } ] } ``` ### `not_in_team` Returned when you are attempting to query against a `userId` that is not a part of your team ```json theme={null} { "errors": [ { ... other fields for error "message": "You do not have permissions for this team", "code": "not_in_team", "extensions": { "code": "not_in_team", "status": 403, } } ] } ``` ### `require_elevated_privilege` Returned when you are attempting to perform admin actions as a non-admin user ```json theme={null} { "errors": [ { .. other fields for error "message": "You do not have permission to perform this action", "code": "require_elevated_privilege", "extensions": { "code": "require_elevated_privilege", "status": 403, } } ] } ``` ### `account_cancelled` Returned when your account has been cancelled due to non-payment or some other reason. Please contact support if you think this is a mistake ```json theme={null} { "errors": [ { ... other fields for error "message": "Your account is inactive. If this is not expected, please contact support", "code": "account_cancelled", "extensions": { "code": "account_cancelled", "status": 403, } } ] } ``` ### `args_required` Returned when your query or mutation is missing one or more required arguments. The property `extesions.metadata.fields` will provide the list of fields that have this constraints ```json theme={null} { "errors": [ { ... other fields for error "message": "You must provide one of the following: mine, transcript_id, my_team", "code": "args_required", "extensions": { "code": "args_required", "status": 400, "metadata": { "fields": [ "mine", "transcript_id", "my_team" ] }, } } ] } ``` ### `too_many_requests` Returned when you have been rate-limited due to making too many requests. The field `extensions.metadata.retryAfter` mentions the `retryAfter` time ```json theme={null} { "errors": [ { ... other fields for error "message": "Too many requests. Please retry after 2:45:45 AM (UTC)", "code": "too_many_requests", "extensions": { "code": "too_many_requests", "status": 429, "metadata": { "retryAfter": 1720651545066 } } } ] } ``` ### `payload_too_small` Returned when the content size for `uploadAudio` mutation is too small. Upload files larger than `50kb` to avoid this error ```json theme={null} { "errors": [ { ... other fields for error "message": "Content size is too small. Please upload files larger than 50kb", "code": "payload_too_small", "extensions": { "code": "payload_too_small", "status": 400, } } ] } ``` ### `request_timeout` Returned when your request has taken too long to respond. ```json theme={null} { "errors": [ { ... other fields for error "message": "Request timed out. Please try again or contact support", "code": "request_timeout", "extensions": { "code": "request_timeout", "status": 408, } } ] } ``` ### `invalid_language_code` Returned when an invalid language code has been passed to a query or mutation ```json theme={null} { "errors": [ { ... other fields for error "message": "Language code is invalid or not supported. Please refer to API docs for supported languages", "code": "invalid_language_code", "extensions": { "code": "invalid_language_code", "status": 400, } } ] } ``` ### `admin_must_exist` Returned when you are attempting to call `setUserRole` for a single member team ```json theme={null} { "errors": [ { ... other fields for error "message": "You must have at least one admin your team", "code": "admin_must_exist", "extensions": { "code": "admin_must_exist", "status": 400, } } ] } ``` ### `unsupported_platform` Returned when an unsupported meeting platform URL is provided to the `addToLiveMeeting` mutation ```json theme={null} { "errors": [ { ... other fields for error "message": "The meeting platform is not supported. Please use a supported meeting platform URL.", "code": "unsupported_platform", "extensions": { "code": "unsupported_platform", "status": 400, } } ] } ``` ### `require_ai_credits` Returned when you have insufficient AI credits to perform AI-powered operations like AskFred queries. You may need to upgrade your plan or purchase additional credits. ```json theme={null} { "errors": [ { ... other fields for error "message": "You do not have sufficient AI credits to perform this action", "code": "require_ai_credits", "extensions": { "code": "require_ai_credits", "status": 402, "helpUrls": [ "https://app.fireflies.ai/upgrade" ] } } ] } ``` ### `invariant_violation` Returned when an internal invariant is violated (unexpected internal state). This typically indicates a bug and is not actionable by clients. Please contact support if you receive this error. ```json theme={null} { "errors": [ { ... other fields for error "message": "Something unexpected happened. Please try again", "code": "invariant_violation", "extensions": { "code": "invariant_violation", "status": 500, } } ] } ``` --- # Source: https://docs.fireflies.ai/fundamentals/errors.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Errors > Error standards for the Fireflies API ## Overview Understanding how errors are structured and returned by the Fireflies API is key to effectively handling and troubleshooting issues. This page outlines the common error format and details specific error types. ## Error schema Our GraphQL API follows a standard format for returning errors. Errors are encapsulated within an `errors` array in the response body. Please visit [Error codes](/miscellaneous/error-codes) to view explanations for error code types Description of the error Error code. `friendly === true` are safe to show to the frontend client. Unfriendly errors may have technical details that may not be useful to the UI layer. Contains useful metadata related to the error. Where relevant, includes field `helpUrls` pointing to relevant API documentation sections that explain the error and provide guidance on how to resolve it ```json Example theme={null} { "data": {}, "errors": [ { "message": "Error description", "friendly": true, "code": "error_code", "extensions": { "helpUrls": [ "https://docs.fireflies.ai/miscellaneous/error-codes#error_code" ], "code": "error_code", "status": http_status_code, ... otherFields } } ] } ``` ## Additional Resources Detailed error code reference Authenticating your requests with the Fireflies API --- # Source: https://docs.fireflies.ai/realtime-api/event-schema.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Event Schema > Reference for all events emitted by the Fireflies.ai Realtime API # Event Reference This page documents the events you may receive from the Fireflies.ai Realtime API WebSocket. ## Event List | Event Name | Description | | ------------------------- | ------------------------------------------------------------------------------- | | `auth.success` | Emitted when authentication succeeds. | | `auth.failed` | Emitted when authentication fails. The socket will disconnect after this event. | | `connection.established` | Emitted when the connection is successfully established. | | `connection.error` | Emitted when there is a connection or authorization error. | | `transcription.broadcast` | Emitted for every new transcription segment or update. | ## RealtimeTranscriptionEvent The unique identifier for the transcript / meeting The unique identifier for the transcription segment (chunk). You may use this field to deduplicate transcription events. If the transcription is being updated, it will contain the same chunk\_id as the previous event. A new transcription will have a different chunk\_id The transcribed text for this segment. The name of the speaker for this segment. The start time (in seconds) The end time (in seconds) ## Example Payload ```json theme={null} { "transcript_id": "abc123", "chunk_id": "chunk_001", "text": "Hello world", "speaker_name": "Alice", "start_time": 0.0, "end_time": 1.25 } ``` ## Additional Resources Getting started with Realtime API Schema for Sentence --- # Source: https://docs.fireflies.ai/realtime-api/getting-started.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Getting Started > Learn how to connect to Fireflies.ai's Realtime API for live transcription ## Overview This guide shows you how to connect to the Fireflies.ai Realtime API and start receiving transcription events in real time. ## Endpoint ```text theme={null} wss://api.fireflies.ai ``` ## Requirements You'll need the following: * A valid API token * A `transcriptId` (or meeting ID) Use the [Active Meetings](/graphql-api/query/active-meetings) query to discover meetings currently in progress and get their IDs for connecting to the Realtime API. ## Connecting via Socket.IO Use the Socket.IO client to connect and listen for events. ```ts theme={null} import { io } from 'socket.io-client'; const socket = io('wss://api.fireflies.ai', { path: '/ws/realtime', auth: { token: 'Bearer ', transcriptId: '' } }); socket.on('auth.success', data => { console.log('Authenticated:', data); }); socket.on('auth.failed', err => { console.error('Authentication failed:', err); }); socket.on('connection.error', err => { console.error('Connection error:', err); }); socket.on('connection.established', () => { console.log('Connection established'); }); socket.on('transcription.broadcast', event => { console.log('Transcript event:', event); }); ``` ## Auth Parameters | Field | Type | Description | | -------------- | ------ | ------------------------------- | | `token` | string | Your API access token | | `transcriptId` | string | ID of the meeting or transcript | If authentication fails, the server emits an `auth.failed` event and disconnects the socket. See [Authorization](/fundamentals/authorization) ## Additional Resources Overview of Realtime API Query meetings currently in progress Authenticating your requests with the Fireflies API --- # Source: https://docs.fireflies.ai/getting-started/introduction.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Introduction > Welcome to Fireflies public API documentation. We are actively working to expose more functionality via our API. If you have specific requests, please [reach out to us](https://guide.fireflies.ai/). # Introduction ## Overview of the API The Fireflies API is built on top of GraphQL, a powerful interface designed to provide you with efficient and flexible access to your data. This API allows you to retrieve exactly the data you need in a structured format. Whether you are building a web application, a mobile app, or a complex software system, our API caters to a wide range of data requirements. Our API covers various functionalities, including queries for fetching data as well as uploading meeting audio. It is designed to be intuitive and easy to use, ensuring that you can start fetching and manipulating data with minimal setup. ## Advantages of Using GraphQL **1. Precise Data Fetching:** One of the key strengths of GraphQL is its ability to return exactly what you request and nothing more. This precision eliminates the over-fetching of data, common in traditional REST APIs, leading to more efficient network utilization and faster response times. **2. Single Endpoint:** Unlike REST APIs, which often require multiple endpoints for different data needs, GraphQL operates through a single endpoint. This simplification streamlines interactions with the API and makes maintaining and managing the API more straightforward. **3. Flexibility and Scalability:** GraphQL APIs are incredibly flexible, allowing for queries that can evolve with your needs. This flexibility, combined with efficient data retrieval, makes GraphQL an ideal choice for both small projects and large-scale applications. In the following sections, we will guide you through the essential components of our API, provide detailed examples, and offer best practices to help you make the most of our API. Whether you're a new user or an experienced developer, this documentation is designed to assist you in seamlessly integrating the API into your applications. ## Additional Resources Make your first request in under 5 minutes Foundational guide to the core aspects of the Fireflies API --- # Source: https://docs.fireflies.ai/fundamentals/introspection.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Introspection > Query generation and API exploration. ## Overview Introspection is a feature that allows querying a GraphQL server to discover its schema. This capability is crucial for developers to understand available queries, mutations, and the structure of the data they can work with, facilitating seamless API interaction and exploration. ### Requirements You will need a Fireflies.ai API key to use introspection. For more details, please visit [Authorization](/fundamentals/authorization#acquiring-a-token) ### Introspection using Apollo Sandbox For introspection using our builtin Apollo Sandbox, visit [api.fireflies.ai/graphql](https://api.fireflies.ai/graphql) and enter your `api_key` in the Headers section as a Bearer token ### Introspection using Postman Create a new Graphql Request in Postman with the url [api.fireflies.ai/graphql](https://api.fireflies.ai/graphql) and enter your `api_key` in the Headers section as a Bearer token ## Additional Resources Foundational guide to the core aspects of the Fireflies API Authenticating your requests with the Fireflies API --- # Source: https://docs.fireflies.ai/miscellaneous/language-codes.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Language codes > Language code abbreviations for the Fireflies.ai API ## Overview This page lists the language codes supported by the Fireflies.ai API. You may use these codes with the `uploadAudio` or `addToLive` functionality to specify custom languages for your meetings. Each language entry includes the language name and its corresponding code, providing a quick and easy reference. ## References * [Add to Live](/graphql-api/mutation/add-to-live) * [Upload Audio](/graphql-api/mutation/upload-audio) ## Codes ```json theme={null} [ { "languageName": "Arabic", "languageCode": "ar" }, { "languageName": "Bulgarian", "languageCode": "bg" }, { "languageName": "Chinese", "languageCode": "zh" }, { "languageName": "Croatian", "languageCode": "hr" }, { "languageName": "Czech", "languageCode": "cs" }, { "languageName": "Danish", "languageCode": "da" }, { "languageName": "Dutch", "languageCode": "nl" }, { "languageName": "English", "languageCode": "en" }, { "languageName": "US English", "languageCode": "en-US" }, { "languageName": "Australia English", "languageCode": "en-AU" }, { "languageName": "UK English", "languageCode": "en-GB" }, { "languageName": "Finnish", "languageCode": "fi" }, { "languageName": "French", "languageCode": "fr" }, { "languageName": "German", "languageCode": "de" }, { "languageName": "Hebrew", "languageCode": "he" }, { "languageName": "Hindi", "languageCode": "hi" }, { "languageName": "Hungarian", "languageCode": "hu" }, { "languageName": "Indonesian", "languageCode": "id" }, { "languageName": "Italian", "languageCode": "it" }, { "languageName": "Japanese", "languageCode": "ja" }, { "languageName": "Korean", "languageCode": "ko" }, { "languageName": "Malay", "languageCode": "ms" }, { "languageName": "Norwegian", "languageCode": "no" }, { "languageName": "Polish", "languageCode": "pl" }, { "languageName": "Portuguese", "languageCode": "pt" }, { "languageName": "Romanian", "languageCode": "ro" }, { "languageName": "Russian", "languageCode": "ru" }, { "languageName": "Slovak", "languageCode": "sk" }, { "languageName": "Spanish", "languageCode": "es" }, { "languageName": "Latin American Spanish", "languageCode": "es-419" }, { "languageName": "Swedish", "languageCode": "sv" }, { "languageName": "Tamil", "languageCode": "ta" }, { "languageName": "Thai", "languageCode": "th" }, { "languageName": "Filipino", "languageCode": "tl" }, { "languageName": "Turkish", "languageCode": "tr" }, { "languageName": "Ukrainian", "languageCode": "uk" }, { "languageName": "Vietnamese", "languageCode": "vi" } ] ``` --- # Source: https://docs.fireflies.ai/fundamentals/limits.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Limits > File size and API rate limits for the Fireflies API ## Overview Understanding the limitations of our API is crucial for efficient and uninterrupted usage. Below you'll find detailed information about the upload limits for different file types and the rate limits applicable to various subscription plans. ## Upload Limits The Fireflies API accommodates a range of file sizes for different user types. Here's a breakdown of the maximum file sizes for audio and video uploads: | Upload Type | Free User Limit | Pro / Business / Enterprise Limit | | ----------- | --------------- | --------------------------------- | | Audio Files | Up to 200MB | Up to 200MB | | Video Files | Up to 100MB | Up to 1.5GB | ### Understanding Upload Limits * **Audio Files:** All users can upload an audio file no greater than 200MB, ensuring ample capacity for high-quality audio content. * **Video Files for Free Users:** Free users have a maximum upload limit of 100MB for video files, suitable for short clips and previews. * **Video Files for Pro/Business/Enterprise Users:** Higher-tier users can upload larger video files up to 1.5GB, accommodating longer and higher resolution content. ## API Rate Limits To maintain the quality of service and availability for all users, our API enforces rate limits based on the type of subscription plan. | Plan | API Rate Limit | | --------------------- | ------------------- | | Free / Pro | 50 requests per day | | Business / Enterprise | 60 requests per min | ### Add to Live API Rate Limit The Add to Live API has a rate limit of 3 requests per 20 minutes. ### Navigating API Rate Limits * **Free and Pro Plans:** These plans are ideal for light to moderate usage, with a cap of 50 API requests per day. This rate is suitable for testing and small-scale applications. * **Business and Enterprise Plans:** Designed for more demanding use cases, these plans allow up to 60 requests per minute, providing ample capacity for larger applications and higher volume demands. These limits are in place to ensure optimal performance and fair usage across our platform. ## Additional Resources Use the API to upload audio to Fireflies.ai Authenticating your requests with the Fireflies API --- # Source: https://docs.fireflies.ai/graphql-api/query/live_action_items.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Live Action Items > Query live action items for a meeting ## Overview The `live_action_items` query allows you to fetch action items for a live meeting. This includes both action items automatically created by Fireflies during the meeting and action items created via the `createLiveActionItem` mutation. ## Arguments The ID of the meeting to fetch live action items for ## Response Returns an array of `LiveActionItem` objects with the following fields: Name of the person who the action item is associated with The action item text ## Usage Example To fetch live action items for a meeting: ```graphql theme={null} query LiveActionItems($meeting_id: ID!) { live_action_items(meeting_id: $meeting_id) { name action_item } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "query LiveActionItems($meeting_id: ID!) { live_action_items(meeting_id: $meeting_id) { name action_item } }", "variables": { "meeting_id": "your_meeting_id" } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: `query LiveActionItems($meeting_id: ID!) { live_action_items(meeting_id: $meeting_id) { name action_item } }`, variables: { meeting_id: 'your_meeting_id' } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' query LiveActionItems($meeting_id: ID!) { live_action_items(meeting_id: $meeting_id) { name action_item } } ''', 'variables': { 'meeting_id': 'your_meeting_id' } } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()['data']) else: print(response.text) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"query LiveActionItems($meeting_id: ID!) { live_action_items(meeting_id: $meeting_id) { name action_item } }\", \"variables\": {\"meeting_id\": \"your_meeting_id\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "live_action_items": [ { "name": "John Doe", "action_item": "Follow up with the client about the proposal" }, { "name": "Jane Smith", "action_item": "Schedule a follow-up meeting for next week" } ] } } ``` ## Error Codes List of possible error codes that may be returned by the `live_action_items` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user account has been cancelled. Please contact support if you encounter this error.

The meeting with the specified ID was not found or you do not have access to it.

You do not have permission to view action items for this meeting. Only the meeting organizer or team admin can view live action items.

## Additional Resources Create action items during a live meeting Pause or resume recording for a live meeting --- # Source: https://docs.fireflies.ai/getting-started/llm-development.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # LLM-based Development > Enhance your AI coding experience with LLM readable documentation. ### Overview Welcome to the guide on utilizing our specialized `llms.txt` files to enhance your LLM-based coding workflow. Whether you’re using Replit, Cursor, Devin, or any other AI coding tool, this page will assist you in leveraging our resources to debug and refine code generated by Fireflies. Our platform seamlessly integrates with a variety of AI coding tools. While the generated code may not always be perfect, this guide outlines how to effectively use our `llms.txt` files to improve the debugging process, ensuring your development workflow remains smooth and efficient. ### How to Use `llms.txt` Files #### For Tools with Limited Agentic Capabilities If your coding tool does not support web querying or autonomous resource fetching: * **Download the File**\ Access the complete file by visiting [this link](https://docs.fireflies.ai/llms-full.txt) and download it to your local machine. * **Upload and Debug**\ Upload the downloaded file to your AI coding tool. Instruct your tool to analyze and debug the code using the content of this file. This manual intervention guides the tool in identifying and fixing errors in generated code. #### For Advanced, Agentic Coding Tools If your coding tool is sophisticated and capable of querying the web independently: * **Provide the URL Directly**\ Instead of downloading the full file, supply your tool with the URL [https://docs.fireflies.ai/llms-full.txt](https://docs.fireflies.ai/llms-full.txt). * **Let It Decide**\ Your advanced tool will automatically determine which parts of the file to use and where to look, streamlining the debugging process without additional manual steps. ### Additional Tips * **Tool Configuration:** Ensure that your AI coding tool is configured to handle file uploads or URL-based inputs effectively. * **Experiment and Adapt:** Different tools may interact with our resources in unique ways. Experiment with both methods to find the approach that best suits your workflow. * **Support and Documentation:** If you encounter any challenges or need further assistance, please contact our support team. Happy coding! ## Additional Resources Connect your AI tools directly to your meeting data Foundational guide to the core aspects of the Fireflies API --- # Source: https://docs.fireflies.ai/getting-started/mcp-configuration.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # MCP Server Configuration > Connect your AI tools directly to your meeting data with Fireflies MCP Server. ### Overview The Fireflies MCP Server enables AI tools to connect directly to your meeting data without switching platforms or copying transcript excerpts. This integration allows you to ask questions like "What were the main objections in this week's sales calls?" or "Create a summary of all product feedback from user interviews this month" directly from your AI coding tools. ### What is MCP? Model Context Protocol (MCP) is an open standard that enables AI applications to securely connect to external data sources and tools. With Fireflies MCP Server, your AI tools can access meeting transcripts, summaries, action items, and insights directly from your Fireflies account. ### Getting Started #### Prerequisites * Active Fireflies.ai account * AI tool that supports MCP (such as Claude, OpenAI Connector, Cursor, Devin, or other MCP-compatible applications) #### Installation 1. **Configure your AI tool** Add the Fireflies MCP server to your AI tool's configuration. The remote server URL is [https://api.fireflies.ai/mcp](https://api.fireflies.ai/mcp) which uses OAuth with your Fireflies account. The exact steps depend on your specific AI application. For specific AI tools, you can also configure directly through: * [Claude Settings](https://claude.ai/settings/connectors) * [Devin MCP Marketplace](https://app.devin.ai/settings/mcp-marketplace/setup/fireflies) 2. **Use your Fireflies API key on Claude Desktop** (Optional): 1. Add this config to your `claude_desktop_config.json` file: ```json theme={null} { "mcpServers": { "fireflies": { "command": "npx", "args": [ "mcp-remote", "https://api.fireflies.ai/mcp", "--header", "Authorization: Bearer YOUR_API_KEY_HERE" ] } } } ``` 2. Get your API Key from Fireflies * Go to **Settings > Developer Settings** and **Copy your API key** * [See how to get your API key →](https://guide.fireflies.ai/hc/en-us/articles/360020249198-How-to-access-the-Fireflies-API-key) * Once you have the API key, paste it in your claude\_desktop\_config.json * Replace `YOUR_API_KEY_HERE` with your actual API key 3. Restart Claude Desktop 3. **Start querying your data** Once configured, you can ask your AI tool questions about your meeting data directly. ### Use Cases * **Sales Analysis**: "What were the common objections in this week's sales calls?" * **Product Feedback**: "Summarize all product feedback from user interviews this month" * **Meeting Insights**: "What action items were assigned to John across all meetings?" * **Trend Analysis**: "How has customer sentiment changed over the past quarter?" ### Additional Resources Complete reference for all available MCP tools and their parameters Enhance your AI coding experience with LLM readable documentation Authenticating your requests with the Fireflies API --- # Source: https://docs.fireflies.ai/schema/meeting-analytics.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # MeetingAnalytics > Schema for MeetingAnalytics Sentiment analysis of the meeting. See [Sentiments](/schema/sentiments) Categorized analytics of the meeting content. See [AnalyticsCategories](#analyticscategories) Array of analytics data for each speaker in the meeting. See [AnalyticsSpeaker](#analyticsspeaker) ## AnalyticsCategories Number of questions asked during the meeting. Number of date and time references mentioned in the meeting. Number of metrics or measurements discussed in the meeting. Number of tasks or action items identified in the meeting. ## AnalyticsSpeaker Unique identifier for the speaker. Name of the speaker. Total speaking time of the speaker in seconds. Total number of words spoken by the speaker. Duration of the speaker's longest continuous speech in seconds. Number of times the speaker spoke during the meeting. Number of filler words (um, uh, like, etc.) used by the speaker. Number of questions asked by the speaker. Percentage of the total meeting time the speaker was talking. Average speaking rate of the speaker in words per minute. ## Additional Resources Schema for Sentiments Schema for Speaker --- # Source: https://docs.fireflies.ai/schema/meeting-attendee.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # MeetingAttendee > Schema for MeetingAttendee Display name of the meeting attendee. Email address of the meeting attendee. Phone number of the meeting attendee. Full name of the meeting attendee. Deprecated field ## Additional Resources Schema for MeetingAttendance Schema for Transcript --- # Source: https://docs.fireflies.ai/schema/meeting-info.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # MeetingInfo > Schema for MeetingInfo Boolean value that returns `true` if the bot joined the call, `false` otherwise. Boolean value that returns `true` if the meeting does not contain any spoken words. Otherwise false. String value representing the summary status. Possible values are `processing`, `processed`, `failed`, `skipped`. ## Additional Resources Schema for Transcript Schema for Summary --- # Source: https://docs.fireflies.ai/schema/enum/meeting-state.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # MeetingState > Enum for MeetingState - possible states for active meetings The `MeetingState` enum specifies the current state of an active meeting. ## Values The meeting is currently in progress with the Fireflies bot actively recording. The meeting has been paused. The Fireflies bot is still in the meeting but recording is temporarily stopped. ## Usage The `MeetingState` enum is used in two contexts: 1. **As a filter** in the [GetActiveMeetingsInput](/schema/input/active-meetings-input) to filter meetings by state 2. **As a response field** in the [ActiveMeeting](/schema/active-meeting) type to indicate the current state ### Filtering by State ```graphql theme={null} query ActiveMeetings { active_meetings(input: { states: [active] }) { id title state } } ``` ### Getting All States (Default) When no `states` filter is provided, both `active` and `paused` meetings are returned: ```graphql theme={null} query ActiveMeetings { active_meetings { id title state } } ``` ## Related Types * [ActiveMeeting](/schema/active-meeting) - Schema containing the state field * [GetActiveMeetingsInput](/schema/input/active-meetings-input) - Input type using this enum for filtering * [Active Meetings Query](/graphql-api/query/active-meetings) - Query documentation --- # Source: https://docs.fireflies.ai/realtime-api/overview.md # Source: https://docs.fireflies.ai/mcp-tools/overview.md # Source: https://docs.fireflies.ai/examples/overview.md # Source: https://docs.fireflies.ai/askfred/overview.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Overview > Use AI to intelligently query and analyze your meeting transcripts with natural language ## What is AskFred? AskFred is Fireflies' AI-powered meeting assistant that lets you ask natural language questions about your meeting transcripts. Query individual meetings or search across multiple meetings to get intelligent, context-aware answers. ### Key Capabilities **Intelligent Q\&A** - Ask questions in natural language and receive comprehensive answers with smart follow-up suggestions **Contextual Threads** - Maintain conversations where follow-up questions preserve context from previous exchanges **Multi-Meeting Analysis** - Query across meetings using filters to identify patterns and aggregate insights ## API Operations AskFred provides a comprehensive set of GraphQL operations: ### Queries * [askfred\_threads](/graphql-api/query/askfred-threads) - List all conversation threads * [askfred\_thread](/graphql-api/query/askfred-thread) - Get specific thread with full history ### Mutations * [createAskFredThread](/graphql-api/mutation/create-askfred-thread) - Start a new conversation * [continueAskFredThread](/graphql-api/mutation/continue-askfred-thread) - Add follow-up questions * [deleteAskFredThread](/graphql-api/mutation/delete-askfred-thread) - Remove threads ## Next Steps Create your first thread and start querying meetings Example questions and industry-specific scenarios --- # Source: https://docs.fireflies.ai/getting-started/quickstart.md # Source: https://docs.fireflies.ai/askfred/quickstart.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Quickstart > Get started with AskFred in minutes - learn how to create threads and ask questions about your meetings ## Prerequisites Before you begin, make sure you have: 1. **API Key**: Obtain your API key from [app.fireflies.ai/integrations](https://app.fireflies.ai/integrations/custom/fireflies) 2. **Transcript ID** (optional): The ID of a meeting transcript you want to query If you don't have a transcript ID, you can query across all your meetings using filters. See [Step 3](#step-3-query-across-meetings) below. ## Step 1: Create Your First Thread Start by asking a question about a specific meeting: ```graphql GraphQL theme={null} mutation CreateThread { createAskFredThread(input: { query: "What were the main discussion points?", transcript_id: "your_transcript_id", response_language: "en", format_mode: "markdown" }) { message { id thread_id answer suggested_queries } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation CreateThread($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id answer suggested_queries } } }", "variables": { "input": { "query": "What were the main discussion points?", "transcript_id": "your_transcript_id", "response_language": "en", "format_mode": "markdown" } } }' \ https://api.fireflies.ai/graphql ``` ```javascript JavaScript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const mutation = ` mutation CreateThread($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id answer suggested_queries } } } `; const variables = { input: { query: 'What were the main discussion points?', transcript_id: 'your_transcript_id', response_language: 'en', format_mode: 'markdown' } }; axios .post(url, { query: mutation, variables }, { headers }) .then(response => { console.log(response.data.data.createAskFredThread); }) .catch(error => { console.error(error); }); ``` ```python Python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } mutation = """ mutation CreateThread($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id answer suggested_queries } } } """ variables = { 'input': { 'query': 'What were the main discussion points?', 'transcript_id': 'your_transcript_id', 'response_language': 'en', 'format_mode': 'markdown' } } response = requests.post( url, json={'query': mutation, 'variables': variables}, headers=headers ) print(response.json()) ``` ### Response ```json theme={null} { "data": { "createAskFredThread": { "message": { "id": "msg_abc123", "thread_id": "thread_xyz789", "answer": "The main discussion points were:\n\n1. **Q4 Product Roadmap**: The team reviewed upcoming features...\n2. **Budget Allocation**: Discussion on resource allocation...\n3. **Timeline Concerns**: Several concerns about launch dates...", "suggested_queries": [ "Can you elaborate on the timeline concerns?", "What features are prioritized for Q4?", "Who raised concerns about the budget?" ] } } } } ``` ## Step 2: Ask Follow-up Questions Continue the conversation with context-aware follow-ups using the `thread_id` from the previous response: ```graphql GraphQL theme={null} mutation ContinueThread { continueAskFredThread(input: { thread_id: "thread_xyz789", query: "Can you elaborate on the timeline concerns?" }) { message { answer suggested_queries } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation ContinueThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { answer suggested_queries } } }", "variables": { "input": { "thread_id": "thread_xyz789", "query": "Can you elaborate on the timeline concerns?" } } }' \ https://api.fireflies.ai/graphql ``` ```javascript JavaScript theme={null} const variables = { input: { thread_id: 'thread_xyz789', query: 'Can you elaborate on the timeline concerns?' } }; const mutation = ` mutation ContinueThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { answer suggested_queries } } } `; axios.post(url, { query: mutation, variables }, { headers }) .then(response => console.log(response.data)) .catch(error => console.error(error)); ``` ```python Python theme={null} variables = { 'input': { 'thread_id': 'thread_xyz789', 'query': 'Can you elaborate on the timeline concerns?' } } mutation = """ mutation ContinueThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { answer suggested_queries } } } """ response = requests.post( url, json={'query': mutation, 'variables': variables}, headers=headers ) print(response.json()) ``` ## Step 3: Query Across Meetings Analyze patterns across multiple meetings using filters: ```graphql GraphQL theme={null} mutation CrossMeetingAnalysis { createAskFredThread(input: { query: "What customer concerns were raised this month?", filters: { start_time: "2024-03-01T00:00:00Z", end_time: "2024-03-31T23:59:59Z", participants: ["customer@example.com"] } }) { message { answer suggested_queries } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation CrossMeetingAnalysis($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { answer suggested_queries } } }", "variables": { "input": { "query": "What customer concerns were raised this month?", "filters": { "start_time": "2024-03-01T00:00:00Z", "end_time": "2024-03-31T23:59:59Z", "participants": ["customer@example.com"] } } } }' \ https://api.fireflies.ai/graphql ``` For more details on available filters and parameters, see the [createAskFredThread](/graphql-api/mutation/create-askfred-thread) documentation. ## Step 4: List Your Threads Retrieve all your conversation threads: ```graphql GraphQL theme={null} query GetThreads { askfred_threads { id title transcript_id created_at } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "query { askfred_threads { id title transcript_id created_at } }" }' \ https://api.fireflies.ai/graphql ``` ## Additional Resources Discover common scenarios and example questions Explore all available parameters and options --- # Source: https://docs.fireflies.ai/schema/input/role.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Role > Schema for Role Valid types for role are `admin` and `user` --- # Source: https://docs.fireflies.ai/schema/sentence.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Sentence > Schema for Sentence Index Default transcription sentence or user edited transcription sentence. Transcribed sentence from meeting audio Start time of Sentence End time of Sentence Unique identifier for Speaker Name of the speaker. Sentiment analysis from meeting audio. Type of [AIFilter](/schema/aifilter) ## Additional Resources Schema for AIFilter Schema for Speaker --- # Source: https://docs.fireflies.ai/schema/sentiments.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Sentiments > Schema for Sentiments Percentage of negative sentiment detected in the conversation. Percentage of neutral sentiment detected in the conversation. Percentage of positive sentiment detected in the conversation. ## Additional Resources Schema for Sentence Schema for Meeting Analytics --- # Source: https://docs.fireflies.ai/graphql-api/mutation/set-user-role.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Set User Role > Use the API to set user roles ## Overview The `setUserRole` mutation allows for the updating of a user's role within a team. ## Arguments The unique identifier of the user. The [Role](/schema/input/role) to be assigned to the user. Valid types for user are `admin` and `user` ## Usage Example To set a user's role, provide the user's ID and the desired role as arguments to the mutation. Here's an example of how this mutation could be used: ```graphql theme={null} mutation setUserRole($userId: String!, $role: Role!) { setUserRole(user_id: $userId, role: $role) { id name email role } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation($user_id: String!, $role: Role!) { setUserRole(user_id: $user_id, role:$role) { name is_admin } }", "variables": { "user_id": "your_user_id", "role": "admin" } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: `mutation Mutation($userId: String!, $role: Role!) { setUserRole(user_id: $userId, role: $role) { name is_admin } }`, variables: { userId: 'your_user_id', role: 'admin' } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' mutation($user_id: String!, $role: Role!) { setUserRole(user_id: $user_id, role:$role) { name is_admin } } ''', 'variables': { 'user_id': "your_user_id", 'role': "admin" } } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()['data']) else: print(response.text) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"mutation SetUserRole($user_id: String!, $role: Role!) { setUserRole(user_id: $user_id, role: $role) { name is_admin } }\", \"variables\": {\"user_id\": \"your_user_id\", \"role\": \"admin\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "setUserRole": { "name": "Justin Fly", "is_admin": "true", } } } ``` ## Error Codes List of possible error codes that may be returned by the `setUserRole` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

This may indicate that you are not a part of any team. Please contact support if you encounter this error

The user ID you are trying to query is not in your team.

The user does not have admin privileges to set the user role.

The team must have at least one admin. Please add an admin to the team or contact support if you encounter this error.

An invalid argument was provided to the mutation for the `role` field. Please check the arguments you are providing and try again.

## Additional Resources Querying list of users Querying user details --- # Source: https://docs.fireflies.ai/schema/speaker.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Speaker > Schema for Speaker ID of the speaker identified within the transcript Name of the speaker identified within the transcript ## Additional Resources Schema for Transcript Schema for Sentence --- # Source: https://docs.fireflies.ai/schema/summary-section.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # SummarySection > Extended sections of the summary included by customizing the summary from the dashboard. Title of the section Response summary content of the section ## Additional Resources Schema for Summary Schema for Transcript --- # Source: https://docs.fireflies.ai/schema/summary.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Summary > AI generated summary of the meeting. Meeting AI summary prompts are defined by [AI apps](https://app.fireflies.ai/apps) and can be customized to your needs. A list of action items generated by the AI based on the meeting transcript A list of keywords generated by the AI based on the meeting transcript An outline of the meeting with timestamps generated by the AI based on the meeting transcript A summary of the meeting generated by the AI A list of shorthand bullets generated by the AI Detailed meeting notes generated by the AI A summary of the meeting in 1 sentence Summary of the meeting in a few bullet points with descriptive emojis Summary of the meeting in a single paragraph Brief overview of the meeting Meeting classification List of topics discussed during the meeting. Chapters of the short transcript. The short transcript is an LLM-condensed transcript that may be helpful for downstream applications Optional sections of the summary included by customizing the summary from the dashboard ## Additional Resources Schema for Summary Section Schema for Transcript --- # Source: https://docs.fireflies.ai/fundamentals/super-admin.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Super Admin > Fireflies Super Admin with advanced capabilities for querying your data ## Overview The Super Admin API offers advanced features such as team-wide webhooks and privacy setting bypass, providing enhanced control and flexibility for managing your data. This is only available on the enterprise tier for company admins - [learn more](https://guide.fireflies.ai/hc/en-us/articles/30453010621585-Learn-about-the-Super-Admin-role). ## Super Admin Webhooks The Super Admin webhook notifies you of all team meetings owned by your team, allowing you to automate workflows, integrate with other tools, and maintain an overview of your team's meetings with a single webhook. ### Setting up Super Admin Webhooks Follow the steps below to set up the Super Admin webhook: Visit the [Fireflies.ai dashboard settings](https://app.fireflies.ai/settings) Navigate to the Developer settings tab Enter a valid https URL in the webhooks field and save It is highly suggested to use [webhook auth](/graphql-api/webhooks) to secure your servers. ### Privacy Settings Bypass The Super Admin functionality allows you to bypass your team's privacy settings, allowing you to query all data in your team's account. ### Requirements Super Admin API is only available to teams on the Enterprise plan. [Learn more here](https://guide.fireflies.ai/hc/en-us/articles/30453010621585-Learn-about-the-Super-Admin-role) and reach out to us with questions ## Additional Resources Create notifications using webhooks Authenticating your requests with the Fireflies API --- # Source: https://docs.fireflies.ai/schema/transcript.md # Source: https://docs.fireflies.ai/graphql-api/query/transcript.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Transcript > Querying transcript details ## Overview The transcript query is designed to fetch details associated with a specific transcript ID. ## Arguments ## Schema Fields available to the [Transcript](/schema/transcript) query ## Usage Example ```graphql theme={null} query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { id dateString privacy analytics { sentiments { negative_pct neutral_pct positive_pct } categories { questions date_times metrics tasks } speakers { speaker_id name duration word_count longest_monologue monologues_count filler_words questions duration_pct words_per_minute } } speakers { id name } sentences { index speaker_name speaker_id text raw_text start_time end_time ai_filters { task pricing metric question date_and_time text_cleanup sentiment } } title host_email organizer_email calendar_id user { user_id email name num_transcripts recent_meeting minutes_consumed is_admin integrations } fireflies_users participants date transcript_url audio_url video_url duration meeting_attendees { displayName email phoneNumber name location } meeting_attendance { name join_time leave_time } summary { keywords action_items outline shorthand_bullet overview bullet_gist gist short_summary short_overview meeting_type topics_discussed transcript_chapters } cal_id calendar_type meeting_info { fred_joined silent_meeting summary_status } apps_preview { outputs { transcript_id user_id app_id created_at title prompt response } } meeting_link channels { id } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }", "variables": { "transcriptId": "your_transcript_id" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }', variables: { transcriptId: 'your_transcript_id' } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }", "variables": {"transcriptId": "your_transcript_id"}}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }\", \"variables\": {\"transcriptId\": \"your_transcript_id\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "transcript": { "title": "Weekly sync", "id": "transcript-id", } } } ``` ## Error Codes List of possible error codes that may be returned by the `transcript` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

The transcript ID you are trying to query does not exist or you do not have access to it.

## Additional Resources Querying list of transcripts Use the API to update meeting titles --- # Source: https://docs.fireflies.ai/graphql-api/query/transcripts.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Transcripts > Querying list of transcripts ## Overview The transcripts query is designed to fetch a list of transcripts against input arguments. ## Arguments This field is deprecated. Please use `keyword` instead. Title of the transcript This argument is mutually exclusive with `keyword` field The maximum allowable length for this field is `256` characters. Allows searching for keywords in meeting title and/or words spoken during the meeting This argument is mutually exclusive with `title` field The maximum allowable length for this field is `255` characters. Specify the scope for keyword search. If scope is provided, `keyword` becomes a required field Defaults to `TITLE` if no value is provided The available options for this field are: * `title`: Search within the title. * `sentences`: Search within the [sentences](/schema/sentence). * `all`: Search within title and sentences. Return all transcripts created after `fromDate`. The `fromDate` parameter accepts a date-time string in the ISO 8601 format, specifically in the form `YYYY-MM-DDTHH:mm.sssZ`. For example, a valid timestamp would be `2024-07-08T22:13:46.660Z`. Return all transcripts created before `toDate`. The `toDate` parameter accepts a date-time string in the ISO 8601 format, specifically in the form `YYYY-MM-DDTHH:mm.sssZ`. For example, a valid timestamp would be `2024-07-08T22:13:46.660Z`. This field is deprecated. Please use `fromDate` and `toDate` instead. Return all transcripts created within the date specified. Query input value must be in milliseconds. For example, you can use the JavaScript `new Date().getTime()` to get the datetime in milliseconds which should look like this `1621292557453`. The timezone for this field is UTC +00:00 For more details regarding time since [EPOCH](https://currentmillis.com/) Number of transcripts to return. Maxiumum 50 in one query Number of transcripts to skip. Filter all meetings accordingly to meetings that have this email as the host. This field is deprecated. Please use `organizers` instead. Filter meetings that have this email as the organizer. This field is deprecated. Please use `participants` instead. Filter meetings that contain this email as an attendee. [User id](/schema/user). Filter all meetings that have this user ID as the organizer or participant. Filter all meetings that have the API key owner as the organizer. Filter meetings that have any of these emails as organizers. Accepts an array of email addresses. Cannot be combined with the deprecated `organizer_email` or `participant_email` fields. Each email must be valid and 256 characters or fewer. Filter meetings that contain any of these emails as attendees. Accepts an array of email addresses. Cannot be combined with the deprecated `organizer_email` or `participant_email` fields. Each email must be valid and 256 characters or fewer. Filter meetings that belong to a specific channel. Accepts a single channel ID. The channel ID must be a valid string and 256 characters or fewer. ## Schema Fields available to the [Transcript](/schema/transcript) query ## Usage Example ```graphql theme={null} query Transcripts( $title: String $date: Float $limit: Int $skip: Int $hostEmail: String $participantEmail: String $organizers: [String] $participants: [String] $userId: String $channelId: String ) { transcripts( title: $title date: $date limit: $limit skip: $skip host_email: $hostEmail participant_email: $participantEmail organizers: $organizers participants: $participants user_id: $userId channel_id: $channelId ) { id analytics { sentiments { negative_pct neutral_pct positive_pct } categories { questions date_times metrics tasks } speakers { speaker_id name duration word_count longest_monologue monologues_count filler_words questions duration_pct words_per_minute } } sentences { index speaker_name speaker_id text raw_text start_time end_time ai_filters { task pricing metric question date_and_time text_cleanup sentiment } } title speakers { id name } host_email organizer_email meeting_info { fred_joined silent_meeting summary_status } calendar_id user { user_id email name num_transcripts recent_meeting minutes_consumed is_admin integrations } fireflies_users participants date transcript_url audio_url video_url duration meeting_attendees { displayName email phoneNumber name location } meeting_attendance { name join_time leave_time } summary { keywords action_items outline shorthand_bullet overview bullet_gist gist short_summary short_overview meeting_type topics_discussed transcript_chapters } cal_id calendar_type apps_preview { outputs { transcript_id user_id app_id created_at title prompt response } } meeting_link channels { id } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query Transcripts($userId: String) { transcripts(user_id: $userId) { title id } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query Transcripts($userId: String) { transcripts(user_id: $userId) { title id } }', variables: { userId: 'your_user_id' } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query Transcripts($userId: String) { transcripts(user_id: $userId) { title id } }", "variables": {"userId": "user_id"}}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); String json = "{\"query\":\"query Transcripts { transcripts { title id } } \"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "transcripts": [ { "title": "Weekly sync", "id": "transcript-id", }, { "title": "ClientMeeting.mp3", "id": "transcript-id-2", } ] } } ``` ## Error Codes List of possible error codes that may be returned by the `transcripts` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user ID you are trying to query does not exist or you do not have access to it.

## Additional Resources Querying transcript details Use the API to upload audio to Fireflies.ai --- # Source: https://docs.fireflies.ai/schema/input/update-meeting-channel-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # UpdateMeetingChannelInput > Schema for UpdateMeetingChannelInput Array of Transcript IDs to update. Must contain 1–5 items. The target Channel ID. A meeting can only belong to one channel; this mutation sets the meeting's channel to the specified value. --- # Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-channel.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Update Meeting Channel > Use the API to update meeting channel assignments ## Overview The `updateMeetingChannel` mutation allows for batch updating the channel assignment of multiple meeting transcripts. This operation requires admin privileges within the team or ownership of the meetings. You can update 1–5 transcripts at once with all-or-nothing semantics—if any transcript fails validation, none are updated. ## Arguments The channel assignment to be applied to the specified transcripts. See [UpdateMeetingChannelInput](/schema/input/update-meeting-channel-input). ## Usage Example To update meeting channels, provide an array of transcript IDs (1–5 items) and a single channel ID as arguments to the mutation. Here's an example of how this mutation could be used: ```graphql theme={null} mutation UpdateMeetingChannel($input: UpdateMeetingChannelInput!) { updateMeetingChannel(input: $input) { id title channels { id } } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation($input: UpdateMeetingChannelInput!) { updateMeetingChannel(input: $input) { id title channels { id } } }", "variables": { "input": { "transcript_ids": ["transcript_id_1", "transcript_id_2"], "channel_id": "channel_id" } } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' }; const data = { query: ` mutation($input: UpdateMeetingChannelInput!) { updateMeetingChannel(input: $input) { id title channels { id } } } `, variables: { input: { transcript_ids: ['transcript_id_1', 'transcript_id_2'], channel_id: 'channel_id' } } }; const response = await axios.post(url, data, { headers }); console.log(response.data); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ` mutation($input: UpdateMeetingChannelInput!) { updateMeetingChannel(input: $input) { id title channels { id } } } `, 'variables': { 'input': { 'transcript_ids': ['transcript_id_1', 'transcript_id_2'], 'channel_id': 'channel_id' } } } response = requests.post(url, json=data, headers=headers) print(response.json()) ``` ```java java theme={null} import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse.BodyHandlers; public class UpdateMeetingChannelExample { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String json = "{" + "\"query\":\"mutation($input: UpdateMeetingChannelInput!) { updateMeetingChannel(input: $input) { id title channels { id } } }\"," + "\"variables\":{" + "\"input\":{" + "\"transcript_ids\":[\"transcript_id_1\",\"transcript_id_2\"]," + "\"channel_id\":\"channel_id\"" + "}" + "}" + "}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "updateMeetingChannel": [ { "id": "transcript_id_1", "title": "Weekly Sync", "channels": [ { "id": "channel_id" } ] }, { "id": "transcript_id_2", "title": "Product Review", "channels": [ { "id": "channel_id" } ] } ] } } ``` ## FAQ

Only users with admin privileges or meeting owners can update meeting channels. All specified meetings must be owned by users in your team.

You can update between 1 and 5 transcripts in a single mutation call. If you need to update more transcripts, make multiple mutation calls.

The mutation uses all-or-nothing semantics. If any transcript fails validation (not found, no access, or permission denied), none of the transcripts will be updated. All transcripts must pass validation for the update to succeed.

No, a meeting can only belong to one channel at a time. This mutation sets the meeting's channel to the specified value, replacing any previous channel assignment.

No, the response order is not guaranteed to match the input order of transcript\_ids. If you need to correlate responses with inputs, use the id field in the response.

## Error Codes List of possible error codes that may be returned by the `updateMeetingChannel` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user must be either the meeting owner or a team admin to update meeting channels.

One or more specified transcripts could not be found or you do not have access to them.

The input failed validation. Common causes include: empty transcript\_ids array, more than 5 transcript\_ids, or missing/empty channel\_id.

## Additional Resources Querying transcript details Update meeting titles Update meeting privacy Querying list of transcripts --- # Source: https://docs.fireflies.ai/schema/input/update-meeting-privacy-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # UpdateMeetingPrivacyInput > Schema for UpdateMeetingPrivacyInput The unique identifier of the meeting / transcript. The privacy level for the meeting. Must be one of the following values: * `link` - Anyone with the link can access the meeting * `owner` - Only the meeting owner can access * `participants` - Only meeting participants can access * `teammatesandparticipants` - Both teammates and participants can access * `teammates` - Only teammates can access --- # Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-privacy.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Update Meeting Privacy > Use the API to update meeting privacy settings ## Overview The `updateMeetingPrivacy` mutation allows for updating the privacy setting of a meeting transcript. This operation requires admin privileges within the team or ownership of the meeting. ## Arguments The privacy setting to be assigned to the meeting / transcript. See [UpdateMeetingPrivacyInput](/schema/input/update-meeting-privacy-input). ## Usage Example To update a meeting's privacy setting, provide the transcript ID and the new privacy level as arguments to the mutation. Here's an example of how this mutation could be used: ```graphql theme={null} mutation UpdateMeetingPrivacy($input: UpdateMeetingPrivacyInput!) { updateMeetingPrivacy(input: $input) { id title privacy } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation($input: UpdateMeetingPrivacyInput!) { updateMeetingPrivacy(input: $input) { id title privacy } }", "variables": { "input": { "id": "your_transcript_id", "privacy": "teammates" } } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' }; const data = { query: ` mutation($input: UpdateMeetingPrivacyInput!) { updateMeetingPrivacy(input: $input) { id title privacy } } `, variables: { input: { id: 'your_transcript_id', privacy: 'teammates' } } }; const response = await axios.post(url, data, { headers }); console.log(response.data); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ` mutation($input: UpdateMeetingPrivacyInput!) { updateMeetingPrivacy(input: $input) { id title privacy } } `, 'variables': { 'input': { 'id': 'your_transcript_id', 'privacy': 'teammates' } } } response = requests.post(url, json=data, headers=headers) print(response.json()) ``` ```java java theme={null} import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse.BodyHandlers; public class UpdateMeetingPrivacyExample { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String json = "{" + "\"query\":\"mutation($input: UpdateMeetingPrivacyInput!) { updateMeetingPrivacy(input: $input) { id title privacy } }\"," + "\"variables\":{" + "\"input\":{" + "\"id\":\"your_transcript_id\"," + "\"privacy\":\"teammates\"" + "}" + "}" + "}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "updateMeetingPrivacy": { "id": "your_transcript_id", "title": "Meeting Title", "privacy": "teammates" } } } ``` ## FAQ

Only users with admin privileges or meeting owners can update meeting privacy settings. The meeting owner also needs to be in your team.

Available privacy levels are: link (anyone with link), owner (meeting owner only), participants (meeting participants only), teammatesandparticipants (teammates and participants), teammates (teammates only).

## Error Codes List of possible error codes that may be returned by the `updateMeetingPrivacy` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user must be either the meeting owner or a team admin to update meeting privacy.

The specified transcript could not be found or you do not have access to it

## Additional Resources Querying transcript details Use the API to update meeting titles --- # Source: https://docs.fireflies.ai/schema/input/update-meeting-state-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # UpdateMeetingStateInput > Schema for UpdateMeetingStateInput The ID of the live meeting to update state for The action to perform. Must be one of: `pause_recording` or `resume_recording` --- # Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-state.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Update Meeting State > Use the API to pause or resume recording for a live meeting ## Overview The `updateMeetingState` mutation allows you to pause or resume recording for a live meeting through the API. This is useful for controlling the Fireflies bot during an active meeting. This mutation is rate-limited to 10 requests per hour across all user tiers. ## Arguments Input object containing the meeting ID and action to perform. See [UpdateMeetingStateInput](/schema/input/update-meeting-state-input) for details. ## Response Whether the action was executed successfully The action that was executed ## Usage Example To update the meeting state, provide the meeting ID and the desired action: ```graphql theme={null} mutation UpdateMeetingState($input: UpdateMeetingStateInput!) { updateMeetingState(input: $input) { success action } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation UpdateMeetingState($input: UpdateMeetingStateInput!) { updateMeetingState(input: $input) { success action } }", "variables": { "input": { "meeting_id": "your_meeting_id", "action": "pause_recording" } } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: `mutation UpdateMeetingState($input: UpdateMeetingStateInput!) { updateMeetingState(input: $input) { success action } }`, variables: { input: { meeting_id: 'your_meeting_id', action: 'pause_recording' } } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ''' mutation UpdateMeetingState($input: UpdateMeetingStateInput!) { updateMeetingState(input: $input) { success action } } ''', 'variables': { 'input': { 'meeting_id': 'your_meeting_id', 'action': 'pause_recording' } } } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()['data']) else: print(response.text) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"mutation UpdateMeetingState($input: UpdateMeetingStateInput!) { updateMeetingState(input: $input) { success action } }\", \"variables\": {\"input\": {\"meeting_id\": \"your_meeting_id\", \"action\": \"pause_recording\"}}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "updateMeetingState": { "success": true, "action": "pause_recording" } } } ``` ## Error Codes List of possible error codes that may be returned by the `updateMeetingState` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user account has been cancelled. Please contact support if you encounter this error.

The meeting with the specified ID was not found or you do not have access to it.

You do not have permission to control this meeting. Only the meeting organizer or team admin can update the meeting state.

You have exceeded the rate limit for this mutation. The limit is 10 requests per hour. Please wait before making additional requests.

## Additional Resources Create action items during a live meeting Create soundbites during a live meeting --- # Source: https://docs.fireflies.ai/schema/input/update-meeting-title-input.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # UpdateMeetingTitleInput > Schema for UpdateMeetingTitleInput The new title to be assigned to the meeting / transcript. The title must be a string between 5 and 250 characters long and should not contain any special characters. Min / max of 5 / 256 characters. The unique identifier of the meeting / transcript. --- # Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-title.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Update Meeting Title > Use the API to update meeting titles ## Overview The `updateMeetingTitle` mutation allows for updating the title of a meeting transcript. This operation requires admin privileges within the team. ## Arguments The new title to be assigned to the meeting / transcript. ## Usage Example To update a meeting title, provide the transcript ID and the new title as arguments to the mutation. Here's an example of how this mutation could be used: ```graphql theme={null} mutation UpdateMeetingTitle($input: UpdateMeetingTitleInput!) { updateMeetingTitle(input: $input) { title } } ``` ```bash curl theme={null} curl -X POST https://api.fireflies.ai/graphql \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation($input: UpdateMeetingTitleInput!) { updateMeetingTitle(input: $input) { title } }", "variables": { "input": { "id": "your_transcript_id", "title": "New Title" } } }' ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' }; const data = { query: ` mutation($input: UpdateMeetingTitleInput!) { updateMeetingTitle(input: $input) { title } } `, variables: { input: { id: 'your_transcript_id', title: 'New Title' } } }; const response = await axios.post(url, data, { headers }); console.log(response.data); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = { 'query': ` mutation($input: UpdateMeetingTitleInput!) { updateMeetingTitle(input: $input) { title } } `, 'variables': { 'input': { 'id': 'your_transcript_id', 'title': 'New Title' } } } response = requests.post(url, json=data, headers=headers) print(response.json()) ``` ```java java theme={null} import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse.BodyHandlers; public class UpdateMeetingTitleExample { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String json = "{" + "\"query\":\"mutation($input: UpdateMeetingTitleInput!) { updateMeetingTitle(input: $input) { title } }\"," + "\"variables\":{" + "\"input\":{" + "\"id\":\"your_transcript_id\"," + "\"title\":\"New Title\"" + "}" + "}" + "}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "updateMeetingTitle": { "title": "New Title" } } } ``` ## FAQ

Only users with admin privileges can update meeting titles. The meeting owner also needs to be in your team.

## Error Codes List of possible error codes that may be returned by the `updateMeetingTitle` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user does not have admin privileges to update meeting titles.

The specified transcript could not be found or you do not have access to it

## Additional Resources Querying transcript details Update meeting privacy --- # Source: https://docs.fireflies.ai/graphql-api/mutation/upload-audio.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Upload Audio > Use the API to upload audio to Fireflies.ai ## Overview The `uploadAudio` mutation allows you to upload audio files to Fireflies.ai for transcription. ## Arguments The url of media file to be transcribed. It MUST be a valid https string and publicly accessible to enable us download the audio / video file. Double check to see if the media file is downloadable and that the link is not a preview link before making the request. The media file must be either of these formats - mp3, mp4, wav, m4a, ogg Title or name of the meeting, this will be used to identify the transcribed file URL for the webhook that receives notifications when transcription completes Specify a custom language code for your meeting, e.g. `es` for Spanish or `de` for German. For a complete list of language codes, please view [Language Codes](/miscellaneous/language-codes) Specify whether the video should be saved or not. An array of objects containing meeting [Attendees](#). This is relevant if you have active integrations like Salesforce, Hubspot etc. Fireflies uses the attendees value to push meeting notes to your active CRM integrations where notes are added to an existing contact or a new contact is created. Each object contains - * displayName * email * phoneNumber Custom identifier set by the user during upload. You may use this to identify your uploads in your webhook events. Bypasses the internal file size validation that normally rejects audio files smaller than 50kb. Set to true if you need to process very short audio clips. Authentication configuration for downloading the media file. Use this when your audio/video file requires authentication (bearer token or basic auth). If not provided, defaults to no authentication (publicly accessible URL). See [DownloadAuthInput](/schema/input/download-auth-input) for details. ## Usage Example To upload a file, provide the necessary input parameters to the mutation. Here's an example of how this mutation could be used: ```graphql theme={null} mutation uploadAudio($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }", "variables": { "input": { "url": "https://url-to-the-audio-file", "title": "title of the file", "attendees": [ { "displayName": "Fireflies Notetaker", "email": "notetaker@fireflies.ai", "phoneNumber": "xxxxxxxxxxxxxxxx" }, { "displayName": "Fireflies Notetaker 2", "email": "notetaker2@fireflies.ai", "phoneNumber": "xxxxxxxxxxxxxxxx" } ] } } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const input = { url: 'https://url-to-the-audio-file', title: 'title of the file', attendees: [ { displayName: 'Fireflies Notetaker', email: 'notetaker@fireflies.ai', phoneNumber: 'xxxxxxxxxxxxxxxx' }, { displayName: 'Fireflies Notetaker 2', email: 'notetaker2@fireflies.ai', phoneNumber: 'xxxxxxxxxxxxxxxx' } ] }; const data = { query: ` mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } } `, variables: { input } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } input_data = { "url": "https://url_for_audio_file", "title": "title of the file", "attendees": [ { "displayName": "Fireflies Notetaker", "email": "notetaker@fireflies.ai", "phoneNumber": "xxxxxxxxxxxxxxxx" }, { "displayName": "Fireflies Notetaker 2", "email": "notetaker2@fireflies.ai", "phoneNumber": "xxxxxxxxxxxxxxxx" } ]} data = { 'query': ''' mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } } ''', 'variables': {'input': input_data} } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```java java theme={null} import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String json = "{" + "\"query\":\"mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }\"," + "\"variables\":{" + "\"input\": {" + "\"url\":\"https://url_for_audio_file.com\"," + "\"title\":\"title of the file\"," + "\"attendees\":[" + "{" + "\"displayName\": \"Fireflies Notetaker\"," + "\"email\": \"notetaker@fireflies.ai\"," + "\"phoneNumber\": \"xxxxxxxxxxxxxxxx\"" + "}," + "{" + "\"displayName\": \"Fireflies Notetaker 2\"," + "\"email\": \"notetaker2@fireflies.ai\"," + "\"phoneNumber\": \"xxxxxxxxxxxxxxxx\"" + "}" + "]" + "}" + "}" + "}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "uploadAudio": { "success": true, "title": "title of the file", "message": "Uploaded audio has been queued for processing." } } } ``` ## Authenticated Downloads The `download_auth` field allows you to upload audio/video files that require authentication. This is useful when your media files are hosted on private servers or behind authentication. ### Bearer Token Authentication Use bearer token authentication when your media URL requires an `Authorization: Bearer ` header: ```graphql theme={null} mutation { uploadAudio(input: { url: "https://example.com/protected-audio.mp3" title: "Protected Meeting Recording" download_auth: { type: bearer_token bearer: { token: "your-bearer-token-here" } } }) { success message } } ``` ### Basic Authentication Use basic authentication when your media URL requires username and password: ```graphql theme={null} mutation { uploadAudio(input: { url: "https://example.com/protected-audio.mp3" title: "Protected Meeting Recording" download_auth: { type: basic_auth basic: { username: "your-username" password: "your-password" } } }) { success message } } ``` **Note:** The username is optional for basic auth. If not provided, only the password will be used. ## FAQ

Audio upload only works with publicly accessible URLs or URLs with supported authentication (bearer token or basic auth). We cannot accept files hosted on your local machine.

You have two options:

  1. Signed URLs: Use signed URLs with short expiry times (e.g., AWS S3 presigned URLs, Google Cloud Storage signed URLs)
  2. Authenticated Downloads: Use the download\_auth field to provide bearer token or basic authentication credentials. Fireflies will use these credentials when downloading your media file.

Fireflies supports two authentication methods for downloading media files:

  • Bearer Token: Adds Authorization: Bearer \ header when downloading
  • Basic Auth: Adds Authorization: Basic \ header when downloading

If your media file is publicly accessible, you don't need to provide download\_auth.

## Error Codes List of possible error codes that may be returned by the `uploadAudio` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user account has been cancelled. Please contact support if you encounter this error.

You may receieve this error when uploading audio files or querying `audio_url` field.

Free plan users cannot upload audio files. Please upgrade to a paid plan to upload audio files.

You may receieve this error when querying `video_url` field.

Free/pro plan users cannot query `video_url` field. Please upgrade to a Business or Enterprise plan to query `video_url` field.

The audio file is too short to be processed. Please ensure the audio file is at least 50kb in size.

The language code you provided is invalid. Please refer to the [Language Codes](/miscellaneous/language-codes) page for a list of valid language codes.

## Additional Resources Create notifications using webhooks Use the API to add the Fireflies.ai bot to an ongoing meeting --- # Source: https://docs.fireflies.ai/askfred/use-cases.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Use Cases > Common use cases and example questions for AskFred - meeting summaries, action items, decisions, and more ## Overview AskFred can help you extract insights from your meetings across a wide range of use cases. This page provides practical examples of questions you can ask for different scenarios. ## Common Use Cases Extract quick overviews and highlights from your meetings. **Example Questions:** * "Provide a brief summary of this meeting" * "What were the key takeaways?" * "Give me the highlights in 3 bullet points" * "Summarize the discussion about the product launch" * "What was the meeting about in one sentence?" **Best for:** * Daily standups * Client meetings * Team retrospectives * Board meetings Identify tasks, responsibilities, and deliverables. **Example Questions:** * "What action items were assigned?" * "What are my action items from this week's meetings?" * "Who is responsible for the product roadmap?" * "List all open tasks and their owners" * "What are the deadlines mentioned in this meeting?" * "What tasks were assigned to the engineering team?" **Best for:** * Sprint planning * Project kickoffs * Weekly team syncs * Customer success calls Track important decisions and their rationale. **Example Questions:** * "What decisions were made about the budget?" * "What was decided regarding the new feature?" * "List all decisions with their rationales" * "What was the outcome of the pricing discussion?" * "Who made the final decision on the launch date?" * "What alternatives were considered before the decision?" **Best for:** * Strategy meetings * Leadership discussions * Product planning * Architecture reviews Understand individual contributions and perspectives. **Example Questions:** * "What did John contribute to the discussion?" * "What concerns did the customer raise?" * "Summarize the CEO's main points" * "What feedback did the design team provide?" * "What questions did stakeholders ask?" * "Who disagreed with the proposal and why?" **Best for:** * Performance reviews * Client feedback analysis * Team collaboration assessment * Stakeholder management Identify patterns and trends across multiple meetings. **Example Questions:** * "How has customer sentiment changed over the last month?" * "What topics have been discussed most frequently?" * "Track the progress of Project X across all meetings" * "What are recurring issues in sprint retrospectives?" * "How has the team's velocity changed this quarter?" * "What concerns keep coming up in client calls?" **Best for:** * Quarterly reviews * Customer health monitoring * Team performance tracking * Product roadmap planning Pull specific data points and details from meetings. **Example Questions:** * "Extract all mentioned dates and deadlines" * "List all metrics and KPIs discussed" * "What tools or technologies were mentioned?" * "Find all budget figures discussed" * "What email addresses or contact information was shared?" * "What URLs or resources were mentioned?" **Best for:** * Meeting notes compilation * Documentation updates * Contact management * Resource tracking ## Industry-Specific Examples **Discovery Calls:** * "What pain points did the prospect mention?" * "What is their current solution and why are they looking to change?" * "What is their timeline for making a decision?" **Deal Reviews:** * "What objections were raised during the demo?" * "Who are the decision-makers mentioned?" * "What competitive solutions are they considering?" **Pipeline Analysis:** * "What deals progressed this week?" * "What common objections are we seeing across calls?" * "Which prospects mentioned budget concerns?" **Feature Discussions:** * "What user problems are we trying to solve?" * "What alternatives did we consider?" * "What were the technical constraints mentioned?" **Roadmap Planning:** * "What features were prioritized for next quarter?" * "What customer feedback influenced our decisions?" * "What dependencies were identified?" **User Research:** * "What frustrations did users mention?" * "What features did users request most?" * "How do users currently solve this problem?" **Onboarding:** * "What questions did the customer ask during onboarding?" * "What features are they most interested in?" * "What integration requirements did they mention?" **Health Monitoring:** * "What concerns has the customer raised recently?" * "How has their sentiment changed over time?" * "What success metrics are they tracking?" **Escalations:** * "What issues were reported in the last month?" * "How quickly were problems resolved?" * "What patterns exist in customer complaints?" **Technical Planning:** * "What technical decisions were made?" * "What are the architectural concerns?" * "What dependencies block this feature?" **Sprint Retrospectives:** * "What went well this sprint?" * "What blockers did the team face?" * "What process improvements were suggested?" **Code Reviews:** * "What security concerns were raised?" * "What performance considerations were discussed?" * "What refactoring opportunities were identified?" ## Advanced Query Patterns ### Time-Based Analysis ```graphql theme={null} mutation TimeBasedQuery { createAskFredThread(input: { query: "How have customer satisfaction levels changed since last quarter?", filters: { start_time: "2024-01-01T00:00:00Z", end_time: "2024-03-31T23:59:59Z" } }) { message { answer } } } ``` ### Participant-Focused Queries ```graphql theme={null} mutation ParticipantQuery { createAskFredThread(input: { query: "What feedback has the executive team provided on our product strategy?", filters: { participants: ["ceo@company.com", "cto@company.com"], start_time: "2024-03-01T00:00:00Z" } }) { message { answer } } } ``` ### Topic Tracking ```graphql theme={null} mutation TopicTracking { createAskFredThread(input: { query: "Track all discussions about the new pricing model", filters: { start_time: "2024-01-01T00:00:00Z" } }) { message { answer suggested_queries } } } ``` ## Additional Resources Learn about AskFred's key capabilities Explore all available parameters and options --- # Source: https://docs.fireflies.ai/schema/user-group-member.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # UserGroupMember > Schema for UserGroupMember Unique identifier for the user group member. First name of the user group member. Last name of the user group member. Email address of the user group member. ## Additional Resources Schema for UserGroups Schema for User --- # Source: https://docs.fireflies.ai/schema/user-groups.md # Source: https://docs.fireflies.ai/graphql-api/query/user-groups.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # UserGroups > Querying user groups ## Overview The user\_groups query is designed to fetch a list of all user groups within the team. This query allows you to retrieve information about user groups including their members. ## Arguments `mine` is an optional boolean argument. If set to `true`, returns only user groups that the current user belongs to. If not provided or set to `false`, returns all user groups in the team. ## Schema Fields available to the [UserGroup](/schema/user-groups) query ## Usage Example ```graphql theme={null} query UserGroups($mine: Boolean) { user_groups(mine: $mine) { id name handle members { user_id first_name last_name email } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "{ user_groups { name handle members { first_name last_name email } } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: '{ user_groups { name handle members { first_name last_name email } } }' }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "{ user_groups { name handle members { first_name last_name email } } }"}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"{ user_groups { name handle members { first_name last_name email } } }\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "user_groups": [ { "id": "group_123", "name": "Engineering Team", "handle": "engineering", "members": [ { "user_id": "user_456", "first_name": "John", "last_name": "Doe", "email": "john.doe@example.com" }, { "user_id": "user_789", "first_name": "Jane", "last_name": "Smith", "email": "jane.smith@example.com" } ] }, { "id": "group_124", "name": "Sales Team", "handle": "sales", "members": [ { "user_id": "user_101", "first_name": "Bob", "last_name": "Johnson", "email": "bob.johnson@example.com" } ] } ] } } ``` ## Error Codes List of possible error codes that may be returned by the `user_groups` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

You do not have permission to access user groups for this team.

## Additional Resources Querying list of users Querying user details --- # Source: https://docs.fireflies.ai/schema/user.md # Source: https://docs.fireflies.ai/graphql-api/query/user.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # User > Querying user details ## Overview The user query is designed to fetch details associated with a specific user id. ## Arguments `id` is an optional argument. Not passing an ID to this query will return user details for the owner of the API key ## Schema Fields available to the [User](/schema/user) query ## Usage Example ```graphql theme={null} query User($userId: String!) { user(id: $userId) { user_id recent_transcript recent_meeting num_transcripts name minutes_consumed is_admin integrations email user_groups { id name handle members { user_id first_name last_name email } } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "query User($userId: String!) { user(id: $userId) { name integrations } }", "variables": { "userId": "your_user_id" } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: 'query User($userId: String!) { user(id: $userId) { name integrations } }', variables: { userId: 'your_user_id' } }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "query User($userId: String!) { user(id: $userId) { name integrations } }", "variables": {"userId": "your_user_id"}}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"query User($userId: String!) { user(id: $userId) { name integrations } }\", \"variables\": {\"userId\": \"your_user_id\"}}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "user": { "name": "Justin Fly", "integrations": ["string"], } } } ``` ## Error Codes List of possible error codes that may be returned by the `user` query. Full list of error codes can be found [here](/miscellaneous/error-codes).

The user ID you are trying to query does not exist.

The user ID you are trying to query is not in your team.

## Additional Resources Querying list of users Querying user groups --- # Source: https://docs.fireflies.ai/graphql-api/query/users.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Users > Querying list of users ## Overview The users query is designed to fetch a list of all users within the team. You can also view this list on your dashboard at [app.fireflies.ai/team](http://app.fireflies.ai/team) ## Schema Fields available to the [User](/schema/user) query ## Usage Example ```graphql theme={null} query Users { users { user_id email name num_transcripts recent_meeting minutes_consumed is_admin integrations user_groups { id name handle members { user_id first_name last_name email } } } } ``` ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ --data '{ "query": "{ users { name integrations } }" }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const data = { query: '{ users { name integrations } }' }; axios .post(url, data, { headers: headers }) .then(response => { console.log(response.data); }) .catch(error => { console.error('Error:', error); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } data = '{"query": "{ users { name integrations } }"}' response = requests.post(url, headers=headers, data=data) print(response.json()) ``` ```java java theme={null} import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; public class ApiRequest { public static void main(String[] args) { HttpClient client = HttpClient.newHttpClient(); String jsonRequest = "{\"query\": \"{ users { name integrations } }\"}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(jsonRequest)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ```json Response theme={null} { "data": { "users": [ { "name": "Justin Fly", "integrations": [] }, { "name": "Peter Fire", "integrations": [] } ] } } ``` ## Additional Resources Querying user details Use the API to set user roles --- # Source: https://docs.fireflies.ai/graphql-api/webhooks.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # Webhooks > Webhook events for the Fireflies.ai API ## Overview Webhooks enable your application to set up event based notifications. In this section, you'll learn how to configure webhooks to receive updates from Fireflies. ## Events supported The webhooks support the following events: * Transcription complete: Triggers when a meeting has been processed and the transcript is ready for viewing Fireflies sends webhook notifications as POST requests to your specified endpoint. Each request contains a JSON payload with information about the event that occurred. ## Saving a webhook Follow the instructions below to save a webhook URL that sends notifications for all subscribed events. This webhook will only be fired for meetings that you own. Visit the [Fireflies.ai dashboard settings](https://app.fireflies.ai/settings) Navigate to the Developer settings tab Enter a valid https URL in the webhooks field and save You may test your webhook using the upload audio API or by uploading through the dashboard at [app.fireflies.ai/upload](https://app.fireflies.ai/upload) ## Upload audio webhook You can also include a webhook URL as part of an upload audio request. This is different from the saved webhook as it will only send notifications for that singular audio upload request. ```bash curl theme={null} curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your_api_key" \ -d '{ "query": "mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }", "variables": { "input": { "url": "https://url_to_the_audio_file", "title": "title of the file", "webhook": "https://url_for_the_webhook" } } }' \ https://api.fireflies.ai/graphql ``` ```javascript javascript theme={null} const axios = require('axios'); const url = 'https://api.fireflies.ai/graphql'; const headers = { 'Content-Type': 'application/json', Authorization: 'Bearer your_api_key' }; const input = { url: 'https://url_to_the_audio_file', title: 'title of the file', webhook: 'https://url_for_the_webhook' }; const data = { query: ` mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } } `, variables: { input } }; axios .post(url, data, { headers: headers }) .then(result => { console.log(result.data); }) .catch(e => { console.log(JSON.stringify(e)); }); ``` ```python python theme={null} import requests url = 'https://api.fireflies.ai/graphql' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer your_api_key' } input_data = { "url": "https://url_for_audio_file", "title": "title of the file", "webhook": "https://url_for_the_webhook" } data = { 'query': ''' mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } } ''', 'variables': {'input': input_data} } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print(response.json()) else: print(response.text) ``` ```java java theme={null} import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpRequest.BodyPublishers; import java.net.http.HttpResponse.BodyHandlers; public class ApiRequest { public static void main(String[] args) throws IOException, InterruptedException { HttpClient client = HttpClient.newHttpClient(); String json = "{" + "\"query\":\"mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }\"," + "\"variables\":{" + "\"input\": {" + "\"url\":\"https://url_for_audio_file.com\"," + "\"title\":\"title of the file\"," + "\"webhook\":\"https://url_for_the_webhook\"" + "}" + "}" + "}"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.fireflies.ai/graphql")) .header("Content-Type", "application/json") .header("Authorization", "Bearer your_api_key") .POST(BodyPublishers.ofString(json)) .build(); client.sendAsync(request, HttpResponse.BodyHandlers.ofString()) .thenApply(HttpResponse::body) .thenAccept(System.out::println) .join(); } } ``` ## Webhook Authentication Webhook authentication ensures that incoming webhook requests are securely verified before processing. This allows consumers to trust that webhook events originate from a secure and verified source. ### How It Works Each webhook request sent from the server includes an `x-hub-signature` header containing a SHA-256 HMAC signature of the request payload. This signature is generated using a secret key known only to the server and your application. When the consumer receives a webhook, they can use the signature provided in the `x-hub-signature` header to verify that the request has not been tampered with. This is done by computing their own HMAC signature using the shared secret key and comparing it to the signature included in the header. ### Saving a secret 1. Go to the settings page at [app.fireflies.ai/settings](https://app.fireflies.ai/settings) 2. Navigate to the **Developer Settings** tab 3. You can either: * Enter a custom secret key of 16-32 characters in the input field * Click on the refresh button to generate a random secret key 4. Click Save to ensure the secret gets updated 5. Make sure to store this secret key securely, as it will be used to authenticate incoming webhook requests ### Verifying the Signature 1. **Receive the Webhook**: * Each request will include the payload and an `x-hub-signature` header 2. **Verify the Signature**: * Compute the HMAC SHA-256 signature using the payload and the shared secret key * Compare the computed signature to the `x-hub-signature` header value * If they match, the request is verified as authentic. If they do not match, treat the request with caution or reject it By verifying webhook signatures, consumers can ensure that webhook events received are secure and have not been altered during transmission ### See it in action To see webhook authentication in action, you can view an example at [Fireflies.ai Verifying Webhook Requests](https://replit.com/@firefliesai/Firefliesai-Verifying-webhook-requests#index.js). This example demonstrates how to receive a webhook, compute the HMAC SHA-256 signature, and verify it against the `x-hub-signature` header to ensure the request's authenticity. ## Webhook Schema Identifier for the meeting / transcript that the webhook has triggered for. MeetingId and TranscriptId are used interchangeably for the Fireflies.ai Platform. Name of the event type that has been fired against the webhook Custom identifier set by the user during upload. You may use this to identify your uploads in your events. ## Example Payload ```json theme={null} { "meetingId": "ASxwZxCstx", "eventType": "Transcription completed", "clientReferenceId": "be582c46-4ac9-4565-9ba6-6ab4264496a8" } ``` ## FAQ

There may be multiple reasons why you are not receiving webhook requests. Please go through the following checklist:

  • Webhooks are only fired for meeting owners, referred to in the API as the `organizer_email.` Ensure that you have correctly setup the webhooks for the meeting owner.
  • Ensure that your webhook is setup as a POST request
  • If you have setup secret verification, ensure that you are correctly verifying the request by checking the example implementation [here](https://replit.com/@firefliesai/Firefliesai-Verifying-webhook-requests?v=1).

Team-wide webhooks are only supported for the Enterprise tier with the Super Admin role. This allows you to setup one webhook for all meetings owned by your team. Details [here](/fundamentals/super-admin).

## Additional Resources Fireflies Super Admin with advanced capabilities Use the API to upload audio to Fireflies.ai --- # Source: https://docs.fireflies.ai/getting-started/whats-new.md > ## Documentation Index > Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt > Use this file to discover all available pages before exploring further. # What's New > Latest updates to the Fireflies API Take a look at our latest updates, features, and improvements for the Fireflies API. ### AskFred - AI Meeting Assistant Introducing **AskFred**, an AI-powered assistant that lets you query your meeting transcripts using natural language. Ask questions about single meetings or analyze patterns across multiple meetings with context-aware, conversational responses. **Key Capabilities:** * Ask questions in plain language and get instant answers * Maintain conversation threads with contextual follow-ups * Query across multiple meetings with flexible filters * Receive AI-generated suggestions for deeper exploration * Multilingual question and response support **Get Started:** * [Overview](/askfred/overview) - Learn about capabilities * [Quickstart](/askfred/quickstart) - Create your first thread * [Use Cases](/askfred/use-cases) - Common scenarios and examples **New API Operations:** [askfred\_threads](/graphql-api/query/askfred-threads), [askfred\_thread](/graphql-api/query/askfred-thread), [createAskFredThread](/graphql-api/mutation/create-askfred-thread), [continueAskFredThread](/graphql-api/mutation/continue-askfred-thread), [deleteAskFredThread](/graphql-api/mutation/delete-askfred-thread) ### Set Meeting Channels The new [Update Meeting Channel](/graphql-api/mutation/update-meeting-channel) mutation allows meeting owners and team administrators to set the channel for one or more meetings. You can update 1–5 transcripts to a single channel in one API call with all-or-nothing semantics. This mutation requires either meeting ownership or team admin privileges for all specified transcripts. If any transcript fails validation, none of the transcripts will be updated, ensuring data consistency across your channel organization. ### Active Meetings Fetching The new [Active Meetings](/graphql-api/query/active-meetings) query allows you to fetch meetings currently in progress. This query returns real-time information about active meetings including meeting details, start time, organizer, and meeting link. ### Rate Limiting for Delete Transcript The [Delete Transcript](/graphql-api/mutation/delete-transcript) mutation now includes rate limiting protection to prevent abuse. The mutation is limited to 10 requests per minute across all user tiers. If you exceed this limit, the API will return a `too_many_requests` error (HTTP 429) with a `retryAfter` timestamp indicating when you can make requests again. ### Meeting Privacy Control The new [Update Meeting Privacy](/graphql-api/mutation/update-meeting-privacy) mutation allows meeting owners and team administrators to programmatically update meeting privacy settings. You can now change privacy levels between `link`, `owner`, `participants`, `teammatesandparticipants`, and `teammates` to control who can access meeting transcripts. This mutation follows the same authorization pattern as other meeting management operations, requiring either meeting ownership or team admin privileges. ### Meeting Attendance Tracking The [Transcript](/schema/transcript) schema now includes a new `meeting_attendance` field that provides detailed participant attendance information. This field returns an array of [MeetingAttendance](/schema/meeting-attendance) records showing when participants joined and left the meeting. Each attendance record includes the participant's name, join time (ISO 8601 format), and leave time (if they left during the meeting). This feature enables better meeting analytics and participation tracking by leveraging meeting events data. The attendance data is available in both [Transcript](/graphql-api/query/transcript) and [Transcripts](/graphql-api/query/transcripts) queries. ### Channel Filtering The [Transcripts](/graphql-api/query/transcripts) query now supports filtering by channel using the new `channel_id` parameter. This allows you to retrieve transcripts from specific channels by providing a single channel ID. The `channel_id` parameter accepts a string value and enables more targeted querying of meeting transcripts within your organization's channels. ### Array Fields for Organizers and Participants The [Transcripts](/graphql-api/query/transcripts) query now supports array fields `organizers` and `participants` that allow filtering by multiple email addresses. These new array fields provide more flexible querying capabilities while maintaining backward compatibility. The previous single email fields `organizer_email` and `participant_email` are now deprecated but continue to work. Using both old and new fields simultaneously will result in a validation error. ### User Groups The Fireflies API now includes comprehensive support for user groups. The new [User Groups](/graphql-api/query/user-groups) query allows you to fetch all user groups within your team or filter to only show groups you belong to using the `mine` parameter. Additionally, the [User](/schema/user) and [Users](/graphql-api/query/users) queries now include enhanced `user_groups` fields with detailed member information, providing better visibility into team organization and collaboration. ### Keyword Search The [Transcripts](/graphql-api/query/transcripts) query has been enhanced to include keyword search functionality. By utilizing the `keyword` and `scope` parameters, you can now perform advanced searches within both the title and the transcript text, offering more precise retrieval. The `title` parameter has been deprecated in favor of `keyword` ### Enhancements to Audio Upload The [Upload Audio](/graphql-api/mutation/upload-audio) function now includes a `bypass_size_check` flag. This enhancement provides greater control over filtering unwanted uploads, such as voicemails from dialers. ### Realtime API The Fireflies.ai [Realtime API](/realtime-api/overview) allows your application to receive live transcription events over WebSockets. This enables building interactive features such as live captioning, transcription overlays, and real-time analysis as users speak.