podcast_api 1.1.6 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,911 @@
1
+ {
2
+ "schema_version": 1,
3
+ "version": "3.0.0",
4
+ "operations": [
5
+ {
6
+ "operationId": "search",
7
+ "func": "search",
8
+ "available_from": "1.1.6",
9
+ "method": "GET",
10
+ "path": "/search",
11
+ "parameters": [
12
+ {
13
+ "name": "q",
14
+ "in": "query",
15
+ "required": true
16
+ },
17
+ {
18
+ "name": "sort_by_date",
19
+ "in": "query",
20
+ "required": false
21
+ },
22
+ {
23
+ "name": "type",
24
+ "in": "query",
25
+ "required": false
26
+ },
27
+ {
28
+ "name": "offset",
29
+ "in": "query",
30
+ "required": false
31
+ },
32
+ {
33
+ "name": "len_min",
34
+ "in": "query",
35
+ "required": false
36
+ },
37
+ {
38
+ "name": "len_max",
39
+ "in": "query",
40
+ "required": false
41
+ },
42
+ {
43
+ "name": "episode_count_min",
44
+ "in": "query",
45
+ "required": false
46
+ },
47
+ {
48
+ "name": "episode_count_max",
49
+ "in": "query",
50
+ "required": false
51
+ },
52
+ {
53
+ "name": "update_freq_min",
54
+ "in": "query",
55
+ "required": false
56
+ },
57
+ {
58
+ "name": "update_freq_max",
59
+ "in": "query",
60
+ "required": false
61
+ },
62
+ {
63
+ "name": "genre_ids",
64
+ "in": "query",
65
+ "required": false
66
+ },
67
+ {
68
+ "name": "published_before",
69
+ "in": "query",
70
+ "required": false
71
+ },
72
+ {
73
+ "name": "published_after",
74
+ "in": "query",
75
+ "required": false
76
+ },
77
+ {
78
+ "name": "only_in",
79
+ "in": "query",
80
+ "required": false
81
+ },
82
+ {
83
+ "name": "language",
84
+ "in": "query",
85
+ "required": false
86
+ },
87
+ {
88
+ "name": "region",
89
+ "in": "query",
90
+ "required": false
91
+ },
92
+ {
93
+ "name": "ocid",
94
+ "in": "query",
95
+ "required": false
96
+ },
97
+ {
98
+ "name": "ncid",
99
+ "in": "query",
100
+ "required": false
101
+ },
102
+ {
103
+ "name": "safe_mode",
104
+ "in": "query",
105
+ "required": false
106
+ },
107
+ {
108
+ "name": "unique_podcasts",
109
+ "in": "query",
110
+ "required": false
111
+ },
112
+ {
113
+ "name": "interviews_only",
114
+ "in": "query",
115
+ "required": false
116
+ },
117
+ {
118
+ "name": "sponsored_only",
119
+ "in": "query",
120
+ "required": false
121
+ },
122
+ {
123
+ "name": "page_size",
124
+ "in": "query",
125
+ "required": false
126
+ }
127
+ ],
128
+ "example_params": {
129
+ "q": "star wars",
130
+ "sort_by_date": 0,
131
+ "type": "episode",
132
+ "offset": 0,
133
+ "len_min": 10,
134
+ "len_max": 30,
135
+ "genre_ids": "68,82",
136
+ "published_before": 1580172454000,
137
+ "published_after": 0,
138
+ "only_in": "title,description",
139
+ "language": "English",
140
+ "region": "",
141
+ "safe_mode": 0,
142
+ "unique_podcasts": 0,
143
+ "interviews_only": 0,
144
+ "sponsored_only": 0,
145
+ "page_size": 10
146
+ },
147
+ "summary": "Full-text search",
148
+ "description": "Full-text search on episodes, podcasts, or curated lists of podcasts.\nUse the `offset` parameter to paginate through search results.\nThe FREE plan allows to see up to 30 search results (or `offset` < 30) per query.\nThe PRO plan allows to see up to 300 search results (or `offset` < 300) per query.\nThe ENTERPRISE plan allows to see up to 10,000 search results (or `offset` < 10000) per query."
149
+ },
150
+ {
151
+ "operationId": "typeahead",
152
+ "func": "typeahead",
153
+ "available_from": "1.1.6",
154
+ "method": "GET",
155
+ "path": "/typeahead",
156
+ "parameters": [
157
+ {
158
+ "name": "q",
159
+ "in": "query",
160
+ "required": true
161
+ },
162
+ {
163
+ "name": "show_podcasts",
164
+ "in": "query",
165
+ "required": false
166
+ },
167
+ {
168
+ "name": "show_genres",
169
+ "in": "query",
170
+ "required": false
171
+ },
172
+ {
173
+ "name": "safe_mode",
174
+ "in": "query",
175
+ "required": false
176
+ }
177
+ ],
178
+ "example_params": {
179
+ "q": "star wars",
180
+ "show_podcasts": 1,
181
+ "show_genres": 1,
182
+ "safe_mode": 0
183
+ },
184
+ "summary": "Typeahead search",
185
+ "description": "Suggest search terms, podcast genres, and podcasts."
186
+ },
187
+ {
188
+ "operationId": "searchEpisodeTitles",
189
+ "func": "search_episode_titles",
190
+ "available_from": "1.1.6",
191
+ "method": "GET",
192
+ "path": "/search_episode_titles",
193
+ "parameters": [
194
+ {
195
+ "name": "q",
196
+ "in": "query",
197
+ "required": true
198
+ },
199
+ {
200
+ "name": "podcast_id",
201
+ "in": "query",
202
+ "required": false
203
+ },
204
+ {
205
+ "name": "podcast_id_type",
206
+ "in": "query",
207
+ "required": false
208
+ }
209
+ ],
210
+ "example_params": {
211
+ "q": "Jerusalem Demsas on The Dispossessed"
212
+ },
213
+ "summary": "Find individual episodes by searching for their titles",
214
+ "description": "Conduct targeted searches for individual episodes by title and refine results using the podcast id such as\nListen Notes Podcast ID, Apple Podcasts ID, Spotify ID, or RSS feed URL.\nThis endpoint is specially designed to streamline the import of specific episodes from platforms\nlike Apple Podcasts and Spotify into your application.\nCompared to the GET /search endpoint, which performs full-text searches across multiple fields,\nthis endpoint focuses solely on episode titles for enhanced accuracy and performance."
215
+ },
216
+ {
217
+ "operationId": "spellcheck",
218
+ "func": "spellcheck",
219
+ "available_from": "1.1.6",
220
+ "method": "GET",
221
+ "path": "/spellcheck",
222
+ "parameters": [
223
+ {
224
+ "name": "q",
225
+ "in": "query",
226
+ "required": true
227
+ }
228
+ ],
229
+ "example_params": {
230
+ "q": "microsft stock"
231
+ },
232
+ "summary": "Spell check on a search term",
233
+ "description": "Suggest a list of words that correct the spelling errors of a search term. This endpoint is available only in the PRO/ENTERPRISE plan."
234
+ },
235
+ {
236
+ "operationId": "getRelatedSearches",
237
+ "func": "fetch_related_searches",
238
+ "available_from": "1.1.6",
239
+ "method": "GET",
240
+ "path": "/related_searches",
241
+ "parameters": [
242
+ {
243
+ "name": "q",
244
+ "in": "query",
245
+ "required": true
246
+ }
247
+ ],
248
+ "example_params": {
249
+ "q": "evergrande"
250
+ },
251
+ "summary": "Fetch related search terms",
252
+ "description": "Suggest related search terms. The results are more comprehensive than from `GET /typeahead`. This endpoint is available only in the PRO/ENTERPRISE plan."
253
+ },
254
+ {
255
+ "operationId": "getTrendingSearches",
256
+ "func": "fetch_trending_searches",
257
+ "available_from": "1.1.6",
258
+ "method": "GET",
259
+ "path": "/trending_searches",
260
+ "parameters": [],
261
+ "example_params": {},
262
+ "summary": "Fetch trending search terms",
263
+ "description": "Fetch up to 10 most recent trending search terms on the Listen Notes platform."
264
+ },
265
+ {
266
+ "operationId": "getBestPodcasts",
267
+ "func": "fetch_best_podcasts",
268
+ "available_from": "1.1.6",
269
+ "method": "GET",
270
+ "path": "/best_podcasts",
271
+ "parameters": [
272
+ {
273
+ "name": "genre_id",
274
+ "in": "query",
275
+ "required": false
276
+ },
277
+ {
278
+ "name": "page",
279
+ "in": "query",
280
+ "required": false
281
+ },
282
+ {
283
+ "name": "region",
284
+ "in": "query",
285
+ "required": false
286
+ },
287
+ {
288
+ "name": "publisher_region",
289
+ "in": "query",
290
+ "required": false
291
+ },
292
+ {
293
+ "name": "language",
294
+ "in": "query",
295
+ "required": false
296
+ },
297
+ {
298
+ "name": "sort",
299
+ "in": "query",
300
+ "required": false
301
+ },
302
+ {
303
+ "name": "safe_mode",
304
+ "in": "query",
305
+ "required": false
306
+ }
307
+ ],
308
+ "example_params": {
309
+ "genre_id": 93,
310
+ "page": 2,
311
+ "region": "us",
312
+ "sort": "listen_score",
313
+ "safe_mode": 0
314
+ },
315
+ "summary": "Fetch a list of best podcasts by genre",
316
+ "description": "Get a list of curated best podcasts by genre,\nwhich are curated by Listen Notes staffs based on various signals from the Internet, e.g.,\ntop charts on other podcast platforms, recommendations from mainstream media,\nuser activities on listennotes.com...\nYou can get the genre ids from `GET /genres` endpoint.\nThis endpoint returns same data as https://www.listennotes.com/best-podcasts/"
317
+ },
318
+ {
319
+ "operationId": "getPodcastById",
320
+ "func": "fetch_podcast_by_id",
321
+ "available_from": "1.1.6",
322
+ "method": "GET",
323
+ "path": "/podcasts/{id}",
324
+ "parameters": [
325
+ {
326
+ "name": "id",
327
+ "in": "path",
328
+ "required": true
329
+ },
330
+ {
331
+ "name": "next_episode_pub_date",
332
+ "in": "query",
333
+ "required": false
334
+ },
335
+ {
336
+ "name": "sort",
337
+ "in": "query",
338
+ "required": false
339
+ }
340
+ ],
341
+ "example_params": {
342
+ "id": "4d3fe717742d4963a85562e9f84d8c79",
343
+ "next_episode_pub_date": 1479154463000,
344
+ "sort": "recent_first"
345
+ },
346
+ "summary": "Fetch detailed meta data and episodes for a podcast by id",
347
+ "description": "Fetch detailed meta data and episodes for a specific podcast (up to 10 episodes each time).\nYou can use the **next_episode_pub_date** parameter to do pagination and fetch more episodes.\nDuring pagination with **next_episode_pub_date**, an empty **episodes** array in the response signals that no more episodes are available."
348
+ },
349
+ {
350
+ "operationId": "deletePodcastById",
351
+ "func": "delete_podcast",
352
+ "available_from": "1.1.6",
353
+ "method": "DELETE",
354
+ "path": "/podcasts/{id}",
355
+ "parameters": [
356
+ {
357
+ "name": "id",
358
+ "in": "path",
359
+ "required": true
360
+ },
361
+ {
362
+ "name": "reason",
363
+ "in": "query",
364
+ "required": false
365
+ }
366
+ ],
367
+ "example_params": {
368
+ "id": "4d3fe717742d4963a85562e9f84d8c79",
369
+ "reason": "the podcaster wants to delete it"
370
+ },
371
+ "summary": "Request to delete a podcast",
372
+ "description": "Podcast hosting services can use this endpoint to streamline the process of podcast deletion on behave of their users (podcasters). We will review the deletion request within 12 hours. If the podcast is already deleted, the \"status\" field in the response will be \"deleted\". Otherwise, the status field will be \"in review\". If you want to get a notification once the podcast is deleted, you can configure a webhook url in the dashboard: listennotes.com/api/dashboard/#webhooks"
373
+ },
374
+ {
375
+ "operationId": "getEpisodeById",
376
+ "func": "fetch_episode_by_id",
377
+ "available_from": "1.1.6",
378
+ "method": "GET",
379
+ "path": "/episodes/{id}",
380
+ "parameters": [
381
+ {
382
+ "name": "id",
383
+ "in": "path",
384
+ "required": true
385
+ },
386
+ {
387
+ "name": "show_transcript",
388
+ "in": "query",
389
+ "required": false
390
+ }
391
+ ],
392
+ "example_params": {
393
+ "id": "6b6d65930c5a4f71b254465871fed370",
394
+ "show_transcript": 1
395
+ },
396
+ "summary": "Fetch detailed meta data for an episode by id",
397
+ "description": "Fetch detailed meta data for a specific episode."
398
+ },
399
+ {
400
+ "operationId": "getEpisodesInBatch",
401
+ "func": "batch_fetch_episodes",
402
+ "available_from": "1.1.6",
403
+ "method": "POST",
404
+ "path": "/episodes",
405
+ "parameters": [
406
+ {
407
+ "name": "ids",
408
+ "in": "body",
409
+ "required": true
410
+ }
411
+ ],
412
+ "example_params": {
413
+ "ids": "c577d55b2b2b483c969fae3ceb58e362,0f34a9099579490993eec9e8c8cebb82"
414
+ },
415
+ "summary": "Batch fetch basic meta data for episodes",
416
+ "description": "Batch fetch basic meta data for up to 10 episodes. This endpoint could be used to implement custom playlists for individual episodes. For detailed meta data of an individual episode, you need to use `GET /episodes/{id}`. This endpoint is available only in the PRO/ENTERPRISE plan."
417
+ },
418
+ {
419
+ "operationId": "getPodcastsInBatch",
420
+ "func": "batch_fetch_podcasts",
421
+ "available_from": "1.1.6",
422
+ "method": "POST",
423
+ "path": "/podcasts",
424
+ "parameters": [
425
+ {
426
+ "name": "ids",
427
+ "in": "body",
428
+ "required": false
429
+ },
430
+ {
431
+ "name": "rsses",
432
+ "in": "body",
433
+ "required": false
434
+ },
435
+ {
436
+ "name": "itunes_ids",
437
+ "in": "body",
438
+ "required": false
439
+ },
440
+ {
441
+ "name": "spotify_ids",
442
+ "in": "body",
443
+ "required": false
444
+ },
445
+ {
446
+ "name": "show_latest_episodes",
447
+ "in": "body",
448
+ "required": false
449
+ },
450
+ {
451
+ "name": "next_episode_pub_date",
452
+ "in": "body",
453
+ "required": false
454
+ }
455
+ ],
456
+ "example_params": {
457
+ "ids": "3302bc71139541baa46ecb27dbf6071a,68faf62be97149c280ebcc25178aa731,37589a3e121e40debe4cef3d9638932a,9cf19c590ff0484d97b18b329fed0c6a",
458
+ "rsses": "https://rss.art19.com/recode-decode,https://rss.art19.com/the-daily,https://www.npr.org/rss/podcast.php?id=510331,https://www.npr.org/rss/podcast.php?id=510331",
459
+ "itunes_ids": "1457514703,1386234384,659155419",
460
+ "spotify_ids": "3DDfEsKDIDrTlnPOiG4ZF4,4qDNe5Gvl1XxdLinUGEXrC,23NZCM4ik6o3UYkM473Itz",
461
+ "show_latest_episodes": 1,
462
+ "next_episode_pub_date": 1557394247000
463
+ },
464
+ "summary": "Batch fetch basic meta data for podcasts",
465
+ "description": "Batch fetch basic meta data for up to 10 podcasts.\nThis endpoint could be used to build something like OPML import,\nallowing users to import a bunch of podcasts via rss urls.\nFor detailed meta data (including episodes) of an individual podcast, you need to use `GET /podcasts/{id}`. This endpoint is available only in the PRO/ENTERPRISE plan."
466
+ },
467
+ {
468
+ "operationId": "getCuratedPodcastById",
469
+ "func": "fetch_curated_podcasts_list_by_id",
470
+ "available_from": "1.1.6",
471
+ "method": "GET",
472
+ "path": "/curated_podcasts/{id}",
473
+ "parameters": [
474
+ {
475
+ "name": "id",
476
+ "in": "path",
477
+ "required": true
478
+ }
479
+ ],
480
+ "example_params": {
481
+ "id": "SDFKduyJ47r"
482
+ },
483
+ "summary": "Fetch a curated list of podcasts by id",
484
+ "description": "Get detailed meta data of all podcasts in a specific curated list.\nThis endpoint returns same data as https://www.listennotes.com/curated-podcasts/"
485
+ },
486
+ {
487
+ "operationId": "getGenres",
488
+ "func": "fetch_podcast_genres",
489
+ "available_from": "1.1.6",
490
+ "method": "GET",
491
+ "path": "/genres",
492
+ "parameters": [
493
+ {
494
+ "name": "top_level_only",
495
+ "in": "query",
496
+ "required": false
497
+ }
498
+ ],
499
+ "example_params": {
500
+ "top_level_only": 1
501
+ },
502
+ "summary": "Fetch a list of podcast genres",
503
+ "description": "Get a list of podcast genres that are supported in Listen Notes.\nThe genre id can be passed to other endpoints as a parameter to get podcasts in a specific genre,\ne.g., `GET /best_podcasts`, `GET /search`...\nYou may want to cache the list of genres on the client side."
504
+ },
505
+ {
506
+ "operationId": "getRegions",
507
+ "func": "fetch_podcast_regions",
508
+ "available_from": "1.1.6",
509
+ "method": "GET",
510
+ "path": "/regions",
511
+ "parameters": [],
512
+ "example_params": {},
513
+ "summary": "Fetch a list of supported countries/regions for best podcasts",
514
+ "description": "It returns a dictionary of country codes (e.g., us, gb...) & country names (United States, United Kingdom...). The country code is used in the query parameter **region** of `GET /best_podcasts`."
515
+ },
516
+ {
517
+ "operationId": "getLanguages",
518
+ "func": "fetch_podcast_languages",
519
+ "available_from": "1.1.6",
520
+ "method": "GET",
521
+ "path": "/languages",
522
+ "parameters": [],
523
+ "example_params": {},
524
+ "summary": "Fetch a list of supported languages for podcasts",
525
+ "description": "Get a list of languages that are supported in Listen Notes database. You can use the language string as query parameter in `GET /search`."
526
+ },
527
+ {
528
+ "operationId": "justListen",
529
+ "func": "just_listen",
530
+ "available_from": "1.1.6",
531
+ "method": "GET",
532
+ "path": "/just_listen",
533
+ "parameters": [],
534
+ "example_params": {},
535
+ "summary": "Fetch a random podcast episode",
536
+ "description": "Recently published episodes are more likely to be fetched. Good luck!"
537
+ },
538
+ {
539
+ "operationId": "getCuratedPodcasts",
540
+ "func": "fetch_curated_podcasts_lists",
541
+ "available_from": "1.1.6",
542
+ "method": "GET",
543
+ "path": "/curated_podcasts",
544
+ "parameters": [
545
+ {
546
+ "name": "page",
547
+ "in": "query",
548
+ "required": false
549
+ }
550
+ ],
551
+ "example_params": {
552
+ "page": 2
553
+ },
554
+ "summary": "Fetch curated lists of podcasts",
555
+ "description": "A bunch of curated lists from online media. For each list, you'll get basic info of up to 5 podcasts. To get detailed meta data of all podcasts in a specific list, you need to use `GET /curated_podcasts/{id}`. We add new curated lists to the database on a daily basis."
556
+ },
557
+ {
558
+ "operationId": "getPodcastRecommendations",
559
+ "func": "fetch_recommendations_for_podcast",
560
+ "available_from": "1.1.6",
561
+ "method": "GET",
562
+ "path": "/podcasts/{id}/recommendations",
563
+ "parameters": [
564
+ {
565
+ "name": "id",
566
+ "in": "path",
567
+ "required": true
568
+ },
569
+ {
570
+ "name": "safe_mode",
571
+ "in": "query",
572
+ "required": false
573
+ }
574
+ ],
575
+ "example_params": {
576
+ "id": "25212ac3c53240a880dd5032e547047b",
577
+ "safe_mode": 0
578
+ },
579
+ "summary": "Fetch recommendations for a podcast",
580
+ "description": "Fetch up to 8 podcast recommendations based on the given podcast id."
581
+ },
582
+ {
583
+ "operationId": "getEpisodeRecommendations",
584
+ "func": "fetch_recommendations_for_episode",
585
+ "available_from": "1.1.6",
586
+ "method": "GET",
587
+ "path": "/episodes/{id}/recommendations",
588
+ "parameters": [
589
+ {
590
+ "name": "id",
591
+ "in": "path",
592
+ "required": true
593
+ },
594
+ {
595
+ "name": "safe_mode",
596
+ "in": "query",
597
+ "required": false
598
+ }
599
+ ],
600
+ "example_params": {
601
+ "id": "254444fa6cf64a43a95292a70eb6869b",
602
+ "safe_mode": 0
603
+ },
604
+ "summary": "Fetch recommendations for an episode",
605
+ "description": "Fetch up to 8 episode recommendations based on the given episode id."
606
+ },
607
+ {
608
+ "operationId": "submitPodcast",
609
+ "func": "submit_podcast",
610
+ "available_from": "1.1.6",
611
+ "method": "POST",
612
+ "path": "/podcasts/submit",
613
+ "parameters": [
614
+ {
615
+ "name": "rss",
616
+ "in": "body",
617
+ "required": true
618
+ },
619
+ {
620
+ "name": "email",
621
+ "in": "body",
622
+ "required": false
623
+ }
624
+ ],
625
+ "example_params": {
626
+ "rss": "https://feeds.megaphone.fm/committed",
627
+ "email": "hello@example.com"
628
+ },
629
+ "summary": "Submit a podcast to Listen Notes database",
630
+ "description": "Podcast hosting services can use this endpoint to help your users directly submit a new podcast to Listen Notes database. If the podcast doesn't exist in the database, \"status\" in the response will be \"in review\", and we'll review it within 12 hours. If the podcast exists, \"status\" in the response will be \"found\". If this submission is rejected, \"status\" in the response will be \"rejected\". You can use `POST /podcasts` to check if multiple podcasts exist in the database. If you want to get a notification once the podcast is accepted, you can either specify the \"email\" parameter or configure a webhook url in the dashboard: listennotes.com/api/dashboard/#webhooks"
631
+ },
632
+ {
633
+ "operationId": "getPlaylistById",
634
+ "func": "fetch_playlist_by_id",
635
+ "available_from": "1.1.6",
636
+ "method": "GET",
637
+ "path": "/playlists/{id}",
638
+ "parameters": [
639
+ {
640
+ "name": "id",
641
+ "in": "path",
642
+ "required": true
643
+ },
644
+ {
645
+ "name": "type",
646
+ "in": "query",
647
+ "required": false
648
+ },
649
+ {
650
+ "name": "last_timestamp_ms",
651
+ "in": "query",
652
+ "required": false
653
+ },
654
+ {
655
+ "name": "sort",
656
+ "in": "query",
657
+ "required": false
658
+ }
659
+ ],
660
+ "example_params": {
661
+ "id": "m1pe7z60bsw",
662
+ "type": "episode_list",
663
+ "last_timestamp_ms": 0,
664
+ "sort": "recent_added_first"
665
+ },
666
+ "summary": "Fetch a playlist's info and items (i.e., episodes or podcasts).",
667
+ "description": "A playlist can contain both episodes and podcasts, shown in separate views,\njust like playlists created via listennotes.com/listen/.\nThis endpoint fetches items from the saved default view unless **type** is specified.\nThe response type and listennotes_url describe the selected view.\nYou can use the **last_pub_date_ms** parameter to do pagination and fetch more items.\nA playlist can be **public** (discoverable on ListenNotes.com),\n**unlisted** (accessible to anyone who knows the playlist id),\nor **private** (accessible when the API admin has active playlist membership).\nPublic and unlisted playlists can also be fetched by ID regardless of their owner."
668
+ },
669
+ {
670
+ "operationId": "getPlaylists",
671
+ "func": "fetch_my_playlists",
672
+ "available_from": "1.1.6",
673
+ "method": "GET",
674
+ "path": "/playlists",
675
+ "parameters": [
676
+ {
677
+ "name": "sort",
678
+ "in": "query",
679
+ "required": false
680
+ },
681
+ {
682
+ "name": "page",
683
+ "in": "query",
684
+ "required": false
685
+ }
686
+ ],
687
+ "example_params": {
688
+ "sort": "recent_added_first",
689
+ "page": 1
690
+ },
691
+ "summary": "Fetch a list of your playlists.",
692
+ "description": "This endpoint lists playlists with an active membership for the API admin, including playlists they created or joined.\nEach playlist includes its saved default **type** and a **listennotes_url** for that view.\nYou can use the **page** parameter to do pagination and fetch more playlists."
693
+ },
694
+ {
695
+ "operationId": "getPodcastAudience",
696
+ "func": "fetch_audience_for_podcast",
697
+ "available_from": "1.1.6",
698
+ "method": "GET",
699
+ "path": "/podcasts/{id}/audience",
700
+ "parameters": [
701
+ {
702
+ "name": "id",
703
+ "in": "path",
704
+ "required": true
705
+ }
706
+ ],
707
+ "example_params": {
708
+ "id": "25212ac3c53240a880dd5032e547047b"
709
+ },
710
+ "summary": "Fetch audience demographics for a podcast",
711
+ "description": "Fetch audience demographics for a podcast - 1) directly measured on the Listen Notes platform; 2) only supports audience breakdown by regions for now; 3) not every podcast has data."
712
+ },
713
+ {
714
+ "operationId": "getPodcastsByDomainName",
715
+ "func": "fetch_podcasts_by_domain",
716
+ "available_from": "1.1.6",
717
+ "method": "GET",
718
+ "path": "/podcasts/domains/{domain_name}",
719
+ "parameters": [
720
+ {
721
+ "name": "domain_name",
722
+ "in": "path",
723
+ "required": true
724
+ },
725
+ {
726
+ "name": "page",
727
+ "in": "query",
728
+ "required": false
729
+ }
730
+ ],
731
+ "example_params": {
732
+ "domain_name": "nytimes.com",
733
+ "page": 1
734
+ },
735
+ "summary": "Fetch podcasts by a publisher's domain name",
736
+ "description": "Fetch podcasts by a publisher's domain name, e.g., nytimes.com, wondery.com, npr.org...\nEach request will return up to 10 podcasts. You can use the `page` parameter to paginate."
737
+ },
738
+ {
739
+ "operationId": "createPlaylist",
740
+ "func": "create_playlist",
741
+ "available_from": "3.0.0",
742
+ "method": "POST",
743
+ "path": "/playlists",
744
+ "parameters": [
745
+ {
746
+ "name": "name",
747
+ "in": "body",
748
+ "required": true
749
+ },
750
+ {
751
+ "name": "description",
752
+ "in": "body",
753
+ "required": false
754
+ },
755
+ {
756
+ "name": "visibility",
757
+ "in": "body",
758
+ "required": false
759
+ },
760
+ {
761
+ "name": "type",
762
+ "in": "body",
763
+ "required": false
764
+ }
765
+ ],
766
+ "example_params": {
767
+ "name": "My favorite podcasts",
768
+ "description": "Podcasts and episodes to revisit.",
769
+ "visibility": "public",
770
+ "type": "episode_list"
771
+ },
772
+ "summary": "Create a playlist.",
773
+ "description": "Create an empty playlist owned by the API admin. Name is required; description defaults to an empty string, visibility defaults to public, and type defaults to episode_list. Set type to podcast_list to make podcasts the default view. The response includes the saved type and its listennotes_url.\n\nOnly playlists owned by your admin API account can be modified; contributor membership does not grant write access."
774
+ },
775
+ {
776
+ "operationId": "updatePlaylist",
777
+ "func": "update_playlist",
778
+ "available_from": "3.0.0",
779
+ "method": "PUT",
780
+ "path": "/playlists/{id}",
781
+ "parameters": [
782
+ {
783
+ "name": "id",
784
+ "in": "path",
785
+ "required": true
786
+ },
787
+ {
788
+ "name": "name",
789
+ "in": "body",
790
+ "required": false
791
+ },
792
+ {
793
+ "name": "description",
794
+ "in": "body",
795
+ "required": false
796
+ },
797
+ {
798
+ "name": "visibility",
799
+ "in": "body",
800
+ "required": false
801
+ },
802
+ {
803
+ "name": "type",
804
+ "in": "body",
805
+ "required": false
806
+ }
807
+ ],
808
+ "example_params": {
809
+ "id": "m1pe7z60bsw",
810
+ "name": "My favorite podcasts",
811
+ "description": "Podcasts and episodes to revisit.",
812
+ "visibility": "public",
813
+ "type": "podcast_list"
814
+ },
815
+ "summary": "Update playlist metadata.",
816
+ "description": "Update any subset of name, description, visibility, and type. Omitted fields remain unchanged; at least one field is required. Switching to private rotates the playlist RSS secret. Type selects the saved default view (episode_list or podcast_list) and the returned listennotes_url; changing it preserves all existing episodes and podcasts.\n\nOnly playlists owned by your admin API account can be modified; contributor membership does not grant write access."
817
+ },
818
+ {
819
+ "operationId": "addPlaylistItem",
820
+ "func": "add_playlist_item",
821
+ "available_from": "3.0.0",
822
+ "method": "POST",
823
+ "path": "/playlists/{id}/items",
824
+ "parameters": [
825
+ {
826
+ "name": "id",
827
+ "in": "path",
828
+ "required": true
829
+ },
830
+ {
831
+ "name": "episode_id",
832
+ "in": "body",
833
+ "required": false
834
+ },
835
+ {
836
+ "name": "podcast_id",
837
+ "in": "body",
838
+ "required": false
839
+ },
840
+ {
841
+ "name": "notes",
842
+ "in": "body",
843
+ "required": false
844
+ }
845
+ ],
846
+ "example_params": {
847
+ "id": "m1pe7z60bsw",
848
+ "episode_id": "e53e6992a5b7492f9ea6fcd85d9ad95f",
849
+ "notes": "Worth a listen."
850
+ },
851
+ "summary": "Add an episode or podcast to a playlist.",
852
+ "description": "Provide exactly one non-empty episode_id or podcast_id; an empty unused ID field is ignored. Invalid ID formats return 400 and identify the field. A missing episode or podcast returns 404 with an error such as \"Episode not found: {episode_id}.\" or \"Podcast not found: {podcast_id}.\". Existing active items are reused (200); new or restored items return 201. Omitted notes preserve existing notes, including when restoring a deleted item; supplied notes replace them."
853
+ },
854
+ {
855
+ "operationId": "deletePlaylistItem",
856
+ "func": "delete_playlist_item",
857
+ "available_from": "3.0.0",
858
+ "method": "DELETE",
859
+ "path": "/playlists/{id}/items/{item_id}",
860
+ "parameters": [
861
+ {
862
+ "name": "id",
863
+ "in": "path",
864
+ "required": true
865
+ },
866
+ {
867
+ "name": "item_id",
868
+ "in": "path",
869
+ "required": true
870
+ }
871
+ ],
872
+ "example_params": {
873
+ "id": "m1pe7z60bsw",
874
+ "item_id": 23
875
+ },
876
+ "summary": "Remove an item from a playlist.",
877
+ "description": "Delete a playlist item. Repeating deletion of the same item succeeds. This does not delete the episode or podcast from the podcast database.\n\nOnly playlists owned by your admin API account can be modified; contributor membership does not grant write access."
878
+ },
879
+ {
880
+ "operationId": "updatePlaylistItemNotes",
881
+ "func": "update_playlist_item_notes",
882
+ "available_from": "3.0.0",
883
+ "method": "PUT",
884
+ "path": "/playlists/{id}/items/{item_id}",
885
+ "parameters": [
886
+ {
887
+ "name": "id",
888
+ "in": "path",
889
+ "required": true
890
+ },
891
+ {
892
+ "name": "item_id",
893
+ "in": "path",
894
+ "required": true
895
+ },
896
+ {
897
+ "name": "notes",
898
+ "in": "body",
899
+ "required": true
900
+ }
901
+ ],
902
+ "example_params": {
903
+ "id": "m1pe7z60bsw",
904
+ "item_id": 23,
905
+ "notes": ""
906
+ },
907
+ "summary": "Update notes for a playlist item.",
908
+ "description": "Replace item notes, or send an empty string to clear them. The item ID and added_at_ms remain unchanged.\n\nOnly playlists owned by your admin API account can be modified; contributor membership does not grant write access."
909
+ }
910
+ ]
911
+ }