# Podcast

Podcast operations and RSS feeds

## Get iTunes-compatible RSS feed for podcast distribution

> Generates a public RSS feed compatible with Spotify, Apple Music, and other podcast platforms.\
> This endpoint is designed for automated platform distribution - no authentication required.\
> \
> \*\*Platform Integration:\*\*\
> \- Submit this RSS URL to Spotify for Podcasters, Apple Podcasts Connect\
> \- Platforms automatically pull new episodes as they're added via API\
> \- Supports iTunes namespace for Apple Podcasts compatibility\
> \- Includes proper enclosure tags with audio URLs and metadata\
> \
> \*\*Automation Workflow:\*\*\
> 1\. Create podcast show → Get RSS URL from response\
> 2\. Submit RSS URL to podcast platforms (one-time setup)\
> 3\. Add episodes via API → Platforms automatically discover new content<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"paths":{"/podcast/rss/{podcastId}":{"get":{"summary":"Get iTunes-compatible RSS feed for podcast distribution","description":"Generates a public RSS feed compatible with Spotify, Apple Music, and other podcast platforms.\nThis endpoint is designed for automated platform distribution - no authentication required.\n\n**Platform Integration:**\n- Submit this RSS URL to Spotify for Podcasters, Apple Podcasts Connect\n- Platforms automatically pull new episodes as they're added via API\n- Supports iTunes namespace for Apple Podcasts compatibility\n- Includes proper enclosure tags with audio URLs and metadata\n\n**Automation Workflow:**\n1. Create podcast show → Get RSS URL from response\n2. Submit RSS URL to podcast platforms (one-time setup)\n3. Add episodes via API → Platforms automatically discover new content\n","tags":["Podcast"],"parameters":[{"in":"path","name":"podcastId","required":true,"schema":{"type":"string"},"description":"Podcast show ID to generate RSS feed for"}],"responses":{"200":{"description":"iTunes-compatible RSS XML feed ready for platform submission","content":{"application/xml":{"schema":{"type":"string","description":"RSS 2.0 XML feed with iTunes namespace extensions"}}}},"400":{"description":"Missing or invalid podcast ID","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"500":{"description":"Internal server error during RSS generation"}}}}}}
```

## Get all podcast shows for automated management

> Retrieves all podcast shows with their RSS URLs for platform distribution.\
> Each show includes its RSS feed URL for easy platform integration.\
> Supports optional pagination.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"PodcastShow":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the podcast show"},"name":{"type":"string","description":"Name of the podcast show (displayed on Spotify, Apple Music, etc.)"},"description":{"type":"string","description":"Description of the podcast show (used in platform listings)"},"author":{"type":"string","description":"Author/host name (displayed on podcast platforms)"},"link":{"type":"string","description":"Website link for the podcast show"},"email":{"type":"string","format":"email","description":"Owner email address (used in RSS feed and platform settings)"},"token":{"type":"string","description":"Client token for authentication"},"createdOn":{"type":"string","format":"date-time","description":"Creation timestamp"},"updatedOn":{"type":"string","format":"date-time","description":"Last update timestamp"},"rssUrl":{"type":"string","description":"RSS feed URL for automated distribution to Spotify, Apple Music, and other podcast platforms"}}}}},"paths":{"/podcast/shows":{"get":{"summary":"Get all podcast shows for automated management","description":"Retrieves all podcast shows with their RSS URLs for platform distribution.\nEach show includes its RSS feed URL for easy platform integration.\nSupports optional pagination.\n","tags":["Podcast"],"parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1},"required":false,"description":"Page number for pagination (starts at 1). If not provided, returns all results."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"description":"Number of items per page (max 100, default 50 if page is specified)"}],"responses":{"200":{"description":"List of podcast shows with RSS URLs for platform submission","content":{"application/json":{"schema":{"oneOf":[{"type":"array","description":"Non-paginated response (when page and limit are not provided)","items":{"$ref":"#/components/schemas/PodcastShow"}},{"type":"object","description":"Paginated response (when page or limit are provided)","properties":{"shows":{"type":"array","items":{"$ref":"#/components/schemas/PodcastShow"}},"totalCount":{"type":"integer","description":"Total number of podcast shows"},"page":{"type":"integer","description":"Current page number"},"pageSize":{"type":"integer","description":"Number of items per page"},"totalPages":{"type":"integer","description":"Total number of pages"}}}]}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error"}}}}}}
```

