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/editorialReplace [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.
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
| WAV | MP3 | FLAC | M4A | MP4 |
|---|---|---|---|---|
| Only supported for source audio. | Common compressed delivery format | Lossless compressed audio | AAC audio in MP4 container | Video — audio track is extracted automatically |
Common Operations
Audio Clips
List Audio Clips
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 tagsprocessing_status: Filter byCREATE,PROCESSING,READY, orFAILEDpublishing_status: Filter byNOT_PUBLISHED,PUBLISHED,SCHEDULED,PENDING, orFAILEDsites: 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.
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
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.
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.
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.
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.
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
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:
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:
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
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
curl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/settings/voicesPreview a Voice
Generate a short (~10 second) audio sample without creating a clip record:
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:
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
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 tagssites: Filter by site IDs- Date filters:
created_after,created_before,updated_after,updated_before
Get a Podcast
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.
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:
curl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/meta/podcasts/categoriesUpdate a Podcast
Use PATCH for partial updates or PUT for full replacement:
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.
# Publishcurl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/publish \ -H "Authorization: Bearer YOUR_API_TOKEN"
# Unpublishcurl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/unpublish \ -H "Authorization: Bearer YOUR_API_TOKEN"Delete a Podcast
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
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
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:
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:
curl -X PUT "PRESIGNED_UPLOAD_URL" \ -H "Content-Type: audio/mpeg" \ --upload-file /path/to/episode.mp3After 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.
# Publishcurl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}/publish \ -H "Authorization: Bearer YOUR_API_TOKEN"
# Unpublishcurl -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
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.
| Profile | Codec | Bitrate | Output Format | Description |
|---|---|---|---|---|
aac-standard | AAC | 128 kbps | .m4a | Default. Good balance of quality and file size. |
aac-quality | AAC | 256 kbps | .m4a | Higher quality AAC for premium content. |
mp3-standard | MP3 | 128 kbps | .mp3 | Standard MP3 for broad compatibility. |
flac | FLAC | Lossless | .flac | Lossless 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:
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": { ... }}Search
The API provides full-text search across audio clips, playlists, and podcasts.
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:
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 tagssites: 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
Locationheader pointing to the new resource. - Upload operations can be made to return an SSE stream by supplying
Accept: text/event-streamheader.
Reading
- Get-many operations return up to
max_resultsitems 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.