Skip to content

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

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:

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

Each 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.

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 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

FieldRequiredDescription
titleYesPodcast title (min 3 characters). Used in search and display.
descriptionYesShow description (max 4000 characters). Supports plain text or HTML.
imageYesArtwork URL. Must be JPEG or PNG, 1400×1400 to 3000×3000 px.
categoriesYes1–2 iTunes categories (use the /meta/podcasts/categories endpoint).
languageNoISO 639 language code. Defaults to "en".
typeNo"episodic" (default) or "serial". See Apple's episode type docs.
explicitNo"true" or "false". Defaults to "false".
authorNoShow author or network name.
ownerNoContact name and email for the feed owner.
linkNoURL of the podcast’s website.
copyrightNoCopyright notice.

3. Create an Episode

With your podcast_id, create an episode by providing its metadata:

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.",
"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

FieldRequiredDescription
titleYesEpisode title (3–500 characters).
descriptionYesEpisode description (3–4000 characters). Supports plain text or HTML.
enclosureNoAudio file metadata (url, length, type). Populated automatically on upload.
pubDateNoRFC 2822 publish date. Defaults to current time.
linkNoURL of the episode’s web page.
explicitNo"true" or "false".
durationNoDuration in seconds.
imageNoEpisode-specific artwork URL.
episodeNoEpisode number. Required if season is set.
episode_typeNo"full" (default), "trailer", or "bonus".
seasonNoSeason number.
blockNoSet 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).

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/episode1.mp3"

Monitoring Progress with SSE

To receive real-time processing updates, include the Accept: text/event-stream header:

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" \
-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:

Terminal window
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:

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

After 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:

Terminal window
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:

Terminal window
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:

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": "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:

Terminal window
# Unpublish a single episode
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"
# Unpublish the entire podcast
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"

Returns 204 No Content. Associated audio binaries will be marked for removal and permanently purged within 30 days.

List and Retrieve Podcasts

Terminal window
# List all podcasts
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/
# Get a specific podcast
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}
# List all episodes for a podcast
curl -H "Authorization: Bearer YOUR_API_TOKEN" \
https://api.[org].arcpublishing.com/audiocenter/api/editorial/v1/podcasts/{podcast_id}/episodes
# Get a specific episode
curl -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 tags
  • sites: 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.