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

id:
string

(no description)

Example

Request Content-Types: application/json
Query
query user($id: String){
  user(id: $id){
    email
  }
}
Variables
{
  "id": "string"
}
Try it now
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
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
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: 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

id:
string

(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
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;
                  }
                  
                  
user_id:
string

(no description)

title:
string

(no description)

host_email:
string

(no description)

date:
number

(no description)

participant_email:
string

(no description)

limit:
integer

(no description)

skip:
integer

(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
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

user_id:
string

(no description)

role:

(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
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

id:
string

(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
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
  • email
  • 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
Response Content-Types: application/json
Response Example (200 OK)
{
  "data": {
    "uploadAudio": {
      "success": "boolean",
      "title": "string",
      "message": "string"
    }
  }
}

Schema Definitions

Attendee: object

displayName:
email:
phoneNumber:
Example
{
  "displayName": "string",
  "email": "string",
  "phoneNumber": "string"
}

AudioUploadInput: object

url:
title:
attendees:
webhook:
Example
{
  "url": "string",
  "title": "string",
  "attendees": [
    {
      "displayName": "string",
      "email": "string",
      "phoneNumber": "string"
    }
  ],
  "webhook": "string"
}

AudioUploadStatus: object

success:
title:
message:
Example
{
  "success": "boolean",
  "title": "string",
  "message": "string"
}

Boolean: boolean

The Boolean scalar type represents true or false.

Example
boolean

CacheControlScope: string

object
PUBLIC
object
PRIVATE

CustomTopic: object

sentence_index:
sentence:
name:
phrases:
Example
{
  "sentence_index": "string",
  "sentence": "string",
  "name": "string",
  "phrases": [
    "string"
  ]
}

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

Role: string

object
admin
object
user
object
viewer

Sentence: object

index:
text:
raw_text:
start_time:
end_time:
speaker_id:
Int
speaker_name:
Example
{
  "index": "number",
  "text": "string",
  "raw_text": "string",
  "start_time": "number",
  "end_time": "number",
  "speaker_id": "number",
  "speaker_name": "string"
}

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:
Int
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"
  ]
}