# Changelog
Source: https://docs.fireflies.ai/additional-info/change-log
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.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)
# Deprecated
Source: https://docs.fireflies.ai/additional-info/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.
# Overview
Source: https://docs.fireflies.ai/askfred/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
# Quickstart
Source: https://docs.fireflies.ai/askfred/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
# Use Cases
Source: https://docs.fireflies.ai/askfred/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
# Advanced
Source: https://docs.fireflies.ai/examples/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
# Basic
Source: https://docs.fireflies.ai/examples/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
# Overview
Source: https://docs.fireflies.ai/examples/overview
Library of API usecases
## Overview
This part of the documentation is designed to provide developers with practical insights into integrating and maximizing the Fireflies.ai API in various applications.
By visiting our Replit page at Fireflies.ai on Replit, you can directly access and interact with these examples, making your learning process interactive and engaging.
## Fireflies.ai Replit
Explore a wide array of examples where we have created code snippets that allows you to interact with the Fireflies API.
To view, please visit [replit.com/@firefliesai](https://replit.com/@firefliesai)
You can also view the list of examples at the links [Basic examples](/examples/basic) and [Advanced examples](/examples/advanced)
## Additional Resources
Basic usage examples
Advanced usage examples
# Authorization
Source: https://docs.fireflies.ai/fundamentals/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
# General concepts
Source: https://docs.fireflies.ai/fundamentals/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
# Errors
Source: https://docs.fireflies.ai/fundamentals/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
# Introspection
Source: https://docs.fireflies.ai/fundamentals/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
# Limits
Source: https://docs.fireflies.ai/fundamentals/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
# Super Admin
Source: https://docs.fireflies.ai/fundamentals/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
# Chat with Fireflies AI Assistant
Source: https://docs.fireflies.ai/getting-started/ask-docs
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
# Join the Developer Program
Source: https://docs.fireflies.ai/getting-started/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
# Introduction
Source: https://docs.fireflies.ai/getting-started/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
# LLM-based Development
Source: https://docs.fireflies.ai/getting-started/llm-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
# MCP Server Configuration
Source: https://docs.fireflies.ai/getting-started/mcp-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
# Quickstart
Source: https://docs.fireflies.ai/getting-started/quickstart
Make your first request in under 5 minutes.
This guide provides step-by-step instructions to make your first query with our GraphQL API and demonstrates basic functionality.
## Step 1: Setting Up
Before diving into querying the API, it's essential to set up your environment correctly. This includes obtaining authentication credentials and configuring your development environment.
### Obtaining Authentication Credentials
To access our API, you will need an API key. Follow these steps to obtain your key:
1. Log in to your account at [app.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
It's crucial to handle your API key with the utmost care to ensure the security of your data. For
more information on Authorization and best practices, visit
[Authorization](/fundamentals/authorization)
## Step 2: Making Your First Request
Execute a simple query to retrieve a list of users.
Replace `your_api_key` with your API key in the following requests
```bash curl theme={null}
curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
--data '{ "query": "{ users { name user_id } }" }' \
https://api.fireflies.ai/graphql
```
```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 user_id } }'
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```
```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 user_id } }'
};
axios
.post(url, data, { headers: headers })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});
```
```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.HttpHeaders;
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\":\"{ users { name user_id } }\"}";
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();
}
}
```
When building GraphQL queries for this API, focus on precision and efficiency. Start with simple
queries and gradually increase complexity. Ensure you only request the data you need to avoid
over-fetching.
* **Review the Schema Documentation**: For guidance, refer to the [Schema](/schema) section and use tools like GraphQL Playground for testing. Efficient queries lead to better performance and a smoother API experience.
More details on building your GraphQL query are available [here](/graphql-api)
## Step 3: Analyzing the Response
You will receive a JSON response with the requested data. Example response:
```bash curl theme={null}
{
"data":
{
"users": [
{
"name":"Justin Fly",
"user_id":"example-id"
}
]
}
}
```
Continue to the next sections for more detailed examples and advanced usage instructions.
## Additional Resources
Query users using the API
Authenticating your requests with the Fireflies API
# What's New
Source: https://docs.fireflies.ai/getting-started/whats-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.
# Add to Live
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Continue AskFred Thread
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Create AskFred Thread
Source: https://docs.fireflies.ai/graphql-api/mutation/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)
Filter meetings until this date/time (ISO 8601 format)
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)
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
# Create bite
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Delete AskFred Thread
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Delete Transcript
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Set User Role
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Update Meeting Channel
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Update Meeting Privacy
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Update Meeting Title
Source: https://docs.fireflies.ai/graphql-api/mutation/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
# Upload Audio
Source: https://docs.fireflies.ai/graphql-api/mutation/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:
- Signed URLs: Use signed URLs with short expiry times (e.g., AWS S3 presigned URLs, Google Cloud Storage signed URLs)
- 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
# Active Meetings
Source: https://docs.fireflies.ai/graphql-api/query/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
# Analytics
Source: https://docs.fireflies.ai/graphql-api/query/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
# AI Apps
Source: https://docs.fireflies.ai/graphql-api/query/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
# AskFred Thread
Source: https://docs.fireflies.ai/graphql-api/query/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
# AskFred Threads
Source: https://docs.fireflies.ai/graphql-api/query/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
# Bite
Source: https://docs.fireflies.ai/graphql-api/query/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
# Bites
Source: https://docs.fireflies.ai/graphql-api/query/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
# Contacts
Source: https://docs.fireflies.ai/graphql-api/query/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
# Transcript
Source: https://docs.fireflies.ai/graphql-api/query/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
# Transcripts
Source: https://docs.fireflies.ai/graphql-api/query/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
# User
Source: https://docs.fireflies.ai/graphql-api/query/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
# User Groups
Source: https://docs.fireflies.ai/graphql-api/query/user-groups
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
# Users
Source: https://docs.fireflies.ai/graphql-api/query/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
# Webhooks
Source: https://docs.fireflies.ai/graphql-api/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
# MCP Tools
Source: https://docs.fireflies.ai/mcp-tools/overview
Complete reference for all available tools in the Fireflies MCP Server
## Overview
The Fireflies MCP (Model Context Protocol) Server provides tools for searching and retrieving meeting transcripts, summaries, and user data. All tools are read-only and operate within your authenticated Fireflies account.
For setup and configuration instructions, see [MCP Server Configuration](/getting-started/mcp-configuration).
## Available Tools
### Meeting & Transcript Tools
**Description:** Advanced search for meeting transcripts using mini grammar syntax.
**Parameters:**
* `query` (string, required) - Search query with grammar syntax
* `format` (string) - Response format: "toon" (default), "json", or "text"
**Query Grammar:**
* `keyword:"term"` - Search keywords
* `scope:title|sentences|all` - Search scope
* `from:YYYY-MM-DD` - Filter from date
* `to:YYYY-MM-DD` - Filter to date
* `limit:N` - Max results (50)
* `skip:N` - Pagination offset
* `organizers:email1,email2` - Filter by organizers
* `participants:email1,email2` - Filter by participants
* `mine:true|false` - User's meetings only
**Example:**
```json theme={null}
{
"query": "keyword:\"performance\" scope:sentences from:2024-12-01 limit:20"
}
```
**Description:** Query multiple meetings with structured filters. Returns metadata and summaries.
**Parameters:**
* `keyword` (string) - Search term (max 255 chars)
* `scope` (enum) - "title", "sentences", or "all"
* `fromDate` (string) - ISO date (YYYY-MM-DD)
* `toDate` (string) - ISO date (YYYY-MM-DD)
* `limit` (number) - Max results (max 50)
* `skip` (number) - Pagination offset
* `organizers` (array) - Organizer emails
* `participants` (array) - Participant emails
* `mine` (boolean) - Only user's meetings
* `format` (string) - "toon" (default), "json", or "text"
**Example:**
```json theme={null}
{
"keyword": "product roadmap",
"fromDate": "2024-12-01",
"limit": 20
}
```
**Returns:** Meeting IDs, titles, dates, participants, summaries (excludes detailed transcript content).
**Description:** Fetch detailed transcript by ID with sentences, speakers, and timestamps. Excludes summary data.
**Parameters:**
* `transcriptId` (string, required) - Meeting ID
**Example:**
```json theme={null}
{
"transcriptId": "meeting-id-12345"
}
```
**Returns:** Sentences with speaker attribution, timestamps, analytics, and metadata.
**Description:** Retrieve complete meeting data including transcript, summary, and metadata.
**Parameters:**
* `id` (string, required) - Meeting ID
**Example:**
```json theme={null}
{
"id": "meeting-id-12345"
}
```
**Returns:** Complete meeting data with transcript content, summary, analytics, and metadata.
**Description:** Fetch meeting summary by ID with action items, keywords, and overview. Excludes transcript content.
**Parameters:**
* `transcriptId` (string, required) - Meeting ID
**Example:**
```json theme={null}
{
"transcriptId": "meeting-id-12345"
}
```
**Returns:** Keywords, action items, overview, topics discussed, meeting type, and outline.
### User & Team Tools
**Description:** Fetch user account details. Returns authenticated user if no ID provided.
**Parameters:**
* `userId` (string, optional) - User ID (omit for current user)
**Example:**
```json theme={null}
{
"userId": "user-id-12345"
}
```
**Returns:** User ID, email, name, transcript count, recent meeting date, minutes consumed, admin status, and integrations.
**Description:** Fetch user groups for the authenticated user or team.
**Parameters:**
* `mine` (boolean) - true for user's groups only, false (default) for all team groups
**Example:**
```json theme={null}
{
"mine": false
}
```
**Returns:** Group ID, name, handle, members with emails and roles.
**Description:** Fetch contact list sorted by most recent meeting date.
**Parameters:**
* `format` (string) - "toon" (default), "json", or "text"
**Example:**
```json theme={null}
{
"format": "json"
}
```
**Returns:** Contact emails, names, profile pictures, and last meeting dates.
## Tool Comparison Matrix
| Tool | Content Type | Summary | Parameters | Best For |
| ----------------------------- | ----------------- | ------- | -------------------- | ------------------------------------- |
| `fireflies_search` | Multiple meetings | ✅ Yes | Complex grammar | Advanced filtering with mini grammar |
| `fireflies_get_transcripts` | Multiple meetings | ✅ Yes | Structured params | Structured queries with clear filters |
| `fireflies_get_transcript` | Single meeting | ❌ No | Meeting ID only | Full conversation with timestamps |
| `fireflies_fetch` | Single meeting | ✅ Yes | Meeting ID only | Complete meeting data in one call |
| `fireflies_get_summary` | Single meeting | ✅ Yes | Meeting ID only | Quick insights and action items |
| `fireflies_get_user` | User data | N/A | Optional user ID | Profile and account information |
| `fireflies_get_usergroups` | Team data | N/A | Optional mine filter | Team structure and membership |
| `fireflies_get_user_contacts` | Contact list | N/A | Optional format | Recent interaction history |
## Response Formats
Several tools support multiple response formats via the `format` parameter:
* **toon** (default) - Token-efficient format optimized for AI model consumption
* **json** - Standard JSON format for programmatic processing
* **text** - Human-readable text format for display
## Common Workflows
### Search and Retrieve Pattern
1. Use `fireflies_search` or `fireflies_get_transcripts` to find relevant meetings
2. Extract meeting IDs from results
3. Use `fireflies_fetch` to get complete details, or:
* Use `fireflies_get_transcript` for conversation only
* Use `fireflies_get_summary` for insights only
### Team Analysis Pattern
1. Use `fireflies_get_usergroups` to get team structure
2. Extract member emails from target groups
3. Use `fireflies_get_transcripts` with `participants` filter
4. Optionally use `fireflies_get_user` for individual member details
### Contact-Based Search Pattern
1. Use `fireflies_get_user_contacts` to get contact list
2. Find target contact by name or email
3. Use `fireflies_get_transcripts` with contact email in `participants`
4. Retrieve detailed transcripts or summaries as needed
## Getting Started
To use these tools:
1. **Configure MCP Server** - Add Fireflies MCP Server to your AI application
* Remote server URL: `https://api.fireflies.ai/mcp`
* Supports OAuth or API key authentication
2. **Authenticate** - Use OAuth flow or provide API key in configuration
3. **Invoke Tools** - Call tools using their standardized names with JSON parameters
For detailed setup instructions, see [MCP Server Configuration](/getting-started/mcp-configuration).
## Additional Resources
Set up the Fireflies MCP Server in your AI application
Direct GraphQL API access for custom integrations
Learn about API authentication and security
Enhance AI coding experience with Fireflies data
# Error codes
Source: https://docs.fireflies.ai/miscellaneous/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,
}
}
]
}
```
# Language codes
Source: https://docs.fireflies.ai/miscellaneous/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"
}
]
```
# Event Schema
Source: https://docs.fireflies.ai/realtime-api/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
# Getting Started
Source: https://docs.fireflies.ai/realtime-api/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
# Overview
Source: https://docs.fireflies.ai/realtime-api/overview
Learn about Fireflies.ai's Realtime API for live transcription
The Fireflies.ai Realtime API 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.
The Realtime API is currently in beta. Features and endpoints may change. We welcome your feedback as we continue to improve this API.
## How It Works
The Realtime API uses WebSocket connections to deliver transcription data as it's generated.
## Flow
1. **Authenticate**: Connect using a valid API token and transcript ID.
2. **Listen**: Once connected, you'll start receiving transcription events in real time.
3. **React**: Update your UI or process transcription events as they arrive.
## Features
* **Low Latency**: Data is streamed as soon as it’s transcribed.
* **Event-Based**: Receive structured events for easy handling.
* **Token-Based Authentication**: Secure connections with scoped access.
* **Incremental Transcription**: Receive transcript segments progressively.
## Additional Resources
Query meetings currently in progress
Schema for Realtime Events
# ActiveMeeting
Source: https://docs.fireflies.ai/schema/active-meeting
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
# AIFilter
Source: https://docs.fireflies.ai/schema/aifilter
Schema for AIFilter
Description
Description
Description
Description
Description
Description
Description
## Additional Resources
Schema for Sentence
Schema for Analytics
# Analytics
Source: https://docs.fireflies.ai/schema/analytics
Schema for Analytics
Analytics data for the team. See [TeamAnalytics](#teamanalytics)
List of analytics data for individual users. See [UserAnalytics](#useranalytics)
## TeamAnalytics
Conversation statistics for the team. See [TeamConversationStats](#teamconversationstats)
Meeting statistics for the team. See [TeamMeetingStats](#teammeetingstats)
## TeamMeetingStats
Total count of meetings
Percentage difference in meeting count compared to previous period
Total duration of meetings in minutes
Percentage difference in meeting duration compared to previous period
Average number of meetings per user
Percentage difference in average meeting count compared to previous period
Average duration of meetings in minutes
Percentage difference in average meeting duration compared to previous period
## UserMeetingStats
Total count of meetings for the user
Difference in meeting count compared to previous period
Meeting count in the previous period
Percentage difference in meeting count compared to previous period
Total duration of meetings in minutes for the user
Difference in meeting duration compared to previous period
Meeting duration in the previous period
Percentage difference in meeting duration compared to previous period
## TeamConversationStats
Average number of filler words used per meeting
Percentage difference in average filler words compared to previous period
Average number of monologues per meeting
Percentage difference in average monologues count compared to previous period
Average number of questions asked per meeting
Percentage difference in average questions compared to previous period
Average sentiment analysis results for team meetings. See [Sentiments](/schema/sentiments)
Average duration of silence in minutes per meeting
Percentage difference in average silence duration compared to previous period
Average ratio of talking to listening across all meetings
Average words spoken per minute across all meetings
Duration in seconds of the longest monologue
Percentage difference in longest monologue duration compared to previous period
Total number of filler words used across all meetings
Percentage difference in total filler words compared to previous period
Total count of meeting notes created
Total count of meetings
Total count of monologues across all meetings
Percentage difference in total monologues compared to previous period
Number of teammates included in the analytics
Total number of questions asked across all meetings
Percentage difference in total questions compared to previous period
Total duration of silence in minutes across all meetings
Percentage difference in total silence duration compared to previous period
## UserConversationStats
Percentage of time spent talking vs listening
Ratio of talking to listening
Total duration of silence in minutes for the user
Silence duration in the previous period
Percentage of meeting time spent in silence
Ratio of silence to speaking time
Total duration of speaking time in minutes
Total duration of speaking time with specific user in minutes
Total count of words spoken
Number of filler words used by the user
Filler words used in the previous period
Percentage difference in filler words compared to previous period
Duration in seconds of the user's longest monologue
Longest monologue duration in the previous period
Percentage difference in longest monologue duration compared to previous period
Count of monologues by the user
Monologues count in the previous period
Percentage difference in monologues count compared to previous period
Number of questions asked by the user
Questions asked in the previous period
Percentage difference in questions asked compared to previous period
Duration of time the user spent speaking in minutes
Count of words spoken by the user
Words spoken per minute by the user
Words per minute in the previous period
Percentage difference in words per minute compared to previous period
## UserAnalytics
Unique identifier for the user
Name of the user
Email address of the user
Conversation statistics for the user. See [UserConversationStats](#userconversationstats)
Meeting statistics for the user. See [UserMeetingStats](#usermeetingstats)
## Additional Resources
Schema for Sentiments
Schema for Meeting Analytics
# App Output
Source: https://docs.fireflies.ai/schema/app-output
Schema for App Output
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
# AI Apps
Source: https://docs.fireflies.ai/schema/apps
Schema for Apps
List of [AI App outputs](/schema/app-output)
## Additional Resources
Schema for App Output
Schema for Transcript
# AskFredMessage
Source: https://docs.fireflies.ai/schema/askfred-message
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
# AskFredResponse
Source: https://docs.fireflies.ai/schema/askfred-response
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
# AskFredThread
Source: https://docs.fireflies.ai/schema/askfred-thread
Schema definition for AskFred conversation threads
## Overview
The `AskFredThread` type represents a conversation thread in the AskFred system. Each thread contains a series of questions and answers about meeting transcripts, maintaining context throughout the conversation.
## 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
Array of messages in the thread, containing questions and answers. See [AskFredMessage](/schema/askfred-message) for details.
## 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",
"messages": [
{
"id": "msg_001",
"thread_id": "thread_abc123",
"query": "What were the action items from the Q4 planning meeting?",
"answer": "Based on the Q4 planning meeting...",
"suggested_queries": ["Who is responsible for...", "What is the timeline..."],
"status": "completed",
"created_at": "2024-03-15T10:30:00Z"
}
]
}
```
## Related Types
Individual messages within a thread
Lightweight thread summary for listings
# AskFredThreadSummary
Source: https://docs.fireflies.ai/schema/askfred-thread-summary
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
# AudioUploadStatus
Source: https://docs.fireflies.ai/schema/audio-upload-status
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
# Bite
Source: https://docs.fireflies.ai/schema/bite
Schema for Bite
A unique identifier for the Bite
A unique identifier for the transcript the Bite is associated to
Start time for the Bite
End time for the Bite
A string representing the title of the Bite
URL of the Bite's thumbnail image
URL to a short preview video of the Bite
Current processing status of the Bite. Acceptable values include 'pending', 'processing', 'ready',
and 'error'
An AI-generated summary describing the content of the Bite
Identifier of the user who created the Bite
Status of the AI summary generation process
Type of the Bite, either 'video' or 'audio'
Array specifying the visibility of the Bite. Possible values are `public`, `team`, and
`participants`. For example, `["team", "participants"]` indicates visibility to both team members
and participants, while `["public"]` allows anyone to access the bite through its link
The date when this Bite was created
Object representing the user who created the Bite, including relevant user details
Name associated with the User
ID of the User
First name of the User
Last name of the User
Picture associated with the User
Array of MediaSource objects for the Bite
Source of the media
Type of the media
Array of Object describing text captions associated with the Bite
Index
SpeakerId associated with the caption object
Text associated with the caption
Name of the speaker associated with this caption
Start time for the caption
End time for the caption
Object describing the origin of the Bite with the following properties
Unique identifier
Name of the origin source
Type of the original source, e.g., 'meeting'
Length of the original source in seconds
## Additional Resources
Schema for Transcript
Use the API to create bites from your transcripts
# Channel
Source: https://docs.fireflies.ai/schema/channel
Schema for Channel
Unique identifier of the Channel.
## Additional Resources
Schema for Transcript
Schema for User Groups
# Contact
Source: https://docs.fireflies.ai/schema/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
# DownloadAuthType
Source: https://docs.fireflies.ai/schema/enum/download-auth-type
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
# MeetingState
Source: https://docs.fireflies.ai/schema/enum/meeting-state
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
# GetActiveMeetingsInput
Source: https://docs.fireflies.ai/schema/input/active-meetings-input
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.
# Attendee
Source: https://docs.fireflies.ai/schema/input/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.
# AudioUploadInput
Source: https://docs.fireflies.ai/schema/input/audio-upload-input
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.
# BasicAuthInput
Source: https://docs.fireflies.ai/schema/input/basic-auth-input
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
# BearerTokenAuthInput
Source: https://docs.fireflies.ai/schema/input/bearer-token-auth-input
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
# DownloadAuthInput
Source: https://docs.fireflies.ai/schema/input/download-auth-input
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
# Role
Source: https://docs.fireflies.ai/schema/input/role
Schema for Role
Valid types for role are `admin` and `user`
# UpdateMeetingChannelInput
Source: https://docs.fireflies.ai/schema/input/update-meeting-channel-input
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.
# UpdateMeetingPrivacyInput
Source: https://docs.fireflies.ai/schema/input/update-meeting-privacy-input
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
# UpdateMeetingTitleInput
Source: https://docs.fireflies.ai/schema/input/update-meeting-title-input
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.
# MeetingAnalytics
Source: https://docs.fireflies.ai/schema/meeting-analytics
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
# MeetingAttendee
Source: https://docs.fireflies.ai/schema/meeting-attendee
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
# MeetingInfo
Source: https://docs.fireflies.ai/schema/meeting-info
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
# Sentence
Source: https://docs.fireflies.ai/schema/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
# Sentiments
Source: https://docs.fireflies.ai/schema/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
# Speaker
Source: https://docs.fireflies.ai/schema/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
# Summary
Source: https://docs.fireflies.ai/schema/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
# SummarySection
Source: https://docs.fireflies.ai/schema/summary-section
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
# Transcript
Source: https://docs.fireflies.ai/schema/transcript
Schema for Transcript
Unique identifier of the Transcript.
Title of the Transcript.
[DEPRECATED](/additional-info/deprecated)
Email address of the meeting host.
Email address of the meeting organizer.
The [User](/schema/user) who Fred recorded the meeting on behalf of
The speakers array contains the id and name of the speaker as it appears within the transcript
The url to view the transcript in the dashboard
An array of email addresses of meeting participants guests, including participants that do not
have Fireflies account.
List of [MeetingAttendee](/schema/meeting-attendee)
List of [MeetingAttendance](/schema/meeting-attendance) records showing when participants joined and left the meeting
An array of email addresses of only Fireflies users participants that have fireflies account that
participated in the meeting
Duration of the audio in minutes
String representation of DateTime. Example: `2024-04-22T20:14:04.454Z`
Date the transcript was created represented in milliseconds from
[EPOCH](https://en.wikipedia.org/wiki/Epoch_\(computing\)).
The timezone for this field is UTC +00:00
Secure, newly generated hashed url that allows you download meeting audio. This url expires after
every 24 hours. You'd have to make another request to generate a new audio\_url.
You need to be subscribed to subscribed to a pro or higher plan to query audio\_url. View plans [here](https://fireflies.ai/pricing)
Secure, newly generated hashed url that allows you download meeting video. This url expires after
every 24 hours. You'd have to make another request to generate a new video\_url. You will need to
enable `RECORD MEETING VIDEO` setting on your Fireflies
[dashboard](https://app.fireflies.ai/settings) for this to work.
You need to be subscribed to a business or higher plan to query video\_url. View plans [here](https://fireflies.ai/pricing)
An array of [Sentence](/schema/sentence)(s), containing transcript details like `raw_text`,
`speaker_name`, etc.
Calendar provider event ID. This field represents calId for google calendar and iCalUID for
outlook calendar.
AI generated [Summary](/schema/summary) of the meeting.
[MeetingInfo](/schema/meeting-info) metadata fields.
Calendar provider event ID with a timestamp that helps uniquely identify recurring events
Calendar provider name
Preview of [Apps](/schema/apps) generated from the transcript. Max limit of 5 most recent AI App Outputs per meeting. Use the [Apps Query](/graphql-api/query/apps) to fetch the entire list of AI App Outputs
The web conferencing url of the meeting. This field is only populated if the meeting was hosted on a supported platform such as Google Meet, Zoom, etc.
[MeetingAnalytics](/schema/meeting-analytics) contains analytics data about the meeting, including:
* `sentiments`: Sentiment analysis showing percentages of positive, neutral, and negative sentiments
* `categories`: Counts of different types of content (questions, date/times, metrics, tasks)
* `speakers`: Detailed analytics for each speaker including duration, word count, filler words, etc.
You need to be subscribed to subscribed to a pro or higher plan to query meeting analytics. View plans [here](https://fireflies.ai/pricing)
An array of [Channel](/schema/channel) the meeting belongs to
## Additional Resources
Schema for Summary
Schema for Sentence
# User
Source: https://docs.fireflies.ai/schema/user
Schema for User
Unique identifier for the User.
List of user groups the user belongs to. (See [User Groups](/schema/user-groups))
Email address for the User.
Full name of the User.
Total number of transcripts associated with the user.
Most recent transcript generated by the user.
Details about the user's most recent meeting.
Total number of minutes consumed by the user in meetings.
Indicates whether the user has administrative privileges. True if the user is an admin, false
otherwise.
A list of integrations enabled for the user's account.
## Additional Resources
Schema for User Groups
Query transcripts using the API
# User Group Member
Source: https://docs.fireflies.ai/schema/user-group-member
Schema for User Group Member
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 User Groups
Schema for User
# User Groups
Source: https://docs.fireflies.ai/schema/user-groups
Schema for User Groups
Unique ID for the user group
Name of the user group.
Unique identifier or handle for the user group.
List of members in the user group. See [UserGroupMember](/schema/user-group-member)
## Additional Resources
Schema for User
Schema for User Group Member