2024-07-11 23:29:35 +02:00
|
|
|
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
|
|
|
|
|
2024-07-20 04:38:56 +02:00
|
|
|
/api/podcasts/opml/parse:
|
2024-07-11 23:29:35 +02:00
|
|
|
post:
|
|
|
|
summary: Get feeds from OPML text
|
2024-07-20 04:38:56 +02:00
|
|
|
description: Parse OPML text and return an array of feeds
|
2024-07-11 23:29:35 +02:00
|
|
|
operationId: getFeedsFromOPMLText
|
2024-07-20 04:42:41 +02:00
|
|
|
tags:
|
|
|
|
- Podcasts
|
2024-07-11 23:29:35 +02:00
|
|
|
requestBody:
|
|
|
|
content:
|
|
|
|
application/json:
|
|
|
|
schema:
|
|
|
|
type: object
|
|
|
|
properties:
|
|
|
|
opmlText:
|
|
|
|
type: string
|
|
|
|
responses:
|
2024-07-20 04:38:56 +02:00
|
|
|
'200':
|
|
|
|
description: Successfully parsed OPML text and returned feeds
|
2024-07-11 23:29:35 +02:00
|
|
|
content:
|
|
|
|
application/json:
|
|
|
|
schema:
|
2024-07-20 04:38:56 +02:00
|
|
|
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
|
2024-07-20 04:42:41 +02:00
|
|
|
tags:
|
|
|
|
- Podcasts
|
2024-07-20 04:38:56 +02:00
|
|
|
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
|
2024-07-11 23:29:35 +02:00
|
|
|
|
|
|
|
/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
|