Skip to main content
This API is not generally available. Access requires whitelisting. Please contact Fireflies support to request access.

Overview

The createUploadUrl mutation generates a pre-signed URL that allows you to upload audio or video files directly to Fireflies.ai storage. This is useful when you want to upload files from your own infrastructure without exposing them via a public URL. This mutation is part of a two-step upload flow:
  1. Call createUploadUrl to get a pre-signed upload URL
  2. Upload your file directly to the URL using an HTTP PUT request
  3. Call confirmUpload to confirm the upload and start transcription

Arguments

input
CreateUploadUrlInput
required

Response

upload_url
String
The pre-signed URL to upload your file to. Use an HTTP PUT request with the file content as the body.
meeting_id
String
The unique identifier for the meeting. Use this ID when calling confirmUpload.
expires_at
String
ISO 8601 timestamp indicating when the upload URL expires. URLs are valid for 1 hour.

Usage Example

mutation createUploadUrl($input: CreateUploadUrlInput!) {
  createUploadUrl(input: $input) {
    upload_url
    meeting_id
    expires_at
  }
}
curl -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_api_key" \
  -d '{
    "query": "mutation($input: CreateUploadUrlInput!) { createUploadUrl(input: $input) { upload_url meeting_id expires_at } }",
    "variables": {
      "input": {
        "content_type": "audio/mpeg",
        "file_size": 10485760,
        "title": "Team Meeting Recording"
      }
    }
  }' \
  https://api.fireflies.ai/graphql
{
  "data": {
    "createUploadUrl": {
      "upload_url": "https://storage.googleapis.com/...",
      "meeting_id": "abc123def456",
      "expires_at": "2024-01-15T12:00:00.000Z"
    }
  }
}

Uploading the File

After receiving the signed URL, upload your file using an HTTP PUT request:
curl -X PUT \
  -H "Content-Type: audio/mpeg" \
  --data-binary @your-audio-file.mp3 \
  "https://storage.googleapis.com/..."
const fs = require('fs');
const axios = require('axios');

const fileBuffer = fs.readFileSync('your-audio-file.mp3');

await axios.put(uploadUrl, fileBuffer, {
  headers: {
    'Content-Type': 'audio/mpeg'
  }
});
with open('your-audio-file.mp3', 'rb') as f:
    file_data = f.read()

response = requests.put(
    upload_url,
    data=file_data,
    headers={'Content-Type': 'audio/mpeg'}
)
After the upload completes successfully, call confirmUpload to start transcription.

Supported Content Types

Audio Formats

MIME TypeExtension
audio/mpeg.mp3
audio/mp3.mp3
audio/wav.wav
audio/x-wav.wav
audio/vnd.wave.wav
audio/x-m4a.m4a
audio/mp4.m4a
audio/ogg.ogg
audio/webm.webm
audio/aac.aac
audio/x-aac.aac
audio/aac-adts.aac
audio/amr.amr
audio/opus.opus
audio/3gpp.3gp

Video Formats

MIME TypeExtension
video/mp4.mp4
video/webm.webm
video/quicktime.mov
video/x-m4v.m4v
video/mpeg.mpeg
video/x-msvideo.avi
video/ogg.ogv
video/3gpp.3gp

File Size Limits

File TypeUser PlanMaximum Size
AudioAll plans400 MB
VideoFree200 MB
VideoPaid2 GB

Error Codes

The content type is not supported, or the file size exceeds the allowed limit for your plan.
The user account has been cancelled. Please contact support if you encounter this error.

Additional Resources