Skip to content

Audio API Developer Guide

API Reference: View the complete Arc XP Audio API specification

Introduction

The Arc XP Audio API provides management, processing, and delivery tools for audio content.

  • Audio file upload and processing
  • Audio playlist management
  • Podcast and episode management with RSS feed generation
  • Text-to-speech audio generation
  • Full-text search across all content types
  • Metadata management and organization
  • Real-time notifications for audio processing status
  • Waveform data for visualization

Using the API

If you are brand new to the Arc XP Audio API and looking for a quick start, check out the tutorials for creating an audio clip, creating a podcast, creating a playlist, text-to-speech, or extracting audio from video.

Base URL Structure

The API endpoint follows this pattern:

https://api.[org].arcpublishing.com/audiocenter/api/editorial

Replace [org] with your organization identifier. Different environments use subdomains:

  • Production: https://api.[org].arcpublishing.com/audiocenter/api/editorial
  • Sandbox: https://api.sandbox.[org].arcpublishing.com/audiocenter/api/editorial

Authentication

All API requests require authentication using a Bearer token in the Authorization header.

Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/

API tokens are retrieved from the Arc Developer Center. Read more about the developer center here.

Audio Types

The API supports three high-level types:

  • Audio Clips: general purpose audio; most use cases will fall under this category.
  • Audio Playlists: a logical collection of audio clips.
  • Podcasts: RSS-based podcast feeds with episodes, following the Apple Podcasts RSS specification.

Supported File Formats

WAVMP3FLACM4AMP4
Only supported for source audio.Common compressed delivery formatLossless compressed audioAAC audio in MP4 containerVideo — audio track is extracted automatically

Common Operations

Audio Clips

List Audio Clips
Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/
Filtering Results

You can filter clips using query parameters:

  • include_tags / exclude_tags: Filter by tags
  • processing_status: Filter by CREATE, PROCESSING, READY, or FAILED
  • publishing_status: Filter by NOT_PUBLISHED, PUBLISHED, SCHEDULED, PENDING, or FAILED
  • sites: Filter by site IDs
  • Date filters: created_after, created_before, updated_after, updated_before
Pagination

The API supports pagination using the max_results query parameter, which defaults to 10 (maximum of 100). For the best performance, we recommend keeping this value at 10. If more results are available, the response body will include a next_page_token field.

To fetch the next page of results, repeat the request with the page_token query parameter set to the value of next_page_token.

Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/?page_token=YOUR_TOKEN&max_results=20"
Get an Audio Clip
Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/{audio_id}
Create an Audio Clip

Creation returns a 201 Created status with the resource URL in the Location header.

Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/ \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "My New Audio Clip",
"description": "A description of the clip",
"tags": ["news"]
}'
Upload Audio File

Upload the binary file to an existing audio clip record.

Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/{audio_id}/upload \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-F "file=@/path/to/your/audio.mp3"
Publish an Audio Clip

Once the audio record is in READY state, it can be published.

Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/{audio_id}/publish \
-H "Authorization: Bearer YOUR_API_TOKEN"
Scheduled Publishing

You can schedule a clip to be published at a future time by providing the schedule_at query parameter with a UTC ISO 8601 timestamp.

Terminal window
curl -X POST "https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/{audio_id}/publish?schedule_at=2025-12-25T12:00:00Z" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Playlists

Playlists are ordered collections of audio clips. For a step-by-step walkthrough, see the playlist tutorial.

List Playlists
Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/playlists/
Create a Playlist

Provide a list of clip IDs with their positions:

Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/playlists/ \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "clip_id": "first_clip_id", "position": 1 },
{ "clip_id": "second_clip_id", "position": 2 }
],
"tags": ["morning-news"]
}'
Update a Playlist

Use PATCH for partial updates or PUT for full replacement:

Terminal window
curl -X PATCH https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/playlists/{playlist_id} \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "clip_id": "second_clip_id", "position": 1 },
{ "clip_id": "first_clip_id", "position": 2 }
]
}'
Delete a Playlist
Terminal window
curl -X DELETE https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/playlists/{playlist_id} \
-H "Authorization: Bearer YOUR_API_TOKEN"

Text-to-Speech

The API can generate spoken audio from text input. For a full walkthrough including voice preview and pronunciation dictionaries, see the text-to-speech tutorial.

List Available Voices
Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/settings/voices
Preview a Voice

