Agent Skills: Fireflies

Fireflies.ai API for meeting transcription. Use when user mentions "Fireflies",

UncategorizedID: vm0-ai/vm0-skills/fireflies

Install this agent skill to your local

pnpm dlx add-skill https://github.com/vm0-ai/vm0-skills/tree/HEAD/fireflies

Skill Files

Browse the full folder contents for fireflies.

Download Skill

Loading file tree…

fireflies/SKILL.md

Skill Metadata

Name
fireflies
Description
Fireflies.ai API for meeting transcription. Use when user mentions "Fireflies",

Fireflies

Use the Fireflies.ai GraphQL API via direct curl calls to transcribe and analyze meetings.

Official docs: https://docs.fireflies.ai/


When to Use

Use this skill when you need to:

  • List and search meeting transcripts by keyword, date, or participants
  • Fetch a single transcript with full details, sentences, analytics, and summaries
  • Upload audio files for transcription
  • Get user information for the API key owner or team members

Prerequisites

  1. Sign up at https://app.fireflies.ai/
  2. Navigate to Settings > Developer Settings > API to generate your API key
  3. Copy the API key
export FIREFLIES_TOKEN="your-api-key"

How to Use

All examples below assume you have FIREFLIES_TOKEN set.

Endpoint: https://api.fireflies.ai/graphql

The Fireflies API is GraphQL-based. All requests are POST to a single endpoint. Write the GraphQL query to /tmp/fireflies_request.json, then execute with curl.


1. Get Current User

Fetch details for the API key owner. Omit the userId variable to get the current user.

Write to /tmp/fireflies_request.json:

{
  "query": "query { user { user_id name email num_transcripts minutes_consumed is_admin integrations } }"
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.user'

2. List Transcripts

Fetch a list of recent meeting transcripts.

Write to /tmp/fireflies_request.json:

{
  "query": "query { transcripts(limit: 10) { id title date duration organizer_email participants host_email } }"
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcripts'

Search by Keyword

Write to /tmp/fireflies_request.json:

{
  "query": "query Transcripts($keyword: String) { transcripts(keyword: $keyword, limit: 10) { id title date duration } }",
  "variables": { "keyword": "product roadmap" }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcripts'

Filter by Date Range

Write to /tmp/fireflies_request.json:

{
  "query": "query Transcripts($fromDate: DateTime, $toDate: DateTime) { transcripts(fromDate: $fromDate, toDate: $toDate, limit: 20) { id title date duration } }",
  "variables": { "fromDate": "2025-01-01T00:00:00.000Z", "toDate": "2025-12-31T23:59:59.000Z" }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcripts'

Filter by Participant

Write to /tmp/fireflies_request.json:

{
  "query": "query Transcripts($participants: [String]) { transcripts(participants: $participants, limit: 10) { id title date participants } }",
  "variables": { "participants": ["alice@example.com"] }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcripts'

Transcripts Parameters:

| Parameter | Type | Description | |-----------|------|-------------| | keyword | String | Search in title and spoken words (max 255 chars) | | fromDate / toDate | DateTime | ISO 8601 date range filter | | host_email | String | Filter by host email | | organizers | [String] | Filter by organizer emails | | participants | [String] | Filter by participant emails | | mine | Boolean | Only meetings owned by API key owner | | limit | Int | Max results (default 50) | | skip | Int | Pagination offset |


3. Get Single Transcript

Fetch full details for a specific transcript.

Basic Info

Write to /tmp/fireflies_request.json:

{
  "query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { id title date duration host_email organizer_email participants transcript_url audio_url } }",
  "variables": { "transcriptId": "your_transcript_id" }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcript'

With Summary and Action Items

Write to /tmp/fireflies_request.json:

{
  "query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { id title summary { keywords action_items outline overview short_summary topics_discussed } } }",
  "variables": { "transcriptId": "your_transcript_id" }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcript.summary'

With Sentences (Full Transcript)

Write to /tmp/fireflies_request.json:

{
  "query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { id title sentences { index speaker_name text start_time end_time } } }",
  "variables": { "transcriptId": "your_transcript_id" }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcript.sentences'

With Analytics

Write to /tmp/fireflies_request.json:

{
  "query": "query Transcript($transcriptId: String!) { transcript(id: $transcriptId) { id title analytics { sentiments { negative_pct neutral_pct positive_pct } speakers { name duration word_count words_per_minute questions filler_words } } } }",
  "variables": { "transcriptId": "your_transcript_id" }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.transcript.analytics'

4. Upload Audio for Transcription

Upload an audio file URL for Fireflies to transcribe. The file must be publicly accessible via HTTPS. Supported formats: mp3, mp4, wav, m4a, ogg.

Write to /tmp/fireflies_request.json:

{
  "query": "mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }",
  "variables": {
    "input": {
      "url": "https://example.com/meeting-recording.mp3",
      "title": "Team Standup 2025-01-15"
    }
  }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.uploadAudio'

Upload with Attendees

Write to /tmp/fireflies_request.json:

{
  "query": "mutation($input: AudioUploadInput) { uploadAudio(input: $input) { success title message } }",
  "variables": {
    "input": {
      "url": "https://example.com/meeting-recording.mp3",
      "title": "Product Review",
      "attendees": [
        { "displayName": "Alice", "email": "alice@example.com" },
        { "displayName": "Bob", "email": "bob@example.com" }
      ]
    }
  }
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.uploadAudio'

Upload Parameters:

| Parameter | Type | Description | |-----------|------|-------------| | url | String | Public HTTPS URL of audio/video file (required) | | title | String | Title for the meeting | | attendees | [Object] | Array of { displayName, email, phoneNumber } | | webhook | String | URL to notify when transcription completes | | custom_language | String | Language code (e.g., es, de, ja) | | save_video | Boolean | Retain video file | | client_reference_id | String | Custom identifier for the upload |


5. List Team Users

Fetch all users in the team.

Write to /tmp/fireflies_request.json:

{
  "query": "query { users { user_id name email is_admin num_transcripts minutes_consumed } }"
}

Then run:

curl -s -X POST "https://api.fireflies.ai/graphql" --header "Content-Type: application/json" --header "Authorization: Bearer $(printenv FIREFLIES_TOKEN)" -d @/tmp/fireflies_request.json | jq '.data.users'

Guidelines

  1. GraphQL single endpoint: All requests go to POST https://api.fireflies.ai/graphql with the query in the JSON body
  2. Request only needed fields: GraphQL lets you specify exactly which fields to return; keep queries minimal for better performance
  3. Pagination: Use limit and skip parameters on the transcripts query. Maximum limit is 50
  4. Date format: Use ISO 8601 format for fromDate and toDate (e.g., 2025-01-01T00:00:00.000Z)
  5. Audio uploads are async: After uploading, the transcription is queued. Use webhooks or poll the transcripts list to check completion
  6. File requirements: Uploaded audio must be a valid HTTPS URL and publicly accessible. Supported formats: mp3, mp4, wav, m4a, ogg
  7. Check for errors: GraphQL errors appear in the errors array of the response, not in HTTP status codes