# Listen API: Podcast Search, Directory, and Insights API API

> Listen API: Podcast Search, Directory, and Insights API API on Apizie: 24 endpoints (Fetch a list of best podcasts by genre, Fetch curated lists of podcasts, Fetch a curated list of podcasts by id, Batch fetch basic meta data for episodes, …) returned as clean JSON through one API key. 24 endpoints are live now. Call it over REST at https://zieapi.vercel.app/v1/entertainment:listennotes/{endpoint} or from Claude, ChatGPT and Cursor through the Apizie MCP server. Free plan: 1,000 requests a month.

- Project key: `entertainment:listennotes`
- Category: Entertainment
- Status: live
- Source: https://www.listennotes.com/api/
- Page: https://zieapi.vercel.app/api/entertainment/listennotes
- OpenAPI: https://zieapi.vercel.app/api/entertainment/listennotes/openapi.json

Simple & no-nonsense podcast search & directory API. Search all podcasts and episodes by people, places, or topics.

## Endpoints

### Fetch a list of best podcasts by genre
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-best-podcasts`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| genre_id | string | no | You can get the id from `GET /genres`. If not specified, it'll be the overall best podcasts, which can be considered as a special genre. |
| page | integer | no | Page number of those podcasts in this genre. |
| region | string | no | Filter best podcasts by country/region. Please note that podcasts that are "best" in a country/region may not be produced in that… |
| publisher_region | string | no | Filter best podcasts by the publisher's country/region. This is to narrow down the results to include "best podcasts" produced in a… |
| language | string | no | Filter best podcasts by language. You can get a list of supported languages (e.g., English, Chinese, Japanese...) from `GET /languages`.… |
| sort | string | no | How do you want to sort these podcasts? If you'd like to sort by popularity, please use **listen_score**. |
| safe_mode | integer | no | Whether or not to exclude podcasts with explicit language. 1 is yes, and 0 is no. |

### Fetch curated lists of podcasts
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-curated-podcasts`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| page | integer | no | Page number of curated lists. |

### Fetch a curated list of podcasts by id
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-curated-podcast-by-id`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | id for a specific curated list of podcasts. You can get the id from the response of `GET /search?type=curated` or `GET /curated_podcasts`. |

### Batch fetch basic meta data for episodes
`POST https://zieapi.vercel.app/v1/entertainment:listennotes/get-episodes-in-batch`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| body | object | yes | Form fields as a JSON object |

### Fetch detailed meta data for an episode by id
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-episode-by-id`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | id for a specific episode. You can get episode id from using other endpoints, e.g., `GET /search`... |
| show_transcript | integer | no | To include the transcript of this episode or not? If it is 1, then include the transcript in the **transcript** field. The default value… |

### Fetch recommendations for an episode
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-episode-recommendations`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | Episode id. |
| safe_mode | integer | no | Whether or not to exclude podcasts with explicit language. 1 is yes, and 0 is no. |

### Fetch a list of podcast genres
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-genres`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| top_level_only | integer | no | Just show top level genres? If 1, yes, just show top level genres. If 0, no, show all genres. |

### Fetch a random podcast episode
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/just-listen`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |

### Fetch a list of supported languages for podcasts
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-languages`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |

### Fetch a list of your playlists.
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-playlists`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| sort | string | no | How do you want to sort playlists? |
| page | integer | no | Page number of playlists. |

### Fetch a playlist's info and items (i.e., episodes or podcasts).
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-playlist-by-id`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | Playlist id (always 11 characters, e.g., m1pe7z60bsw). You can get the podcast id from the url of a playlist, e.g., m1pe7z60bsw is the… |
| type | string | no | The type of this playlist, which should be either **episode_list** or **podcast_list**. |
| last_timestamp_ms | integer | no | For playlist items pagination. It's the value of **last_timestamp_ms** from the response of last request. If it's 0 or not specified, just… |
| sort | string | no | How do you want to sort playlist items? |

### Batch fetch basic meta data for podcasts
`POST https://zieapi.vercel.app/v1/entertainment:listennotes/get-podcasts-in-batch`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| body | object | no | Form fields as a JSON object |

### Fetch podcasts by a publisher's domain name
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-podcasts-by-domain-name`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| domain_name | string | yes | A publisher's domain name, e.g., nytimes.com, wondery.com, npr.org... |
| page | integer | no | Page number of the podcasts from this domain name |

### Submit a podcast to Listen Notes database
`POST https://zieapi.vercel.app/v1/entertainment:listennotes/submit-podcast`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| body | object | yes | Form fields as a JSON object |

### Fetch detailed meta data and episodes for a podcast by id
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-podcast-by-id`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | Podcast id. You can get podcast id from using other endpoints, e.g., `GET /search`, `GET /best_podcasts`... |
| next_episode_pub_date | integer | no | For episodes pagination. It's the value of **next_episode_pub_date** from the response of last request. If not specified, just return… |
| sort | string | no | How do you want to sort the episodes of this podcast? |

### Request to delete a podcast
`POST https://zieapi.vercel.app/v1/entertainment:listennotes/delete-podcast-by-id`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | Podcast id. You can get podcast id from using other endpoints, e.g., `GET /search`, `GET /best_podcasts`... |
| reason | string | no | The reason why this podcast should be deleted, e.g., copyright violation, the podcaster wants to delete it... You can put "testing" here… |