Generate a short (~10 second) audio sample without creating a clip record:

Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/tts/preview \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"input_text": "A short sample of this voice.",
"voice_id": "voice_abc123"
}'
Generate an Audio Clip from Text

Creates a new audio clip and starts text-to-speech synthesis in a single request:

Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/clips/tts \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Article Narration",
"input_text": "The full text to be narrated, up to 30,000 characters.",
"voice_id": "voice_abc123"
}'

Like other async operations, include Accept: text/event-stream to receive SSE progress updates.

Podcasts

Podcasts are managed as RSS feeds with episodes. The API handles RSS generation and feed delivery. For a step-by-step walkthrough, see the podcast tutorial.

List Podcasts
Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/
Filtering Results

You can filter podcasts using query parameters:

  • include_tags / exclude_tags: Filter by tags
  • sites: Filter by site IDs
  • Date filters: created_after, created_before, updated_after, updated_before
Get a Podcast
Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}
Create a Podcast

Provide channel metadata that defines the podcast’s RSS feed identity. At minimum, you must supply a title, description, image, and at least one iTunes category.

Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/ \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": {
"title": "My Podcast",
"description": "A podcast about interesting topics.",
"image": { "href": "https://example.com/artwork.jpg" },
"categories": [{ "text": "Technology" }]
}
}'

You can retrieve the full list of supported categories from the categories endpoint:

Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/meta/podcasts/categories
Update a Podcast

Use PATCH for partial updates or PUT for full replacement:

Terminal window
curl -X PATCH https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id} \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channel": {
"title": "Updated Podcast Title",
"description": "Updated description.",
"image": { "href": "https://example.com/artwork.jpg" },
"categories": [{ "text": "Technology" }]
}
}'
Publish / Unpublish a Podcast

Publishing makes the podcast’s RSS feed available on the public internet. Once published, the feed URL can be submitted to directories like Apple Podcasts and Spotify.

Terminal window
# Publish
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/publish \
-H "Authorization: Bearer YOUR_API_TOKEN"
# Unpublish
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/unpublish \
-H "Authorization: Bearer YOUR_API_TOKEN"
Delete a Podcast
Terminal window
curl -X DELETE https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id} \
-H "Authorization: Bearer YOUR_API_TOKEN"
Episodes

Episodes are nested under a podcast. Each episode has its own audio upload, processing lifecycle, and publish state.

Create an Episode
Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Episode 1: Getting Started",
"description": "In this episode we cover the basics."
}'
Upload Episode Audio
Terminal window
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}/upload \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-F "file=@/path/to/episode.mp3"

Like audio clips, you can include Accept: text/event-stream to receive SSE processing updates, or use the presigned URL endpoint for browser-based uploads:

Terminal window
curl -X POST "https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}/upload/presigned?file_name=episode.mp3" \
-H "Authorization: Bearer YOUR_API_TOKEN"

The response includes an upload_url for direct upload and a notification_url for processing updates.

Upload the file bytes to the returned presigned URL as a second step:

Terminal window
curl -X PUT "PRESIGNED_UPLOAD_URL" \
-H "Content-Type: audio/mpeg" \
--upload-file /path/to/episode.mp3

After the upload completes, subscribe to the notification_url or retrieve the episode record to monitor processing status.

Publish / Unpublish an Episode

Publishing an episode automatically publishes the podcast’s RSS feed as well. Only individually published episodes are included in the feed — publishing one episode will never cause unpublished episodes to appear. The feed will be created with only the episodes you have published.

Terminal window
# Publish
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}/publish \
-H "Authorization: Bearer YOUR_API_TOKEN"
# Unpublish
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}/unpublish \
-H "Authorization: Bearer YOUR_API_TOKEN"

Settings

Organization-level settings control how audio is encoded and delivered. Use the settings endpoint to view and customize encoding profiles for your tenant.

Get Settings
Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/settings/

Returns the current encoding profiles and text-to-speech settings for your organization.

Encoding Profiles

Encoding profiles control which audio format is produced when you upload audio. Profiles can be configured independently for audio clips and podcast episodes.

ProfileCodecBitrateOutput FormatDescription
aac-standardAAC128 kbps.m4aDefault. Good balance of quality and file size.
aac-qualityAAC256 kbps.m4aHigher quality AAC for premium content.
mp3-standardMP3128 kbps.mp3Standard MP3 for broad compatibility.
flacFLACLossless.flacLossless compression. Not available for podcasts.

