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:
Call createUploadUrl to get a pre-signed upload URL
Upload your file directly to the URL using an HTTP PUT request
Call confirmUpload to confirm the upload and start transcription
Arguments
input
CreateUploadUrlInput
required
The MIME type of the file being uploaded. Must be one of the supported audio or video formats. See Supported Content Types below. The size of the file in bytes. Used for validation against plan limits. Maximum 2GB for video files (paid users) or 400MB for audio files.
Title or name of the meeting. This will be used to identify the transcribed file. Maximum 256 characters.
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 . Maximum 5 characters. An array of Attendee objects. 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. Maximum 100 attendees.
Response
The pre-signed URL to upload your file to. Use an HTTP PUT request with the file content as the body.
The unique identifier for the meeting. Use this ID when calling confirmUpload.
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
MIME Type Extension 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
MIME Type Extension 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 Type User Plan Maximum Size Audio All plans 400 MB Video Free 200 MB Video Paid 2 GB
Error Codes
This mutation requires a paid plan (Pro or higher). Free plan users cannot use direct file uploads.
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