## Create a new podcast show for automated distribution

> Creates a new podcast show and returns the RSS URL for platform submission.\
> \
> \*\*Platform Setup Workflow:\*\*\
> 1\. Create show via this endpoint → Get RSS URL in response\
> 2\. Submit RSS URL to:\
> &#x20;  \- Spotify for Podcasters (<https://podcasters.spotify.com)\\>
> &#x20;  \- Apple Podcasts Connect (<https://podcastsconnect.apple.com)\\>
> &#x20;  \- Google Podcasts Manager\
> &#x20;  \- Other podcast platforms\
> 3\. Start adding episodes via API → Platforms automatically discover new content\
> \
> \*\*Required Metadata:\*\* All major podcast platforms require name, description, author, website link, and owner email for contact and verification purposes.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"CreatePodcastShowRequest":{"type":"object","required":["name","description","author","link","imageUrl","email"],"properties":{"name":{"type":"string","description":"Podcast show name (displayed on Spotify, Apple Music, etc.)"},"description":{"type":"string","description":"Show description for platform listings and RSS feed"},"author":{"type":"string","description":"Host/author name displayed on podcast platforms"},"link":{"type":"string","format":"uri","description":"Official website URL for the podcast show"},"imageUrl":{"type":"string","format":"uri","description":"URL of the podcast show image/artwork"},"email":{"type":"string","format":"email","description":"Owner email address for RSS feed and platform registration"},"language":{"type":"string","description":"Primary language for generated podcast episodes (defaults to English)"}}}}},"paths":{"/podcast/shows":{"post":{"summary":"Create a new podcast show for automated distribution","description":"Creates a new podcast show and returns the RSS URL for platform submission.\n\n**Platform Setup Workflow:**\n1. Create show via this endpoint → Get RSS URL in response\n2. Submit RSS URL to:\n   - Spotify for Podcasters (https://podcasters.spotify.com)\n   - Apple Podcasts Connect (https://podcastsconnect.apple.com)\n   - Google Podcasts Manager\n   - Other podcast platforms\n3. Start adding episodes via API → Platforms automatically discover new content\n\n**Required Metadata:** All major podcast platforms require name, description, author, website link, and owner email for contact and verification purposes.\n","tags":["Podcast"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePodcastShowRequest"}}}},"responses":{"201":{"description":"Podcast show created successfully with RSS URL for platform distribution","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"podcastId":{"type":"string","description":"Unique ID of the created podcast show"},"rssUrl":{"type":"string","description":"RSS feed URL to submit to Spotify, Apple Music, and other platforms"}}}}}},"400":{"description":"Bad request - Missing required fields for platform compatibility","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error during podcast creation"}}}}}}
```

## Create a new podcast show with image upload for automated distribution

> Creates a new podcast show with image upload and returns the RSS URL for platform submission.\
> This endpoint accepts multipart/form-data to allow direct image upload alongside podcast metadata.\
> \
> \*\*Platform Setup Workflow:\*\*\
> 1\. Create show via this endpoint → Get RSS URL in response\
> 2\. Submit RSS URL to:\
> &#x20;  \- Spotify for Podcasters (<https://podcasters.spotify.com)\\>
> &#x20;  \- Apple Podcasts Connect (<https://podcastsconnect.apple.com)\\>
> &#x20;  \- Google Podcasts Manager\
> &#x20;  \- Other podcast platforms\
> 3\. Start adding episodes via API → Platforms automatically discover new content\
> \
> \*\*Required Metadata:\*\* All major podcast platforms require name, description, author, website link, and owner email for contact and verification purposes.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/shows/with-image":{"post":{"summary":"Create a new podcast show with image upload for automated distribution","description":"Creates a new podcast show with image upload and returns the RSS URL for platform submission.\nThis endpoint accepts multipart/form-data to allow direct image upload alongside podcast metadata.\n\n**Platform Setup Workflow:**\n1. Create show via this endpoint → Get RSS URL in response\n2. Submit RSS URL to:\n   - Spotify for Podcasters (https://podcasters.spotify.com)\n   - Apple Podcasts Connect (https://podcastsconnect.apple.com)\n   - Google Podcasts Manager\n   - Other podcast platforms\n3. Start adding episodes via API → Platforms automatically discover new content\n\n**Required Metadata:** All major podcast platforms require name, description, author, website link, and owner email for contact and verification purposes.\n","tags":["Podcast"],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["name","description","author","link","email","imageFile"],"properties":{"name":{"type":"string","description":"Podcast show name (displayed on Spotify, Apple Music, etc.)"},"description":{"type":"string","description":"Show description for platform listings and RSS feed"},"author":{"type":"string","description":"Host/author name displayed on podcast platforms"},"link":{"type":"string","format":"uri","description":"Official website URL for the podcast show"},"email":{"type":"string","format":"email","description":"Owner email address for RSS feed and platform registration"},"imageFile":{"type":"string","format":"binary","description":"Podcast show image/artwork file (JPG, PNG, etc.)"}}}}}},"responses":{"201":{"description":"Podcast show created successfully with RSS URL for platform distribution","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"podcastId":{"type":"string","description":"Unique ID of the created podcast show"},"rssUrl":{"type":"string","description":"RSS feed URL to submit to Spotify, Apple Music, and other platforms"},"imageUrl":{"type":"string","description":"URL of the uploaded podcast artwork image"}}}}}},"400":{"description":"Bad request - Missing required fields or invalid image file","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error during podcast creation"}}}}}}
```

