NTS APInts.live ↗
Search NTS Radio episodes, retrieve channel broadcast schedules, and fetch full episode details with ordered tracklists via a clean JSON API.
What is the NTS API?
The NTS Radio API exposes 3 endpoints covering episode search, channel schedules, and full episode details — including ordered tracklists with per-track artist, title, offset, and duration fields. Use search_episodes to query the archive by title, genre, description, or artist name, get_schedule to pull broadcast listings for a given channel across a configurable date window, and get_episode to retrieve a complete tracklist and metadata for any specific broadcast.
curl -X GET 'https://api.parse.bot/scraper/1a0941ac-9eba-4a19-8541-1d75c14be09d/search_episodes?limit=5&query=ambient&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace nts-live-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: NTS Radio SDK — search episodes, browse schedules, get tracklists."""
from parse_apis.nts_live_api import NTS, Channel, EpisodeNotFound
nts = NTS()
# Search the archive for ambient episodes
for hit in nts.episodes.search(query="ambient", limit=3):
print(hit.title, hit.local_date, hit.genres)
# Get the schedule for channel 1
for day in nts.schedule(channel=Channel.CHANNEL_1).get(past_days=1, limit=5):
print(day.date, day.day_of_week, len(day.broadcasts), "broadcasts")
# Drill into a specific episode for full detail + tracklist
try:
episode = nts.episodes.get(show_alias="macca", episode_alias="macca-11th-july-2026")
print(episode.show_name, episode.broadcast, episode.location)
for track in episode.tracklist[:3]:
print(f" {track.artist} - {track.title}")
except EpisodeNotFound as exc:
print(f"Episode not found: {exc.show_alias}/{exc.episode_alias}")
print("exercised: episodes.search / schedule.get / episodes.get / tracklist access")
Full-text search across NTS Radio shows and episodes. Results include episodes and shows matching the query by title, description, genre, or artist. Each item carries its article_type (episode or show), path for drill-down, genres, and broadcast date.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return per request (max 36). |
| queryrequired | string | Search query matching episode titles, show names, descriptions, genres, and artists. |
| offset | integer | Number of results to skip for pagination. |
{
"type": "object",
"fields": {
"limit": "integer",
"total": "integer",
"offset": "integer",
"results": "array of search result objects with article_type, title, path, description, local_date, location, genres, moods, image"
},
"sample": {
"data": {
"limit": 5,
"total": 5913,
"offset": 0,
"results": [
{
"path": "/shows/claire-milbrath/episodes/claire-milbrath-3rd-june-2026",
"image": "https://media.ntslive.co.uk/resize/800x800/...jpeg",
"moods": [
"The Healing Place"
],
"title": "Claire Milbrath - Ambient Mix",
"genres": [
"Ambient"
],
"location": "",
"local_date": "03 Jun 2026",
"description": "Visual artist and founder...",
"article_type": "episode"
}
]
},
"status": "success"
}
}About the NTS API
Search the Archive
The search_episodes endpoint accepts a free-text query and returns up to 36 results per request, paginated via limit and offset. Each result includes article_type (episode or show), title, path, description, local_date, location, genres, and moods. The path field is the key to drill down further — the show and episode slugs embedded in it feed directly into get_episode.
Channel Schedules
get_schedule returns a day-by-day broadcast listing for a specified NTS channel. The past_days parameter controls how far back the window reaches, so passing 1 gives yesterday and today. Each day object contains a date, day_of_week, and an ordered broadcasts array with titles, start and end times, and paths you can resolve to full episode records.
Episode Detail and Tracklists
get_episode takes a show_alias and episode_alias — both extractable from the path fields returned by the other two endpoints — and returns the full episode record. This includes show_name, ISO 8601 broadcast timestamp, location, genres, moods, description, replay_url, and a tracklist array. Each tracklist entry carries artist, title, offset (seconds from broadcast start), and duration (seconds), making it possible to reconstruct a time-stamped playlist for any archived episode.
The NTS API is a managed, monitored endpoint for nts.live — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when nts.live changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official nts.live API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a searchable NTS archive browser filtered by genre or artist name using
search_episodes. - Display a live or recent broadcast schedule for NTS 1 or NTS 2 with
get_schedule. - Extract ordered tracklists from NTS episodes to populate a music discovery or logging tool.
- Cross-reference NTS tracklist data (
artist,title) against a music database to surface play counts. - Monitor which locations NTS broadcasts originate from by aggregating the
locationfield across episodes. - Build a mood- or genre-based episode recommendation feed using
moodsandgenresfrom search results. - Archive timestamped playlists for specific NTS shows by combining
offsetandbroadcastfields fromget_episode.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does NTS Radio have an official public developer API?+
What does the tracklist in `get_episode` actually contain?+
tracklist array includes artist, title, offset (seconds from the start of the broadcast), and duration (seconds). The list is ordered, so you can reconstruct the full time-stamped sequence of tracks played during a given episode.How do I get the `show_alias` and `episode_alias` needed by `get_episode`?+
path field returned by search_episodes and get_schedule. For example, a path like /shows/macca/episodes/macca-11th-july-2026 yields show_alias: macca and episode_alias: macca-11th-july-2026.Does the API expose NTS Infinite or guest mix content separately from regular episodes?+
article_type classification. The API covers episode search, schedule listings, and tracklist retrieval. You can fork it on Parse and revise it to add an endpoint that filters or categorises content by format.Is pagination supported for episode search results?+
search_episodes accepts limit (max 36) and offset parameters. The response also returns total so you can calculate how many pages exist for a given query and iterate through the full result set.