Grabs the file list with key id and basic information
apiKey
RequiredheaderstringAPI key for authentication
fileId
OptionalbodystringOptional parameter to get a single file instead of the file list
operationType
Optionalbodystringe.g., transcript, caption, voiceover
1234567891011
fetch('https://companion.maestrasuite.com/api/getFiles', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>"
},
body: JSON.stringify({
"fileId": "-Lp9mZdjF-UcpahcqSadsa",
"operationType": "transcript" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234567891011121314
{
"-OGZNECLNRdQKpooDh0Y": {
"duration": 58.147007,
"edited": 1737354728550,
"created": 1736850866422,
"fileName": "test2",
"folderPath": "root",
"languages": {
"english": true
},
"status": "done",
"fileId": "-OGZNECLNRdQKpooDh0Y"
}
}
Generate an export link for the requested transcript or subtitle file
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
fileId
RequiredbodystringID of the file to export
operationType
RequiredbodystringType of the operation
targetLanguages
Optionalbodyobject*Required if vtt or srt export not if json export
numberOfLines
OptionalbodyintegerNumber of lines to include in the export, accepts either 1 or 2
charactersPerLine
OptionalbodyintegerDefaulted to 32. Accepts values between 10 and 70
showSpeakerNames
OptionalbodybooleanWhether to show speaker names in the export
fileType
OptionalbodystringCan be set as vtt, srt or json, defaulted to vtt. targetLanguages parameter is invalid if set as json
1234567891011121314151617
fetch('https://companion.maestrasuite.com/api/exportFile', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"operationType": "transcript",
"targetLanguages": {"french":true,"spanish":true},
"numberOfLines": 2,
"charactersPerLine": 32,
"showSpeakerNames": false,
"fileType": "vtt" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
12345
{
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"exportUrl": "https://maestra-exports/exports/abc123.srt",
"message": "Export link successfully generated."
}
Moves a file to a specific channel/folder
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
fileId
RequiredbodystringThe ID of the file to move
operationType
RequiredbodystringType of the operation
folderPath
RequiredbodystringPath of the folder
channelId
OptionalbodystringID of the channel (Maestra Teams only)
1234567891011121314
fetch('https://companion.maestrasuite.com/api/moveFile', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"operationType": "voiceover",
"folderPath": "root",
"channelId": "-MGsa3fPlGmTUd52mH64" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123
{
"message": "File moved successfully."
}
Retrieve a list of channels for a particular workspace
apiKey
RequiredheaderstringAPI key for authentication
12345678
fetch('https://companion.maestrasuite.com/api/getChannels', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>"
},
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123456789101112
[
{
"channelId": "-MGsa3fPlGmTUd52mH64",
"channelName": "Channel A",
"workspaceId": "workspace_12345"
},
{
"channelId": "-MGsa3fPlGmTUd52mABC",
"channelName": "Channel B",
"workspaceId": "workspace_12345"
}
]
Create a new channel within a workspace
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
Requiredheaderstringapplication/json
channelName
RequiredbodystringName of the channel
1234567891011
fetch('https://companion.maestrasuite.com/api/createChannel', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"channelName": "My New Channel" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234
{
"channelId": "-MQMsk4sRXqrGH6DVgCG",
"message": "Channel has been created."
}
Grabs the dictionary list with key ID.
apiKey
RequiredheaderstringAPI key for authentication
dictionaryId
OptionalbodystringThe ID of the dictionary to retrieve, if not provided, returns all dictionaries
12345678910
fetch('https://companion.maestrasuite.com/api/dictionary', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>"
},
body: JSON.stringify({
"dictionaryId": "-MGsa3fPlGmTUd52mH64" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234567891011121314
{
"dictionaryId": "-MGsa3fPlGmTUd52mH64",
"title": "Technical Terms",
"entries": [
{
"word": "cardiomyopathy",
"replacement": "cardiomyopathy"
},
{
"word": "hypertension",
"replacement": "hypertension"
}
]
}
Grabs the folder structure for the user account
apiKey
RequiredheaderstringAPI key for authentication
operationType
Optionalbodystringe.g., transcript, caption, voiceover
12345678910
fetch('https://companion.maestrasuite.com/api/getFolders', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>"
},
body: JSON.stringify({
"operationType": "transcript" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
12345678910111213141516171819202122232425262728
{
"root": {
"-MbinFf_K-vvwlHbWjN4": {
"-MaGbXUW6BHambRKS3Na": {
"created": 1621645731853,
"folderName": "Sample Files"
},
"created": 1623209085719,
"folderName": "2020"
},
"-MbixMpLJ05xgjvwNnPm": {
"-McCIYUrFqeXQGrEqQpR": {
"created": 1623720867882,
"folderName": "The Matrix",
"channelId": "-MGuz0F2CU6pzuHfP7Nn"
},
"created": 1623211736468,
"folderName": "English Folder",
"channelId": "-MGuz0F2CU6pzuHfP7Nn"
},
"-Mbj-WpbV0LFuPjbyyKl": {
"created": 1623212563868,
"folderName": "Spanish Folder",
"channelId": "-MGuzXHOmXTdpcr6VtEg"
},
"folderName": "root"
}
}
Creates a new folder within file system
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
folderName
RequiredbodystringName of the folder
folderPath
RequiredbodystringPath of the folder
operationType
RequiredbodystringType of the operation
channelId
OptionalbodystringID of the channel (Maestra Teams only)
1234567891011121314
fetch('https://companion.maestrasuite.com/api/createFolder', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"folderName": "2021 collections folder",
"folderPath": "root/-MdGjgD4xLtKRZHRQls_",
"operationType": "voiceover",
"channelId": "-MGsa3fPlGmTUd52mH64" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234
{
"message": "Folder created successfully.",
"folderPath": "root/-MdGjgD4xLtKRZHRQls_/-MfIqYUk-D15SBEZL-9p"
}
Initiates a new file upload to Maestra
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
fileUrl
RequiredbodystringURL of the file to upload
fileName
RequiredbodystringName of the file
mediaType
RequiredbodystringType of the media
audioLanguage
RequiredbodystringLanguage of the audio
speakerCount
RequiredbodyintegerNumber of speakers
dictionaryKey
OptionalbodystringKey of the dictionary
channelId
OptionalbodystringID of the channel
folderPath
OptionalbodystringPath of the folder
operationType
RequiredbodystringType of the operation
skipTranscription
RequiredbodybooleanWhether to skip transcription
targetLanguages
OptionalbodyobjectTarget languages for the operation
123456789101112131415161718192021
fetch('https://companion.maestrasuite.com/api/uploadFile', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileUrl": "https://random.publicfilepath.mp4",
"fileName": "Sample file name",
"mediaType": "video/mp4",
"audioLanguage": "en-US",
"speakerCount": 2,
"dictionaryKey": "default",
"channelId": "-MGsa3fPlGmTUd52mH64",
"folderPath": "root/-MbixMpLJ05xgjvwNnPm/-McCIYUrFqeXQGrEqQpR",
"operationType": "voiceover",
"skipTranscription": false,
"targetLanguages": {"french":true,"spanish":true} })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234
{
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"message": "Import job has been started."
}
Initiates a new subtitle file upload
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
fileId
RequiredbodystringThe ID of the file to import subtitles for
operationType
RequiredbodystringType of the operation
targetLanguage
RequiredbodystringTarget language for the subtitles
subtitleType
RequiredbodystringType of the subtitle file
subtitleUrl
RequiredbodystringURL of the subtitle file
123456789101112131415
fetch('https://companion.maestrasuite.com/api/importSubtitle', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileId": "-MGsa3fPlGmTUd52mH64",
"operationType": "voiceover",
"targetLanguage": "english",
"subtitleType": "srt",
"subtitleUrl": "https://random.publicsubtitlefilepath.srt" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234
{
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"message": "Import Subtitle request has been sent."
}
Generates voiceover for a specific language
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
fileId
RequiredbodystringThe ID of the file for which to generate voiceover
targetLanguages
RequiredbodyobjectLanguages for which to generate voiceover
123456789101112
fetch('https://companion.maestrasuite.com/api/generateVoiceover', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"targetLanguages": {"french":true,"spanish":true} })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123
{
"message": "Voiceover synthesis started."
}
Sets the default speakers for various languages
Content-Type
RequiredheaderstringMust be application/json
apiKey
RequiredheaderstringAPI key for authentication
requestArray
RequiredbodyarrayArray of speaker configurations. Index 0 sets default configuration for unspecified speakers, subsequent indices match speakers in audio files
12345678910
fetch('https://companion.maestrasuite.com/api/setDefaultSpeakers', {
method: 'POST',
headers: {
"Content-Type": "application/json",
"apiKey": "<YOUR_API_KEY>"
},
body: [{"arabic":"Salma","bengali":"Tanishaa","chinese":"Xiaoxiao"},{"danish":"Christel","dutch":"Colette","english":"Joanna"}]
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123
{
"message": "Default speakers are set."
}
Exports voiceover for a specific file ID and language
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
fileId
RequiredbodystringThe ID of the file for which to export voiceover
targetLanguages
RequiredbodyobjectLanguages for which to export voiceover
123456789101112
fetch('https://companion.maestrasuite.com/api/exportVoiceover', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"targetLanguages": {"german":true,"english":true} })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123456
{
"exportLinks": {
"german": "https://storage.googleapis.com/maestro-218920.appspot.com/...",
"english": "https://storage.googleapis.com/maestro-218920.appspot.com/..."
}
}
Retrieves a voice sample for a given voice ID and language
apiKey
RequiredheaderstringAPI key for authentication
voiceId
RequiredbodystringThe ID of the voice sample to retrieve
language
RequiredbodystringThe language of the voice sample to retrieve
1234567891011
fetch('https://companion.maestrasuite.com/api/getVoiceSample', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>"
},
body: JSON.stringify({
"voiceId": "voice_123",
"language": "en-US" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123
{
"voiceSampleURL": "https://example.com/voice_samples/sample.mp3"
}
Lists all available voices, optionally grouped by language
apiKey
RequiredheaderstringAPI key for authentication
groupByLanguage
OptionalbodybooleanWhen set to true, groups the voices by their respective languages
12345678910
fetch('https://companion.maestrasuite.com/api/listVoices', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>"
},
body: JSON.stringify({
"groupByLanguage": "true" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123456789101112
{
"Adri": {
"languages": {
"afrikaans": {
"South Africa": true
}
},
"name": "Adri",
"voiceId": "Adri",
"pro": false
}
}
Translates an existing file in the system
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
RequiredheaderstringMust be application/json
fileId
RequiredbodystringThe ID of the file to translate
operationType
RequiredbodystringType of the operation
targetLanguages
RequiredbodyobjectLanguages for which to generate translation
12345678910111213
fetch('https://companion.maestrasuite.com/api/translate', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileId": "-MQMsk4sRXqrGH6DVgCG",
"operationType": "voiceover",
"targetLanguages": {"french":true,"spanish":true} })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123
{
"message": "Translation generated."
}
Returns the available credit allotment within the account
apiKey
RequiredheaderstringAPI key for authentication
12345678
fetch('https://companion.maestrasuite.com/api/getCredits', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>"
},
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234
{
"nonExpiringCredits": 1234,
"monthlyCredits": 567
}
Clones a user's voice using an audio file and stores it in the system.
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
Requiredheaderstringapplication/json
fileUrl
RequiredbodystringURL of the user's audio file to be cloned
elevenLabsVoiceName
RequiredbodystringName for the cloned voice in Eleven Labs
123456789101112
fetch('https://companion.maestrasuite.com/api/cloneVoice/userAudio', {
method: 'POST',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"fileUrl": "https://example.com/audio.mp3",
"elevenLabsVoiceName": "My Cloned Voice" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
1234
{
"voiceId": "abc123xyz",
"message": "Voice cloned."
}
Removes a cloned voice associated with the user.
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
Requiredheaderstringapplication/json
voiceId
RequiredbodystringID of the cloned voice to be removed
1234567891011
fetch('https://companion.maestrasuite.com/api/cloneVoice/remove', {
method: 'DELETE',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
body: JSON.stringify({
"voiceId": "abc123xyz" })
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
123
{
"message": "Clone voice removed."
}
Retrieves a list of cloned voices for the authenticated user, including their names and IDs.
apiKey
RequiredheaderstringAPI key for authentication
Content-Type
Requiredheaderstringapplication/json
123456789
fetch('https://companion.maestrasuite.com/api/cloneVoice/namesIds', {
method: 'GET',
headers: {
"apiKey": "<YOUR_API_KEY>",
"Content-Type": "application/json"
},
}).then((response) => response.json())
.then((result) => console.log(result))
.catch((error) => console.error(error));
12345678910
[
{
"id": "abc123xyz",
"name": "My Cloned Voice"
},
{
"id": "def456uvw",
"name": "Second Cloned Voice"
}
]
Transcription | Translation | Voiceover | |
---|---|---|---|
afrikaans | ✓ | ✓ | ✓ |
albanian | ✓ | ✓ | |
amharic | ✓ | ✓ | ✓ |
arabic | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
armenian | ✓ | ✓ | ✓ |
assamese | ✓ | ||
azerbaijani | ✓ | ✓ | ✓ |
basque | ✓ | ||
belarusian | ✓ | ||
bengali | ✓ | ✓ | ✓ |
bosnian | ✓ | ✓ | ✓ |
bulgarian | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
burmese | ✓ | ✓ | |
cantonese | ✓ | ||
catalan | ✓ | ✓ | ✓ |
chinese | ✓ | ✓(Clone/Pro) | |
chineset | ✓ | ✓(Clone/Pro) | |
croatian | ✓ | ✓ | ✓(Clone/Pro) |
czech | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
danish | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
dari | ✓ | ||
divehi | ✓ | ||
dutch | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
english | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
estonian | ✓ | ✓ | |
faroese | ✓ | ||
fijan | ✓ | ||
filipino | ✓ | ✓ | ✓(Clone/Pro) |
finnish | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
french | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
frenchc | ✓ | ✓(Clone/Pro) | |
galician | ✓ | ✓ | ✓ |
georgian | ✓ | ✓ | ✓ |
german | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
greek | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
gujarati | ✓ | ✓ | ✓ |
haitian creole | ✓ | ||
hausa | ✓ | ||
hebrew | ✓ | ✓ | ✓ |
hindi | ✓ | ✓ | ✓(Clone/Pro) |
hmong daw | ✓ | ||
hungarian | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
icelandic | ✓ | ✓ | ✓ |
igbo | ✓ | ||
indonesian | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
inuinnaqtun | ✓ | ||
inuktitut | ✓ | ||
irish | ✓ | ✓ | |
italian | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
japanese | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
javanese | ✓ | ✓ | |
kannada | ✓ | ✓ | ✓ |
kazakh | ✓ | ✓ | |
khmer | ✓ | ✓ | ✓ |
kinyarwanda | ✓ | ||
klingon | ✓ | ||
korean | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
kurdish | ✓ | ||
kyrgyz | ✓ | ||
lao | ✓ | ✓ | ✓ |
latin | ✓ | ||
latvian | ✓ | ✓(DeepL) | ✓ |
lithuanian | ✓ | ✓(DeepL) | ✓ |
luxembourgish | ✓ | ||
macedonian | ✓ | ✓ | |
malagasy | ✓ | ||
malay | ✓ | ✓ | ✓(Clone/Pro) |
malayalam | ✓ | ✓ | ✓ |
maltese | ✓ | ✓ | |
maori | ✓ | ||
marathi | ✓ | ✓ | ✓ |
mongolian | ✓ | ✓ | |
nepali | ✓ | ✓ | ✓ |
norwegian | ✓(DeepL, Glossary) | ✓(Clone/Pro) | |
odia | ✓ | ||
pashto | ✓ | ✓ | |
persian | ✓ | ✓ | ✓ |
polish | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
portuguese | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
portugueseb | ✓ | ✓(Clone/Pro) | |
punjabi | ✓ | ✓ | |
romanian | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
russian | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
samoan | ✓ | ||
serbian | ✓ | ✓ | ✓ |
serbianl | ✓ | ✓ | ✓ |
shona | ✓ | ||
sinhala | ✓ | ✓ | |
slovak | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
slovenian | ✓ | ✓(DeepL) | ✓ |
somali | ✓ | ✓ | |
spanish | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
sundanese | ✓ | ✓ | |
swahili | ✓ | ✓ | ✓ |
swedish | ✓ | ✓(DeepL, Glossary) | ✓(Clone/Pro) |
tahitian | ✓ | ||
tamil | ✓ | ✓ | ✓(Clone/Pro) |
tatar | ✓ | ||
telugu | ✓ | ✓ | ✓ |
thai | ✓ | ✓ | ✓ |
tibetan | ✓ | ||
tigrinya | ✓ | ||
tongan | ✓ | ||
turkish | ✓ | ✓(DeepL) | ✓(Clone/Pro) |
turkmen | ✓ | ||
ukrainian | ✓ | ✓(Clone/Pro) | |
ukranian | ✓ | ||
urdu | ✓ | ✓ | ✓ |
uyghur | ✓ | ||
uzbek | ✓ | ✓ | |
vietnamese | ✓ | ✓ | ✓(Clone/Pro) |
welsh | ✓ | ✓ | |
yoruba | ✓ | ||
zulu | ✓ | ✓ | ✓ |