Fireflies.ai GraphQL API Documentation. API Reference
This documentation provides an easy starting point to access your data generated from meetings that had Fred
Fireflies.ai notetaker present.
Our GraphQL API allows users to query data using any programming language of your choice.
To query any endpoint, you must pass your API Key in the Authorization header for every Request
query. Click
here to get your API key
Note
Usage beyond 50 api calls per day requires a
Business account.
API Endpoints
Public API endpoint:
https://api.fireflies.ai/graphql
Query
Query
User
Get a single user object which contains information about user email, full name, active integrations, minutes consumed and more. The query accepts id
as an optional
parameter. By default, Fireflies uses your api token to search and return the user object if the id
param is not specified. To query for the user object of any member of your team, you'll need to add the id
paramter
Example using curl
curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xxxxxxxxxxxxxxxx" \
--data '{ "query": "{ user { name integrations } }" }' \
https://api.fireflies.ai/graphql/
Example using axios
axios({url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxxxxx'
},
data: {
query: `
query {
user(id:""){
user_id
email
name
num_transcripts
recent_transcript
minutes_consumed
is_admin
integrations
}
}
`
}
}).then(result => {
console.log(result.data)
}).catch(e => {
console.log(e.response.data)
});
User Response Data
user_id: A unique identifier assigned to each user.
email: User email address.
name: User fullname.
num_transcripts: Number of generated transcripts
recent_transcript: Deprecated
use
recent_meeting
recent_meeting: Unique id of recent or last generated meeting
minutes_consumed: Number of transcription minutes consumed
is_admin: Returns true
if user is admin
integrations: An array of activated integrations
(no description)
Example
Request Content-Types:
application/json
Query
query user($id: String){
user(id: $id){
email
}
}
Variables
{
"id": "string"
}
Try it now
query user($id: String){
user(id: $id){
email
}
}
{
"id": "string"
}
Successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"data": {
"user": {
"email": "string"
}
}
}
Users
Returns an array of entire users in your team. Each item in the array
Response Data
is a
User
object constaining values as described above
Example
In this example we'll find the user with the highest transcription minutes consumed
async function userWithMaxMinutesConsumed(){
try {
const result = await axios({
url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxxxxx'
},
data: {
query: `
query {
users{
name
minutes_consumed
}
}
`
}
})
const users = result.data.data.users
let highestMinuteConsumed = 0;
let name = "";
users.forEach(user => {
if(user && user.minutes_consumed > highestMinuteConsumed ){
highestMinuteConsumed = user.minutes_consumed
name = user.name
}
})
return { name, highestMinuteConsumed }
}catch(e){console.log(e)}
}
Example
Request Content-Types:
application/json
Query
query users{
users{
user_id
email
name
num_transcripts
recent_transcript
recent_meeting
minutes_consumed
is_admin
integrations
}
}
Try it now
query users{
users{
user_id
email
name
num_transcripts
recent_transcript
recent_meeting
minutes_consumed
is_admin
integrations
}
}
Successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"data": {
"users": [
{
"user_id": "string",
"email": "string",
"name": "string",
"num_transcripts": "integer",
"recent_transcript": "string",
"recent_meeting": "string",
"minutes_consumed": "number",
"is_admin": "boolean",
"integrations": [
"string"
]
}
]
}
}
Transcript
Get a single meeting. The result is an object which contains values including, transcript url, duration of meeting, custom topics, meeting participants and more. It requires a query param id
which is the meeting id.
Example One: using curl
ensure to replace all xxxxxxxxxxxx
with valid parameters
curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xxxxxxxxxxx" \
--data '{ "query": "{ transcript(id:\"xxxxxxxxxxxxxx\"){ title date } }" }' \
https://api.fireflies.ai/graphql/
Example Two: using axios
axios({
url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxxxxx' #Your access token
},
data: {
query: `
query {
transcript(id:"xxxxxxxxxxxxx") {
title
date
duration
}
}
`
}
}).then(result => {
console.log(result.data)
}).catch(e => {
console.log(e)
});
Example Three: Fetching our recent transcript with axios
async function getRecentTranscript(){
# query for transcript id
const user = await axios({
url: 'http://localhost:4000/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer 6e41b52e124d6be5f0aad01f67147306'
},
data: {
query: `
query {
user(id:"") {
recent_transcript
}
}
`
}
})
const transcriptId = user.data.data.user.recent_transcript;
# query for transcript using transcriptId
axios({
url: 'http://localhost:4000/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer 6e41b52e124d6be5f0aad01f67147306'
},
data: {
query: `
query($transcriptId: String!) {
transcript(id: $transcriptId) {
title
date
duration
sentences {
text
start_time
}
}
}
`,
variables: { transcriptId }
},
}).then(result => {
console.log(result.data);
}).catch(e => {
console.log(e);
});
}
Transcript Response Data
id: A unique identifier assigned to each transcript.
sentences: An array of objects containing:
- index: Array index
- text: Formated sentence striped of empty spaces
- raw_text: Unformated sentence
- start_time: Meeting start time
- end_time: Meeting end time
- speaker_id: ID of the speaker
- speaker_name: Name of the speaker
Defaults to null
host_email: Email address of the meeting host.
organizer_email: Same as host_email
user: An object cointaining
- user_id: A unique identifier assigned to each user.
- email: User email address.
- name: user fullname.
- num_transcripts: Number of generated transcripts
- recent_transcript: Unique id of recent or last generated transcript
- minutes_consumed: Number of transcription minutes consumed
- is_admin: user an is_admin
true/false
- integrations: An array of activated integrations
fireflies_users: An array of email addresses of only
Fireflies users participants that have fireflies account
that participated in the meeting.
participants: An array of email addresses of meeting participants guests
, including participants that do not have Fireflies account.
date: Date the transcript was created.
transcript_url: Transcript url.
duration: Duration of the meeting.
custom_topics: An array of user specified phrases that are found or matches sentences in a transcript. With this value returned, user can perform different actions, from displaying or filtering only sentences that match certain topics or desired keywords phrases
to performing quick search on transcripts.
- sentence_index: Array index of matched sentence. Can be used to get an item in the sentence object
- sentence: The returned sentence which contains phrases
- name: Name of the custom topic
- phrases: An array of phrases contained in the sentence
(no description)
Example
Request Content-Types:
application/json
Query
query transcript($id: String!){
transcript(id: $id){
id
title
host_email
organizer_email
fireflies_users
participants
date
transcript_url
duration
}
}
Variables
{
"id": "string"
}
Try it now
query transcript($id: String!){
transcript(id: $id){
id
title
host_email
organizer_email
fireflies_users
participants
date
transcript_url
duration
}
}
{
"id": "string"
}
Successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"data": {
"transcript": {
"id": "string",
"title": "string",
"host_email": "string",
"organizer_email": "string",
"fireflies_users": [
"string"
],
"participants": [
"string"
],
"date": "number",
"transcript_url": "string",
"duration": "number"
}
}
}
Transcripts
Queries all available meetings generated for a user. Returns a maximum number of 50
meetings per query, ordered by the date created.
Transcripts Query Params
Transcripts
accept one or more query parameters used to filter your search results.
user_id : Optional
By default, Fireflies uses your api token to return all your meetings. You can provide user_id
of a team member as a query param
if you want to query all meetings belonging to that member of your team.
title : Return all meetings that matches the title
host_email : Return all meetings that matches the host email address
date : Return all meetings 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
participant_email : Return all meetings that has a participant's email address
limit : Limit the amount of meetings returned. The max returned value is 50
meetings per query
skip : You can skip a number of meetings and only return meetings from a certain number. For example
If you have 200
meetings, you can decide to return the last 30 - 50
meetings and skip the first 150
meetings entirely.
Example using curl
curl \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxx" \
--data '{ "query": "{ transcripts { title date } }" }' \
https://api.fireflies.ai/graphql/
Example using JavaScript Native Fetch API
fetch('https://api.fireflies.ai/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxxxxx' //Your authorization token
},
body: JSON.stringify({
query: `
query {
transcripts {
id
title
fireflies_users
participants
date
transcript_url
duration
}
}
`
}),
})
.then(result => result.json())
.then(result => console.log(result.data))
.catch(error => {
console.error('Error:', error);
});
Example using axios
const axios = require('axios')
axios({
url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxxxxx' #Your access token
},
data: {
query: `
query {
transcripts {
title
date
sentences{
text
}
}
}
`
}
}).then(result => {
console.log(result.data)
}).catch(e => {
console.log(e)
});
Transcripts Response Data
id: A unique identifier assigned to each transcript.
sentences: An array of objects containing:
- index: Array index
- text: Formated sentence striped of empty spaces
- raw_text: Unformated sentence
- start_time: Meeting start time
- end_time: Meeting end time
- speaker_id: ID of the speaker
- speaker_name: Name of the speaker
Defaults to null
title: Meeting title.
host_email: Email address of the meeting host.
organizer_email: Same as host_email
user: An object cointaining
- user_id: A unique identifier assigned to each user.
- email: User email address.
- name: User fullname.
- num_transcripts: Number of generated transcripts
- recent_transcript: Unique id of recent or last generated transcript
- minutes_consumed: Number of transcription minutes consumed
- is_admin: returns
true
if user is admin - integrations: An array of activated integrations
fireflies_users: An array of email addresses of only
Fireflies users participants that have fireflies account
that participated in the meeting.
participants: An array of email addresses of meeting participants guests
, including participants that do not have Fireflies account.
date: Date the transcript was created.
transcript_url: Transcript url.
duration: Duration of the meeting.
custom_topics: An array of user specified phrases that are found or matches sentences in a transcript. With this value returned, user can perform different actions, from displaying or filtering only sentences that match certain topics or desired keywords phrases
to performing quick search on transcripts.
- sentence_index: Array index of matched sentence. Can be used to get an item in the sentence object
- sentence: The returned sentence which contains phrases
- name: Name of the custom topic
- phrases: An array of phrases contained in the sentence
See example below
In this example, we're going to compile a list of spearker_id
and start_time
from Transcripts that match our predefined custom topics
Click here to setup custom topics
async function getSpeakerStartTime(){
let transcripts = await axios({url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxx'
},
data: {
query: `
query {
transcripts {
title
date
sentences{
text
raw_text
start_time
end_time
speaker_id
speaker_name
}
custom_topics {
sentence_index
sentence
name
phrases
}
}
}
`
}
})
const output = [];
transcripts = transcripts.data.data.transcripts;
transcripts.forEach(transcript => {
const { custom_topics } = transcript;
custom_topics.forEach(topic => {
const index = topic.sentence_index;
const foundCustomTopic = transcript.sentences[index];
if(foundCustomTopic){
// # foundCustomTopic returns an object containing
// # {
// # index: Float
// # text: String
// # raw_text: String
// # start_time: Float
// # end_time: Float
// # speaker_id: Int
// # speaker_name: String
// # }
// # Now we can decide to take only speaker_id and start_time
output.push({speaker: foundCustomTopic.speaker_id, time: foundCustomTopic.start_time})
}
});
});
return output;
}
(no description)
(no description)
(no description)
(no description)
(no description)
(no description)
(no description)
Example
Request Content-Types:
application/json
Query
query transcripts($user_id: String, $title: String, $host_email: String, $date: Float, $participant_email: String, $limit: Int, $skip: Int){
transcripts(user_id: $user_id, title: $title, host_email: $host_email, date: $date, participant_email: $participant_email, limit: $limit, skip: $skip){
id
sentences{
index
text
raw_text
start_time
end_time
speaker_id
speaker_name
}
title
host_email
organizer_email
fireflies_users
participants
date
transcript_url
duration
custom_topics{
sentence_index
sentence
name
phrases
}
}
}
Variables
{
"user_id": "string",
"title": "string",
"host_email": "string",
"date": "number",
"participant_email": "string",
"limit": "integer",
"skip": "integer"
}
Try it now
query transcripts($user_id: String, $title: String, $host_email: String, $date: Float, $participant_email: String, $limit: Int, $skip: Int){
transcripts(user_id: $user_id, title: $title, host_email: $host_email, date: $date, participant_email: $participant_email, limit: $limit, skip: $skip){
id
sentences{
index
text
raw_text
start_time
end_time
speaker_id
speaker_name
}
title
host_email
organizer_email
fireflies_users
participants
date
transcript_url
duration
custom_topics{
sentence_index
sentence
name
phrases
}
}
}
{
"user_id": "string",
"title": "string",
"host_email": "string",
"date": "number",
"participant_email": "string",
"limit": "integer",
"skip": "integer"
}
Successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"data": {
"transcripts": [
{
"id": "string",
"sentences": [
{
"index": "number",
"text": "string",
"raw_text": "string",
"start_time": "number",
"end_time": "number",
"speaker_id": "integer",
"speaker_name": "string"
}
],
"title": "string",
"host_email": "string",
"organizer_email": "string",
"fireflies_users": [
"string"
],
"participants": [
"string"
],
"date": "number",
"transcript_url": "string",
"duration": "number",
"custom_topics": [
{
"sentence_index": "string",
"sentence": "string",
"name": "string",
"phrases": [
"string"
]
}
]
}
]
}
}
Mutation
Mutation
User Role
Set the role for a user. Roles limit users to certain actions that can be executed and is classified into 3 categories.
admin: Grants administrative privileges to user, including the ability to add other users.
user: Grants access to all user functionalities e.g query, delete & upload audio for transcription
viewer: Grants access to only view transcripts
Note
The User must be an Admin to perform this operation
Example
const user_id = "3xxxxxxxxxxxx";
const role = "admin";
axios({
url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxx'
},
data: {
query: `
mutation($user_id: String!, $role: Role!) {
setUserRole(user_id: $user_id, role:$role) {
name
is_admin
}
}
`,
variables: { user_id, role }
},
}).then(result => {
console.log(result.data.data);
}).catch(e => {
console.log(e);
});
User Role Response Data
The response data is same as the User response data
(no description)
(no description)
Example
Request Content-Types:
application/json
Query
mutation setUserRole($user_id: String!, $role: Role!){
setUserRole(user_id: $user_id, role: $role){
user_id
email
name
num_transcripts
recent_transcript
recent_meeting
minutes_consumed
is_admin
integrations
}
}
Variables
{
"user_id": "string",
"role": "string"
}
Try it now
mutation setUserRole($user_id: String!, $role: Role!){
setUserRole(user_id: $user_id, role: $role){
user_id
email
name
num_transcripts
recent_transcript
recent_meeting
minutes_consumed
is_admin
integrations
}
}
{
"user_id": "string",
"role": "string"
}
Successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"data": {
"setUserRole": {
"user_id": "string",
"email": "string",
"name": "string",
"num_transcripts": "integer",
"recent_transcript": "string",
"recent_meeting": "string",
"minutes_consumed": "number",
"is_admin": "boolean",
"integrations": [
"string"
]
}
}
}
Delete Transcript
Deletes a meeting transcript from the user account. This query takes meeting id and returns an object containing information about the deleted transcript.
Example
const transcriptId = "randomnoteotxxxxxxqa31h";
axios({
url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxxx'
},
data: {
query: `
mutation($transcriptId: String!) {
deleteTranscript(id: $transcriptId) {
title
date
duration
organizer_email
}
}
`,
variables: { transcriptId }
},
}).then(result => {
console.log(result.data.data);
}).catch(e => {
console.log(e.response.data);
});
Delete Transcript Response Data
The response data is same as the Transcript response data
(no description)
Example
Request Content-Types:
application/json
Query
mutation deleteTranscript($id: String!){
deleteTranscript(id: $id){
id
title
host_email
organizer_email
fireflies_users
participants
date
transcript_url
duration
}
}
Variables
{
"id": "string"
}
Try it now
mutation deleteTranscript($id: String!){
deleteTranscript(id: $id){
id
title
host_email
organizer_email
fireflies_users
participants
date
transcript_url
duration
}
}
{
"id": "string"
}
Successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"data": {
"deleteTranscript": {
"id": "string",
"title": "string",
"host_email": "string",
"organizer_email": "string",
"fireflies_users": [
"string"
],
"participants": [
"string"
],
"date": "number",
"transcript_url": "string",
"duration": "number"
}
}
}
Upload Audio
The mutation operation allows users to upload audio files for transcription. The operation takes three parameters
url: current url of the audio file to be transcribed
title: title or name of the meeting, this will be used to identify the transcribed file
attendees: Optional
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
- phoneNumber
Example
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"
}
]
}
axios({ url: 'https://api.fireflies.ai/graphql',
method: 'post',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer xxxxxxxxxxxxxxxxx'
},
data: {
query: `
mutation($input: AudioUploadInput) {
uploadAudio(input: $input) {
success
title
message
}
}
`,
variables: { input }
},
}).then(result => {
console.log(result.data.data.uploadAudio);
}).catch(e => {
console.log(e);
});
Upload Audio Response Data
success: returns true
if upload was successful.
title: title of the transcribed file as specified in the query parameter
message: contains information about the transcription process e.g Success. Processing audio
(no description)
Example
Request Content-Types:
application/json
Query
mutation uploadAudio($input: AudioUploadInput){
uploadAudio(input: $input){
success
title
message
}
}
Variables
{
"input": {
"url": "string",
"title": "string",
"attendees": [
{
"displayName": "string",
"email": "string",
"phoneNumber": "string"
}
],
"webhook": "string"
}
}
Try it now
mutation uploadAudio($input: AudioUploadInput){
uploadAudio(input: $input){
success
title
message
}
}
{
"input": {
"url": "string",
"title": "string",
"attendees": [
{
"displayName": "string",
"email": "string",
"phoneNumber": "string"
}
],
"webhook": "string"
}
}
Successful operation
Response Content-Types: application/json
Response Example (200 OK)
{
"data": {
"uploadAudio": {
"success": "boolean",
"title": "string",
"message": "string"
}
}
}
Schema Definitions
Float: number
The Float
scalar type represents signed double-precision fractional values as specified by
IEEE 754.
Example
number
Int: number
The Int
scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
number
String: string
The String
scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Transcript: object
- id:
- sentences:
- title:
- host_email:
- organizer_email:
- user:
- fireflies_users:
- participants:
- date:
- transcript_url:
- duration:
- custom_topics:
Example
{
"id": "string",
"sentences": [
{
"index": "number",
"text": "string",
"raw_text": "string",
"start_time": "number",
"end_time": "number",
"speaker_id": "number",
"speaker_name": "string"
}
],
"title": "string",
"host_email": "string",
"organizer_email": "string",
"user": {
"user_id": "string",
"email": "string",
"name": "string",
"num_transcripts": "number",
"recent_transcript": "string",
"recent_meeting": "string",
"minutes_consumed": "number",
"is_admin": "boolean",
"integrations": [
"string"
]
},
"fireflies_users": [
"string"
],
"participants": [
"string"
],
"date": "number",
"transcript_url": "string",
"duration": "number",
"custom_topics": [
{
"sentence_index": "string",
"sentence": "string",
"name": "string",
"phrases": [
"string"
]
}
]
}
User: object
- user_id:
- email:
- name:
- num_transcripts:
- recent_transcript:
- recent_meeting:
- minutes_consumed:
- is_admin:
- integrations:
Example
{
"user_id": "string",
"email": "string",
"name": "string",
"num_transcripts": "number",
"recent_transcript": "string",
"recent_meeting": "string",
"minutes_consumed": "number",
"is_admin": "boolean",
"integrations": [
"string"
]
}