## Get all podcast episodes for user (deprecated)

> Deprecated: this broad all-episodes endpoint is expensive for large accounts and will be removed later.\
> Use \`/podcast/episodes/unallocated\` for episodes not assigned to any show, or \`/podcast/shows/{podcastId}/episodes\` for show-specific episode lists.\
> \
> Retrieves all podcast episodes owned by the user, including:\
> \- Episodes assigned to one or more podcast shows (with podcast show IDs)\
> \- Orphaned episodes not yet assigned to any podcast show (with empty podcastShowIds array)\
> \
> Each episode includes an array of podcast show IDs it belongs to, supporting episodes that appear in multiple shows.\
> Useful for getting a comprehensive view of all published episodes and their distribution across shows.\
> Supports optional pagination.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"PodcastEpisode":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the episode"},"podcastId":{"type":"string","description":"ID of the podcast show this episode belongs to"},"requestId":{"type":"string","description":"ID of the client request that created the source audio content"},"title":{"type":"string","description":"Episode title (displayed on podcast platforms)"},"description":{"type":"string","description":"Episode description (displayed on podcast platforms)"},"audioTitle":{"type":"string","description":"Original title from the generated audio content"},"audioUrl":{"type":"string","description":"Direct URL to the episode audio file (MP3 format for platform compatibility)"},"requestedOn":{"type":"string","format":"date-time","description":"When the episode was requested/created"},"succeededOn":{"type":"string","format":"date-time","description":"When the episode processing completed successfully"},"scheduledOn":{"type":"string","format":"date-time","description":"When the episode is scheduled to be published (if scheduled)"},"fileSize":{"type":"integer","description":"Audio file size in bytes (required for RSS enclosure tag)"},"durationSeconds":{"type":"integer","description":"Episode duration in seconds (displayed on podcast platforms)"}}}}},"paths":{"/podcast/episodes":{"get":{"summary":"Get all podcast episodes for user (deprecated)","deprecated":true,"description":"Deprecated: this broad all-episodes endpoint is expensive for large accounts and will be removed later.\nUse `/podcast/episodes/unallocated` for episodes not assigned to any show, or `/podcast/shows/{podcastId}/episodes` for show-specific episode lists.\n\nRetrieves all podcast episodes owned by the user, including:\n- Episodes assigned to one or more podcast shows (with podcast show IDs)\n- Orphaned episodes not yet assigned to any podcast show (with empty podcastShowIds array)\n\nEach episode includes an array of podcast show IDs it belongs to, supporting episodes that appear in multiple shows.\nUseful for getting a comprehensive view of all published episodes and their distribution across shows.\nSupports optional pagination.\n","tags":["Podcast"],"parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1},"required":false,"description":"Page number for pagination (starts at 1). If not provided, returns all results."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"description":"Number of items per page (max 100, default 50 if page is specified)"}],"responses":{"200":{"description":"List of all episodes with platform-ready metadata and associated podcast show IDs","content":{"application/json":{"schema":{"oneOf":[{"type":"array","description":"Non-paginated response (when page and limit are not provided)","items":{"allOf":[{"$ref":"#/components/schemas/PodcastEpisode"},{"type":"object","properties":{"podcastShowIds":{"type":"array","description":"Array of podcast show IDs this episode belongs to (empty for orphaned episodes)","items":{"type":"string"}}}}]}},{"type":"object","description":"Paginated response (when page or limit are provided)","properties":{"episodes":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/PodcastEpisode"},{"type":"object","properties":{"podcastShowIds":{"type":"array","description":"Array of podcast show IDs this episode belongs to (empty for orphaned episodes)","items":{"type":"string"}}}}]}},"totalCount":{"type":"integer","description":"Total number of episodes"},"page":{"type":"integer","description":"Current page number"},"pageSize":{"type":"integer","description":"Number of items per page"},"totalPages":{"type":"integer","description":"Total number of pages"}}}]}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error"}}}}}}
```

