{"files":{"SKILL.md":"---\nname: aggregators-api-service\ndescription: \"Aggregators API Service API skill. Use when working with Aggregators API Service for podcast-bot, api, stats. Covers 71 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Aggregators API Service\nAPI version: 0.84-61bda4d\n\n## Auth\nApiKey X-Auth-Token in header\n\n## Base URL\nhttps://api.zeno.fm\n\n## Setup\n1. Set your API key in the appropriate header\n2. GET /podcast-bot/podcasts/list -- verify access\n3. POST /stats/mounts/{mount}/auth-cache/reload -- create first reload\n\n## Endpoints\n\n71 endpoints across 4 groups. See references/api-spec.lap for full details.\n\n### podcast-bot\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /podcast-bot/podcasts/{podcastKey} | Get podcast |\n| PUT | /podcast-bot/podcasts/{podcastKey} | Update podcast info |\n| DELETE | /podcast-bot/podcasts/{podcastKey} | Delete podcast |\n| PUT | /podcast-bot/podcasts/{podcastKey}/recordingSchedule/enable | Enable podcast recording schedule |\n| PUT | /podcast-bot/podcasts/{podcastKey}/recordingSchedule/disable | Disable podcast recording schedule |\n| GET | /podcast-bot/podcasts/{podcastKey}/recordingConfig | Get podcast recording configuration |\n| PUT | /podcast-bot/podcasts/{podcastKey}/recordingConfig | Update podcast recording configuration |\n| DELETE | /podcast-bot/podcasts/{podcastKey}/recordingConfig | Delete podcast recording configuration |\n| GET | /podcast-bot/podcasts/{podcastKey}/processingPresets | Get podcast processing presets |\n| PUT | /podcast-bot/podcasts/{podcastKey}/processingPresets | Update podcast processing presets |\n| GET | /podcast-bot/podcasts/{podcastKey}/interviewPresets | Get podcast interview extraction presets |\n| PUT | /podcast-bot/podcasts/{podcastKey}/interviewPresets | Update podcast interview extraction presets |\n| PUT | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/unpublish | Unpublish podcast episode |\n| PUT | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/publish | Publish podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/autoClipsConfig | Get auto-clips configuration |\n| PUT | /podcast-bot/podcasts/{podcastKey}/autoClipsConfig | Update podcast auto-clips configuration |\n| DELETE | /podcast-bot/podcasts/{podcastKey}/autoClipsConfig | Delete podcast auto-clips configuration |\n| GET | /podcast-bot/podcasts/{podcastKey}/aiAdsPresets | Get podcast AI Ads presets |\n| PUT | /podcast-bot/podcasts/{podcastKey}/aiAdsPresets | Update podcast AI Ads presets |\n| POST | /podcast-bot/workflows/process-file | Process file |\n| POST | /podcast-bot/podcasts/{podcastKey}/upload/prerollAudio | Upload pre-roll audio - prepended to every episode |\n| POST | /podcast-bot/podcasts/{podcastKey}/upload/postrollAudio | Upload post-roll audio - appended to every episode |\n| POST | /podcast-bot/podcasts/{podcastKey}/upload/editOutroAudio | Upload outro audio for edit recording |\n| POST | /podcast-bot/podcasts/{podcastKey}/upload/editIntroAudio | Upload intro audio for edit recording |\n| POST | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/reprocess | Reprocess episode |\n| POST | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/reprocess/custom | Reprocess episode with custom presets |\n| POST | /podcast-bot/podcasts/recording/create | Create recording podcast |\n| GET | /podcast-bot/workflows/{workflowId}/jobsDetails | Get workflow jobs details |\n| GET | /podcast-bot/workflows/{workflowId}/details | Get workflow details |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes | Get podcast episodes |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey} | Get podcast episode |\n| DELETE | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey} | Delete podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/transcript | Get transcript for a podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/timedTranscript | Get timed transcript for a podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/metadata | Get metadata for a podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/clips | Get generated clips for a podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/chapters | Get chapters for a podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/adsMarkers | Get Ads markers info for a podcast episode |\n| GET | /podcast-bot/podcasts/{podcastKey}/episodes/interviews | Get podcast interviews |\n| GET | /podcast-bot/podcasts/list | List podcasts |\n| GET | /podcast-bot/jobs/{jobId} | Get job |\n| GET | /podcast-bot/jobs/podcasts/{podcastKey} | Get all processing jobs for a podcast |\n| GET | /podcast-bot/jobs/podcasts/{podcastKey}/episodes/{episodeKey} | Get processing jobs for a podcast episode |\n\n### api\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /api/v2/podcasts/{podcastKey} | Get podcast |\n| PUT | /api/v2/podcasts/{podcastKey} | Update podcast |\n| DELETE | /api/v2/podcasts/{podcastKey} | Delete podcast |\n| GET | /api/v2/podcasts/{podcastKey}/episodes/{episodeKey} | Get podcast episode |\n| PUT | /api/v2/podcasts/{podcastKey}/episodes/{episodeKey} | Update podcast episode |\n| DELETE | /api/v2/podcasts/{podcastKey}/episodes/{episodeKey} | Delete podcast episode |\n| POST | /api/v2/stations/search | Search stations |\n| POST | /api/v2/stations/listener/location | Get top stations by listener location |\n| POST | /api/v2/podcasts/{podcastKey}/episodes/create | Create podcast episode |\n| POST | /api/v2/podcasts/search | Search podcasts |\n| POST | /api/v2/podcasts/create | Create podcast |\n| GET | /api/v2/stations/{stationKey} | Get station |\n| GET | /api/v2/stations/list | List stations |\n| GET | /api/v2/stations/languages | Get the list of Languages that can be used to filter stations in the search stations request |\n| GET | /api/v2/stations/genres | Get the list of Genres that can be used to filter stations in the search stations request |\n| GET | /api/v2/stations/countries | Get the list of Countries that can be used to filter stations in the search stations request |\n| GET | /api/v2/stations/browse | Browse all stations |\n| GET | /api/v2/podcasts/{podcastKey}/episodes | Get podcast episodes |\n| GET | /api/v2/podcasts/languages | Get the list of Languages that can be used to filter podcasts in the search podcasts request |\n| GET | /api/v2/podcasts/countries | Get the list of Countries that can be used to filter podcasts in the search podcasts request |\n| GET | /api/v2/podcasts/categories | Get the list of Categories that can be used to filter podcasts in the search podcasts request |\n\n### stats\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /stats/mounts/{mount}/auth-cache/reload | Retrieve total numer of live stats for a specific mount |\n| POST | /stats/mounts/{mount}/auth-cache/reload/all | Retrieve total numer of live stats for a specific mount |\n| GET | /stats/mounts/{mount}/live/total | Retrieve total numer of live stats for a specific mount |\n\n### partners\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /partners/streams | Get the partner information for a list of streams. |\n| GET | /partners/{partnerId}/ads/stats | Retrieve partner stats |\n| GET | /partners/streams/{streamId} | Get the stream partner information. |\n| GET | /partners/streams/{streamId}/tracks | Get the stream partner information. |\n\n## Common Questions\n\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Get podcast details?\" -> GET /podcast-bot/podcasts/{podcastKey}\n- \"Update a podcast?\" -> PUT /podcast-bot/podcasts/{podcastKey}\n- \"Delete a podcast?\" -> DELETE /podcast-bot/podcasts/{podcastKey}\n- \"List all recordingConfig?\" -> GET /podcast-bot/podcasts/{podcastKey}/recordingConfig\n- \"List all processingPresets?\" -> GET /podcast-bot/podcasts/{podcastKey}/processingPresets\n- \"List all interviewPresets?\" -> GET /podcast-bot/podcasts/{podcastKey}/interviewPresets\n- \"List all autoClipsConfig?\" -> GET /podcast-bot/podcasts/{podcastKey}/autoClipsConfig\n- \"List all aiAdsPresets?\" -> GET /podcast-bot/podcasts/{podcastKey}/aiAdsPresets\n- \"Get podcast details?\" -> GET /api/v2/podcasts/{podcastKey}\n- \"Update a podcast?\" -> PUT /api/v2/podcasts/{podcastKey}\n- \"Delete a podcast?\" -> DELETE /api/v2/podcasts/{podcastKey}\n- \"Get episode details?\" -> GET /api/v2/podcasts/{podcastKey}/episodes/{episodeKey}\n- \"Update a episode?\" -> PUT /api/v2/podcasts/{podcastKey}/episodes/{episodeKey}\n- \"Delete a episode?\" -> DELETE /api/v2/podcasts/{podcastKey}/episodes/{episodeKey}\n- \"Create a reload?\" -> POST /stats/mounts/{mount}/auth-cache/reload\n- \"Create a all?\" -> POST /stats/mounts/{mount}/auth-cache/reload/all\n- \"Create a process-file?\" -> POST /podcast-bot/workflows/process-file\n- \"Create a prerollAudio?\" -> POST /podcast-bot/podcasts/{podcastKey}/upload/prerollAudio\n- \"Create a postrollAudio?\" -> POST /podcast-bot/podcasts/{podcastKey}/upload/postrollAudio\n- \"Create a editOutroAudio?\" -> POST /podcast-bot/podcasts/{podcastKey}/upload/editOutroAudio\n- \"Create a editIntroAudio?\" -> POST /podcast-bot/podcasts/{podcastKey}/upload/editIntroAudio\n- \"Create a reprocess?\" -> POST /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/reprocess\n- \"Create a custom?\" -> POST /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/reprocess/custom\n- \"Create a create?\" -> POST /podcast-bot/podcasts/recording/create\n- \"Create a stream?\" -> POST /partners/streams\n- \"Create a search?\" -> POST /api/v2/stations/search\n- \"Create a location?\" -> POST /api/v2/stations/listener/location\n- \"Create a create?\" -> POST /api/v2/podcasts/{podcastKey}/episodes/create\n- \"Create a search?\" -> POST /api/v2/podcasts/search\n- \"Create a create?\" -> POST /api/v2/podcasts/create\n- \"List all total?\" -> GET /stats/mounts/{mount}/live/total\n- \"List all jobsDetails?\" -> GET /podcast-bot/workflows/{workflowId}/jobsDetails\n- \"List all details?\" -> GET /podcast-bot/workflows/{workflowId}/details\n- \"List all episodes?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes\n- \"Get episode details?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}\n- \"Delete a episode?\" -> DELETE /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}\n- \"List all transcript?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/transcript\n- \"List all timedTranscript?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/timedTranscript\n- \"List all metadata?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/metadata\n- \"List all clips?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/clips\n- \"List all chapters?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/chapters\n- \"List all adsMarkers?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/adsMarkers\n- \"List all interviews?\" -> GET /podcast-bot/podcasts/{podcastKey}/episodes/interviews\n- \"List all list?\" -> GET /podcast-bot/podcasts/list\n- \"Get job details?\" -> GET /podcast-bot/jobs/{jobId}\n- \"Get podcast details?\" -> GET /podcast-bot/jobs/podcasts/{podcastKey}\n- \"Get episode details?\" -> GET /podcast-bot/jobs/podcasts/{podcastKey}/episodes/{episodeKey}\n- \"List all stats?\" -> GET /partners/{partnerId}/ads/stats\n- \"Get stream details?\" -> GET /partners/streams/{streamId}\n- \"List all tracks?\" -> GET /partners/streams/{streamId}/tracks\n- \"Get station details?\" -> GET /api/v2/stations/{stationKey}\n- \"List all list?\" -> GET /api/v2/stations/list\n- \"List all languages?\" -> GET /api/v2/stations/languages\n- \"List all genres?\" -> GET /api/v2/stations/genres\n- \"List all countries?\" -> GET /api/v2/stations/countries\n- \"List all browse?\" -> GET /api/v2/stations/browse\n- \"List all episodes?\" -> GET /api/v2/podcasts/{podcastKey}/episodes\n- \"List all languages?\" -> GET /api/v2/podcasts/languages\n- \"List all countries?\" -> GET /api/v2/podcasts/countries\n- \"List all categories?\" -> GET /api/v2/podcasts/categories\n- \"How to authenticate?\" -> See Auth section\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- List endpoints may support pagination; check for limit, offset, or cursor params\n- Create/update endpoints typically return the created/updated object\n\n## CLI\n\n```bash\n# Update this spec to the latest version\nnpx @lap-platform/lapsh get aggregators-api-service -o references/api-spec.lap\n\n# Search for related APIs\nnpx @lap-platform/lapsh search aggregators-api-service\n```\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Aggregators API Service\n@base https://api.zeno.fm\n@version 0.84-61bda4d\n@auth ApiKey X-Auth-Token in header\n@endpoints 71\n@hint download_for_search\n@toc podcast-bot(43), api(21), stats(3), partners(4)\n\n@group podcast-bot\n@endpoint GET /podcast-bot/podcasts/{podcastKey}\n@desc Get podcast\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}\n@desc Update podcast info\n@required {podcastKey: str, title: str, description: str, ownerName: str, ownerEmail: str, categories: [str], language: str}\n@optional {key: str, coverArtUrl: str, summary: str, author: str, link: str, explicit: bool, rssFeed: str, interviewPodcastKey: str}\n@returns(200) OK\n\n@endpoint DELETE /podcast-bot/podcasts/{podcastKey}\n@desc Delete podcast\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/recordingSchedule/enable\n@desc Enable podcast recording schedule\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/recordingSchedule/disable\n@desc Disable podcast recording schedule\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/recordingConfig\n@desc Get podcast recording configuration\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/recordingConfig\n@desc Update podcast recording configuration\n@required {podcastKey: str, streamUrl: str # Recording audio stream, recordingSchedule: map{frequency!: str, daysOfWeek: [str], daysOfMonth: [int(int32)], startTime!: str, durationMinutes!: int(int64), timezone!: str, enabled: bool} # Podcast Recording Schedule model}\n@optional {introAudioUrl: str # Edit based on intro audio. Required if outro is specified., outroAudioUrl: str # Edit based on outro audio. Required if intro is specified.}\n@returns(200) OK\n\n@endpoint DELETE /podcast-bot/podcasts/{podcastKey}/recordingConfig\n@desc Delete podcast recording configuration\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/processingPresets\n@desc Get podcast processing presets\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/processingPresets\n@desc Update podcast processing presets\n@required {podcastKey: str}\n@optional {removeBackgroundMusic: bool, introAudioUrl: str # Add intro audio to recorded episode, outroAudioUrl: str # Add outro audio to recorded episode, aiTitleSummary: bool # Generate episode title and summary, customPromptTitle: str # Custom prompt for generating episode title, customPromptDescription: str # Custom prompt for generating episode description}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/interviewPresets\n@desc Get podcast interview extraction presets\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/interviewPresets\n@desc Update podcast interview extraction presets\n@required {podcastKey: str}\n@optional {extractInterviews: bool # Enable Interview Extraction, interviewPodcastName: str # Interview Podcast Name. Required if interview extraction is enabled, interviewMinLengthMinutes: int(int64) # Minimum Interview Length (minutes). Required if interview extraction is enabled, customPromptInterviewTitle: str # Custom prompt for generating interview title, customPromptInterviewDescription: str # Custom prompt for generating interview description}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/unpublish\n@desc Unpublish podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/publish\n@desc Publish podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/autoClipsConfig\n@desc Get auto-clips configuration\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/autoClipsConfig\n@desc Update podcast auto-clips configuration\n@required {podcastKey: str}\n@optional {video: map{animation: map, aspect_ratios: [str]} # Video rendering config — used by CREATE_VIDEO and AUTO_CLIP jobs, generate_chapters: bool # Detect YouTube-style chapter boundaries via LLM and upload chapters.json, clip_generation: str # Clip generation mode. \"highlights\" = top viral/engaging moments; \"chapters\" = one clip per chapter boundary (audio only, no transcript/video); \"segments\" = named broadcast blocks (Weather, Sports, Traffic, etc.); \"none\" = skip clip generation, produce chapters only, max_clips: int(int32) # Max number of clips to produce (flat mode only — ignored when `clip_groups` is set), min_clip_duration: num(double) # Minimum clip length in seconds. Clips shorter than this are padded to center. Applies to highlights mode only. (flat mode default; each group can override), max_clip_duration: num(double) # Maximum clip length in seconds. Clips longer than this are trimmed from the end. (flat mode default; each group can override), padding_seconds: num(double) # Extra seconds added before/after each clip, segment_types: [str] # List of broadcast segment names to look for (segments mode only). If empty, LLM infers from content. Fallback value for groups., clip_groups: [map{label: str, video: map, clip_generation: str, count: int(int32), min_clip_duration: num(double), max_clip_duration: num(double), segment_types: [str]}] # List of clip group configs. When set, overrides flat `max_clips`/`min_clip_duration`/`max_clip_duration` and produces multiple named groups of clips.}\n@returns(200) OK\n\n@endpoint DELETE /podcast-bot/podcasts/{podcastKey}/autoClipsConfig\n@desc Delete podcast auto-clips configuration\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/aiAdsPresets\n@desc Get podcast AI Ads presets\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /podcast-bot/podcasts/{podcastKey}/aiAdsPresets\n@desc Update podcast AI Ads presets\n@required {podcastKey: str}\n@optional {removeAds: bool, insertProgrammaticAds: bool, adsFrequency: int(int64) # Required if insertProgrammaticAds is enabled}\n@returns(200) OK\n\n@endgroup\n\n@group api\n@endpoint GET /api/v2/podcasts/{podcastKey}\n@desc Get podcast\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint PUT /api/v2/podcasts/{podcastKey}\n@desc Update podcast\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint DELETE /api/v2/podcasts/{podcastKey}\n@desc Delete podcast\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint GET /api/v2/podcasts/{podcastKey}/episodes/{episodeKey}\n@desc Get podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint PUT /api/v2/podcasts/{podcastKey}/episodes/{episodeKey}\n@desc Update podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint DELETE /api/v2/podcasts/{podcastKey}/episodes/{episodeKey}\n@desc Delete podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endgroup\n\n@group stats\n@endpoint POST /stats/mounts/{mount}/auth-cache/reload\n@desc Retrieve total numer of live stats for a specific mount\n@required {mount: str}\n@returns(200) OK\n\n@endpoint POST /stats/mounts/{mount}/auth-cache/reload/all\n@desc Retrieve total numer of live stats for a specific mount\n@required {mount: str}\n@returns(200) OK\n\n@endgroup\n\n@group podcast-bot\n@endpoint POST /podcast-bot/workflows/process-file\n@desc Process file\n@optional {fileUrl: str, removeAds: bool, removeBackgroundMusic: bool, removeSilence: bool, normalizeAudioLevels: bool, aiAutoEnhance: bool, removeFillerWords: bool}\n@returns(200) OK\n\n@endpoint POST /podcast-bot/podcasts/{podcastKey}/upload/prerollAudio\n@desc Upload pre-roll audio - prepended to every episode\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint POST /podcast-bot/podcasts/{podcastKey}/upload/postrollAudio\n@desc Upload post-roll audio - appended to every episode\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint POST /podcast-bot/podcasts/{podcastKey}/upload/editOutroAudio\n@desc Upload outro audio for edit recording\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint POST /podcast-bot/podcasts/{podcastKey}/upload/editIntroAudio\n@desc Upload intro audio for edit recording\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint POST /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/reprocess\n@desc Reprocess episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint POST /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/reprocess/custom\n@desc Reprocess episode with custom presets\n@required {podcastKey: str, episodeKey: str}\n@optional {cutIntroAudioUrl: str # Edit based on intro audio. Required if cutOutro is specified., cutOutroAudioUrl: str # Edit based on outro audio. Required if cutIntro is specified., addIntroAudioUrl: str # Add intro audio to recorded episode, addOutroAudioUrl: str # Add outro audio to recorded episode, aiTitleSummary: bool # Generate episode title and summary, customPromptTitle: str # Custom prompt for generating episode title, customPromptDescription: str # Custom prompt for generating episode description, removeBackgroundMusic: bool, removeAds: bool, extractInterviews: bool # Enable Interview Extraction, interviewMinLengthMinutes: int(int64) # Minimum Interview Length (minutes). Required if interview extraction is enabled, customPromptInterviewTitle: str # Custom prompt for generating interview title, customPromptInterviewDescription: str # Custom prompt for generating interview description}\n@returns(200) OK\n\n@endpoint POST /podcast-bot/podcasts/recording/create\n@desc Create recording podcast\n@required {podcast: map{key: str, title!: str, coverArtUrl: str, summary: str, description!: str, author: str, ownerName!: str, ownerEmail!: str, categories!: [str], language!: str, link: str, explicit: bool, rssFeed: str, interviewPodcastKey: str} # Podcast model, recordingConfig: map{streamUrl!: str, recordingSchedule!: map, introAudioUrl: str, outroAudioUrl: str} # Podcast Recording Config model}\n@optional {processingPresets: map{removeBackgroundMusic: bool, introAudioUrl: str, outroAudioUrl: str, aiTitleSummary: bool, customPromptTitle: str, customPromptDescription: str} # Podcast Processing Presets model, aiAdsConfig: map{removeAds: bool, insertProgrammaticAds: bool, adsFrequency: int(int64)} # Podcast AI Ads Config model, interviewConfig: map{extractInterviews: bool, interviewPodcastName: str, interviewMinLengthMinutes: int(int64), customPromptInterviewTitle: str, customPromptInterviewDescription: str} # Podcast Interview Config model}\n@returns(200) OK\n\n@endgroup\n\n@group partners\n@endpoint POST /partners/streams\n@desc Get the partner information for a list of streams.\n@required {X-Auth-Token: str}\n@optional {currentTrack: bool=false}\n@returns(200) OK\n\n@endgroup\n\n@group api\n@endpoint POST /api/v2/stations/search\n@desc Search stations\n@optional {query: str, filters: map{country: [str], language: [str], genre: [str]} # Filters for station search, hitsPerPage: int(int32)=10, page: int(int32)=1, minSessions: int(int64)}\n@returns(200) OK\n\n@endpoint POST /api/v2/stations/listener/location\n@desc Get top stations by listener location\n@optional {maxResults: int(int32)=10, continents: [str], countries: [str]}\n@returns(200) OK\n\n@endpoint POST /api/v2/podcasts/{podcastKey}/episodes/create\n@desc Create podcast episode\n@required {podcastKey: str}\n@returns(200) OK\n\n@endpoint POST /api/v2/podcasts/search\n@desc Search podcasts\n@optional {query: str, filters: map{country: [str], language: [str], category: [str], podcastType: str} # Filters for podcast search, hitsPerPage: int(int32)=10, page: int(int32)=1}\n@returns(200) OK\n\n@endpoint POST /api/v2/podcasts/create\n@desc Create podcast\n@returns(200) OK\n\n@endgroup\n\n@group stats\n@endpoint GET /stats/mounts/{mount}/live/total\n@desc Retrieve total numer of live stats for a specific mount\n@required {Authorization: str # Authorization token, mount: str}\n@returns(200) OK\n\n@endgroup\n\n@group podcast-bot\n@endpoint GET /podcast-bot/workflows/{workflowId}/jobsDetails\n@desc Get workflow jobs details\n@required {workflowId: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/workflows/{workflowId}/details\n@desc Get workflow details\n@required {workflowId: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes\n@desc Get podcast episodes\n@required {podcastKey: str}\n@optional {limit: str, offset: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}\n@desc Get podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint DELETE /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}\n@desc Delete podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/transcript\n@desc Get transcript for a podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/timedTranscript\n@desc Get timed transcript for a podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/metadata\n@desc Get metadata for a podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/clips\n@desc Get generated clips for a podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/chapters\n@desc Get chapters for a podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/{episodeKey}/adsMarkers\n@desc Get Ads markers info for a podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/{podcastKey}/episodes/interviews\n@desc Get podcast interviews\n@required {podcastKey: str}\n@optional {limit: str, offset: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/podcasts/list\n@desc List podcasts\n@optional {limit: str, offset: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/jobs/{jobId}\n@desc Get job\n@required {jobId: str}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/jobs/podcasts/{podcastKey}\n@desc Get all processing jobs for a podcast\n@required {podcastKey: str}\n@optional {status: str(PENDING_CREATION/PENDING/PROCESSING/CHECKING/FINISHING/CHECKING_FAILED/COMPLETED/FINISHED/FAILED/CANCELLED), from_date: str # Filter jobs where lastUpdate >= from_date (ISO 8601 instant, e.g. 2024-01-01T00:00:00Z)}\n@returns(200) OK\n\n@endpoint GET /podcast-bot/jobs/podcasts/{podcastKey}/episodes/{episodeKey}\n@desc Get processing jobs for a podcast episode\n@required {podcastKey: str, episodeKey: str}\n@returns(200) OK\n\n@endgroup\n\n@group partners\n@endpoint GET /partners/{partnerId}/ads/stats\n@desc Retrieve partner stats\n@required {partnerId: str, from: str(date), to: str(date), x-zeno-api-key: str # Authorization token}\n@optional {type: str(DAILY/HOURLY/BREAKDOWN), page: int(int32)=0, size: int(int32)=10}\n@returns(200) OK\n\n@endpoint GET /partners/streams/{streamId}\n@desc Get the stream partner information.\n@required {streamId: str, X-Auth-Token: str}\n@optional {currentTrack: bool=false}\n@returns(200) OK\n\n@endpoint GET /partners/streams/{streamId}/tracks\n@desc Get the stream partner information.\n@required {streamId: str, X-Auth-Token: str}\n@returns(200) OK\n\n@endgroup\n\n@group api\n@endpoint GET /api/v2/stations/{stationKey}\n@desc Get station\n@required {stationKey: str}\n@returns(200) OK\n\n@endpoint GET /api/v2/stations/list\n@desc List stations\n@optional {page: int(int32)=1, hitsPerPage: int(int32)=10, minSessions: int(int64)}\n@returns(200) OK\n\n@endpoint GET /api/v2/stations/languages\n@desc Get the list of Languages that can be used to filter stations in the search stations request\n@returns(200) OK\n\n@endpoint GET /api/v2/stations/genres\n@desc Get the list of Genres that can be used to filter stations in the search stations request\n@returns(200) OK\n\n@endpoint GET /api/v2/stations/countries\n@desc Get the list of Countries that can be used to filter stations in the search stations request\n@returns(200) OK\n\n@endpoint GET /api/v2/stations/browse\n@desc Browse all stations\n@optional {limit: int(int64)=50, offset: int(int64)=0, mount_status: bool=false}\n@returns(200) OK\n\n@endpoint GET /api/v2/podcasts/{podcastKey}/episodes\n@desc Get podcast episodes\n@required {podcastKey: str}\n@optional {limit: str, offset: str}\n@returns(200) OK\n\n@endpoint GET /api/v2/podcasts/languages\n@desc Get the list of Languages that can be used to filter podcasts in the search podcasts request\n@returns(200) OK\n\n@endpoint GET /api/v2/podcasts/countries\n@desc Get the list of Countries that can be used to filter podcasts in the search podcasts request\n@returns(200) OK\n\n@endpoint GET /api/v2/podcasts/categories\n@desc Get the list of Categories that can be used to filter podcasts in the search podcasts request\n@returns(200) OK\n\n@endgroup\n\n@end\n"}}