Creating a Podcast
This tutorial walks through creating a podcast, adding episodes, uploading audio, and publishing — all via the Arc XP Audio API.
For background on Apple’s podcast RSS requirements, see the Apple Podcasters RSS requirements.
Prerequisites
- An Arc XP API token (see the Developer Center).
- Podcast artwork in JPEG or PNG format, between 1400×1400 and 3000×3000 pixels (see Apple's artwork requirements).
1. Choose a Category
Podcast categories follow Apple’s iTunes taxonomy. You can retrieve the full list of supported categories and subcategories from the API:
curl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/meta/podcasts/categoriesEach podcast requires 1–2 categories. For the full list of categories and their meanings, see Apple Podcasts categories.
2. Create the Podcast
Create a podcast by providing channel metadata. This establishes the podcast’s RSS feed identity.
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 Tech Podcast", "description": "Weekly discussions about emerging technology trends.", "language": "en", "link": "https://example.com/my-tech-podcast", "copyright": "© 2026 Example Corp", "image": { "href": "https://example.com/podcast-artwork.jpg" }, "type": "episodic", "categories": [ { "text": "Technology" } ], "explicit": "false", "author": "Example Corp", "owner": { "name": "Jane Doe", "email": "jane@example.com" } }, "tags": ["technology", "weekly"] }'The API returns 201 Created with the podcast ID in the response body and a Location header pointing to the new resource.
Channel Fields Reference
| Field | Required | Description |
|---|---|---|
title | Yes | Podcast title (min 3 characters). Used in search and display. |
description | Yes | Show description (max 4000 characters). Supports plain text or HTML. |
image | Yes | Artwork URL. Must be JPEG or PNG, 1400×1400 to 3000×3000 px. |
categories | Yes | 1–2 iTunes categories (use the /meta/podcasts/categories endpoint). |
language | No | ISO 639 language code. Defaults to "en". |
type | No | "episodic" (default) or "serial". See Apple's episode type docs. |
explicit | No | "true" or "false". Defaults to "false". |
author | No | Show author or network name. |
owner | No | Contact name and email for the feed owner. |
link | No | URL of the podcast’s website. |
copyright | No | Copyright notice. |
3. Create an Episode
With your podcast_id, create an episode by providing its metadata:
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.", "explicit": "false", "episode_type": "full", "episode": 1, "season": 1 }'The API returns 201 Created with a Location header containing the new episode’s URL, which includes its GUID.
Episode Fields Reference
| Field | Required | Description |
|---|---|---|
title | Yes | Episode title (3–500 characters). |
description | Yes | Episode description (3–4000 characters). Supports plain text or HTML. |
enclosure | No | Audio file metadata (url, length, type). Populated automatically on upload. |
pubDate | No | RFC 2822 publish date. Defaults to current time. |
link | No | URL of the episode’s web page. |
explicit | No | "true" or "false". |
duration | No | Duration in seconds. |
image | No | Episode-specific artwork URL. |
episode | No | Episode number. Required if season is set. |
episode_type | No | "full" (default), "trailer", or "bonus". |
season | No | Season number. |
block | No | Set to "Yes" to prevent this episode from appearing in Apple Podcasts. |
4. Upload Episode Audio
Upload an audio file to the episode. Supported formats include WAV, MP3, FLAC, M4A, and MP4 (see the developer guide for details).
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/episode1.mp3"Monitoring Progress with SSE
To receive real-time processing updates, include the Accept: text/event-stream header:
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" \ -H "Accept: text/event-stream" \ -F "file=@/path/to/episode1.mp3"The stream emits progress notifications such as encoding_started, encoding_analyzing, and encoding_complete (or encoding_failed).
Presigned URL Upload
For browser-based uploads, you can get a presigned URL for direct upload to S3:
curl -X POST "https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}/upload/presigned?file_name=episode1.mp3" \ -H "Authorization: Bearer YOUR_API_TOKEN"The response includes an upload_url for the client to upload to directly, and a notification_url for subscribing to 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/episode1.mp3After the upload completes, subscribe to the notification_url or retrieve the episode record to monitor processing status.
5. Publish the Episode
Once the episode’s audio is in READY state, publish it:
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"Returns 202 Accepted. Publishing the episode also makes the podcast’s RSS feed available publicly, and the newly published episode will appear in that feed once publishing completes.
6. Optionally Publish the Podcast Record
You do not need this step to make the RSS feed public if you have already published an episode. Publishing an episode automatically creates and publishes the podcast’s RSS feed with only the episodes that are individually published.
Publish the podcast record directly only if you want to explicitly publish the show metadata itself:
curl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/publish \ -H "Authorization: Bearer YOUR_API_TOKEN"Returns 202 Accepted. In most workflows, publishing an episode is sufficient before you submit the RSS feed URL to directories like Apple Podcasts and Spotify.
Managing Your Podcast
Update Podcast Metadata
Use PATCH to update specific fields, or PUT to replace the entire podcast record:
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": "My Tech Podcast - Season 2", "description": "Updated description for the new season.", "image": { "href": "https://example.com/new-artwork.jpg" }, "categories": [{ "text": "Technology" }] } }'Returns 204 No Content on success.
Unpublish Content
To remove a podcast or episode from public availability:
# Unpublish a single episodecurl -X POST https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}/unpublish \ -H "Authorization: Bearer YOUR_API_TOKEN"
# Unpublish the entire podcastcurl -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"Returns 204 No Content. Associated audio binaries will be marked for removal and permanently purged within 30 days.
List and Retrieve Podcasts
# List all podcastscurl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/
# Get a specific podcastcurl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}
# List all episodes for a podcastcurl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes
# Get a specific episodecurl -H "Authorization: Bearer YOUR_API_TOKEN" \ https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes/{episode_guid}Filtering Podcasts
You can filter the podcast list using query parameters:
include_tags/exclude_tags: Filter by tagssites: Filter by site IDs- Date filters:
created_after,created_before,updated_after,updated_before
Extra Info
- Podcasts must have at least one episode in order for the major podcast players to accept the feed.
- Publishing an episode will also implicitly trigger a podcast’s feed to be published. For example, if your podcast has two episodes: 1 and 2, both unpublished; publishing episode 1 will trigger the podcast RSS feed to also become published, with only episode 1. Episode 2 will remain unpublished.