APIMODELSAPIMODELS
APIドキュメント

apimodels.app

Nemotron 3.5 Transcribe API reference

Nemotron 3.5 Transcribe is NVIDIA's open-weight speech model, released on 28 October 2026, for turning recorded audio or video into text: 40 languages with automatic language detection, optional word-level timestamps and speaker labels (up to 8 speakers), and translation to or from English for 31 languages. On APIMODELS it is one model id, nemotron-3.5-transcribe, on the audio task endpoint. One request takes up to 60 minutes and 200 MB; the result is text plus a full result JSON file, not an audio file. $0.0025 per minute of audio, prorated by the second.

Pricing

Audio lengthPrice
Per minute ($0.15 per hour, prorated by the second)$0.0025
47 s$0.002
1 minute$0.0025
10 minutes$0.025
30 minutes$0.075
60 minutes (maximum per request)$0.15

Amount = audio length (rounded up to the whole second) ÷ 60 × $0.0025, with the length measured by us when the task is created. Timestamps, speaker labels and translation cost nothing extra. Amounts are in units of $0.0001, so anything smaller is billed $0.0001 (audio of about 2 seconds or less). A request whose audio length cannot be read returns a 400 with no charge, and failed tasks are not charged.

Authentication

All requests carry the API key in the header:

Authorization: Bearer YOUR_API_KEY

Create a task and poll it

POSThttps://api.apimodels.app/v1/audio/generations·GET/v1/audio/generations?task_id=
# Nemotron 3.5 Transcribe — speech to text. audio_url is the only required input.
# timestamps: true adds word-level times and speaker labels to the full result file.
# Billed $0.0025 per minute of audio, prorated by the second.
curl -X POST https://api.apimodels.app/v1/audio/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nemotron-3.5-transcribe",
    "audio_url": "https://example.com/meeting.mp3",
    "timestamps": true
  }'

# Response (async — a task is created):
# { "code": 200, "msg": "success", "data": { "taskId": "clxxx", "state": "pending",
#     "model": "nemotron-3.5-transcribe", "reservedCredits": 0.025, "currency": "USD" } }

# Poll every few seconds until completed
curl "https://api.apimodels.app/v1/audio/generations?task_id=TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
# { "code": 200, "data": { "state": "completed",
#     "resultUrls": ["https://r2.apimodels.app/transcripts/clxxx.json"],
#     "resultJson": "{\"text\":\"Thanks for joining...\",\"duration\":600.2,\"transcript_url\":\"https://r2.apimodels.app/transcripts/clxxx.json\",\"task\":\"transcribe\"}" } }

A task moves through pending → processing → completed or failed. This is offline transcription of a whole file: there is no realtime streaming and no partial result while it runs. In our own test, a 47-second English recording of two people (timestamps on) came back in about 4 seconds with 143 words, each with start and end times and a speaker label; that is one measurement, not a promise, and longer files take longer. On failed, the reason is in data.failMsg and the charge is returned.

Parameters

FieldRequiredTypeDescription
modelYesstringnemotron-3.5-transcribe (nemotron-3-5-transcribe, nemotron-transcribe and nvidia/nemotron-3-5-transcribe also work)
audio_urlYesstringThe file to transcribe: publicly downloadable audio (MP3, WAV, M4A, AAC, FLAC, OGG, Opus, WebM) or a video with an audio track (MP4, MOV); a data URI is accepted too. Up to 60 minutes and 200 MB per file.
timestampsNobooleanDefault false. When true, the full result file carries word-level start and end times and speaker labels (up to 8 speakers; per character in Chinese). Cannot be combined with target_language.
target_languageNostringTranslates the speech into this language and returns the translation instead of a transcript. One of: en zh ja ko fr de es pt it ru nl pl cs sk hi bg hr da et fi hu lv lt ro sl sv th uk ar el he mt. Only translation to or from English is dependable (another language → English, or English → one of these).
callback_urlNostringWe POST the result to this URL on completion; omit it and poll the GET endpoint instead.

There is no source-language parameter: the language is detected automatically. There is also no prompt, vocabulary or output-format parameter; for SRT or VTT subtitles, request timestamps: true and build the cues from the word times.

