curl --request POST \
--url https://api.opper.ai/v3/audio/transcriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"audio": "<string>",
"model": "<string>"
}
'import requests
url = "https://api.opper.ai/v3/audio/transcriptions"
payload = {
"audio": "<string>",
"model": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({audio: '<string>', model: '<string>'})
};
fetch('https://api.opper.ai/v3/audio/transcriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"created": 123,
"id": "<string>",
"model": "<string>",
"text": "<string>",
"usage": {
"cost": 123,
"seconds": 123
},
"duration": 123,
"language": "<string>",
"segments": [
{
"end": 123,
"start": 123,
"text": "<string>",
"speaker": "<string>"
}
],
"words": [
{
"end": 123,
"start": 123,
"word": "<string>"
}
]
}{
"id": "<string>",
"status_url": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"meta": {}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"meta": {}
}Transcribe audio
Transcribe audio to text. By default runs synchronously and returns the transcript inline (200); audio accepts a file_<id>, an https URL, or a base64 data-URI (max 25MB decoded). Set stream: true to receive the transcript live as Server-Sent Events (transcript.text.delta chunks then a final transcript.text.done, terminated by data: [DONE]) — supported on streaming models like mistral/voxtral-mini-2602, a 400 otherwise. Set async: true to run on the background worker and get a 202 with a status URL to poll instead — use it for long recordings that can exceed the synchronous timeout; it accepts the same audio sources (an inline data-URI is staged in Opper’s storage in eu-north-1 and deleted when the worker starts the job) and lifts the decoded-audio cap to 100MB. A file_<id> or https URL reaches the full 100MB; a data-URI is also bound by the 100 MiB request body limit, which with base64 overhead allows about 75MB of decoded audio. The result is deleted 24 hours after the job finishes, 1 hour on a zero-retention project, or earlier with DELETE /v3/artifacts/ (then the status URL answers 404); each status poll returns a fresh download link valid for 1 hour. stream and async are mutually exclusive. model and audio are required; language and prompt are passed through as hints; diarize requests speaker labels (400 on models without diarization support); everything in parameters is forwarded verbatim to the provider.
curl --request POST \
--url https://api.opper.ai/v3/audio/transcriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"audio": "<string>",
"model": "<string>"
}
'import requests
url = "https://api.opper.ai/v3/audio/transcriptions"
payload = {
"audio": "<string>",
"model": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({audio: '<string>', model: '<string>'})
};
fetch('https://api.opper.ai/v3/audio/transcriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"created": 123,
"id": "<string>",
"model": "<string>",
"text": "<string>",
"usage": {
"cost": 123,
"seconds": 123
},
"duration": 123,
"language": "<string>",
"segments": [
{
"end": 123,
"start": 123,
"text": "<string>",
"speaker": "<string>"
}
],
"words": [
{
"end": 123,
"start": 123,
"word": "<string>"
}
]
}{
"id": "<string>",
"status_url": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"meta": {}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"meta": {}
}Authorizations
API key authentication. Pass your API key as a Bearer token.