Both audio_clip and podcast default to aac-standard.

Update Encoding Profiles

Use PATCH to update one or both encoding profiles:

Terminal window
curl -X PATCH https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/settings/ \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"encoding_profiles": {
"audio_clip": "aac-quality",
"podcast": "mp3-standard"
}
}'

The response confirms the updated settings:

{
"encoding_profiles": {
"audio_clip": "aac-quality",
"podcast": "mp3-standard"
},
"tts_settings": { ... }
}

The API provides full-text search across audio clips, playlists, and podcasts.

Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/search/?text=breaking+news"
Filtering by Content Type

By default, search returns all content types you have permission to view. To restrict results to specific types, use the content_types parameter:

Terminal window
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
"https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/search/?text=interview&content_types=AudioClip&content_types=Podcast"

Supported values: AudioClip, AudioPlaylist, Podcast.

Additional Filters

Search supports the same filtering parameters as the list endpoints:

  • include_tags / exclude_tags: Filter by tags
  • sites: Filter by site IDs
  • Date filters: created_after, created_before, updated_after, updated_before

Search results also support pagination via max_results and page_token.

API Concepts

Operation Conventions

Creation

  • Creation operations return a 201 response including the ID of the new resource, and a Location header pointing to the new resource.
  • Upload operations can be made to return an SSE stream by supplying Accept: text/event-stream header.

Reading

  • Get-many operations return up to max_results items and a continuation token (if applicable). The continuation token will not preserve filters, so be sure to reuse filters for consistent results.

Destruction

  • Binaries associated with a deleted record will be marked for removal. An async process will permanently purge these binaries within 30 days. If you need a binary to be recovered, please contact support. We do not guarantee binary recovery.

Date/Time Conventions

All date and time values in the Audio API must include ISO 8601 timezone information.

For example, 2025-12-25T12:00:00Z represents December 25, 2025, at 12:00 UTC.

When the API returns a date/time value, it will be in UTC.

Examples

new Date().toISOString();
datetime.now(UTC).isoformat()

Metadata

Audio clip and podcast tags are not currently synchronized with the Arc XP Tags API. For the moment these tags are used for filtering and organization purposes.

Renditions

Each audio record can have a set of “renditions” associated with it. All Audio API users will have access to the standard AAC-encoded rendition, as well as the “source” rendition (the original audio file).

The format of the delivery rendition is determined by your organization’s encoding profile. By default, audio is encoded as AAC at 128 kbps (aac-standard).

Audio Lifecycle

Audio records have two lifecycle states:

  • processing status
  • publishing status

Processing State

An audio record with no attached binary is considered to be in a CREATE state. After adding an audio binary, the API will transition the record to PROCESSING. Once the API has finished preparing the audio data for delivery, the record will transition to READY. Note that waveform data will not be available until the audio record is in a READY state.

If the API encounters an error during processing, the record will transition to FAILED state.

Processing Notifications via Server-Sent Events

If the upload endpoint was called with Accept: text/event-stream, instead of immediately returning a JSON response, the API will stream Server-Sent Events (SSE) with progress notifications as the audio is processed.

These are workflow-level notifications, distinct from the stored processing status on the record. The notifications include:

  • encoding_started: Encoding has begun.
  • encoding_analyzing: Audio analysis is in progress.
  • encoding_complete: Encoding finished successfully.
  • encoding_failed: An error occurred during encoding.

For text-to-speech operations, additional notifications are emitted:

  • tts_started, tts_analyzing_text_complete, tts_generating_speech, tts_generating_speech_complete, tts_failed

Publishing State

Only audio records in the READY processing state can be published.

Audio that has not been published is marked as NOT_PUBLISHED. Audio that has been published is marked as PUBLISHED. If the audio record is scheduled to be published in the future, it will be marked as SCHEDULED. If the record is currently in the process of being published, it will be marked as PENDING.

If the API encounters an error during publishing, the record will transition to FAILED state.

Scheduled Publishing

As detailed in the common operations section, audio publishing can be scheduled ahead of time. Generally, we place no restriction on how far in the future a schedule can be set, but we recommend keeping it within a month.

Waveforms

Audio API provides binned and quantized representations of the audio file’s sonic data. Typically, these are binned to 100 units and quantized to int16; avoid using this data for high-fidelity edit or analysis operations.

This waveform data is intended for visualization tools, such as the Arc XP Audio Player. We do not guarantee the schema of this data.