paths: /api/podcasts: post: summary: Create a new podcast operationId: createPodcast tags: - Podcasts requestBody: required: true content: application/json: schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/Podcast' responses: 200: description: Successfully created a podcast content: application/json: schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/Podcast' 400: description: Bad request 403: description: Forbidden 404: description: Not found /api/podcasts/feed: post: summary: Get podcast feed operationId: getPodcastFeed tags: - Podcasts requestBody: required: true content: application/json: schema: type: object properties: rssFeed: type: string description: The RSS feed URL of the podcast responses: 200: description: Successfully retrieved podcast feed content: application/json: schema: type: object properties: podcast: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/Podcast' 400: description: Bad request 403: description: Forbidden 404: description: Not found /api/podcasts/opml/parse: post: summary: Get feeds from OPML text description: Parse OPML text and return an array of feeds operationId: getFeedsFromOPMLText tags: - Podcasts requestBody: content: application/json: schema: type: object properties: opmlText: type: string responses: '200': description: Successfully parsed OPML text and returned feeds content: application/json: schema: type: object properties: feeds: type: array items: type: object properties: title: type: string feedUrl: type: string '400': description: Bad request, OPML text not provided '403': description: Forbidden, user is not admin /api/podcasts/opml/create: post: summary: Bulk create podcasts from OPML feed URLs operationId: bulkCreatePodcastsFromOpmlFeedUrls tags: - Podcasts requestBody: content: application/json: schema: type: object properties: feeds: type: array items: type: string libraryId: $ref: '../objects/Library.yaml#/components/schemas/libraryId' folderId: $ref: '../objects/Folder.yaml#/components/schemas/folderId' autoDownloadEpisodes: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/autoDownloadEpisodes' responses: '200': description: Successfully created podcasts from feed URLs '400': description: Bad request, invalid request body '403': description: Forbidden, user is not admin '404': description: Folder not found /api/podcasts/{id}/checknew: parameters: - name: id in: path description: Podcast ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' get: summary: Check and download new episodes operationId: checkNewEpisodes tags: - Podcasts parameters: - name: limit in: query description: Maximum number of episodes to download required: false schema: type: integer responses: 200: description: Successfully checked and downloaded new episodes content: application/json: schema: type: object properties: episodes: type: array items: $ref: '../objects/entities/PodcastEpisode.yaml#/components/schemas/PodcastEpisode' 403: description: Forbidden 404: description: Not found 500: description: Server error /api/podcasts/{id}/clear-queue: parameters: - name: id in: path description: Podcast ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' get: summary: Clear episode download queue operationId: clearEpisodeDownloadQueue tags: - Podcasts responses: 200: description: Successfully cleared download queue 403: description: Forbidden /api/podcasts/{id}/downloads: parameters: - name: id in: path description: Podcast ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' get: summary: Get episode downloads operationId: getEpisodeDownloads tags: - Podcasts responses: 200: description: Successfully retrieved episode downloads content: application/json: schema: type: object properties: downloads: type: array items: $ref: '../objects/entities/PodcastEpisode.yaml#/components/schemas/PodcastEpisode' 404: description: Not found /api/podcasts/{id}/search-episode: parameters: - name: id in: path description: Podcast ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' get: summary: Find episode by title operationId: findEpisode tags: - Podcasts parameters: - name: title in: query description: Title of the episode to search for required: true schema: type: string responses: 200: description: Successfully found episodes content: application/json: schema: type: object properties: episodes: type: array items: $ref: '../objects/entities/PodcastEpisode.yaml#/components/schemas/PodcastEpisode' 404: description: Not found 500: description: Server error /api/podcasts/{id}/download-episodes: parameters: - name: id in: path description: Podcast ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' post: summary: Download podcast episodes operationId: downloadEpisodes tags: - Podcasts requestBody: required: true content: application/json: schema: type: array items: type: string responses: 200: description: Successfully started episode download 400: description: Bad request 403: description: Forbidden /api/podcasts/{id}/match-episodes: parameters: - name: id in: path description: Podcast ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' post: summary: Quick match podcast episodes operationId: quickMatchEpisodes tags: - Podcasts parameters: - name: override in: query description: Override existing details if set to 1 required: false schema: type: string responses: 200: description: Successfully matched episodes content: application/json: schema: type: object properties: numEpisodesUpdated: type: integer 403: description: Forbidden /api/podcasts/{id}/episode/{episodeId}: parameters: - name: id in: path description: Podcast ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' - name: episodeId in: path description: Episode ID required: true schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/podcastId' patch: summary: Update a podcast episode operationId: updateEpisode tags: - Podcasts requestBody: required: true content: application/json: schema: type: object responses: 200: description: Successfully updated episode content: application/json: schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/Podcast' 404: description: Not found get: summary: Get a specific podcast episode operationId: getEpisode tags: - Podcasts responses: 200: description: Successfully retrieved episode content: application/json: schema: $ref: '../objects/entities/PodcastEpisode.yaml#/components/schemas/PodcastEpisode' 404: description: Not found delete: summary: Remove a podcast episode operationId: removeEpisode tags: - Podcasts parameters: - name: hard in: query description: Hard delete the episode if set to 1 required: false schema: type: string responses: 200: description: Successfully removed episode content: application/json: schema: $ref: '../objects/mediaTypes/Podcast.yaml#/components/schemas/Podcast' 404: description: Not found 500: description: Server error