## Get unallocated podcast episodes for user

> Retrieves generated audio episodes that are not assigned to any podcast show.\
> This is the preferred paginated endpoint for the \`/podcasts/shows/unallocated\` app screen.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"PodcastEpisode":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the episode"},"podcastId":{"type":"string","description":"ID of the podcast show this episode belongs to"},"requestId":{"type":"string","description":"ID of the client request that created the source audio content"},"title":{"type":"string","description":"Episode title (displayed on podcast platforms)"},"description":{"type":"string","description":"Episode description (displayed on podcast platforms)"},"audioTitle":{"type":"string","description":"Original title from the generated audio content"},"audioUrl":{"type":"string","description":"Direct URL to the episode audio file (MP3 format for platform compatibility)"},"requestedOn":{"type":"string","format":"date-time","description":"When the episode was requested/created"},"succeededOn":{"type":"string","format":"date-time","description":"When the episode processing completed successfully"},"scheduledOn":{"type":"string","format":"date-time","description":"When the episode is scheduled to be published (if scheduled)"},"fileSize":{"type":"integer","description":"Audio file size in bytes (required for RSS enclosure tag)"},"durationSeconds":{"type":"integer","description":"Episode duration in seconds (displayed on podcast platforms)"}}}}},"paths":{"/podcast/episodes/unallocated":{"get":{"summary":"Get unallocated podcast episodes for user","description":"Retrieves generated audio episodes that are not assigned to any podcast show.\nThis is the preferred paginated endpoint for the `/podcasts/shows/unallocated` app screen.\n","tags":["Podcast"],"parameters":[{"in":"query","name":"page","schema":{"type":"integer","minimum":1},"required":false,"description":"Page number for pagination (starts at 1)."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"description":"Number of items per page (max 100, default 50)."}],"responses":{"200":{"description":"Paginated list of unallocated podcast episodes.","content":{"application/json":{"schema":{"type":"object","properties":{"episodes":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/PodcastEpisode"},{"type":"object","properties":{"podcastShowIds":{"type":"array","description":"Always empty for unallocated episodes.","items":{"type":"string"}}}}]}},"totalCount":{"type":"integer","description":"Total number of unallocated episodes."},"page":{"type":"integer","description":"Current page number."},"pageSize":{"type":"integer","description":"Number of items per page."},"totalPages":{"type":"integer","description":"Total number of pages."},"draftEpisodes":{"type":"array","description":"Always empty for this endpoint.","items":{"type":"object"}}}}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error"}}}}}}
```

## Get all episodes for automated podcast management

