We are opening API access now for limited access. We reserve the right to modify or suspend access to the API at any time.
If you plan to integrate our service into another application, contact us first for permission and conditions. The LuxASR transcription API base URL is https://luxasr.uni.lu.
Deprecation notice: The old API flow is deprecated and no longer supported. Clients must use the queued /asr2 job flow and send the file as raw bytes in the request body (not multipart/form-data), with Content-Type: audio/* or video/*.
Step A: Submit transcription job
POST /asr2?...params... with the raw file bytes in the request body (the same bytes you would save to disk — not a multipart form upload).
Set Content-Type to a matching audio/* or video/* MIME type (e.g. audio/wav, audio/mpeg, audio/mp4, video/mp4) and optionally X-Filename with the original file name. The server checks that the payload is decodable media with an audio track (same formats as the web upload: wav, mp3, mp2, m4a, mp4, mov, qta, ogg, webm, wmv, wmav2, and other common audio/video containers).
Response: {"job_id":"<id>","status":"queued"}
HTTP: 202
Step B: Poll status
GET /v3/asr/jobs/<job_id> until status is completed or failed.
Status values:
queued
processing
completed
failed
Step C: Fetch transcription result
GET /v3/asr/jobs/<job_id>/result (only after status is completed). For a single outfmt, the response body format matches that parameter. For a comma-separated outfmt list, the response is JSON with one key per format (see below).
Parameter usage
Send parameters as query string (recommended for raw body), e.g.:
language=lb
diarization=Enabled|Disabled (defaults to Enabled)
hesitations=Hide|Keep (defaults to Hide; filled pauses such as ëëë, ËË, äh, ähm)
outfmt=colored_text|text|srt|vtt|maxqda|json|textgrid|textgrid_aligned|ipa (one format, or several separated by commas)
beam_size=5
min_silence_duration_ms=2000
maxlen=42 (for SRT and VTT)
prompt=... (optional; see below)
Multiple output formats (outfmt)
The API can return several formats from a single transcription job. Pass a comma-separated list, e.g. outfmt=text,json,srt. Duplicates are ignored; order is preserved. This is API-only — the website form still selects one format. Audio is transcribed once; each requested format is then produced from that same result. maxlen still applies if srt or vtt is included.
When more than one format is requested, GET /v3/asr/jobs/<job_id>/result returns JSON (Content-Type: application/json). Keys are the format names; values are the corresponding transcripts (plain-text formats as strings, json as a JSON value). A warning field is included when applicable. Example:
{
"text": "Moien …",
"json": [ { "start": 0.0, "end": 1.2, "text": "Moien" } ],
"srt": "1\n00:00:00,000 --> 00:00:01,200\nMoien\n"
}
Whisper prompt (prompt)
Optional short hint to improve spelling of uncommon names, brands, and technical terms across the entire recording (not only the opening segment). Keep it under 900 characters; text beyond that limit is ignored. Put the most important words first, use exact spelling and capitalization, and separate items with commas or periods. Example:
Iechternach, Weiswampach, Préizerdaul.
Only include words or phrases that may actually appear in the audio — avoid filler text you would not say aloud, as it can show up in the transcript. URL-encode the value in query strings (spaces as %20, commas as %2C).
Curl examples
A) /asr2 with WAV raw body
curl -X POST "https://luxasr.uni.lu/asr2?language=lb&diarization=Enabled&hesitations=Hide&outfmt=json" \
-H "Content-Type: audio/wav" \
-H "X-Filename: sample.wav" \
--data-binary "@/path/to/sample.wav"
B) /asr2 with MP3 raw body and prompt
curl -X POST "https://luxasr.uni.lu/asr2?language=lb&diarization=Disabled&hesitations=Keep&outfmt=text&prompt=Iechternach%2C%20Weiswampach%2C%20Pr%C3%A9izerdaul." \
-H "Content-Type: audio/mpeg" \
-H "X-Filename: sample.mp3" \
--data-binary "@/path/to/sample.mp3"
C) Poll + fetch
curl -s "https://luxasr.uni.lu/v3/asr/jobs/<job_id>"
curl -s "https://luxasr.uni.lu/v3/asr/jobs/<job_id>/result"
D) /asr2 with several output formats
curl -X POST "https://luxasr.uni.lu/asr2?language=lb&diarization=Enabled&hesitations=Hide&outfmt=text,json,srt" \
-H "Content-Type: audio/wav" \
-H "X-Filename: sample.wav" \
--data-binary "@/path/to/sample.wav"