Result fields

When the task completes, data.resultJson in the query result and the callback is a JSON string; JSON.parse it once to get the shape below. text is the full transcript (the translation when target_language is set); transcript_url points to the full result JSON, and the same address is in data.resultUrls[0].

// JSON.parse(data.resultJson) on a completed task
{
  "resultUrls": ["https://r2.apimodels.app/transcripts/clxxx.json"],
  "text": "Thanks for joining. Let's start with the roadmap...",   // full transcript, or the translation
  "duration": 47.2,                                                // seconds of audio
  "transcript_url": "https://r2.apimodels.app/transcripts/clxxx.json",
  "task": "transcribe"                                             // or "translate"
  // "silent": true      almost no speech was found; text is empty
  // "truncated": true   the output hit its ceiling, usually repetition; discard or review
}

The full result JSON (transcript_url) looks like this. The last three keys exist only with timestamps: true; for Chinese, words holds one entry per character. Like other result files it is kept for 30 days, so download or re-host it promptly.

// The file at transcript_url (kept 30 days)
{
  "task": "transcribe",
  "duration": 47.2,
  "text": "Thanks for joining. Let's start with the roadmap...",
  // The three keys below are present only with timestamps: true
  "text_with_speakers": "<spk:0> Thanks for joining. <spk:1> Let's start with the roadmap...",
  "words": [
    { "word": "Thanks", "start": 0.32, "end": 0.61, "speaker": "0" },
    { "word": "for", "start": 0.61, "end": 0.74, "speaker": "0" }
  ],
  "diarization": [
    { "speaker": 0, "start": 0.32, "end": 1.83 }
  ]
}

Callback (callback_url)

To skip polling, pass callback_url in the create request. When the task reaches completed or failed we send an HTTP POST (JSON) to it. Failed deliveries are retried with backoff for up to 30 minutes, until your endpoint returns a 2xx. The URL must be publicly reachable; localhost and private addresses return a 400 at create time. Polling keeps working either way.

POST {your callback_url}
Content-Type: application/json

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "clxxx...",
    "model": "nemotron-3.5-transcribe",
    "state": "completed",                 // or "failed"
    "param": "<JSON string>",             // your request, JSON.parse once
    "resultJson": "<JSON string> | null", // {"text": "...", "duration": 47.2, "transcript_url": "https://...json"}, JSON.parse once
    "failCode": null,
    "failMsg": null
  }
}

Supported languages

  • Transcription (40, detected automatically) — English, Mandarin Chinese, Japanese, Korean, French, German, Spanish, Portuguese, Italian, Russian, Dutch, Polish, Czech, Slovak, Hindi, Bulgarian, Croatian, Danish, Estonian, Finnish, Hungarian, Latvian, Lithuanian, Romanian, Slovenian, Swedish, Thai, Turkish, Ukrainian, Arabic, Bengali, Greek, Hebrew, Indonesian, Maltese, Marathi, Tagalog, Tamil, Telugu, Vietnamese.
  • Translation (target_language, 32 codes) — en zh ja ko fr de es pt it ru nl pl cs sk hi bg hr da et fi hu lv lt ro sl sv th uk ar el he mt. Only translation to or from English is dependable; direct translation between two non-English languages is not guaranteed.

Limits

  • Offline transcription of a whole file; realtime streaming is not supported.
  • Up to 60 minutes and 200 MB per request; split longer recordings and submit the parts separately.
  • Timestamps (timestamps: true) and translation (target_language) cannot be combined; that request returns a 400.
  • Speaker labels tell apart up to 8 speakers; speakers with similar voices can be merged into one.
  • Word end times are usually within tens of milliseconds; start times can be off by about half a second, more noticeably in English.
  • Running the same audio twice can change a few words.
  • In Chinese output, foreign names are often transliterated and some numbers are written as Chinese characters.
  • silent: true means almost no speech was found and text is empty; truncated: true means the output hit its ceiling (usually repetition) and should be discarded or reviewed.

Errors

