API reference
Speech to text (Audio Transcriptions)
Parameters, request and response examples for POST /v1/audio/transcriptions — upload audio and get text back for meeting notes, call-center QA and video subtitles. multipart/form-data, same format as the OpenAI transcription API. Requests are relayed as-is.
POST /v1/audio/transcriptions takes an audio file and returns the recognized text, either plain or as timed SRT or VTT subtitles. Common uses are meeting notes, call-center quality checks and video subtitles. The file is uploaded as multipart/form-data in the same format as the OpenAI transcription API, and the request is relayed to the model service as-is.
https://open.tutujin.com/v1/audio/transcriptionsHeaders
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer sk-..., an API key from the console |
Content-Type | Yes | multipart/form-data. SDKs and curl -F set it for you; do not write it by hand |
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
file | file | Yes | Audio file, usually mp3, mp4, mpeg, mpga, m4a, wav or webm. Each file has a size limit, so split long recordings |
model | string | Yes | Model name, e.g. whisper-1 |
language | string | No | Audio language as an ISO-639-1 code such as zh or en. Setting it usually improves accuracy and speed |
prompt | string | No | Hint text: product names, people's names or the end of the previous segment, to keep wording consistent |
response_format | string | No | json (default), text, srt, vtt, verbose_json |
temperature | number | No | 0 to 1, default 0. Usually leave it at the default |
timestamp_granularities[] | array | No | segment or word, used with verbose_json to return segment or word timestamps |
Request example
curl https://open.tutujin.com/v1/audio/transcriptions \
-H "Authorization: Bearer $TUTUJIN_API_KEY" \
-F file=@meeting.mp3 \
-F model="whisper-1" \
-F language=en \
-F prompt="Tutujin, quarterly review, customer success"import os
from openai import OpenAI
client = OpenAI(base_url="https://open.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"], timeout=300)
with open("meeting.mp3", "rb") as f:
result = client.audio.transcriptions.create(
model="whisper-1",
file=f,
language="en",
prompt="Tutujin, quarterly review, customer success",
)
print(result.text)import fs from 'node:fs'
import OpenAI from 'openai'
const client = new OpenAI({ baseURL: 'https://open.tutujin.com/v1', apiKey: process.env.TUTUJIN_API_KEY, timeout: 300_000 })
const result = await client.audio.transcriptions.create({
model: 'whisper-1',
file: fs.createReadStream('meeting.mp3'),
language: 'en',
prompt: 'Tutujin, quarterly review, customer success',
})
console.log(result.text)Response example
With response_format set to json:
{
"text": "Let's start with this quarter's customer success metrics..."
}With srt you get subtitle text you can save straight to an .srt file:
1
00:00:00,000 --> 00:00:03,200
Let's start with this quarter's customer success metrics
2
00:00:03,200 --> 00:00:06,900
Overall renewals are up on last quarter| Field | Description |
|---|---|
text | The full recognized text |
segments | With verbose_json: each segment with start, end (seconds) and text |
language | With verbose_json: the language the model detected |
Notes
- This endpoint is relayed as-is and has not been verified separately on this site; test it with a short clip first.
- File extensions must match the real format. Oversized files may be rejected (413); split long recordings into 5 to 10 minute pieces and join the results in order.
- Pass
languagewhen you know it; for mixed-language recordings, leave it out and let the model decide. - If product or people's names come out wrong, put them in
prompt. - Transcription time grows with audio length, so give the client a generous timeout. Billing follows the model's price list; the Usage page in the console is the record.
Models that support this endpoint
| Model | Vendor | Cheapest group | Input ¥/1M | Output ¥/1M | Per request ¥ |
|---|---|---|---|---|---|
| whisper-1 | OpenAI | Standard | ¥60 | ¥60 | — |
Prices in CNY, cheapest group for each model; updated Nov 12, 2026, 8:17 PM.
Still stuck? Add our WeChat support JsnonoChat and send the request id from the error message, and we will look into it.