# Audio Studio API

Source: https://dev.arcxp.com/audio-center/developer-docs/audio-studio-api/

Create and manage studio audio in Audio Center: Host Reads (text-to-speech), uploads, and loudness normalization.

**API Reference:** [View the complete Arc XP Audio API specification](https://dev.arcxp.com/api/content-administration/audio-api/)

The **Audio Studio** API produces _studio audio_: working pieces of audio such as **Host Reads**. This guide covers the generally available Studio operations: managing studio audio records, creating Host Reads (including using text-to-speech), uploading audio, and loudness normalization. It uses the same base URL and authentication as the rest of the [Audio Center API](https://dev.arcxp.com/audio-center/developer-docs/arc-audio-api-developer-guide/); see the specification for exhaustive request and response fields.

> **Note:**
> 
> Studio editing operations (snip, stitch, and host-read insertion) are coming soon and are not yet documented here.

## Studio audio records

Manage studio audio records under `/studio`:

Terminal window

```bash
# List studio audio
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/studio/

# Get one
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/studio/{studio_audio_id}

# Delete one
curl -X DELETE https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/studio/{studio_audio_id} \
  -H "Authorization: Bearer YOUR_API_TOKEN"
```

Each record has a `purpose` (`host_read` or `general`) and follows the same `processing_status` lifecycle as audio clips. Records created through [Host Reads](#host-reads-text-to-speech) default to `host_read`; records created any other way (including through normalization) default to `general`.

## Host Reads (text-to-speech)

Create a Host Read from text in a single request. Provide `input_text` (up to 30,000 characters) and `voice_id`; `name`, `purpose`, and per-request `pronunciation_ids` are optional.

Terminal window

```bash
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/studio/tts \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Segment intro",
    "input_text": "The text to be narrated.",
    "voice_id": "voice_abc123"
  }'
```

Retrieve available voices and preview them exactly as for clip text-to-speech (TTS); see [Text-to-Speech](https://dev.arcxp.com/audio-center/tutorials/text-to-speech/) for voices (`/settings/voices`), previews (`/tts/preview`), and pronunciation dictionaries. Generation is asynchronous: include `Accept: text/event-stream` to receive server-sent events (SSE) progress, or omit it for a `202 Accepted`.

## Upload studio audio

To upload audio you already have instead of generating it, create a studio audio record, then request a presigned URL and upload the bytes directly to it:

Terminal window

```bash
curl -X POST "https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/studio/{studio_audio_id}/upload/presigned?file_name=host-read.mp3" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
```

The response includes an `upload_url` and a `notification_url`. Upload the bytes to the `upload_url` with a `PUT`, then subscribe to the `notification_url` for processing progress, the same presigned flow used for clips.

## Loudness normalization

Normalization targets default to podcast-friendly values (`lufs` \-16.0, `true_peak` \-1.5 dBTP, `loudness_range` 11.0 LU); all are optional.

### Normalize a clip or episode in place

Loudness-normalizes the source’s audio in place. Include `Accept: text/event-stream` for SSE progress, or omit it for a `202 Accepted`.

Terminal window

```bash
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/{audio_id}/normalize \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "lufs": -16.0, "true_peak": -1.5, "loudness_range": 11.0 }'
```

For episodes, use `POST /podcasts/{podcast_id}/episodes/{episode_guid}/normalize`.

> **Caution:**
> 
> In-place normalization is **irreversible**: it overwrites the source’s original master, re-encodes the delivery rendition, and re-publishes it if the item is currently published.

### Normalize into a new studio audio

To normalize without altering the source, create a new studio audio from it. Provide the `source_id` (and `episode_guid` if the source is a podcast episode); `use_original` defaults to `true`.

Terminal window

```bash
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/studio/mix/normalize \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "source_id": "AUDIO_ID", "use_original": true, "lufs": -16.0 }'
```

Returns `201 Created` with a `Location` header pointing at the new studio audio record.