> Retrieves all episodes for a specific podcast show.\
> Each episode includes an array of podcast show IDs it belongs to (including the specified one and any others).\
> Useful for monitoring automated podcast publishing and episode management.\
> Supports optional pagination.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"PodcastEpisode":{"type":"object","properties":{"id":{"type":"integer","description":"Unique identifier for the episode"},"podcastId":{"type":"string","description":"ID of the podcast show this episode belongs to"},"requestId":{"type":"string","description":"ID of the client request that created the source audio content"},"title":{"type":"string","description":"Episode title (displayed on podcast platforms)"},"description":{"type":"string","description":"Episode description (displayed on podcast platforms)"},"audioTitle":{"type":"string","description":"Original title from the generated audio content"},"audioUrl":{"type":"string","description":"Direct URL to the episode audio file (MP3 format for platform compatibility)"},"requestedOn":{"type":"string","format":"date-time","description":"When the episode was requested/created"},"succeededOn":{"type":"string","format":"date-time","description":"When the episode processing completed successfully"},"scheduledOn":{"type":"string","format":"date-time","description":"When the episode is scheduled to be published (if scheduled)"},"fileSize":{"type":"integer","description":"Audio file size in bytes (required for RSS enclosure tag)"},"durationSeconds":{"type":"integer","description":"Episode duration in seconds (displayed on podcast platforms)"}}}}},"paths":{"/podcast/shows/{podcastId}/episodes":{"get":{"summary":"Get all episodes for automated podcast management","description":"Retrieves all episodes for a specific podcast show.\nEach episode includes an array of podcast show IDs it belongs to (including the specified one and any others).\nUseful for monitoring automated podcast publishing and episode management.\nSupports optional pagination.\n","tags":["Podcast"],"parameters":[{"in":"path","name":"podcastId","required":true,"schema":{"type":"string"},"description":"The podcast show ID"},{"in":"query","name":"page","schema":{"type":"integer","minimum":1},"required":false,"description":"Page number for pagination (starts at 1). If not provided, returns all results."},{"in":"query","name":"limit","schema":{"type":"integer","minimum":1,"maximum":100},"required":false,"description":"Number of items per page (max 100, default 50 if page is specified)"}],"responses":{"200":{"description":"List of episodes with platform-ready metadata and associated podcast show IDs","content":{"application/json":{"schema":{"oneOf":[{"type":"array","description":"Non-paginated response (when page and limit are not provided)","items":{"allOf":[{"$ref":"#/components/schemas/PodcastEpisode"},{"type":"object","properties":{"podcastShowIds":{"type":"array","description":"Array of podcast show IDs this episode belongs to","items":{"type":"string"}}}}]}},{"type":"object","description":"Paginated response (when page or limit are provided)","properties":{"episodes":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/PodcastEpisode"},{"type":"object","properties":{"podcastShowIds":{"type":"array","description":"Array of podcast show IDs this episode belongs to","items":{"type":"string"}}}}]}},"totalCount":{"type":"integer","description":"Total number of episodes for this podcast show"},"page":{"type":"integer","description":"Current page number"},"pageSize":{"type":"integer","description":"Number of items per page"},"totalPages":{"type":"integer","description":"Total number of pages"}}}]}}}},"400":{"description":"Bad request - Invalid podcast ID"},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error"}}}}}}
```

## Add episode to podcast for automated distribution

> Converts existing audio content into a podcast episode for automated platform distribution.\
> \
> \*\*Automation Workflow:\*\*\
> 1\. Generate audio content via content API → Get requestId\
> 2\. Add episode via this endpoint → Links audio to podcast show\
> 3\. RSS feed automatically updates with new episode\
> 4\. Spotify, Apple Music, etc. automatically discover and publish new episode\
> \
> \*\*Content Linking:\*\* Uses requestId to link existing audio content, enabling seamless\
> conversion of any generated audio into podcast episodes without file uploads.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/shows/{podcastId}/episodes":{"post":{"summary":"Add episode to podcast for automated distribution","description":"Converts existing audio content into a podcast episode for automated platform distribution.\n\n**Automation Workflow:**\n1. Generate audio content via content API → Get requestId\n2. Add episode via this endpoint → Links audio to podcast show\n3. RSS feed automatically updates with new episode\n4. Spotify, Apple Music, etc. automatically discover and publish new episode\n\n**Content Linking:** Uses requestId to link existing audio content, enabling seamless\nconversion of any generated audio into podcast episodes without file uploads.\n","tags":["Podcast"],"parameters":[{"in":"path","name":"podcastId","required":true,"schema":{"type":"string"},"description":"The podcast show ID to add episode to"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["requestId"],"properties":{"requestId":{"type":"string","description":"ID of existing audio content to convert into podcast episode"},"title":{"type":"string","description":"Custom episode title (optional - defaults to original audio title)"},"description":{"type":"string","description":"Custom episode description (optional - defaults to original audio title)"}}}}}},"responses":{"201":{"description":"Episode added successfully - will appear on podcast platforms automatically","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"episodeId":{"type":"integer","description":"ID of the created episode"},"message":{"type":"string"}}}}}},"400":{"description":"Bad request - Missing required fields or invalid IDs","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error during episode creation"}}}}}}
```

## Remove episode from automated podcast distribution

> Removes an episode from the podcast show and RSS feed.\
> The episode will be automatically removed from podcast platforms on their next RSS feed refresh.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/episodes/remove":{"post":{"summary":"Remove episode from automated podcast distribution","description":"Removes an episode from the podcast show and RSS feed.\nThe episode will be automatically removed from podcast platforms on their next RSS feed refresh.\n","tags":["Podcast"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["episodeId"],"properties":{"episodeId":{"type":"integer","description":"The episode ID to remove from podcast distribution"}}}}}},"responses":{"200":{"description":"Episode removed successfully - will be removed from platforms automatically","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}}}}},"400":{"description":"Bad request - Missing or invalid episode ID","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"401":{"description":"Unauthorized - valid API token required"},"404":{"description":"Episode not found or cannot be deleted"},"500":{"description":"Internal server error during episode removal"}}}}}}
```

## Update podcast episode title and description

> Updates the title and description of a specific podcast episode.\
> The episode must belong to a podcast owned by the authenticated user.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/episodes/{episodeId}":{"post":{"summary":"Update podcast episode title and description","description":"Updates the title and description of a specific podcast episode.\nThe episode must belong to a podcast owned by the authenticated user.\n","tags":["Podcast"],"parameters":[{"in":"path","name":"episodeId","required":true,"schema":{"type":"integer"},"description":"The ID of the episode to update"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","description"],"properties":{"title":{"type":"string","description":"New episode title"},"description":{"type":"string","description":"New episode description"}}}}}},"responses":{"200":{"description":"Episode updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}}}}},"400":{"description":"Bad request - Missing required fields or invalid episode ID","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"401":{"description":"Unauthorized - valid API token required"},"404":{"description":"Episode not found or cannot be updated","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"500":{"description":"Internal server error during episode update"}}}}}}
```

## Import podcast from RSS feed URL

> Imports an entire podcast show and its episodes from an existing RSS feed URL.\
> This is perfect for migrating podcasts from other platforms (Buzzsprout, Anchor, Podbean, etc.) to AutoContent API.\
> \
> \*\*Features:\*\*\
> \- Preserves ALL RSS metadata (language, copyright, categories, season/episode numbers, etc.)\
> \- Smart duplicate detection using GUIDs\
> \- Automatically imports and stores podcast artwork\
> \- Updates existing podcasts if they already exist\
> \- Generates new RSS feed URL that maintains all original metadata\
> \
> \*\*Migration Workflow:\*\*\
> 1\. Import your existing podcast from any platform using this endpoint\
> 2\. All metadata is preserved (language, categories, episode numbers, etc.)\
> 3\. Get a new RSS URL that you can submit to Spotify, Apple Podcasts, etc.\
> 4\. Your podcast continues seamlessly with all historical data intact<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/import-rss":{"post":{"summary":"Import podcast from RSS feed URL","description":"Imports an entire podcast show and its episodes from an existing RSS feed URL.\nThis is perfect for migrating podcasts from other platforms (Buzzsprout, Anchor, Podbean, etc.) to AutoContent API.\n\n**Features:**\n- Preserves ALL RSS metadata (language, copyright, categories, season/episode numbers, etc.)\n- Smart duplicate detection using GUIDs\n- Automatically imports and stores podcast artwork\n- Updates existing podcasts if they already exist\n- Generates new RSS feed URL that maintains all original metadata\n\n**Migration Workflow:**\n1. Import your existing podcast from any platform using this endpoint\n2. All metadata is preserved (language, categories, episode numbers, etc.)\n3. Get a new RSS URL that you can submit to Spotify, Apple Podcasts, etc.\n4. Your podcast continues seamlessly with all historical data intact\n","tags":["Podcast"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["rssUrl"],"properties":{"rssUrl":{"type":"string","format":"uri","description":"The RSS feed URL to import from (must end with .rss or contain 'rss' or 'feed')"},"email":{"type":"string","format":"email","description":"Optional owner email override when the source RSS feed does not include itunes:owner email."}}}}}},"responses":{"200":{"description":"Podcast imported successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"podcastId":{"type":"string","description":"The ID of the imported/updated podcast show"},"rssUrl":{"type":"string","description":"Your new RSS feed URL for distribution to podcast platforms"}}}}}},"400":{"description":"Bad request - Invalid or missing RSS URL","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error during import","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}}}}}}}
```

## Remove podcast from distribution

> Endpoint for removing individual podcast episodes or shows.\
> \
> \*\*Note:\*\* This marks content as deleted rather than physically removing it,\
> allowing for potential recovery and maintaining referential integrity.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/remove":{"post":{"summary":"Remove podcast from distribution","description":"Endpoint for removing individual podcast episodes or shows.\n\n**Note:** This marks content as deleted rather than physically removing it,\nallowing for potential recovery and maintaining referential integrity.\n","tags":["Podcast"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The podcast or episode ID to mark as deleted"}}}}}},"responses":{"200":{"description":"Podcast marked as deleted successfully","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}}}}},"400":{"description":"Bad request - Missing podcast id","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"401":{"description":"Unauthorized - valid API token required"},"404":{"description":"Podcast not found or cannot be deleted","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}},"500":{"description":"Internal server error during podcast removal"}}}}}}
```

## Download all podcast episodes as CSV

> Downloads all episodes for the authenticated user as a CSV file.\
> The CSV includes: id, audioUrl, title, and requestedOn fields.\
> Useful for data export, analysis, or backup purposes.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/episodes/csv":{"get":{"summary":"Download all podcast episodes as CSV","description":"Downloads all episodes for the authenticated user as a CSV file.\nThe CSV includes: id, audioUrl, title, and requestedOn fields.\nUseful for data export, analysis, or backup purposes.\n","tags":["Podcast"],"responses":{"200":{"description":"CSV file containing all podcast episodes","content":{"text/csv":{"schema":{"type":"string"}}},"headers":{"Content-Disposition":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error during CSV generation"}}}}}}
```

## Download podcast show episodes as CSV

> Downloads all episodes for a specific podcast show as a CSV file.\
> The CSV includes: id, audioUrl, title, and requestedOn fields.\
> Useful for exporting podcast show data for analysis or migration.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/shows/{podcastId}/episodes/csv":{"get":{"summary":"Download podcast show episodes as CSV","description":"Downloads all episodes for a specific podcast show as a CSV file.\nThe CSV includes: id, audioUrl, title, and requestedOn fields.\nUseful for exporting podcast show data for analysis or migration.\n","tags":["Podcast"],"parameters":[{"in":"path","name":"podcastId","required":true,"schema":{"type":"string"},"description":"The podcast show ID"}],"responses":{"200":{"description":"CSV file containing podcast show episodes","content":{"text/csv":{"schema":{"type":"string"}}},"headers":{"Content-Disposition":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized - valid API token required"},"500":{"description":"Internal server error during CSV generation"}}}}}}
```

