curl https://{host}/v2/workspaces/slug:llm-gateway/webhooks/v1/audio/transcriptions \
-H "Authorization: Bearer $PRISME_TOKEN" \
-F file=@meeting-notes.m4a \
-F language=frconst form = new FormData();
form.append('file', '<string>');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://{host}/v2/workspaces/slug:llm-gateway/webhooks/v1/audio/transcriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));from openai import OpenAI
client = OpenAI(
base_url="https://{host}/v2/workspaces/slug:llm-gateway/webhooks/v1",
api_key="<your user access token>",
)
with open("meeting-notes.m4a", "rb") as audio:
transcript = client.audio.transcriptions.create(
model="gpt-4o-transcribe",
file=audio,
language="fr",
)
print(transcript.text)
{
"text": "<string>",
"usage": {}
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}Transcribe audio into text
OpenAI-compatible speech-to-text endpoint. An official OpenAI SDK
pointed at the gateway calls it unchanged
(client.audio.transcriptions.create(...)): set the SDK base URL to
https://{host}/v2/workspaces/slug:llm-gateway/webhooks/v1 and pass a
user access token as the API key. This is the endpoint behind chat
dictation.
The audio is sent as a multipart file part. It is processed in
memory and never stored: it is not written to storage, to the
activity feed, or to logs.
Model resolution. When model is omitted, the gateway uses the
organization’s default transcription model, then the platform default
transcription model. A model not declared on any provider is answered
with 400.
Response formats. json (default) and verbose_json return JSON,
text returns text/plain. srt and vtt are refused with
400 UNSUPPORTED_RESPONSE_FORMAT.
Permission. Requires llm-gateway:models:audio-transcriptions,
granted by default to the system Member role.
Governance. The organization’s allowed models apply: a model
outside the allowlist is refused with 403 MODEL_NOT_ALLOWED, or,
under a soft_downgrade quota policy, replaced by the default
transcription model.
Analytics. Each successful call emits an
analytics.llm.transcription event, so usage appears in analytics.
curl https://{host}/v2/workspaces/slug:llm-gateway/webhooks/v1/audio/transcriptions \
-H "Authorization: Bearer $PRISME_TOKEN" \
-F file=@meeting-notes.m4a \
-F language=frconst form = new FormData();
form.append('file', '<string>');
const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
options.body = form;
fetch('https://{host}/v2/workspaces/slug:llm-gateway/webhooks/v1/audio/transcriptions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));from openai import OpenAI
client = OpenAI(
base_url="https://{host}/v2/workspaces/slug:llm-gateway/webhooks/v1",
api_key="<your user access token>",
)
with open("meeting-notes.m4a", "rb") as audio:
transcript = client.audio.transcriptions.create(
model="gpt-4o-transcribe",
file=audio,
language="fr",
)
print(transcript.text)
{
"text": "<string>",
"usage": {}
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}{
"error": "<string>",
"message": "<string>",
"code": "<string>",
"details": {},
"status": 123,
"retryAfter": 123,
"provider": "<string>",
"model": "<string>",
"provider_error_type": "<string>"
}Authorizations
User-bound credential carrying an identity: either a session JWT
or a user access token (at:*) generated from the user settings UI.
Send as Authorization: Bearer <token>.
Org API keys (iak_*) are not accepted here - they carry
no user identity. Use the x-prismeai-api-key header instead
(see OrgApiKeyAuth).
Body
Audio file to transcribe, 25 MB maximum by default. Supported
formats: flac, m4a, mp3, mp4, mpeg, mpga, oga,
ogg, wav, webm.
Transcription model id, for example gpt-4o-transcribe.
Defaults to the organization's default transcription
model, then to the platform default.
256ISO-639-1 language of the audio, for example fr. Improves
accuracy on short recordings. Detected by the model when
omitted.
Text that guides the transcription, such as expected vocabulary or the previous segment.
Sampling temperature, passed to the provider.
srt and vtt are not supported.
json, text, verbose_json Was this page helpful?