---
title: "Speech to text API · Whisper transcription hosted in the EU"
description: "Transcribe audio with Whisper through an OpenAI-compatible speech to text API. Meetings, calls and voice notes, processed in EU data centres."
canonical: "https://inference.eu/api/audio-transcriptions/"
language: "en"
---

POST /v1/audio/transcriptions

# Speech to text API: Whisper transcription, processed in the EU

The transcriptions endpoint turns recorded speech into text with open speech recognition models such as Whisper. It accepts the same multipart upload as the OpenAI audio API, so existing code and tools work after a base URL change. Customer calls, meetings and dictation often contain personal data, and here they are processed in European data centres.

[Contact sales](https://inference.eu/contact/)[Example request](#example)

1.  01API format: OpenAI
2.  02EU data centres
3.  03Covered by one DPA

POST /v1/audio/transcriptions

```
curl https://api.inference.eu/v1/audio/transcriptions \
  -H "Authorization: Bearer $INFERENCE_EU_API_KEY" \
  -F file="@kundengespraech.mp3" \
  -F model="whisper-large-v3-turbo" \
  -F language="de" \
  -F response_format="verbose_json" \
  -F "timestamp_granularities[]=segment"
```

## What the endpoint does

`POST /v1/audio/transcriptions` takes an audio file as `multipart/form-data` and returns what was said. Send the file in the `file` field and the model id in `model`, for example `whisper-large-v3-turbo`. Common formats such as mp3, mp4, m4a, wav, webm, ogg and flac are accepted.

Whisper models recognise speech in close to a hundred languages, including every major EU language, and detect the language automatically if you do not specify one. The default response is `{"text": "..."}`, which is often all you need to feed the transcript into a summary, a search index or a ticket.

## Key request fields

`language` takes an ISO 639-1 code such as `de`, `fr` or `nl`. Setting it improves accuracy and speed on short or noisy recordings, where automatic detection can guess wrong. `prompt` gives the model context: names, product terms or the previous segment's text, so that it spells "Kubernetes" or a colleague's surname correctly.

`response_format` can be `json`, `text`, `srt`, `vtt` or `verbose_json`. Use `srt` or `vtt` for subtitles. `verbose_json` returns the detected language, duration and a `segments` array with start and end times, and with `timestamp_granularities[]` set to `word` you get word-level timings as well. `temperature` is best left at 0 for transcription.

## A practical pattern for calls and meetings

A common workflow records a support call or meeting, transcribes it with `verbose_json` to keep timestamps, then sends the transcript to a chat model with a prompt that asks for a summary, action items and any commitments made. Store the segments with their times so that people can jump to the moment in the recording.

For large archives of recordings, upload them and process them in the background instead of holding a connection open for each one. Keep the language setting per customer or per team, and keep a short glossary of names and terms to pass in `prompt` for every file.

## Errors and edge cases

Files above the maximum upload size return HTTP 413 or a 400 error. Split long recordings into parts, ideally at silences, and keep the last sentence of one part as the `prompt` for the next so that context carries over. The size limit depends on your plan, and we confirm it with you.

An unsupported or corrupted file returns a 400 error that names the problem. Long stretches of silence or music can make Whisper models repeat a phrase or invent text, so trim silence first or use voice activity detection. Speaker labels are not part of this response; add a diarisation step if you need to know who said what.

## Speech to text

Endpoint

POST /v1/audio/transcriptions

Category

Endpoints

API format

OpenAI

Base URL

api.inference.eu/v1

Processing

EU data centres

Training on your data

Never

## Speech to text: common questions

The questions buyers, developers and legal teams ask us most. Something missing? Ask us directly.

Yes. The endpoint uses the same path, multipart fields and response formats as OpenAI's \`/v1/audio/transcriptions\`. \`client.audio.transcriptions.create\` in the OpenAI SDKs works after you change the base URL and key and set an open model such as \`whisper-large-v3-turbo\`.

Whisper models cover close to a hundred languages, including German, French, Spanish, Italian, Dutch, Polish and the other major EU languages. Accuracy varies by language and recording quality. Set \`language\` explicitly when you know it, particularly for short clips and for languages with fewer speakers.

Yes. Set \`response\_format\` to \`srt\` or \`vtt\` for subtitle files, or to \`verbose\_json\` for a JSON response with \`segments\` that include start and end times. Add \`timestamp\_granularities\[\]=word\` to get word-level timings, which is useful for editing tools and for highlighting text as audio plays.

The maximum upload size depends on your plan, and we confirm it with you. If a recording is longer, split it into parts at natural pauses, transcribe each part and join the text. Compressing to a lower-bitrate mono file often brings a long call under the limit without hurting accuracy.

The transcription response does not label speakers. If you need to know who said what, run a diarisation step on the audio and align its speaker turns with the segment timestamps from \`verbose\_json\`. For many summaries, a chat model can infer roles such as agent and customer from the content.

Pass a short \`prompt\` that contains the names, product terms and abbreviations you expect, written the way you want them spelt. The model uses it as context. For long recordings split into parts, use the end of the previous part's transcript as the prompt for the next.

No. Audio files are processed in EU data centres to produce the transcript and are not used to train models. Recordings of calls and meetings often contain personal data, which is why keeping processing in Europe matters. Retention terms for your contract are confirmed with you in writing.

This endpoint transcribes complete files. For near real-time use, send short chunks of a few seconds as they are recorded and join the results, passing the previous text as \`prompt\`. Tell us if you need a dedicated streaming setup and we will discuss the options with you.

[Ask a question](https://inference.eu/contact/)

## Related

[API overview](https://inference.eu/api/)

-   [Text to speechGenerate natural speech from text with an OpenAI-compatible text to speech API. Open voice models for apps, IVR and accessibility, processed in the EU.Endpoints](https://inference.eu/api/audio-speech/)
-   [Chat completionsSend chat messages to open-weight models with the OpenAI chat completions format. Requests are processed in EU data centres and never used for training.Endpoints](https://inference.eu/api/chat-completions/)
-   [BatchesRun thousands of chat or embedding requests as one asynchronous job with an OpenAI-compatible batch API. Upload JSONL, collect results, all in the EU.Endpoints](https://inference.eu/api/batches/)
-   [FilesUpload, list, download and delete files with an OpenAI-compatible files API. Use them for batch jobs and tools; stored in EU data centres.Endpoints](https://inference.eu/api/files/)

## Move your AI workloads to EU infrastructure

Tell us which models you use and roughly how much traffic you have. We reply within one working day with pricing and next steps.

-   Reply within one working day
-   Pricing for your volume
-   DPA ready to sign
