Voice & transcription

Record → Upload → Transcribe → Retrieve text and captions.

Use the Recorder (or any upload path), enable a Transcription output preset, then read track.transcription and authorize the timed WebVTT output the same way you access other files.

Optional — uses AI Credits

Transcription is not enabled for every upload. Add a Transcription output preset in the dashboard (the public create-preset API only accepts transcode and preview). Successful runs debit AI Credits by audio duration.

1

Record or upload spoken audio

The Recorder captures microphone audio and uploads a track with a Client-Side Upload key (or a server-created upload session):

npm install @audiodn/components
import '@audiodn/components/recorder'
<audiodn-recorder
  api-key="CLIENT-SIDE-UPLOAD-KEY"
  collection-id="COLLECTION-ID"
  accent-color="#ff00ff"
></audiodn-recorder>

Any upload path works — Uploader, Recorder, or the REST API.

2

Enable a Transcription output preset

A Transcription preset (transcribe) runs speech-to-text. Configure it once for the organization:

  • Language — leave empty for auto-detect, or pin a language on the preset
  • Speaker labels — optional via the preset’s diarization setting
  • Required — defaults off, so playback can become ready before transcription finishes

Failed runs leave transcription and transcription_language as null. Overview: Output Presets → Transcription.

3

Read the plain-text transcript

After the preset succeeds, GET /v1/track/:track_id includes read-only transcription (plain-text paragraphs) and transcription_language (BCP-47, for example en). Both stay null until a successful run. The Track Processing webhook includes the same fields on the nested track object; the Output webhook does not.

const res = await fetch(`https://api.audiodelivery.net/v1/track/${track_id}`, {
headers: { Authorization: 'Bearer YOUR_API_ACCESS_KEY' },
});
const { track } = await res.json();

console.log(track.transcription);
console.log(track.transcription_language);
4

Access the WebVTT caption file

The same preset also stores a timed .vtt file as a normal track output (default delivery index transcript). It is not inlined on GET /v1/track/:id. Authorize it like any other output — typically a play session that includes the caption index in variants:

const response = await fetch('https://api.audiodelivery.net/v1/play_session/track', {
method: 'POST',
headers: {
  Authorization: 'Bearer YOUR_API_ACCESS_KEY',
  'Content-Type': 'application/json',
},
body: JSON.stringify({
  track_id: 'TRACK-ID',
  variants: ['hq', 'transcript'],
  expires_in: 3600,
}),
});

const { first_track } = await response.json();
const vtt = first_track.variants.find(
(entry) => entry.variant?.index === 'transcript'
);
// vtt.url — time-limited signed URL for the .vtt file

Track text vs caption file

track.transcription is the full plain-text transcript. The WebVTT output is a separate caption file with cue timing. The AudioDN Player does not render captions yet — that is on the roadmap.

Illustrative WebVTT shape:

WEBVTT

00:00:00.000 --> 00:00:04.200
Welcome to today's episode.

00:00:04.500 --> 00:00:08.000
We are talking about audio delivery.
5

Know when each piece is ready

Playback-ready

Track status reaches ready when a required playable audio output succeeds. Transcription is usually still optional at that point.

Plain-text transcript

Present on the track once the preset succeeds, or via a Track Processing webhook.

VTT file

Reported by the Outputs webhook for the transcript index, or visible under that track’s processing outputs.

All outputs finished

The track’s files-completed timestamp is set when every configured preset has been attempted.

Related references