# Voice & transcription | Docs AudioDN

> Record spoken audio, enable transcription, and retrieve plain-text transcripts and WebVTT captions.

Source: https://audiodeliverynetwork.com/fr/docs/guides/voice/

---

# 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](/pricing) by audio duration.

1

#### Record or upload spoken audio

The [Recorder](/docs/components/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](/docs/integration/rest).

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](/docs/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](/docs/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

-   [Recorder component](/docs/components/recorder)
-   [Output Presets — Transcription](/docs/output-presets#transcription)
-   [Tracks API](/docs/api/tracks)
-   [Track Processing webhook](/docs/webhooks/track-processing)
-   [Outputs webhook](/docs/webhooks/outputs)
-   [Core Concepts](/docs/concepts)