## Download all podcast episode audio files as a ZIP archive

> Streams a ZIP archive containing audio files for every episode owned by the authenticated user.\
> Only episodes with a valid \`audioUrl\` are included in the archive.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/episodes/audio-zip":{"get":{"summary":"Download all podcast episode audio files as a ZIP archive","description":"Streams a ZIP archive containing audio files for every episode owned by the authenticated user.\nOnly episodes with a valid `audioUrl` are included in the archive.\n","tags":["Podcast"],"responses":{"200":{"description":"ZIP archive containing all available episode audio files","headers":{"Content-Disposition":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized - valid API token required"},"404":{"description":"No downloadable audio files were found"},"500":{"description":"Internal server error while building the audio archive"}}}}}}
```

## Download podcast show episode audio files as a ZIP archive

> Streams a ZIP archive with audio files for the specified podcast show. Only episodes\
> containing a valid \`audioUrl\` are included. If no files can be gathered, a 404 is returned.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/podcast/shows/{podcastId}/episodes/audio-zip":{"get":{"summary":"Download podcast show episode audio files as a ZIP archive","description":"Streams a ZIP archive with audio files for the specified podcast show. Only episodes\ncontaining a valid `audioUrl` are included. If no files can be gathered, a 404 is returned.\n","tags":["Podcast"],"parameters":[{"in":"path","name":"podcastId","required":true,"schema":{"type":"string"},"description":"The podcast show ID"}],"responses":{"200":{"description":"ZIP archive containing the show's available episode audio files","headers":{"Content-Disposition":{"schema":{"type":"string"}},"Content-Type":{"schema":{"type":"string"}}}},"401":{"description":"Unauthorized - valid API token required"},"404":{"description":"No downloadable audio files were found for the show"},"500":{"description":"Internal server error while building the audio archive"}}}}}}
```