### Fetch audience demographics for a podcast
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-podcast-audience`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | Podcast id. |

### Fetch recommendations for a podcast
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-podcast-recommendations`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| id | string | yes | Podcast id. |
| safe_mode | integer | no | Whether or not to exclude podcasts with explicit language. 1 is yes, and 0 is no. |

### Fetch a list of supported countries/regions for best podcasts
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-regions`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |

### Fetch related search terms
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-related-searches`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| q | string | yes | Search term, e.g., person, place, topic... |

### Full-text search
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/search`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| q | string | yes | Search term, e.g., person, place, topic... You can use double quotes to do verbatim match, e.g., "game of thrones". Otherwise, it's fuzzy… |
| sort_by_date | integer | no | Sort by date or not? If 0, then sort by relevance. If 1, then sort by date. |
| type | string | no | What type of contents do you want to search for? |
| offset | integer | no | Offset for search results, for pagination. You'll use **next_offset** from response for this parameter. |
| len_min | integer | no | Minimum audio length in minutes. Applicable only when **type** parameter is **episode** or **podcast**. If **type** parameter is… |
| len_max | integer | no | Maximum audio length in minutes. Applicable only when **type** parameter is **episode** or **podcast**. If **type** parameter is… |
| episode_count_min | integer | no | Minimum number of episodes. Applicable only when type parameter is **podcast**. |
| episode_count_max | integer | no | Maximum number of episodes. Applicable only when type parameter is **podcast**. |
| update_freq_min | integer | no | Minimum update frequency in hours (how frequently does a podcast release a new episode). For example, if you want to find "weekly"… |
| update_freq_max | integer | no | Maximum update frequency in hours (how frequently does a podcast release a new episode). For example, if you want to find "weekly"… |
| genre_ids | string | no | A comma-delimited string of a list of genre ids. If not specified, then all genres are included. You can find the id and the name of all… |
| published_before | integer | no | Only show episodes/podcasts/curated lists published before this timestamp (in milliseconds). If **published_before** & **published_after**… |
| published_after | integer | no | Only show episodes/podcasts/curated lists published after this timestamp (in milliseconds). If **published_before** & **published_after**… |
| only_in | string | no | A comma-delimited string to search only in specific fields. Allowed values are title, description, author, and audio. If not specified,… |
| language | string | no | Limit search results to a specific language. If not specified, it'll be any language. You can get a list of supported languages from `GET… |
| region | string | no | Limit search results to a specific region (e.g., us, gb, in...). If not specified, it'll be any region. You can get the supported country… |
| ocid | string | no | A comma-delimited string of podcast ids (up to 5 podcasts) - you can get a podcast id from the **podcast_id** field in response. This… |
| ncid | string | no | A comma-delimited string of podcast ids (up to 5 podcasts) - you can get a podcast id from the **podcast_id** field in response. This… |
| safe_mode | integer | no | Whether or not to exclude podcasts/episodes with explicit language. 1 is yes and 0 is no. It works only when **type** is *episode* or… |
| unique_podcasts | integer | no | Whether or not to keep only one episode per podcast in search results. 1 is yes and 0 is no. It works only when **type** is *episode*. |
| page_size | integer | no | The maximum number of search results per page. A valid value should be an integer between 1 and 10 (inclusive). |

### Spell check on a search term
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/spellcheck`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| q | string | yes | Search term, e.g., person, place, topic... |

### Fetch trending search terms
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-trending-searches`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |

### Typeahead search
`GET https://zieapi.vercel.app/v1/entertainment:listennotes/typeahead`

| Parameter | Type | Required | Description |
|---|---|---|---|
| X-ListenAPI-Key | string | yes | Get API Key on listennotes.com/api |
| q | string | yes | Search term, e.g., person, place, topic... You can use double quotes to do verbatim match, e.g., "game of thrones". Otherwise, it's fuzzy… |
| show_podcasts | integer | no | Autosuggest podcasts. This only searches podcast title and publisher and returns very limited info of 5 podcasts. 1 is yes, 0 is no. It's… |
| show_genres | integer | no | Whether or not to autosuggest genres. 1 is yes, 0 is no. |
| safe_mode | integer | no | Whether or not to exclude podcasts/episodes with explicit language. 1 is yes and 0 is no. It works only when **show_podcasts** is *1*. |

## Example
```
curl "https://zieapi.vercel.app/v1/entertainment:listennotes/get-best-podcasts" \
  -H "x-api-key: $APIZIE_KEY"
```

## FAQ

### How do I call the Listen API: Podcast Search, Directory, and Insights API API?
Create a free Apizie key, then send GET https://zieapi.vercel.app/v1/entertainment:listennotes/get-best-podcasts with the header x-api-key. Every endpoint returns { project, data, timestamp }.

### Is the Listen API: Podcast Search, Directory, and Insights API API free on Apizie?
Yes. The Free plan includes 1,000 requests a month at 100 requests a minute, no credit card.

### Can AI agents use the Listen API: Podcast Search, Directory, and Insights API API?
Yes. Add the Apizie MCP server (https://zieapi.vercel.app/mcp) to Claude, ChatGPT, Cursor or VS Code, then ask in plain language. The agent calls run_scraper with project key entertainment:listennotes.

### What is the status of the Listen API: Podcast Search, Directory, and Insights API API?
Live: works with just an Apizie key
