# Radio Paradise — Wrapped API

> **You are on:** `https://api.paywithlocus.com/api` | [llms.txt](https://paywithlocus.com/llms.txt) | [docs](https://docs.paywithlocus.com)
>
> Locus runs on multiple environments -- make sure every URL you call matches your expected environment.
> | Environment | Landing | API | Docs |
> |---|---|---|---|
> | Production | paywithlocus.com | api.paywithlocus.com | docs.paywithlocus.com |
> | Beta | beta.paywithlocus.com | api.beta.paywithlocus.com | docs.paywithlocus.com |
> | Stage | stage.paywithlocus.com | api.stage.paywithlocus.com | docs.paywithlocus.com |
>
> If the API URL above doesn't match your expected environment, re-fetch this file from the correct domain.

> Access live and historical music data from Radio Paradise, including current song information, channel details, playlists, and stream links. Search music tracks, browse channel listings, read song comments, and discover what's playing in real-time across all Radio Paradise stations.

**Category:** Music | **Website:** [radioparadise.com/](https://radioparadise.com/) | **Docs:** [parse.bot/marketplace/c228beb5-9535-4b84-b0ea-2c42aceda691/radioparadise-com-api](https://parse.bot/marketplace/c228beb5-9535-4b84-b0ea-2c42aceda691/radioparadise-com-api)

Pay-per-use API proxy. Each call is automatically billed to your wallet in USDC.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/`
**Auth:** `Authorization: Bearer <LOCUS_API_KEY>`

## Endpoints

### get_channel_details

Get channel-specific metadata from the CMS including theme color, summary description, DJ name and biography, and banner images. Returns a Strapi-style response with nested attributes.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `channel_id` | string | No | Channel ID (0=Main Mix, 1=Mellow, 2=Rock, 3=Global, 5=Beyond, 42=Serenity, 945=KFAT, 2050=Radio 2050) |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_channel_details \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel_id":"<string>"}'
```

### get_now_playing

Get the currently playing track on a specific channel. Returns artist, title, album, year, remaining duration in seconds, and cover art URLs at multiple sizes. The time field counts down as the track plays.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `channel_id` | string | No | Channel ID (0=Main Mix, 1=Mellow, 2=Rock, 3=Global, 5=Beyond, 42=Serenity, 945=KFAT, 2050=Radio 2050) |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_now_playing \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel_id":"<string>"}'
```

### get_playlist_history

Get the recent playlist history for a specific channel. Returns the last several tracks played with metadata including event IDs (used as offsets for pagination via get_playlist_history_more), song_id, artist, title, album, duration, and listener rating.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `channel_id` | string | No | Channel ID (0=Main Mix, 1=Mellow, 2=Rock, 3=Global, 5=Beyond, 42=Serenity, 945=KFAT, 2050=Radio 2050) |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_playlist_history \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel_id":"<string>"}'
```

### get_playlist_history_more

Get older playlist history for a channel using an event ID offset from a previous get_playlist_history or get_playlist_history_more response. Returns the next batch of older tracks in the same format.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `channel_id` | string | No | Channel ID (0=Main Mix, 1=Mellow, 2=Rock, 3=Global, 5=Beyond, 42=Serenity, 945=KFAT, 2050=Radio 2050) |
| `offset` | string | Yes | Event ID to use as offset for pagination, obtained from the event field of a track in a previous get_playlist_history or get_playlist_history_more response. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_playlist_history_more \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel_id":"<string>","offset":"<string>"}'
```

### get_song_comments

Get user comments for a specific song, ordered by most popular. Returns up to 20 comments per request with username, message, upvotes, downvotes, and posted_time. Includes total_comments count and more_comments boolean for pagination awareness.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `song_id` | string | Yes | Numeric song ID (e.g. from get_playlist_history results or get_song_info). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_song_comments \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"song_id":"<string>"}'
```

### get_song_details

Get full details for a specific song by its ID. Returns artist wiki/biography as HTML, lyrics, ratings distribution (10-bucket array), cover art, release date, total comments count, and external links. Use song_id from get_playlist_history or get_song_info.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `song_id` | string | Yes | Numeric song ID (e.g. from get_playlist_history results or get_song_info). |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_song_details \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"song_id":"<string>"}'
```

### get_song_info

Get detailed information about the currently playing song on a channel. Returns song_id, artist, title, album, average rating, number of ratings, lyrics availability, release date, duration, cover art, and social/external links. More comprehensive than get_now_playing.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `channel_id` | string | No | Channel ID (0=Main Mix, 1=Mellow, 2=Rock, 3=Global, 5=Beyond, 42=Serenity, 945=KFAT, 2050=Radio 2050) |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_song_info \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"channel_id":"<string>"}'
```

### get_stream_links

Get static stream URLs for all channels in various formats and bitrates. Returns AAC (32k/64k/128k/320k), MP3 (192k), Ogg Vorbis (192k), and FLAC streams for each channel. No upstream API call; URLs are constructed from known patterns.

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/get_stream_links \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

### list_channels

Get all Radio Paradise channels with basic metadata. Returns channel IDs, names, slugs, current listener counts, stream URLs, cover images, and player configuration. The response contains an items array of all active channels.

**Estimated cost:** Metered

_No parameters required._

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-radioparadise-com-api-c228beb5/list_channels \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```