## Generate podcast ideas (public, origin-restricted)

> Returns 3–8 podcast ideas. Each idea includes a podcast name, description,\
> exactly four episode titles, and AI-estimated 0–100 scores for questionComplexity,\
> topicalDepth, searchVolumeConversational, and contentFreshness.\
> No JWT required, but the request must come from an allowlisted Origin\
> (autocontentapi.com / app.autocontentapi.com / localhost) OR carry a valid\
> \`X-Free-Tools-Secret\` header (used by the Next.js proxy). Other callers\
> receive 403. Limits: 2 requests per IP per 24h, 30 total per 24h,\
> 2 concurrent per IP.<br>

```json
{"openapi":"3.0.0","info":{"title":"Content API","version":"1.0.0"},"tags":[{"name":"Podcast","description":"Podcast operations and RSS feeds"}],"servers":[{"url":"https://api.autocontentapi.com"}],"paths":{"/podcast/ideas":{"post":{"summary":"Generate podcast ideas (public, origin-restricted)","description":"Returns 3–8 podcast ideas. Each idea includes a podcast name, description,\nexactly four episode titles, and AI-estimated 0–100 scores for questionComplexity,\ntopicalDepth, searchVolumeConversational, and contentFreshness.\nNo JWT required, but the request must come from an allowlisted Origin\n(autocontentapi.com / app.autocontentapi.com / localhost) OR carry a valid\n`X-Free-Tools-Secret` header (used by the Next.js proxy). Other callers\nreceive 403. Limits: 2 requests per IP per 24h, 30 total per 24h,\n2 concurrent per IP.\n","tags":["Podcast"],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"topic":{"type":"string","nullable":true,"description":"Optional topic to tailor podcast ideas. If omitted or null, the AI will propose topics."}}}}}},"responses":{"200":{"description":"Structured list of podcast ideas","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"requestId":{"type":"string"},"ideas":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"episodes":{"type":"array","items":{"type":"string"},"minItems":4,"maxItems":4},"stats":{"type":"object","properties":{"questionComplexity":{"type":"integer","minimum":0,"maximum":100},"topicalDepth":{"type":"integer","minimum":0,"maximum":100},"searchVolumeConversational":{"type":"integer","minimum":0,"maximum":100},"contentFreshness":{"type":"integer","minimum":0,"maximum":100}}}}}}}}}}},"429":{"description":"Rate limit exceeded (10/day) or too many concurrent requests (2/IP)"},"500":{"description":"Internal server error"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.autocontentapi.com/readme/podcast.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
