'
}
});
socket.on('auth.success', data => {
console.log('Authenticated:', data);
});
socket.on('auth.failed', err => {
console.error('Authentication failed:', err);
});
socket.on('connection.error', err => {
console.error('Connection error:', err);
});
socket.on('connection.established', () => {
console.log('Connection established');
});
socket.on('transcription.broadcast', event => {
console.log('Transcript event:', event);
});
```
## Auth Parameters
| Field | Type | Description |
| -------------- | ------ | ------------------------------- |
| `token` | string | Your API access token |
| `transcriptId` | string | ID of the meeting or transcript |
If authentication fails, the server emits an `auth.failed` event and disconnects the socket.
See [Authorization](/fundamentals/authorization)
## Additional Resources
Overview of Realtime API
Query meetings currently in progress
Authenticating your requests with the Fireflies API
---
# Source: https://docs.fireflies.ai/getting-started/introduction.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Introduction
> Welcome to Fireflies public API documentation.
We are actively working to expose more functionality via our API. If you have specific requests,
please [reach out to us](https://guide.fireflies.ai/).
# Introduction
## Overview of the API
The Fireflies API is built on top of GraphQL, a powerful interface designed to provide you with efficient and flexible access to your data. This API allows you to retrieve exactly the data you need in a structured format. Whether you are building a web application, a mobile app, or a complex software system, our API caters to a wide range of data requirements.
Our API covers various functionalities, including queries for fetching data as well as uploading meeting audio. It is designed to be intuitive and easy to use, ensuring that you can start fetching and manipulating data with minimal setup.
## Advantages of Using GraphQL
**1. Precise Data Fetching:** One of the key strengths of GraphQL is its ability to return exactly what you request and nothing more. This precision eliminates the over-fetching of data, common in traditional REST APIs, leading to more efficient network utilization and faster response times.
**2. Single Endpoint:** Unlike REST APIs, which often require multiple endpoints for different data needs, GraphQL operates through a single endpoint. This simplification streamlines interactions with the API and makes maintaining and managing the API more straightforward.
**3. Flexibility and Scalability:** GraphQL APIs are incredibly flexible, allowing for queries that can evolve with your needs. This flexibility, combined with efficient data retrieval, makes GraphQL an ideal choice for both small projects and large-scale applications.
In the following sections, we will guide you through the essential components of our API, provide detailed examples, and offer best practices to help you make the most of our API. Whether you're a new user or an experienced developer, this documentation is designed to assist you in seamlessly integrating the API into your applications.
## Additional Resources
Make your first request in under 5 minutes
Foundational guide to the core aspects of the Fireflies API
---
# Source: https://docs.fireflies.ai/fundamentals/introspection.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Introspection
> Query generation and API exploration.
## Overview
Introspection is a feature that allows querying a GraphQL server to discover its schema. This capability is crucial for developers to understand available queries, mutations, and the structure of the data they can work with, facilitating seamless API interaction and exploration.
### Requirements
You will need a Fireflies.ai API key to use introspection. For more details, please visit [Authorization](/fundamentals/authorization#acquiring-a-token)
### Introspection using Apollo Sandbox
For introspection using our builtin Apollo Sandbox, visit [api.fireflies.ai/graphql](https://api.fireflies.ai/graphql) and enter your `api_key` in the Headers section as a Bearer token
### Introspection using Postman
Create a new Graphql Request in Postman with the url [api.fireflies.ai/graphql](https://api.fireflies.ai/graphql) and enter your `api_key` in the Headers section as a Bearer token
## Additional Resources
Foundational guide to the core aspects of the Fireflies API
Authenticating your requests with the Fireflies API
---
# Source: https://docs.fireflies.ai/miscellaneous/language-codes.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Language codes
> Language code abbreviations for the Fireflies.ai API
## Overview
This page lists the language codes supported by the Fireflies.ai API. You may use these codes with the `uploadAudio` or `addToLive` functionality to specify custom languages for your meetings. Each language entry includes the language name and its corresponding code, providing a quick and easy reference.
## References
* [Add to Live](/graphql-api/mutation/add-to-live)
* [Upload Audio](/graphql-api/mutation/upload-audio)
## Codes
```json theme={null}
[
{
"languageName": "Arabic",
"languageCode": "ar"
},
{
"languageName": "Bulgarian",
"languageCode": "bg"
},
{
"languageName": "Chinese",
"languageCode": "zh"
},
{
"languageName": "Croatian",
"languageCode": "hr"
},
{
"languageName": "Czech",
"languageCode": "cs"
},
{
"languageName": "Danish",
"languageCode": "da"
},
{
"languageName": "Dutch",
"languageCode": "nl"
},
{
"languageName": "English",
"languageCode": "en"
},
{
"languageName": "US English",
"languageCode": "en-US"
},
{
"languageName": "Australia English",
"languageCode": "en-AU"
},
{
"languageName": "UK English",
"languageCode": "en-GB"
},
{
"languageName": "Finnish",
"languageCode": "fi"
},
{
"languageName": "French",
"languageCode": "fr"
},
{
"languageName": "German",
"languageCode": "de"
},
{
"languageName": "Hebrew",
"languageCode": "he"
},
{
"languageName": "Hindi",
"languageCode": "hi"
},
{
"languageName": "Hungarian",
"languageCode": "hu"
},
{
"languageName": "Indonesian",
"languageCode": "id"
},
{
"languageName": "Italian",
"languageCode": "it"
},
{
"languageName": "Japanese",
"languageCode": "ja"
},
{
"languageName": "Korean",
"languageCode": "ko"
},
{
"languageName": "Malay",
"languageCode": "ms"
},
{
"languageName": "Norwegian",
"languageCode": "no"
},
{
"languageName": "Polish",
"languageCode": "pl"
},
{
"languageName": "Portuguese",
"languageCode": "pt"
},
{
"languageName": "Romanian",
"languageCode": "ro"
},
{
"languageName": "Russian",
"languageCode": "ru"
},
{
"languageName": "Slovak",
"languageCode": "sk"
},
{
"languageName": "Spanish",
"languageCode": "es"
},
{
"languageName": "Latin American Spanish",
"languageCode": "es-419"
},
{
"languageName": "Swedish",
"languageCode": "sv"
},
{
"languageName": "Tamil",
"languageCode": "ta"
},
{
"languageName": "Thai",
"languageCode": "th"
},
{
"languageName": "Filipino",
"languageCode": "tl"
},
{
"languageName": "Turkish",
"languageCode": "tr"
},
{
"languageName": "Ukrainian",
"languageCode": "uk"
},
{
"languageName": "Vietnamese",
"languageCode": "vi"
}
]
```
---
# Source: https://docs.fireflies.ai/fundamentals/limits.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Limits
> File size and API rate limits for the Fireflies API
## Overview
Understanding the limitations of our API is crucial for efficient and uninterrupted usage. Below
you'll find detailed information about the upload limits for different file types and the rate
limits applicable to various subscription plans.
## Upload Limits
The Fireflies API accommodates a range of file sizes for different user types. Here's a breakdown of the maximum file sizes for audio and video uploads:
| Upload Type | Free User Limit | Pro / Business / Enterprise Limit |
| ----------- | --------------- | --------------------------------- |
| Audio Files | Up to 200MB | Up to 200MB |
| Video Files | Up to 100MB | Up to 1.5GB |
### Understanding Upload Limits
* **Audio Files:** All users can upload an audio file no greater than 200MB, ensuring ample capacity for high-quality audio content.
* **Video Files for Free Users:** Free users have a maximum upload limit of 100MB for video files, suitable for short clips and previews.
* **Video Files for Pro/Business/Enterprise Users:** Higher-tier users can upload larger video files up to 1.5GB, accommodating longer and higher resolution content.
## API Rate Limits
To maintain the quality of service and availability for all users, our API enforces rate limits based on the type of subscription plan.
| Plan | API Rate Limit |
| --------------------- | ------------------- |
| Free / Pro | 50 requests per day |
| Business / Enterprise | 60 requests per min |
### Add to Live API Rate Limit
The Add to Live API has a rate limit of 3 requests per 20 minutes.
### Navigating API Rate Limits
* **Free and Pro Plans:** These plans are ideal for light to moderate usage, with a cap of 50 API requests per day. This rate is suitable for testing and small-scale applications.
* **Business and Enterprise Plans:** Designed for more demanding use cases, these plans allow up to 60 requests per minute, providing ample capacity for larger applications and higher volume demands.
These limits are in place to ensure optimal performance and fair usage across our platform.
## Additional Resources
Use the API to upload audio to Fireflies.ai
Authenticating your requests with the Fireflies API
---
# Source: https://docs.fireflies.ai/graphql-api/query/live_action_items.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Live Action Items
> Query live action items for a meeting
## Overview
The `live_action_items` query allows you to fetch action items for a live meeting. This includes both action items automatically created by Fireflies during the meeting and action items created via the `createLiveActionItem` mutation.
## Arguments
The ID of the meeting to fetch live action items for
## Response
Returns an array of `LiveActionItem` objects with the following fields:
Name of the person who the action item is associated with
The action item text
## Usage Example
To fetch live action items for a meeting:
```graphql theme={null}
query LiveActionItems($meeting_id: ID!) {
live_action_items(meeting_id: $meeting_id) {
name
action_item
}
}
```
```bash curl theme={null}
curl -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "query LiveActionItems($meeting_id: ID!) { live_action_items(meeting_id: $meeting_id) { name action_item } }",
"variables": {
"meeting_id": "your_meeting_id"
}
}'
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: `query LiveActionItems($meeting_id: ID!) {
live_action_items(meeting_id: $meeting_id) {
name
action_item
}
}`,
variables: {
meeting_id: 'your_meeting_id'
}
};
axios
.post(url, data, { headers: headers })
.then(result => {
console.log(result.data);
})
.catch(e => {
console.log(JSON.stringify(e));
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = {
'query': '''
query LiveActionItems($meeting_id: ID!) {
live_action_items(meeting_id: $meeting_id) {
name
action_item
}
}
''',
'variables': {
'meeting_id': 'your_meeting_id'
}
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(response.json()['data'])
else:
print(response.text)
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class ApiRequest {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
String jsonRequest = "{\"query\": \"query LiveActionItems($meeting_id: ID!) { live_action_items(meeting_id: $meeting_id) { name action_item } }\", \"variables\": {\"meeting_id\": \"your_meeting_id\"}}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"live_action_items": [
{
"name": "John Doe",
"action_item": "Follow up with the client about the proposal"
},
{
"name": "Jane Smith",
"action_item": "Schedule a follow-up meeting for next week"
}
]
}
}
```
## Error Codes
List of possible error codes that may be returned by the `live_action_items` query. Full list of error codes can be found [here](/miscellaneous/error-codes).
The user account has been cancelled. Please contact support if you encounter this error.
The meeting with the specified ID was not found or you do not have access to it.
You do not have permission to view action items for this meeting. Only the meeting organizer or team admin can view live action items.
## Additional Resources
Create action items during a live meeting
Pause or resume recording for a live meeting
---
# Source: https://docs.fireflies.ai/getting-started/llm-development.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# LLM-based Development
> Enhance your AI coding experience with LLM readable documentation.
### Overview
Welcome to the guide on utilizing our specialized `llms.txt` files to enhance your LLM-based coding workflow. Whether you’re using Replit, Cursor, Devin, or any other AI coding tool, this page will assist you in leveraging our resources to debug and refine code generated by Fireflies.
Our platform seamlessly integrates with a variety of AI coding tools. While the generated code may not always be perfect, this guide outlines how to effectively use our `llms.txt` files to improve the debugging process, ensuring your development workflow remains smooth and efficient.
### How to Use `llms.txt` Files
#### For Tools with Limited Agentic Capabilities
If your coding tool does not support web querying or autonomous resource fetching:
* **Download the File**\
Access the complete file by visiting [this link](https://docs.fireflies.ai/llms-full.txt) and download it to your local machine.
* **Upload and Debug**\
Upload the downloaded file to your AI coding tool. Instruct your tool to analyze and debug the code using the content of this file. This manual intervention guides the tool in identifying and fixing errors in generated code.
#### For Advanced, Agentic Coding Tools
If your coding tool is sophisticated and capable of querying the web independently:
* **Provide the URL Directly**\
Instead of downloading the full file, supply your tool with the URL [https://docs.fireflies.ai/llms-full.txt](https://docs.fireflies.ai/llms-full.txt).
* **Let It Decide**\
Your advanced tool will automatically determine which parts of the file to use and where to look, streamlining the debugging process without additional manual steps.
### Additional Tips
* **Tool Configuration:** Ensure that your AI coding tool is configured to handle file uploads or URL-based inputs effectively.
* **Experiment and Adapt:** Different tools may interact with our resources in unique ways. Experiment with both methods to find the approach that best suits your workflow.
* **Support and Documentation:** If you encounter any challenges or need further assistance, please contact our support team.
Happy coding!
## Additional Resources
Connect your AI tools directly to your meeting data
Foundational guide to the core aspects of the Fireflies API
---
# Source: https://docs.fireflies.ai/getting-started/mcp-configuration.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# MCP Server Configuration
> Connect your AI tools directly to your meeting data with Fireflies MCP Server.
### Overview
The Fireflies MCP Server enables AI tools to connect directly to your meeting data without switching platforms or copying transcript excerpts. This integration allows you to ask questions like "What were the main objections in this week's sales calls?" or "Create a summary of all product feedback from user interviews this month" directly from your AI coding tools.
### What is MCP?
Model Context Protocol (MCP) is an open standard that enables AI applications to securely connect to external data sources and tools. With Fireflies MCP Server, your AI tools can access meeting transcripts, summaries, action items, and insights directly from your Fireflies account.
### Getting Started
#### Prerequisites
* Active Fireflies.ai account
* AI tool that supports MCP (such as Claude, OpenAI Connector, Cursor, Devin, or other MCP-compatible applications)
#### Installation
1. **Configure your AI tool**
Add the Fireflies MCP server to your AI tool's configuration. The remote server URL is [https://api.fireflies.ai/mcp](https://api.fireflies.ai/mcp) which uses OAuth with your Fireflies account. The exact steps depend on your specific AI application.
For specific AI tools, you can also configure directly through:
* [Claude Settings](https://claude.ai/settings/connectors)
* [Devin MCP Marketplace](https://app.devin.ai/settings/mcp-marketplace/setup/fireflies)
2. **Use your Fireflies API key on Claude Desktop** (Optional):
1. Add this config to your `claude_desktop_config.json` file:
```json theme={null}
{
"mcpServers": {
"fireflies": {
"command": "npx",
"args": [
"mcp-remote",
"https://api.fireflies.ai/mcp",
"--header",
"Authorization: Bearer YOUR_API_KEY_HERE"
]
}
}
}
```
2. Get your API Key from Fireflies
* Go to **Settings > Developer Settings** and **Copy your API key**
* [See how to get your API key →](https://guide.fireflies.ai/hc/en-us/articles/360020249198-How-to-access-the-Fireflies-API-key)
* Once you have the API key, paste it in your claude\_desktop\_config.json
* Replace `YOUR_API_KEY_HERE` with your actual API key
3. Restart Claude Desktop
3. **Start querying your data**
Once configured, you can ask your AI tool questions about your meeting data directly.
### Use Cases
* **Sales Analysis**: "What were the common objections in this week's sales calls?"
* **Product Feedback**: "Summarize all product feedback from user interviews this month"
* **Meeting Insights**: "What action items were assigned to John across all meetings?"
* **Trend Analysis**: "How has customer sentiment changed over the past quarter?"
### Additional Resources
Complete reference for all available MCP tools and their parameters
Enhance your AI coding experience with LLM readable documentation
Authenticating your requests with the Fireflies API
---
# Source: https://docs.fireflies.ai/schema/meeting-analytics.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# MeetingAnalytics
> Schema for MeetingAnalytics
Sentiment analysis of the meeting. See [Sentiments](/schema/sentiments)
Categorized analytics of the meeting content. See [AnalyticsCategories](#analyticscategories)
Array of analytics data for each speaker in the meeting. See [AnalyticsSpeaker](#analyticsspeaker)
## AnalyticsCategories
Number of questions asked during the meeting.
Number of date and time references mentioned in the meeting.
Number of metrics or measurements discussed in the meeting.
Number of tasks or action items identified in the meeting.
## AnalyticsSpeaker
Unique identifier for the speaker.
Name of the speaker.
Total speaking time of the speaker in seconds.
Total number of words spoken by the speaker.
Duration of the speaker's longest continuous speech in seconds.
Number of times the speaker spoke during the meeting.
Number of filler words (um, uh, like, etc.) used by the speaker.
Number of questions asked by the speaker.
Percentage of the total meeting time the speaker was talking.
Average speaking rate of the speaker in words per minute.
## Additional Resources
Schema for Sentiments
Schema for Speaker
---
# Source: https://docs.fireflies.ai/schema/meeting-attendee.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# MeetingAttendee
> Schema for MeetingAttendee
Display name of the meeting attendee.
Email address of the meeting attendee.
Phone number of the meeting attendee.
Full name of the meeting attendee.
Deprecated field
## Additional Resources
Schema for MeetingAttendance
Schema for Transcript
---
# Source: https://docs.fireflies.ai/schema/meeting-info.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# MeetingInfo
> Schema for MeetingInfo
Boolean value that returns `true` if the bot joined the call, `false` otherwise.
Boolean value that returns `true` if the meeting does not contain any spoken words. Otherwise
false.
String value representing the summary status. Possible values are `processing`, `processed`,
`failed`, `skipped`.
## Additional Resources
Schema for Transcript
Schema for Summary
---
# Source: https://docs.fireflies.ai/schema/enum/meeting-state.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# MeetingState
> Enum for MeetingState - possible states for active meetings
The `MeetingState` enum specifies the current state of an active meeting.
## Values
The meeting is currently in progress with the Fireflies bot actively recording.
The meeting has been paused. The Fireflies bot is still in the meeting but recording is temporarily stopped.
## Usage
The `MeetingState` enum is used in two contexts:
1. **As a filter** in the [GetActiveMeetingsInput](/schema/input/active-meetings-input) to filter meetings by state
2. **As a response field** in the [ActiveMeeting](/schema/active-meeting) type to indicate the current state
### Filtering by State
```graphql theme={null}
query ActiveMeetings {
active_meetings(input: { states: [active] }) {
id
title
state
}
}
```
### Getting All States (Default)
When no `states` filter is provided, both `active` and `paused` meetings are returned:
```graphql theme={null}
query ActiveMeetings {
active_meetings {
id
title
state
}
}
```
## Related Types
* [ActiveMeeting](/schema/active-meeting) - Schema containing the state field
* [GetActiveMeetingsInput](/schema/input/active-meetings-input) - Input type using this enum for filtering
* [Active Meetings Query](/graphql-api/query/active-meetings) - Query documentation
---
# Source: https://docs.fireflies.ai/realtime-api/overview.md
# Source: https://docs.fireflies.ai/mcp-tools/overview.md
# Source: https://docs.fireflies.ai/examples/overview.md
# Source: https://docs.fireflies.ai/askfred/overview.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Overview
> Use AI to intelligently query and analyze your meeting transcripts with natural language
## What is AskFred?
AskFred is Fireflies' AI-powered meeting assistant that lets you ask natural language questions about your meeting transcripts. Query individual meetings or search across multiple meetings to get intelligent, context-aware answers.
### Key Capabilities
**Intelligent Q\&A** - Ask questions in natural language and receive comprehensive answers with smart follow-up suggestions
**Contextual Threads** - Maintain conversations where follow-up questions preserve context from previous exchanges
**Multi-Meeting Analysis** - Query across meetings using filters to identify patterns and aggregate insights
## API Operations
AskFred provides a comprehensive set of GraphQL operations:
### Queries
* [askfred\_threads](/graphql-api/query/askfred-threads) - List all conversation threads
* [askfred\_thread](/graphql-api/query/askfred-thread) - Get specific thread with full history
### Mutations
* [createAskFredThread](/graphql-api/mutation/create-askfred-thread) - Start a new conversation
* [continueAskFredThread](/graphql-api/mutation/continue-askfred-thread) - Add follow-up questions
* [deleteAskFredThread](/graphql-api/mutation/delete-askfred-thread) - Remove threads
## Next Steps
Create your first thread and start querying meetings
Example questions and industry-specific scenarios
---
# Source: https://docs.fireflies.ai/getting-started/quickstart.md
# Source: https://docs.fireflies.ai/askfred/quickstart.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Quickstart
> Get started with AskFred in minutes - learn how to create threads and ask questions about your meetings
## Prerequisites
Before you begin, make sure you have:
1. **API Key**: Obtain your API key from [app.fireflies.ai/integrations](https://app.fireflies.ai/integrations/custom/fireflies)
2. **Transcript ID** (optional): The ID of a meeting transcript you want to query
If you don't have a transcript ID, you can query across all your meetings using filters. See [Step 3](#step-3-query-across-meetings) below.
## Step 1: Create Your First Thread
Start by asking a question about a specific meeting:
```graphql GraphQL theme={null}
mutation CreateThread {
createAskFredThread(input: {
query: "What were the main discussion points?",
transcript_id: "your_transcript_id",
response_language: "en",
format_mode: "markdown"
}) {
message {
id
thread_id
answer
suggested_queries
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation CreateThread($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { id thread_id answer suggested_queries } } }",
"variables": {
"input": {
"query": "What were the main discussion points?",
"transcript_id": "your_transcript_id",
"response_language": "en",
"format_mode": "markdown"
}
}
}' \
https://api.fireflies.ai/graphql
```
```javascript JavaScript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const mutation = `
mutation CreateThread($input: CreateAskFredThreadInput!) {
createAskFredThread(input: $input) {
message {
id
thread_id
answer
suggested_queries
}
}
}
`;
const variables = {
input: {
query: 'What were the main discussion points?',
transcript_id: 'your_transcript_id',
response_language: 'en',
format_mode: 'markdown'
}
};
axios
.post(url, { query: mutation, variables }, { headers })
.then(response => {
console.log(response.data.data.createAskFredThread);
})
.catch(error => {
console.error(error);
});
```
```python Python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
mutation = """
mutation CreateThread($input: CreateAskFredThreadInput!) {
createAskFredThread(input: $input) {
message {
id
thread_id
answer
suggested_queries
}
}
}
"""
variables = {
'input': {
'query': 'What were the main discussion points?',
'transcript_id': 'your_transcript_id',
'response_language': 'en',
'format_mode': 'markdown'
}
}
response = requests.post(
url,
json={'query': mutation, 'variables': variables},
headers=headers
)
print(response.json())
```
### Response
```json theme={null}
{
"data": {
"createAskFredThread": {
"message": {
"id": "msg_abc123",
"thread_id": "thread_xyz789",
"answer": "The main discussion points were:\n\n1. **Q4 Product Roadmap**: The team reviewed upcoming features...\n2. **Budget Allocation**: Discussion on resource allocation...\n3. **Timeline Concerns**: Several concerns about launch dates...",
"suggested_queries": [
"Can you elaborate on the timeline concerns?",
"What features are prioritized for Q4?",
"Who raised concerns about the budget?"
]
}
}
}
}
```
## Step 2: Ask Follow-up Questions
Continue the conversation with context-aware follow-ups using the `thread_id` from the previous response:
```graphql GraphQL theme={null}
mutation ContinueThread {
continueAskFredThread(input: {
thread_id: "thread_xyz789",
query: "Can you elaborate on the timeline concerns?"
}) {
message {
answer
suggested_queries
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation ContinueThread($input: ContinueAskFredThreadInput!) { continueAskFredThread(input: $input) { message { answer suggested_queries } } }",
"variables": {
"input": {
"thread_id": "thread_xyz789",
"query": "Can you elaborate on the timeline concerns?"
}
}
}' \
https://api.fireflies.ai/graphql
```
```javascript JavaScript theme={null}
const variables = {
input: {
thread_id: 'thread_xyz789',
query: 'Can you elaborate on the timeline concerns?'
}
};
const mutation = `
mutation ContinueThread($input: ContinueAskFredThreadInput!) {
continueAskFredThread(input: $input) {
message {
answer
suggested_queries
}
}
}
`;
axios.post(url, { query: mutation, variables }, { headers })
.then(response => console.log(response.data))
.catch(error => console.error(error));
```
```python Python theme={null}
variables = {
'input': {
'thread_id': 'thread_xyz789',
'query': 'Can you elaborate on the timeline concerns?'
}
}
mutation = """
mutation ContinueThread($input: ContinueAskFredThreadInput!) {
continueAskFredThread(input: $input) {
message {
answer
suggested_queries
}
}
}
"""
response = requests.post(
url,
json={'query': mutation, 'variables': variables},
headers=headers
)
print(response.json())
```
## Step 3: Query Across Meetings
Analyze patterns across multiple meetings using filters:
```graphql GraphQL theme={null}
mutation CrossMeetingAnalysis {
createAskFredThread(input: {
query: "What customer concerns were raised this month?",
filters: {
start_time: "2024-03-01T00:00:00Z",
end_time: "2024-03-31T23:59:59Z",
participants: ["customer@example.com"]
}
}) {
message {
answer
suggested_queries
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation CrossMeetingAnalysis($input: CreateAskFredThreadInput!) { createAskFredThread(input: $input) { message { answer suggested_queries } } }",
"variables": {
"input": {
"query": "What customer concerns were raised this month?",
"filters": {
"start_time": "2024-03-01T00:00:00Z",
"end_time": "2024-03-31T23:59:59Z",
"participants": ["customer@example.com"]
}
}
}
}' \
https://api.fireflies.ai/graphql
```
For more details on available filters and parameters, see the [createAskFredThread](/graphql-api/mutation/create-askfred-thread) documentation.
## Step 4: List Your Threads
Retrieve all your conversation threads:
```graphql GraphQL theme={null}
query GetThreads {
askfred_threads {
id
title
transcript_id
created_at
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "query { askfred_threads { id title transcript_id created_at } }"
}' \
https://api.fireflies.ai/graphql
```
## Additional Resources
Discover common scenarios and example questions
Explore all available parameters and options
---
# Source: https://docs.fireflies.ai/schema/input/role.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Role
> Schema for Role
Valid types for role are `admin` and `user`
---
# Source: https://docs.fireflies.ai/schema/sentence.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Sentence
> Schema for Sentence
Index
Default transcription sentence or user edited transcription sentence.
Transcribed sentence from meeting audio
Start time of Sentence
End time of Sentence
Unique identifier for Speaker
Name of the speaker.
Sentiment analysis from meeting audio. Type of [AIFilter](/schema/aifilter)
## Additional Resources
Schema for AIFilter
Schema for Speaker
---
# Source: https://docs.fireflies.ai/schema/sentiments.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Sentiments
> Schema for Sentiments
Percentage of negative sentiment detected in the conversation.
Percentage of neutral sentiment detected in the conversation.
Percentage of positive sentiment detected in the conversation.
## Additional Resources
Schema for Sentence
Schema for Meeting Analytics
---
# Source: https://docs.fireflies.ai/graphql-api/mutation/set-user-role.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Set User Role
> Use the API to set user roles
## Overview
The `setUserRole` mutation allows for the updating of a user's role within a team.
## Arguments
The unique identifier of the user.
The [Role](/schema/input/role) to be assigned to the user. Valid types for user are `admin` and
`user`
## Usage Example
To set a user's role, provide the user's ID and the desired role as arguments to the mutation. Here's an example of how this mutation could be used:
```graphql theme={null}
mutation setUserRole($userId: String!, $role: Role!) {
setUserRole(user_id: $userId, role: $role) {
id
name
email
role
}
}
```
```bash curl theme={null}
curl -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation($user_id: String!, $role: Role!) { setUserRole(user_id: $user_id, role:$role) { name is_admin } }",
"variables": {
"user_id": "your_user_id",
"role": "admin"
}
}'
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: `mutation Mutation($userId: String!, $role: Role!) {
setUserRole(user_id: $userId, role: $role) {
name
is_admin
}
}`,
variables: { userId: 'your_user_id', role: 'admin' }
};
axios
.post(url, data, { headers: headers })
.then(result => {
console.log(result.data);
})
.catch(e => {
console.log(JSON.stringify(e));
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = {
'query': '''
mutation($user_id: String!, $role: Role!) {
setUserRole(user_id: $user_id, role:$role) {
name
is_admin
}
}
''',
'variables': {
'user_id': "your_user_id",
'role': "admin"
}
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(response.json()['data'])
else:
print(response.text)
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class ApiRequest {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
String jsonRequest = "{\"query\": \"mutation SetUserRole($user_id: String!, $role: Role!) { setUserRole(user_id: $user_id, role: $role) { name is_admin } }\", \"variables\": {\"user_id\": \"your_user_id\", \"role\": \"admin\"}}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"setUserRole": {
"name": "Justin Fly",
"is_admin": "true",
}
}
}
```
## Error Codes
List of possible error codes that may be returned by the `setUserRole` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).
This may indicate that you are not a part of any team. Please contact support if you encounter this error
The user ID you are trying to query is not in your team.
The user does not have admin privileges to set the user role.
The team must have at least one admin. Please add an admin to the team or contact support if you encounter this error.
An invalid argument was provided to the mutation for the `role` field. Please check the arguments you are providing and try again.
## Additional Resources
Querying list of users
Querying user details
---
# Source: https://docs.fireflies.ai/schema/speaker.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Speaker
> Schema for Speaker
ID of the speaker identified within the transcript
Name of the speaker identified within the transcript
## Additional Resources
Schema for Transcript
Schema for Sentence
---
# Source: https://docs.fireflies.ai/schema/summary-section.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# SummarySection
> Extended sections of the summary included by customizing the summary from the dashboard.
Title of the section
Response summary content of the section
## Additional Resources
Schema for Summary
Schema for Transcript
---
# Source: https://docs.fireflies.ai/schema/summary.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Summary
> AI generated summary of the meeting.
Meeting AI summary prompts are defined by [AI apps](https://app.fireflies.ai/apps) and can be
customized to your needs.
A list of action items generated by the AI based on the meeting transcript
A list of keywords generated by the AI based on the meeting transcript
An outline of the meeting with timestamps generated by the AI based on the meeting transcript
A summary of the meeting generated by the AI
A list of shorthand bullets generated by the AI
Detailed meeting notes generated by the AI
A summary of the meeting in 1 sentence
Summary of the meeting in a few bullet points with descriptive emojis
Summary of the meeting in a single paragraph
Brief overview of the meeting
Meeting classification
List of topics discussed during the meeting.
Chapters of the short transcript. The short transcript is an LLM-condensed transcript that may be
helpful for downstream applications
Optional sections of the summary included by customizing the summary from the dashboard
## Additional Resources
Schema for Summary Section
Schema for Transcript
---
# Source: https://docs.fireflies.ai/fundamentals/super-admin.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Super Admin
> Fireflies Super Admin with advanced capabilities for querying your data
## Overview
The Super Admin API offers advanced features such as team-wide webhooks and privacy setting bypass, providing enhanced control and flexibility for managing your data. This is only available on the enterprise tier for company admins - [learn more](https://guide.fireflies.ai/hc/en-us/articles/30453010621585-Learn-about-the-Super-Admin-role).
## Super Admin Webhooks
The Super Admin webhook notifies you of all team meetings owned by your team, allowing you to automate workflows, integrate with other tools, and maintain an overview of your team's meetings with a single webhook.
### Setting up Super Admin Webhooks
Follow the steps below to set up the Super Admin webhook:
Visit the [Fireflies.ai dashboard settings](https://app.fireflies.ai/settings)
Navigate to the Developer settings tab
Enter a valid https URL in the webhooks field and save
It is highly suggested to use [webhook auth](/graphql-api/webhooks) to secure your servers.
### Privacy Settings Bypass
The Super Admin functionality allows you to bypass your team's privacy settings, allowing you to query all data in your team's account.
### Requirements
Super Admin API is only available to teams on the Enterprise plan. [Learn more here](https://guide.fireflies.ai/hc/en-us/articles/30453010621585-Learn-about-the-Super-Admin-role) and reach out to us with questions
## Additional Resources
Create notifications using webhooks
Authenticating your requests with the Fireflies API
---
# Source: https://docs.fireflies.ai/schema/transcript.md
# Source: https://docs.fireflies.ai/graphql-api/query/transcript.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Transcript
> Querying transcript details
## Overview
The transcript query is designed to fetch details associated with a specific transcript ID.
## Arguments
## Schema
Fields available to the [Transcript](/schema/transcript) query
## Usage Example
```graphql theme={null}
query Transcript($transcriptId: String!) {
transcript(id: $transcriptId) {
id
dateString
privacy
analytics {
sentiments {
negative_pct
neutral_pct
positive_pct
}
categories {
questions
date_times
metrics
tasks
}
speakers {
speaker_id
name
duration
word_count
longest_monologue
monologues_count
filler_words
questions
duration_pct
words_per_minute
}
}
speakers {
id
name
}
sentences {
index
speaker_name
speaker_id
text
raw_text
start_time
end_time
ai_filters {
task
pricing
metric
question
date_and_time
text_cleanup
sentiment
}
}
title
host_email
organizer_email
calendar_id
user {
user_id
email
name
num_transcripts
recent_meeting
minutes_consumed
is_admin
integrations
}
fireflies_users
participants
date
transcript_url
audio_url
video_url
duration
meeting_attendees {
displayName
email
phoneNumber
name
location
}
meeting_attendance {
name
join_time
leave_time
}
summary {
keywords
action_items
outline
shorthand_bullet
overview
bullet_gist
gist
short_summary
short_overview
meeting_type
topics_discussed
transcript_chapters
}
cal_id
calendar_type
meeting_info {
fred_joined
silent_meeting
summary_status
}
apps_preview {
outputs {
transcript_id
user_id
app_id
created_at
title
prompt
response
}
}
meeting_link
channels {
id
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
--data '{ "query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }", "variables": { "transcriptId": "your_transcript_id" } }' \
https://api.fireflies.ai/graphql
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: 'query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }',
variables: { transcriptId: 'your_transcript_id' }
};
axios
.post(url, data, { headers: headers })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = '{"query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }", "variables": {"transcriptId": "your_transcript_id"}}'
response = requests.post(url, headers=headers, data=data)
print(response.json())
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class ApiRequest {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
String jsonRequest = "{\"query\": \"query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { title id } }\", \"variables\": {\"transcriptId\": \"your_transcript_id\"}}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"transcript": {
"title": "Weekly sync",
"id": "transcript-id",
}
}
}
```
## Error Codes
List of possible error codes that may be returned by the `transcript` query. Full list of error codes can be found [here](/miscellaneous/error-codes).
The transcript ID you are trying to query does not exist or you do not have access to it.
## Additional Resources
Querying list of transcripts
Use the API to update meeting titles
---
# Source: https://docs.fireflies.ai/graphql-api/query/transcripts.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Transcripts
> Querying list of transcripts
## Overview
The transcripts query is designed to fetch a list of transcripts against input arguments.
## Arguments
This field is deprecated. Please use `keyword` instead.
Title of the transcript
This argument is mutually exclusive with `keyword` field
The maximum allowable length for this field is `256` characters.
Allows searching for keywords in meeting title and/or words spoken during the meeting
This argument is mutually exclusive with `title` field
The maximum allowable length for this field is `255` characters.
Specify the scope for keyword search.
If scope is provided, `keyword` becomes a required field
Defaults to `TITLE` if no value is provided
The available options for this field are:
* `title`: Search within the title.
* `sentences`: Search within the [sentences](/schema/sentence).
* `all`: Search within title and sentences.
Return all transcripts created after `fromDate`. The `fromDate` parameter accepts a date-time
string in the ISO 8601 format, specifically in the form `YYYY-MM-DDTHH:mm.sssZ`. For example, a
valid timestamp would be `2024-07-08T22:13:46.660Z`.
Return all transcripts created before `toDate`. The `toDate` parameter accepts a date-time string
in the ISO 8601 format, specifically in the form `YYYY-MM-DDTHH:mm.sssZ`. For example, a valid
timestamp would be `2024-07-08T22:13:46.660Z`.
This field is deprecated. Please use `fromDate` and `toDate` instead.
Return all transcripts created within the date specified. Query input value must be in milliseconds.
For example, you can use the JavaScript `new Date().getTime()` to get the datetime in milliseconds
which should look like this `1621292557453`. The timezone for this field is UTC +00:00
For more details regarding time since [EPOCH](https://currentmillis.com/)
Number of transcripts to return. Maxiumum 50 in one query
Number of transcripts to skip.
Filter all meetings accordingly to meetings that have this email as the host.
This field is deprecated. Please use `organizers` instead.
Filter meetings that have this email as the organizer.
This field is deprecated. Please use `participants` instead.
Filter meetings that contain this email as an attendee.
[User id](/schema/user). Filter all meetings that have this user ID as the organizer or participant.
Filter all meetings that have the API key owner as the organizer.
Filter meetings that have any of these emails as organizers. Accepts an array of email addresses.
Cannot be combined with the deprecated `organizer_email` or `participant_email` fields.
Each email must be valid and 256 characters or fewer.
Filter meetings that contain any of these emails as attendees. Accepts an array of email addresses.
Cannot be combined with the deprecated `organizer_email` or `participant_email` fields.
Each email must be valid and 256 characters or fewer.
Filter meetings that belong to a specific channel. Accepts a single channel ID.
The channel ID must be a valid string and 256 characters or fewer.
## Schema
Fields available to the [Transcript](/schema/transcript) query
## Usage Example
```graphql theme={null}
query Transcripts(
$title: String
$date: Float
$limit: Int
$skip: Int
$hostEmail: String
$participantEmail: String
$organizers: [String]
$participants: [String]
$userId: String
$channelId: String
) {
transcripts(
title: $title
date: $date
limit: $limit
skip: $skip
host_email: $hostEmail
participant_email: $participantEmail
organizers: $organizers
participants: $participants
user_id: $userId
channel_id: $channelId
) {
id
analytics {
sentiments {
negative_pct
neutral_pct
positive_pct
}
categories {
questions
date_times
metrics
tasks
}
speakers {
speaker_id
name
duration
word_count
longest_monologue
monologues_count
filler_words
questions
duration_pct
words_per_minute
}
}
sentences {
index
speaker_name
speaker_id
text
raw_text
start_time
end_time
ai_filters {
task
pricing
metric
question
date_and_time
text_cleanup
sentiment
}
}
title
speakers {
id
name
}
host_email
organizer_email
meeting_info {
fred_joined
silent_meeting
summary_status
}
calendar_id
user {
user_id
email
name
num_transcripts
recent_meeting
minutes_consumed
is_admin
integrations
}
fireflies_users
participants
date
transcript_url
audio_url
video_url
duration
meeting_attendees {
displayName
email
phoneNumber
name
location
}
meeting_attendance {
name
join_time
leave_time
}
summary {
keywords
action_items
outline
shorthand_bullet
overview
bullet_gist
gist
short_summary
short_overview
meeting_type
topics_discussed
transcript_chapters
}
cal_id
calendar_type
apps_preview {
outputs {
transcript_id
user_id
app_id
created_at
title
prompt
response
}
}
meeting_link
channels {
id
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
--data '{ "query": "query Transcripts($userId: String) { transcripts(user_id: $userId) { title id } }" }' \
https://api.fireflies.ai/graphql
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: 'query Transcripts($userId: String) { transcripts(user_id: $userId) { title id } }',
variables: { userId: 'your_user_id' }
};
axios
.post(url, data, { headers: headers })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = '{"query": "query Transcripts($userId: String) { transcripts(user_id: $userId) { title id } }", "variables": {"userId": "user_id"}}'
response = requests.post(url, headers=headers, data=data)
print(response.json())
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
public class ApiRequest {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
String json = "{\"query\":\"query Transcripts { transcripts { title id } } \"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(HttpRequest.BodyPublishers.ofString(json))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"transcripts": [
{
"title": "Weekly sync",
"id": "transcript-id",
},
{
"title": "ClientMeeting.mp3",
"id": "transcript-id-2",
}
]
}
}
```
## Error Codes
List of possible error codes that may be returned by the `transcripts` query. Full list of error codes can be found [here](/miscellaneous/error-codes).
The user ID you are trying to query does not exist or you do not have access to it.
## Additional Resources
Querying transcript details
Use the API to upload audio to Fireflies.ai
---
# Source: https://docs.fireflies.ai/schema/input/update-meeting-channel-input.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# UpdateMeetingChannelInput
> Schema for UpdateMeetingChannelInput
Array of Transcript IDs to update. Must contain 1–5 items.
The target Channel ID. A meeting can only belong to one channel; this mutation sets the meeting's channel to the specified value.
---
# Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-channel.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Update Meeting Channel
> Use the API to update meeting channel assignments
## Overview
The `updateMeetingChannel` mutation allows for batch updating the channel assignment of multiple meeting transcripts. This operation requires admin privileges within the team or ownership of the meetings. You can update 1–5 transcripts at once with all-or-nothing semantics—if any transcript fails validation, none are updated.
## Arguments
The channel assignment to be applied to the specified transcripts. See [UpdateMeetingChannelInput](/schema/input/update-meeting-channel-input).
## Usage Example
To update meeting channels, provide an array of transcript IDs (1–5 items) and a single channel ID as arguments to the mutation. Here's an example of how this mutation could be used:
```graphql theme={null}
mutation UpdateMeetingChannel($input: UpdateMeetingChannelInput!) {
updateMeetingChannel(input: $input) {
id
title
channels {
id
}
}
}
```
```bash curl theme={null}
curl -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation($input: UpdateMeetingChannelInput!) { updateMeetingChannel(input: $input) { id title channels { id } } }",
"variables": {
"input": {
"transcript_ids": ["transcript_id_1", "transcript_id_2"],
"channel_id": "channel_id"
}
}
}'
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
};
const data = {
query: `
mutation($input: UpdateMeetingChannelInput!) {
updateMeetingChannel(input: $input) {
id
title
channels {
id
}
}
}
`,
variables: {
input: {
transcript_ids: ['transcript_id_1', 'transcript_id_2'],
channel_id: 'channel_id'
}
}
};
const response = await axios.post(url, data, { headers });
console.log(response.data);
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = {
'query': `
mutation($input: UpdateMeetingChannelInput!) {
updateMeetingChannel(input: $input) {
id
title
channels {
id
}
}
}
`,
'variables': {
'input': {
'transcript_ids': ['transcript_id_1', 'transcript_id_2'],
'channel_id': 'channel_id'
}
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```
```java java theme={null}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
public class UpdateMeetingChannelExample {
public static void main(String[] args) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
String json = "{"
+ "\"query\":\"mutation($input: UpdateMeetingChannelInput!) { updateMeetingChannel(input: $input) { id title channels { id } } }\","
+ "\"variables\":{"
+ "\"input\":{"
+ "\"transcript_ids\":[\"transcript_id_1\",\"transcript_id_2\"],"
+ "\"channel_id\":\"channel_id\""
+ "}"
+ "}"
+ "}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(json))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"updateMeetingChannel": [
{
"id": "transcript_id_1",
"title": "Weekly Sync",
"channels": [
{
"id": "channel_id"
}
]
},
{
"id": "transcript_id_2",
"title": "Product Review",
"channels": [
{
"id": "channel_id"
}
]
}
]
}
}
```
## FAQ
Only users with admin privileges or meeting owners can update meeting channels. All specified meetings must be owned by users in your team.
You can update between 1 and 5 transcripts in a single mutation call. If you need to update more transcripts, make multiple mutation calls.
The mutation uses all-or-nothing semantics. If any transcript fails validation (not found, no access, or permission denied), none of the transcripts will be updated. All transcripts must pass validation for the update to succeed.
No, a meeting can only belong to one channel at a time. This mutation sets the meeting's channel to the specified value, replacing any previous channel assignment.
No, the response order is not guaranteed to match the input order of transcript\_ids. If you need to correlate responses with inputs, use the id field in the response.
## Error Codes
List of possible error codes that may be returned by the `updateMeetingChannel` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).
The user must be either the meeting owner or a team admin to update meeting channels.
One or more specified transcripts could not be found or you do not have access to them.
The input failed validation. Common causes include: empty transcript\_ids array, more than 5 transcript\_ids, or missing/empty channel\_id.
## Additional Resources
Querying transcript details
Update meeting titles
Update meeting privacy
Querying list of transcripts
---
# Source: https://docs.fireflies.ai/schema/input/update-meeting-privacy-input.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# UpdateMeetingPrivacyInput
> Schema for UpdateMeetingPrivacyInput
The unique identifier of the meeting / transcript.
The privacy level for the meeting. Must be one of the following values:
* `link` - Anyone with the link can access the meeting
* `owner` - Only the meeting owner can access
* `participants` - Only meeting participants can access
* `teammatesandparticipants` - Both teammates and participants can access
* `teammates` - Only teammates can access
---
# Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-privacy.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Update Meeting Privacy
> Use the API to update meeting privacy settings
## Overview
The `updateMeetingPrivacy` mutation allows for updating the privacy setting of a meeting transcript. This operation requires admin privileges within the team or ownership of the meeting.
## Arguments
The privacy setting to be assigned to the meeting / transcript. See [UpdateMeetingPrivacyInput](/schema/input/update-meeting-privacy-input).
## Usage Example
To update a meeting's privacy setting, provide the transcript ID and the new privacy level as arguments to the mutation. Here's an example of how this mutation could be used:
```graphql theme={null}
mutation UpdateMeetingPrivacy($input: UpdateMeetingPrivacyInput!) {
updateMeetingPrivacy(input: $input) {
id
title
privacy
}
}
```
```bash curl theme={null}
curl -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation($input: UpdateMeetingPrivacyInput!) { updateMeetingPrivacy(input: $input) { id title privacy } }",
"variables": {
"input": {
"id": "your_transcript_id",
"privacy": "teammates"
}
}
}'
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
};
const data = {
query: `
mutation($input: UpdateMeetingPrivacyInput!) {
updateMeetingPrivacy(input: $input) {
id
title
privacy
}
}
`,
variables: {
input: {
id: 'your_transcript_id',
privacy: 'teammates'
}
}
};
const response = await axios.post(url, data, { headers });
console.log(response.data);
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = {
'query': `
mutation($input: UpdateMeetingPrivacyInput!) {
updateMeetingPrivacy(input: $input) {
id
title
privacy
}
}
`,
'variables': {
'input': {
'id': 'your_transcript_id',
'privacy': 'teammates'
}
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```
```java java theme={null}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
public class UpdateMeetingPrivacyExample {
public static void main(String[] args) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
String json = "{"
+ "\"query\":\"mutation($input: UpdateMeetingPrivacyInput!) { updateMeetingPrivacy(input: $input) { id title privacy } }\","
+ "\"variables\":{"
+ "\"input\":{"
+ "\"id\":\"your_transcript_id\","
+ "\"privacy\":\"teammates\""
+ "}"
+ "}"
+ "}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(json))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"updateMeetingPrivacy": {
"id": "your_transcript_id",
"title": "Meeting Title",
"privacy": "teammates"
}
}
}
```
## FAQ
Only users with admin privileges or meeting owners can update meeting privacy settings. The meeting owner also needs to be in your team.
Available privacy levels are: link (anyone with link), owner (meeting owner only), participants (meeting participants only), teammatesandparticipants (teammates and participants), teammates (teammates only).
## Error Codes
List of possible error codes that may be returned by the `updateMeetingPrivacy` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).
The user must be either the meeting owner or a team admin to update meeting privacy.
The specified transcript could not be found or you do not have access to it
## Additional Resources
Querying transcript details
Use the API to update meeting titles
---
# Source: https://docs.fireflies.ai/schema/input/update-meeting-state-input.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# UpdateMeetingStateInput
> Schema for UpdateMeetingStateInput
The ID of the live meeting to update state for
The action to perform. Must be one of: `pause_recording` or `resume_recording`
---
# Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-state.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Update Meeting State
> Use the API to pause or resume recording for a live meeting
## Overview
The `updateMeetingState` mutation allows you to pause or resume recording for a live meeting through the API. This is useful for controlling the Fireflies bot during an active meeting.
This mutation is rate-limited to 10 requests per hour across all user tiers.
## Arguments
Input object containing the meeting ID and action to perform. See [UpdateMeetingStateInput](/schema/input/update-meeting-state-input) for details.
## Response
Whether the action was executed successfully
The action that was executed
## Usage Example
To update the meeting state, provide the meeting ID and the desired action:
```graphql theme={null}
mutation UpdateMeetingState($input: UpdateMeetingStateInput!) {
updateMeetingState(input: $input) {
success
action
}
}
```
```bash curl theme={null}
curl -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation UpdateMeetingState($input: UpdateMeetingStateInput!) { updateMeetingState(input: $input) { success action } }",
"variables": {
"input": {
"meeting_id": "your_meeting_id",
"action": "pause_recording"
}
}
}'
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: `mutation UpdateMeetingState($input: UpdateMeetingStateInput!) {
updateMeetingState(input: $input) {
success
action
}
}`,
variables: {
input: {
meeting_id: 'your_meeting_id',
action: 'pause_recording'
}
}
};
axios
.post(url, data, { headers: headers })
.then(result => {
console.log(result.data);
})
.catch(e => {
console.log(JSON.stringify(e));
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = {
'query': '''
mutation UpdateMeetingState($input: UpdateMeetingStateInput!) {
updateMeetingState(input: $input) {
success
action
}
}
''',
'variables': {
'input': {
'meeting_id': 'your_meeting_id',
'action': 'pause_recording'
}
}
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(response.json()['data'])
else:
print(response.text)
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class ApiRequest {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
String jsonRequest = "{\"query\": \"mutation UpdateMeetingState($input: UpdateMeetingStateInput!) { updateMeetingState(input: $input) { success action } }\", \"variables\": {\"input\": {\"meeting_id\": \"your_meeting_id\", \"action\": \"pause_recording\"}}}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"updateMeetingState": {
"success": true,
"action": "pause_recording"
}
}
}
```
## Error Codes
List of possible error codes that may be returned by the `updateMeetingState` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).
The user account has been cancelled. Please contact support if you encounter this error.
The meeting with the specified ID was not found or you do not have access to it.
You do not have permission to control this meeting. Only the meeting organizer or team admin can update the meeting state.
You have exceeded the rate limit for this mutation. The limit is 10 requests per hour. Please wait before making additional requests.
## Additional Resources
Create action items during a live meeting
Create soundbites during a live meeting
---
# Source: https://docs.fireflies.ai/schema/input/update-meeting-title-input.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# UpdateMeetingTitleInput
> Schema for UpdateMeetingTitleInput
The new title to be assigned to the meeting / transcript. The title must be a string between 5 and 250 characters long and should not contain any special characters.
Min / max of 5 / 256 characters.
The unique identifier of the meeting / transcript.
---
# Source: https://docs.fireflies.ai/graphql-api/mutation/update-meeting-title.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Update Meeting Title
> Use the API to update meeting titles
## Overview
The `updateMeetingTitle` mutation allows for updating the title of a meeting transcript. This operation requires admin privileges within the team.
## Arguments
The new title to be assigned to the meeting / transcript.
## Usage Example
To update a meeting title, provide the transcript ID and the new title as arguments to the mutation. Here's an example of how this mutation could be used:
```graphql theme={null}
mutation UpdateMeetingTitle($input: UpdateMeetingTitleInput!) {
updateMeetingTitle(input: $input) {
title
}
}
```
```bash curl theme={null}
curl -X POST https://api.fireflies.ai/graphql \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation($input: UpdateMeetingTitleInput!) { updateMeetingTitle(input: $input) { title } }",
"variables": {
"input": {
"id": "your_transcript_id",
"title": "New Title"
}
}
}'
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
};
const data = {
query: `
mutation($input: UpdateMeetingTitleInput!) {
updateMeetingTitle(input: $input) {
title
}
}
`,
variables: {
input: {
id: 'your_transcript_id',
title: 'New Title'
}
}
};
const response = await axios.post(url, data, { headers });
console.log(response.data);
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = {
'query': `
mutation($input: UpdateMeetingTitleInput!) {
updateMeetingTitle(input: $input) {
title
}
}
`,
'variables': {
'input': {
'id': 'your_transcript_id',
'title': 'New Title'
}
}
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
```
```java java theme={null}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
public class UpdateMeetingTitleExample {
public static void main(String[] args) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
String json = "{"
+ "\"query\":\"mutation($input: UpdateMeetingTitleInput!) { updateMeetingTitle(input: $input) { title } }\","
+ "\"variables\":{"
+ "\"input\":{"
+ "\"id\":\"your_transcript_id\","
+ "\"title\":\"New Title\""
+ "}"
+ "}"
+ "}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(json))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"updateMeetingTitle": {
"title": "New Title"
}
}
}
```
## FAQ
Only users with admin privileges can update meeting titles. The meeting owner also needs to be in your team.
## Error Codes
List of possible error codes that may be returned by the `updateMeetingTitle` mutation. Full list of error codes can be found [here](/miscellaneous/error-codes).
The user does not have admin privileges to update meeting titles.
The specified transcript could not be found or you do not have access to it
## Additional Resources
Querying transcript details
Update meeting privacy
---
# Source: https://docs.fireflies.ai/graphql-api/mutation/upload-audio.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Upload Audio
> Use the API to upload audio to Fireflies.ai
## Overview
The `uploadAudio` mutation allows you to upload audio files to Fireflies.ai for transcription.
## Arguments
The url of media file to be transcribed. It MUST be a valid https string and publicly accessible to enable us download the audio / video file. Double check to see if the media file is downloadable and that the link is not a preview link before making the request. The media file must be either of these formats - mp3, mp4, wav, m4a, ogg
Title or name of the meeting, this will be used to identify the transcribed file
URL for the webhook that receives notifications when transcription completes
Specify a custom language code for your meeting, e.g. `es` for Spanish or `de` for German. For a complete list of language codes, please view [Language Codes](/miscellaneous/language-codes)
Specify whether the video should be saved or not.
An array of objects containing meeting [Attendees](#). This is relevant if you have active integrations like Salesforce, Hubspot etc. Fireflies uses the attendees value to push meeting notes to your active CRM integrations where notes are added to an existing contact or a new contact is created. Each object contains -
* displayName
* email
* phoneNumber
Custom identifier set by the user during upload. You may use this to identify your uploads in your webhook
events.
Bypasses the internal file size validation that normally rejects audio files smaller than 50kb. Set to true if you need to process very short audio clips.
Authentication configuration for downloading the media file. Use this when your audio/video file requires authentication (bearer token or basic auth). If not provided, defaults to no authentication (publicly accessible URL). See [DownloadAuthInput](/schema/input/download-auth-input) for details.
## Usage Example
To upload a file, provide the necessary input parameters to the mutation. Here's an example of how this mutation could be used:
```graphql theme={null}
mutation uploadAudio($input: AudioUploadInput) {
uploadAudio(input: $input) {
success
title
message
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }",
"variables": {
"input": {
"url": "https://url-to-the-audio-file",
"title": "title of the file",
"attendees": [
{
"displayName": "Fireflies Notetaker",
"email": "notetaker@fireflies.ai",
"phoneNumber": "xxxxxxxxxxxxxxxx"
},
{
"displayName": "Fireflies Notetaker 2",
"email": "notetaker2@fireflies.ai",
"phoneNumber": "xxxxxxxxxxxxxxxx"
}
]
}
}
}' \
https://api.fireflies.ai/graphql
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const input = {
url: 'https://url-to-the-audio-file',
title: 'title of the file',
attendees: [
{
displayName: 'Fireflies Notetaker',
email: 'notetaker@fireflies.ai',
phoneNumber: 'xxxxxxxxxxxxxxxx'
},
{
displayName: 'Fireflies Notetaker 2',
email: 'notetaker2@fireflies.ai',
phoneNumber: 'xxxxxxxxxxxxxxxx'
}
]
};
const data = {
query: ` mutation($input: AudioUploadInput) {
uploadAudio(input: $input) {
success
title
message
}
}
`,
variables: { input }
};
axios
.post(url, data, { headers: headers })
.then(result => {
console.log(result.data);
})
.catch(e => {
console.log(JSON.stringify(e));
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
input_data = {
"url": "https://url_for_audio_file",
"title": "title of the file",
"attendees": [
{
"displayName": "Fireflies Notetaker",
"email": "notetaker@fireflies.ai",
"phoneNumber": "xxxxxxxxxxxxxxxx"
},
{
"displayName": "Fireflies Notetaker 2",
"email": "notetaker2@fireflies.ai",
"phoneNumber": "xxxxxxxxxxxxxxxx"
}
]}
data = {
'query': '''
mutation($input: AudioUploadInput) {
uploadAudio(input: $input) {
success
title
message
}
}
''',
'variables': {'input': input_data}
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(response.json())
else:
print(response.text)
```
```java java theme={null}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
public class ApiRequest {
public static void main(String[] args) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
String json = "{"
+ "\"query\":\"mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }\","
+ "\"variables\":{"
+ "\"input\": {"
+ "\"url\":\"https://url_for_audio_file.com\","
+ "\"title\":\"title of the file\","
+ "\"attendees\":["
+ "{"
+ "\"displayName\": \"Fireflies Notetaker\","
+ "\"email\": \"notetaker@fireflies.ai\","
+ "\"phoneNumber\": \"xxxxxxxxxxxxxxxx\""
+ "},"
+ "{"
+ "\"displayName\": \"Fireflies Notetaker 2\","
+ "\"email\": \"notetaker2@fireflies.ai\","
+ "\"phoneNumber\": \"xxxxxxxxxxxxxxxx\""
+ "}"
+ "]"
+ "}"
+ "}"
+ "}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(json))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"uploadAudio": {
"success": true,
"title": "title of the file",
"message": "Uploaded audio has been queued for processing."
}
}
}
```
## Authenticated Downloads
The `download_auth` field allows you to upload audio/video files that require authentication. This is useful when your media files are hosted on private servers or behind authentication.
### Bearer Token Authentication
Use bearer token authentication when your media URL requires an `Authorization: Bearer ` header:
```graphql theme={null}
mutation {
uploadAudio(input: {
url: "https://example.com/protected-audio.mp3"
title: "Protected Meeting Recording"
download_auth: {
type: bearer_token
bearer: {
token: "your-bearer-token-here"
}
}
}) {
success
message
}
}
```
### Basic Authentication
Use basic authentication when your media URL requires username and password:
```graphql theme={null}
mutation {
uploadAudio(input: {
url: "https://example.com/protected-audio.mp3"
title: "Protected Meeting Recording"
download_auth: {
type: basic_auth
basic: {
username: "your-username"
password: "your-password"
}
}
}) {
success
message
}
}
```
**Note:** The username is optional for basic auth. If not provided, only the password will be used.
## FAQ
Audio upload only works with publicly accessible URLs or URLs with supported authentication (bearer token or basic auth). We cannot accept files hosted on your local machine.
You have two options:
- 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
---
# Source: https://docs.fireflies.ai/askfred/use-cases.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Use Cases
> Common use cases and example questions for AskFred - meeting summaries, action items, decisions, and more
## Overview
AskFred can help you extract insights from your meetings across a wide range of use cases. This page provides practical examples of questions you can ask for different scenarios.
## Common Use Cases
Extract quick overviews and highlights from your meetings.
**Example Questions:**
* "Provide a brief summary of this meeting"
* "What were the key takeaways?"
* "Give me the highlights in 3 bullet points"
* "Summarize the discussion about the product launch"
* "What was the meeting about in one sentence?"
**Best for:**
* Daily standups
* Client meetings
* Team retrospectives
* Board meetings
Identify tasks, responsibilities, and deliverables.
**Example Questions:**
* "What action items were assigned?"
* "What are my action items from this week's meetings?"
* "Who is responsible for the product roadmap?"
* "List all open tasks and their owners"
* "What are the deadlines mentioned in this meeting?"
* "What tasks were assigned to the engineering team?"
**Best for:**
* Sprint planning
* Project kickoffs
* Weekly team syncs
* Customer success calls
Track important decisions and their rationale.
**Example Questions:**
* "What decisions were made about the budget?"
* "What was decided regarding the new feature?"
* "List all decisions with their rationales"
* "What was the outcome of the pricing discussion?"
* "Who made the final decision on the launch date?"
* "What alternatives were considered before the decision?"
**Best for:**
* Strategy meetings
* Leadership discussions
* Product planning
* Architecture reviews
Understand individual contributions and perspectives.
**Example Questions:**
* "What did John contribute to the discussion?"
* "What concerns did the customer raise?"
* "Summarize the CEO's main points"
* "What feedback did the design team provide?"
* "What questions did stakeholders ask?"
* "Who disagreed with the proposal and why?"
**Best for:**
* Performance reviews
* Client feedback analysis
* Team collaboration assessment
* Stakeholder management
Identify patterns and trends across multiple meetings.
**Example Questions:**
* "How has customer sentiment changed over the last month?"
* "What topics have been discussed most frequently?"
* "Track the progress of Project X across all meetings"
* "What are recurring issues in sprint retrospectives?"
* "How has the team's velocity changed this quarter?"
* "What concerns keep coming up in client calls?"
**Best for:**
* Quarterly reviews
* Customer health monitoring
* Team performance tracking
* Product roadmap planning
Pull specific data points and details from meetings.
**Example Questions:**
* "Extract all mentioned dates and deadlines"
* "List all metrics and KPIs discussed"
* "What tools or technologies were mentioned?"
* "Find all budget figures discussed"
* "What email addresses or contact information was shared?"
* "What URLs or resources were mentioned?"
**Best for:**
* Meeting notes compilation
* Documentation updates
* Contact management
* Resource tracking
## Industry-Specific Examples
**Discovery Calls:**
* "What pain points did the prospect mention?"
* "What is their current solution and why are they looking to change?"
* "What is their timeline for making a decision?"
**Deal Reviews:**
* "What objections were raised during the demo?"
* "Who are the decision-makers mentioned?"
* "What competitive solutions are they considering?"
**Pipeline Analysis:**
* "What deals progressed this week?"
* "What common objections are we seeing across calls?"
* "Which prospects mentioned budget concerns?"
**Feature Discussions:**
* "What user problems are we trying to solve?"
* "What alternatives did we consider?"
* "What were the technical constraints mentioned?"
**Roadmap Planning:**
* "What features were prioritized for next quarter?"
* "What customer feedback influenced our decisions?"
* "What dependencies were identified?"
**User Research:**
* "What frustrations did users mention?"
* "What features did users request most?"
* "How do users currently solve this problem?"
**Onboarding:**
* "What questions did the customer ask during onboarding?"
* "What features are they most interested in?"
* "What integration requirements did they mention?"
**Health Monitoring:**
* "What concerns has the customer raised recently?"
* "How has their sentiment changed over time?"
* "What success metrics are they tracking?"
**Escalations:**
* "What issues were reported in the last month?"
* "How quickly were problems resolved?"
* "What patterns exist in customer complaints?"
**Technical Planning:**
* "What technical decisions were made?"
* "What are the architectural concerns?"
* "What dependencies block this feature?"
**Sprint Retrospectives:**
* "What went well this sprint?"
* "What blockers did the team face?"
* "What process improvements were suggested?"
**Code Reviews:**
* "What security concerns were raised?"
* "What performance considerations were discussed?"
* "What refactoring opportunities were identified?"
## Advanced Query Patterns
### Time-Based Analysis
```graphql theme={null}
mutation TimeBasedQuery {
createAskFredThread(input: {
query: "How have customer satisfaction levels changed since last quarter?",
filters: {
start_time: "2024-01-01T00:00:00Z",
end_time: "2024-03-31T23:59:59Z"
}
}) {
message { answer }
}
}
```
### Participant-Focused Queries
```graphql theme={null}
mutation ParticipantQuery {
createAskFredThread(input: {
query: "What feedback has the executive team provided on our product strategy?",
filters: {
participants: ["ceo@company.com", "cto@company.com"],
start_time: "2024-03-01T00:00:00Z"
}
}) {
message { answer }
}
}
```
### Topic Tracking
```graphql theme={null}
mutation TopicTracking {
createAskFredThread(input: {
query: "Track all discussions about the new pricing model",
filters: {
start_time: "2024-01-01T00:00:00Z"
}
}) {
message { answer suggested_queries }
}
}
```
## Additional Resources
Learn about AskFred's key capabilities
Explore all available parameters and options
---
# Source: https://docs.fireflies.ai/schema/user-group-member.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# UserGroupMember
> Schema for UserGroupMember
Unique identifier for the user group member.
First name of the user group member.
Last name of the user group member.
Email address of the user group member.
## Additional Resources
Schema for UserGroups
Schema for User
---
# Source: https://docs.fireflies.ai/schema/user-groups.md
# Source: https://docs.fireflies.ai/graphql-api/query/user-groups.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# UserGroups
> Querying user groups
## Overview
The user\_groups query is designed to fetch a list of all user groups within the team. This query allows you to retrieve information about user groups including their members.
## Arguments
`mine` is an optional boolean argument. If set to `true`, returns only user groups that the
current user belongs to. If not provided or set to `false`, returns all user groups in the team.
## Schema
Fields available to the [UserGroup](/schema/user-groups) query
## Usage Example
```graphql theme={null}
query UserGroups($mine: Boolean) {
user_groups(mine: $mine) {
id
name
handle
members {
user_id
first_name
last_name
email
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
--data '{ "query": "{ user_groups { name handle members { first_name last_name email } } }" }' \
https://api.fireflies.ai/graphql
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: '{ user_groups { name handle members { first_name last_name email } } }'
};
axios
.post(url, data, { headers: headers })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = '{"query": "{ user_groups { name handle members { first_name last_name email } } }"}'
response = requests.post(url, headers=headers, data=data)
print(response.json())
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class ApiRequest {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
String jsonRequest = "{\"query\": \"{ user_groups { name handle members { first_name last_name email } } }\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"user_groups": [
{
"id": "group_123",
"name": "Engineering Team",
"handle": "engineering",
"members": [
{
"user_id": "user_456",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com"
},
{
"user_id": "user_789",
"first_name": "Jane",
"last_name": "Smith",
"email": "jane.smith@example.com"
}
]
},
{
"id": "group_124",
"name": "Sales Team",
"handle": "sales",
"members": [
{
"user_id": "user_101",
"first_name": "Bob",
"last_name": "Johnson",
"email": "bob.johnson@example.com"
}
]
}
]
}
}
```
## Error Codes
List of possible error codes that may be returned by the `user_groups` query. Full list of error codes can be found [here](/miscellaneous/error-codes).
You do not have permission to access user groups for this team.
## Additional Resources
Querying list of users
Querying user details
---
# Source: https://docs.fireflies.ai/schema/user.md
# Source: https://docs.fireflies.ai/graphql-api/query/user.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# User
> Querying user details
## Overview
The user query is designed to fetch details associated with a specific user id.
## Arguments
`id` is an optional argument. Not passing an ID to this query will return user details for the
owner of the API key
## Schema
Fields available to the [User](/schema/user) query
## Usage Example
```graphql theme={null}
query User($userId: String!) {
user(id: $userId) {
user_id
recent_transcript
recent_meeting
num_transcripts
name
minutes_consumed
is_admin
integrations
email
user_groups {
id
name
handle
members {
user_id
first_name
last_name
email
}
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
--data '{ "query": "query User($userId: String!) { user(id: $userId) { name integrations } }", "variables": { "userId": "your_user_id" } }' \
https://api.fireflies.ai/graphql
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: 'query User($userId: String!) { user(id: $userId) { name integrations } }',
variables: { userId: 'your_user_id' }
};
axios
.post(url, data, { headers: headers })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = '{"query": "query User($userId: String!) { user(id: $userId) { name integrations } }", "variables": {"userId": "your_user_id"}}'
response = requests.post(url, headers=headers, data=data)
print(response.json())
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class ApiRequest {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
String jsonRequest = "{\"query\": \"query User($userId: String!) { user(id: $userId) { name integrations } }\", \"variables\": {\"userId\": \"your_user_id\"}}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"user": {
"name": "Justin Fly",
"integrations": ["string"],
}
}
}
```
## Error Codes
List of possible error codes that may be returned by the `user` query. Full list of error codes can be found [here](/miscellaneous/error-codes).
The user ID you are trying to query does not exist.
The user ID you are trying to query is not in your team.
## Additional Resources
Querying list of users
Querying user groups
---
# Source: https://docs.fireflies.ai/graphql-api/query/users.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Users
> Querying list of users
## Overview
The users query is designed to fetch a list of all users within the team. You can also view this list on your dashboard at [app.fireflies.ai/team](http://app.fireflies.ai/team)
## Schema
Fields available to the [User](/schema/user) query
## Usage Example
```graphql theme={null}
query Users {
users {
user_id
email
name
num_transcripts
recent_meeting
minutes_consumed
is_admin
integrations
user_groups {
id
name
handle
members {
user_id
first_name
last_name
email
}
}
}
}
```
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
--data '{ "query": "{ users { name integrations } }" }' \
https://api.fireflies.ai/graphql
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const data = {
query: '{ users { name integrations } }'
};
axios
.post(url, data, { headers: headers })
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error:', error);
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
data = '{"query": "{ users { name integrations } }"}'
response = requests.post(url, headers=headers, data=data)
print(response.json())
```
```java java theme={null}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
public class ApiRequest {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
String jsonRequest = "{\"query\": \"{ users { name integrations } }\"}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(jsonRequest))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
```json Response theme={null}
{
"data": {
"users": [
{
"name": "Justin Fly",
"integrations": []
},
{
"name": "Peter Fire",
"integrations": []
}
]
}
}
```
## Additional Resources
Querying user details
Use the API to set user roles
---
# Source: https://docs.fireflies.ai/graphql-api/webhooks.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# Webhooks
> Webhook events for the Fireflies.ai API
## Overview
Webhooks enable your application to set up event based notifications. In this section, you'll learn how to configure webhooks to receive updates from Fireflies.
## Events supported
The webhooks support the following events:
* Transcription complete: Triggers when a meeting has been processed and the transcript is ready for viewing
Fireflies sends webhook notifications as POST requests to your specified endpoint. Each request
contains a JSON payload with information about the event that occurred.
## Saving a webhook
Follow the instructions below to save a webhook URL that sends notifications for all subscribed events. This webhook will only be fired for meetings that you own.
Visit the [Fireflies.ai dashboard settings](https://app.fireflies.ai/settings)
Navigate to the Developer settings tab
Enter a valid https URL in the webhooks field and save
You may test your webhook using the upload audio API or by uploading through the dashboard at [app.fireflies.ai/upload](https://app.fireflies.ai/upload)
## Upload audio webhook
You can also include a webhook URL as part of an upload audio request. This is different from the saved webhook as it will only send notifications for that singular audio upload request.
```bash curl theme={null}
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your_api_key" \
-d '{
"query": "mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }",
"variables": {
"input": {
"url": "https://url_to_the_audio_file",
"title": "title of the file",
"webhook": "https://url_for_the_webhook"
}
}
}' \
https://api.fireflies.ai/graphql
```
```javascript javascript theme={null}
const axios = require('axios');
const url = 'https://api.fireflies.ai/graphql';
const headers = {
'Content-Type': 'application/json',
Authorization: 'Bearer your_api_key'
};
const input = {
url: 'https://url_to_the_audio_file',
title: 'title of the file',
webhook: 'https://url_for_the_webhook'
};
const data = {
query: ` mutation($input: AudioUploadInput) {
uploadAudio(input: $input) {
success
title
message
}
}
`,
variables: { input }
};
axios
.post(url, data, { headers: headers })
.then(result => {
console.log(result.data);
})
.catch(e => {
console.log(JSON.stringify(e));
});
```
```python python theme={null}
import requests
url = 'https://api.fireflies.ai/graphql'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer your_api_key'
}
input_data = {
"url": "https://url_for_audio_file",
"title": "title of the file",
"webhook": "https://url_for_the_webhook"
}
data = {
'query': '''
mutation($input: AudioUploadInput) {
uploadAudio(input: $input) {
success
title
message
}
}
''',
'variables': {'input': input_data}
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print(response.json())
else:
print(response.text)
```
```java java theme={null}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse.BodyHandlers;
public class ApiRequest {
public static void main(String[] args) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
String json = "{"
+ "\"query\":\"mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }\","
+ "\"variables\":{"
+ "\"input\": {"
+ "\"url\":\"https://url_for_audio_file.com\","
+ "\"title\":\"title of the file\","
+ "\"webhook\":\"https://url_for_the_webhook\""
+ "}"
+ "}"
+ "}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.fireflies.ai/graphql"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer your_api_key")
.POST(BodyPublishers.ofString(json))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
}
}
```
## Webhook Authentication
Webhook authentication ensures that incoming webhook requests are securely verified before processing. This allows consumers to trust that webhook events originate from a secure and verified source.
### How It Works
Each webhook request sent from the server includes an `x-hub-signature` header containing a SHA-256 HMAC signature of the request payload. This signature is generated using a secret key known only to the server and your application.
When the consumer receives a webhook, they can use the signature provided in the `x-hub-signature` header to verify that the request has not been tampered with. This is done by computing their own HMAC signature using the shared secret key and comparing it to the signature included in the header.
### Saving a secret
1. Go to the settings page at [app.fireflies.ai/settings](https://app.fireflies.ai/settings)
2. Navigate to the **Developer Settings** tab
3. You can either:
* Enter a custom secret key of 16-32 characters in the input field
* Click on the refresh button to generate a random secret key
4. Click Save to ensure the secret gets updated
5. Make sure to store this secret key securely, as it will be used to authenticate incoming webhook requests
### Verifying the Signature
1. **Receive the Webhook**:
* Each request will include the payload and an `x-hub-signature` header
2. **Verify the Signature**:
* Compute the HMAC SHA-256 signature using the payload and the shared secret key
* Compare the computed signature to the `x-hub-signature` header value
* If they match, the request is verified as authentic. If they do not match, treat the request with caution or reject it
By verifying webhook signatures, consumers can ensure that webhook events received are secure and have not been altered during transmission
### See it in action
To see webhook authentication in action, you can view an example at [Fireflies.ai Verifying Webhook Requests](https://replit.com/@firefliesai/Firefliesai-Verifying-webhook-requests#index.js). This example demonstrates how to receive a webhook, compute the HMAC SHA-256 signature, and verify it against the `x-hub-signature` header to ensure the request's authenticity.
## Webhook Schema
Identifier for the meeting / transcript that the webhook has triggered for. MeetingId and
TranscriptId are used interchangeably for the Fireflies.ai Platform.
Name of the event type that has been fired against the webhook
Custom identifier set by the user during upload. You may use this to identify your uploads in your
events.
## Example Payload
```json theme={null}
{
"meetingId": "ASxwZxCstx",
"eventType": "Transcription completed",
"clientReferenceId": "be582c46-4ac9-4565-9ba6-6ab4264496a8"
}
```
## FAQ
There may be multiple reasons why you are not receiving webhook requests. Please go through the following checklist:
- Webhooks are only fired for meeting owners, referred to in the API as the `organizer_email.` Ensure that you have correctly setup the webhooks for the meeting owner.
- Ensure that your webhook is setup as a POST request
- If you have setup secret verification, ensure that you are correctly verifying the request by checking the example implementation [here](https://replit.com/@firefliesai/Firefliesai-Verifying-webhook-requests?v=1).
Team-wide webhooks are only supported for the Enterprise tier with the Super Admin role. This allows you to setup one webhook for all meetings owned by your team. Details [here](/fundamentals/super-admin).
## Additional Resources
Fireflies Super Admin with advanced capabilities
Use the API to upload audio to Fireflies.ai
---
# Source: https://docs.fireflies.ai/getting-started/whats-new.md
> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fireflies.ai/llms.txt
> Use this file to discover all available pages before exploring further.
# What's New
> Latest updates to the Fireflies API
Take a look at our latest updates, features, and improvements for the Fireflies API.
### AskFred - AI Meeting Assistant
Introducing **AskFred**, an AI-powered assistant that lets you query your meeting transcripts using natural language. Ask questions about single meetings or analyze patterns across multiple meetings with context-aware, conversational responses.
**Key Capabilities:**
* Ask questions in plain language and get instant answers
* Maintain conversation threads with contextual follow-ups
* Query across multiple meetings with flexible filters
* Receive AI-generated suggestions for deeper exploration
* Multilingual question and response support
**Get Started:**
* [Overview](/askfred/overview) - Learn about capabilities
* [Quickstart](/askfred/quickstart) - Create your first thread
* [Use Cases](/askfred/use-cases) - Common scenarios and examples
**New API Operations:** [askfred\_threads](/graphql-api/query/askfred-threads), [askfred\_thread](/graphql-api/query/askfred-thread), [createAskFredThread](/graphql-api/mutation/create-askfred-thread), [continueAskFredThread](/graphql-api/mutation/continue-askfred-thread), [deleteAskFredThread](/graphql-api/mutation/delete-askfred-thread)
### Set Meeting Channels
The new [Update Meeting Channel](/graphql-api/mutation/update-meeting-channel) mutation allows meeting owners and team administrators to set the channel for one or more meetings. You can update 1–5 transcripts to a single channel in one API call with all-or-nothing semantics.
This mutation requires either meeting ownership or team admin privileges for all specified transcripts. If any transcript fails validation, none of the transcripts will be updated, ensuring data consistency across your channel organization.
### Active Meetings Fetching
The new [Active Meetings](/graphql-api/query/active-meetings) query allows you to fetch meetings currently in progress. This query returns real-time information about active meetings including meeting details, start time, organizer, and meeting link.
### Rate Limiting for Delete Transcript
The [Delete Transcript](/graphql-api/mutation/delete-transcript) mutation now includes rate limiting protection to prevent abuse. The mutation is limited to 10 requests per minute across all user tiers.
If you exceed this limit, the API will return a `too_many_requests` error (HTTP 429) with a `retryAfter` timestamp indicating when you can make requests again.
### Meeting Privacy Control
The new [Update Meeting Privacy](/graphql-api/mutation/update-meeting-privacy) mutation allows meeting owners and team administrators to programmatically update meeting privacy settings. You can now change privacy levels between `link`, `owner`, `participants`, `teammatesandparticipants`, and `teammates` to control who can access meeting transcripts.
This mutation follows the same authorization pattern as other meeting management operations, requiring either meeting ownership or team admin privileges.
### Meeting Attendance Tracking
The [Transcript](/schema/transcript) schema now includes a new `meeting_attendance` field that provides detailed participant attendance information. This field returns an array of [MeetingAttendance](/schema/meeting-attendance) records showing when participants joined and left the meeting.
Each attendance record includes the participant's name, join time (ISO 8601 format), and leave time (if they left during the meeting). This feature enables better meeting analytics and participation tracking by leveraging meeting events data.
The attendance data is available in both [Transcript](/graphql-api/query/transcript) and [Transcripts](/graphql-api/query/transcripts) queries.
### Channel Filtering
The [Transcripts](/graphql-api/query/transcripts) query now supports filtering by channel using the new `channel_id` parameter. This allows you to retrieve transcripts from specific channels by providing a single channel ID.
The `channel_id` parameter accepts a string value and enables more targeted querying of meeting transcripts within your organization's channels.
### Array Fields for Organizers and Participants
The [Transcripts](/graphql-api/query/transcripts) query now supports array fields `organizers` and `participants` that allow filtering by multiple email addresses. These new array fields provide more flexible querying capabilities while maintaining backward compatibility.
The previous single email fields `organizer_email` and `participant_email` are now deprecated but continue to work. Using both old and new fields simultaneously will result in a validation error.
### User Groups
The Fireflies API now includes comprehensive support for user groups. The new [User Groups](/graphql-api/query/user-groups) query allows you to fetch all user groups within your team or filter to only show groups you belong to using the `mine` parameter.
Additionally, the [User](/schema/user) and [Users](/graphql-api/query/users) queries now include enhanced `user_groups` fields with detailed member information, providing better visibility into team organization and collaboration.
### Keyword Search
The [Transcripts](/graphql-api/query/transcripts) query has been enhanced to include keyword search functionality. By utilizing the `keyword` and `scope` parameters, you can now perform advanced searches within both the title and the transcript text, offering more precise retrieval.
The `title` parameter has been deprecated in favor of `keyword`
### Enhancements to Audio Upload
The [Upload Audio](/graphql-api/mutation/upload-audio) function now includes a `bypass_size_check` flag. This enhancement provides greater control over filtering unwanted uploads, such as voicemails from dialers.
### Realtime API
The Fireflies.ai [Realtime API](/realtime-api/overview) allows your application to receive live transcription events over WebSockets. This enables building interactive features such as live captioning, transcription overlays, and real-time analysis as users speak.