Parameter problems come back synchronously as a 400 at creation ({"code": 400, "msg": "..."}): no task is created and nothing is charged. The msg strings below are the current wording (N is the actual number).

msgCause / fix
audio_url is required for transcriptionaudio_url was not sent.
timestamps must be true or falsetimestamps was sent as a string or number; only a boolean is accepted.
target_language must be one of en, zh, ja, …target_language is not one of the 32 translation codes (Vietnamese, vi, for example, can be transcribed but is not a translation target).
timestamps and target_language cannot be combined: word timestamps and speaker labels are only available for transcription, not translationtimestamps: true and target_language were sent together. Pick one: timestamps and speakers for a transcript, or a translation without timestamps.
Unable to read the audio duration — provide a publicly reachable audio file, or a video that has an audio trackWe could not read the audio length: the link needs a login, has expired, or the file has no audio track. Use a link anyone can download directly.
audio is N minutes long — the limit is 60 minutes per request; split it and submit the parts separatelyThe audio is longer than 60 minutes. Split it and submit the parts separately.

Failures during processing end in state: failed with the reason in data.failMsg, and the charge is returned automatically. The common ones:

failMsgCause
The audio could not be downloaded. Make sure audio_url is publicly reachable without login and does not expire within a few minutes.The file could not be downloaded during processing: the link needs a login, or is a temporary link that expires within minutes.
No audio could be decoded from this file. Supported: mp3, wav, m4a / aac, flac, ogg / opus, webm, or an mp4 / mov video with an audio track.No audio could be decoded: the format is not supported, or the video has no audio track.
The audio file is larger than 200 MB. Compress it or split it and submit the parts separately.The file is larger than 200 MB. Compress it, or split it and submit the parts separately.
The audio is longer than 60 minutes. Split it and submit the parts separately.The decoded audio is longer than 60 minutes.
  • 401: the API key is missing or invalid.
  • 402: the balance does not cover this audio.

Notes

  • audio_url must be an address anyone can download directly; links behind a login and temporary links that expire within minutes make the task fail.
  • The result file (transcript_url) is deleted after 30 days, so download or re-host it promptly.
  • Only upload recordings you have the right to process.

Try it in the Playground. Use cases, worked price examples and FAQs are on the Nemotron 3.5 Transcribe model page.

Sources

Model facts (release date, supported languages, speaker count) and benchmark numbers come from NVIDIA's own publications. On the word error rates in NVIDIA's Technical Report (WER, lower is better; not measured by us), Nemotron 3.5 Transcribe against Whisper-large-v3: 4.71% vs 6.66% on the Open ASR average of 9 English test sets, 10.98% vs 13.92% on long-form audio (Earnings21/22 and CORAAL average), 7.81% vs 13.63% on AMI meeting recordings, and 4.62% vs 7.94% averaged over 7 languages.

Related

FAQ

How much does the Nemotron 3.5 Transcribe API cost?

$0.0025 per minute of audio ($0.15 per hour), prorated on the audio length rounded up to the whole second: 10 minutes is $0.025 and 60 minutes $0.15. Timestamps, speaker labels and translation cost nothing extra, and failed tasks are not charged.

Which fields does a Nemotron 3.5 Transcribe request need?

model (nemotron-3.5-transcribe) and audio_url, a publicly downloadable audio or video file or a data URI. timestamps (default false), target_language and callback_url are optional. There is no source-language field: the language is detected automatically.

Where is the transcript in the Nemotron 3.5 Transcribe response?

Poll GET /v1/audio/generations?task_id= until state is completed, then JSON.parse data.resultJson once: text is the full transcript, duration the audio length in seconds, and transcript_url (also data.resultUrls[0]) the full result JSON, kept for 30 days.

Can I use timestamps and translation together?

No. timestamps: true together with target_language returns a 400 before a task is created: word timestamps and speaker labels are available for transcription only.

What are the file limits for Nemotron 3.5 Transcribe?

MP3, WAV, M4A, AAC, FLAC, OGG, Opus or WebM audio, or an MP4 or MOV video with an audio track, up to 60 minutes and 200 MB per request. It transcribes whole files offline; realtime streaming is not supported.