ERICADE Radio API v2 Documentation

Base URL: https://api.ericade.net/ — all v2 endpoints live under /radio/v2/.
(Updated: 2026-08-14) See also the v1 documentation for the original /radio/ endpoints.

Conventions

Unless stated otherwise, every v2 endpoint follows the same pattern:

Response envelopes

Endpoints that return data echo their JSON payload directly (for example {"Tracks": [...]}). Endpoints that only perform an action use one of three different envelope shapes — check which one applies before writing a client:

ShapeUsed byExample
message / subcode / submessageAll failures on the data endpoints, plus nextup.{"message":"Failure","subcode":"FALSE","submessage":"You need to specify a StationID."}
Success / Messageaddrequest and settings. Note the capitalised keys.{"Success":"Success","Message":"Override updated."}
success / messagerating. success is a real JSON boolean here, not a string.{"success":true,"message":"Stars updated."}

Status codes

CodeMeaning
200Success. The body is the endpoint’s payload or a success envelope.
204Nothing has changed since the Sequence value you sent. Keep displaying the previously received data.
400Validation failure, missing/invalid credentials, unknown endpoint, or a caller outside the allowed IP range.
429Rate limited — see below.
Do not branch on the status code alone. nowplaying, search, songs, the track listing and the artist endpoints return their failure envelope with HTTP 200. Always check the message field of the body.

Rate limiting (HTTP 429)

Every endpoint runs a shared per-IP throttle before doing any work. Each caller gets a rolling window with a maximum request count; exceeding it starts a temporary ban, and the request that triggered the ban is itself rejected. While banned, every request — to any endpoint — returns:

HTTP 429 Too Many Requests  +  Retry-After: <seconds>
{
  "message": "Failure",
  "subcode": "Too Many Requests",
  "submessage": "You have been throttled due to too many requests. Please try again in 600 seconds."
}
AttributeDescriptionExample
Retry-After (header)Seconds remaining on the ban. Honour this value rather than retrying on a fixed timer.600
messageAlways Failure.Failure
subcodeAlways Too Many Requests. Use this to distinguish a throttle from an ordinary failure.Too Many Requests
submessageHuman-facing message including the remaining wait, suitable for display.You have been throttled due to too many requests. Please try again in 600 seconds.
Retrying while banned does not extend it, but it does not succeed either — back off until Retry-After elapses. Polling clients should use the Sequence mechanism on Now Playing, or the Station Data WebSocket, instead of a tight poll loop. Whitelisted addresses bypass the throttle entirely.

Station IDs

StationIDStation
1ericade.radio — 24/7 tracked music
2Best of ericade.radio — podcast station

Authentication

All endpoints require a JWT token. Obtain one by making a GET request to the token endpoint:

GET https://radio.ericade.net/get-token/

The response is a raw JWT string. Pass it in your POST body — but note that the field name is not the same on every endpoint. Most read Token; a handful read Password. Sending the wrong one leaves the call unauthenticated.

Field nameEndpoints
Tokennowplaying, getnextup, songs/<trackid>, search, songs, artists, artists/<artistid>, sitemapartists, songhistory, playout, new-songs, news/<id>, stats, stats/<filtertype>, requests, rating
Passwordnews, addrequest, settings

The ingest endpoints do not use a JWT at all — they authenticate with a pre-shared secret, also sent as Password, and are additionally restricted by IP.

Token replay protection is currently disabled, but reusing tokens across sessions is still inadvisable.

Now Playing

Returns what is currently playing on a station, with comprehensive metadata about the artist and track. Also supports a bandwidth-saving sequence mechanism that returns HTTP 204 when nothing has changed.

POST https://api.ericade.net/radio/v2/nowplaying/

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesThe station to get data from.1 = ericade.radio
2 = Best of ericade.radio
SequenceYesBandwidth-saving mechanism. Send 0 to always receive a full response, or send the TimeStamp value from the previous response. If the current track’s timestamp matches the sent value the API returns HTTP 204 (no body); if it differs, a full response is returned with an updated TimeStamp.Set to 0 on non-metered connections.
DisableBufferCompensationNo0 = use buffer compensation (default), 1 = disable. The API holds the current track for a preset number of seconds to compensate for stream buffering.Should always be 0 or omitted unless explicitly needed.
ReturnPlayListNo0 = do not return PlayList (default), 1 = return PlayList.Also needed for NowPlayingOnPlaylist to be populated.
Fixed server-side on this endpoint. NowPlaying, ReturnNextUp, ReturnArtistDescription, ReturnArtistLongDescription and ReturnProductionNotes are all forced to 1 by the router, so the response always includes NextUp, the artist biography and the podcast production notes. Sending those fields has no effect — earlier revisions of this document listed NowPlaying, ReturnNextUp and ReturnArtistDescription as caller-controlled, which was incorrect. Use Track by ID if you need to switch the artist description off.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Sequence": 0,
  "ReturnPlayList": 1
}
HTTP 204: Returned when the Sequence value matches the current track’s TimeStamp. The caller should display the previously received data unchanged.

Response

Returns a {"Tracks": [...]} object. The array normally contains one entry for now-playing requests.

AttributeDescriptionExample
ArtistComplete artist field including all collaborators.Cube
TitleTrack title.My pixels are weapons
TrackUpdatedAtWhen the track’s metadata was last updated.2026-06-12 09:41:02
TrackArtistsArray of all artists linked to this track (a track can have more than one).Array[]
TrackArtists => ArtistIDUnique artist identifier.4821
TrackArtists => ArtistArtist name.Cube
TrackArtists => ShortDescriptionShort artist bio.(text)
TrackArtists => LongDescriptionFull artist bio.(text)
TrackArtists => CompositeRatingArtist rating from 0.0–5.0.4.6
TrackArtists => VotesNumber of votes the artist has received.12
TrackArtists => TotalPlaysNumber of times this artist has been played.6789
TrackArtists => DemozooLink to the artist’s profile on demozoo.org.
TrackArtists => WikipediaLink to the artist’s Wikipedia entry.
TrackArtists => CSDBLink to the artist’s C64 Scene Database profile.
TrackArtists => OtherUrlLink to the artist’s homepage or other point of interest.
TrackArtists => ModArchiveLink to the artist’s ModArchive profile.
TrackArtists => BandcampLink to the artist’s Bandcamp page.
TrackArtists => SoundCloudLink to the artist’s SoundCloud profile.
TrackArtists => YouTubeLink to the artist’s YouTube channel.
TrackArtists => PouetLink to the artist’s Pouet profile.
TrackArtists => isBroadcastProhibitedWhether broadcasting this artist’s tracks is prohibited.0 or 1
TrackArtists => isDownloadProhibitedWhether downloading this artist’s tracks is prohibited.0 or 1
StationNameStation name in plain text.24/7 tracked music
SlugURL-friendly slug for the track.https://ericade.radio/#/song/14820/mindstorm-trackerartist
StationIDStation number.1 = ericade.radio
2 = Best of ericade.radio
WebStreamingOffsetWeb streaming offset for the station in seconds. Used for webplayers.12
StreamingOffsetStreaming offset for the station in seconds. Used for all other players.10
TrackCanBeRequestedWhether this track can be requested right now.0 or 1
RequestVerdictHuman-readable reason why the track cannot be requested. Echo this string to the user.Song was played recently
CreationDateHRWhen the track was first added to the station, human-readable.2026-03-30 15:45:04
CreationDateWhen the track was first added, Unix epoch string.1774885504
AddedDate(Deprecated) Same as CreationDateHR.2026-03-30 15:45:04
TrackCanBeStarredWhether this track can receive a star rating right now.0 or 1
PodcastURL[Podcast] URL to the podcast audio file.https://radio.ericade.net/Flashback/97.mp3
EpisodeNumber[Podcast] Episode number. Empty for non-podcast tracks.97
ImageImage URL for this track.https://radio.ericade.net/images/demoscene.png
BroadcastDate[Podcast] Broadcast date of the podcast episode.2022-07-16
TitleID(Deprecated) Not in use.13770
TrackIDUnique, stable track identifier. Use this in all requests that reference a specific track.15717
TrackerTypeType/format of the track.Modern remix (demo scene)
TypeStated/inferred song type from PlayIT Live. Not actively used.Song
Tags(Deprecated) Tags associated with the track.“”
TagListList of tags associated with the track.[]
PlayLengthLength between Cue In and Cue Out in seconds (decimal, “.” separator).193.12099773243
PlayLengthHRPlay length expressed as HH:MM.03:13
BatchBatch number auto-parsed from the Album field. Format: <StationShortName>-<MonMMMYYYY>-<nn>.TERN-mar2026-03
AlbumAlbum tag from the audio file’s metadata.OriginalName:!Cube - My Pixels Are Weapons.ogg Imported:2026-03-29 (TERN-mar2026-03).
AboutShort description from the song or podcast episode.
ProductionNotes[Podcast] Production notes. Empty for non-podcast tracks.
PlayList[Podcast] Chapter list for the podcast episode. Empty for non-podcast tracks. Only returns when a specific TrackID is requested.00:00 Introduction…
Transcript[Podcast] Full transcript of the episode. Empty for non-podcast tracks.
Footer[Podcast] Footer text/show notes appended to the episode. Empty for non-podcast tracks.
Equipment[Podcast] Equipment used to record the episode. Empty for non-podcast tracks.
CompositeRatingTrack rating from 0.0–5.0. Higher is better.4.3
VotesNumber of votes the track has received.2
ArtistCompositeRatingArtist rating from 0.0–5.0.4.9
ArtistVotesNumber of votes the artist has received.0
TimeStampTrack start time as Unix epoch. Required for progress bar calculations and the Sequence mechanism.1774885504
TimeStampHumanReadableTrack start time as a human-readable date string.2026-03-30 15:45:04
TrackTotalPlaysNumber of times this track has been played on the station.313
ArtistTotalPlaysNumber of times the artist has been played. Currently reflects the first artist only; will be revised.206
ArtistLongDescriptionFull artist biography. Only populated when ReturnArtistDescription=1. Currently reflects the first artist only; will be revised.(text)
ArtistShortDescription(Deprecated) Do not use.
Demozoo, Wikipedia, CSDB, OtherUrl, ModArchive, Bandcamp, SoundCloud, YouTube, PouetTop-level copies of the first linked artist’s external links. Prefer the per-artist values inside TrackArtists, which are correct for every collaborator.https://demozoo.org/sceners/7637/
NowPlayingOnPlaylist[Podcast] [Best of ericade.radio(StationID=2)] returns the current chapter.
Requires ReturnPlayList to be set to 1 in the call to work.
Love connection by Lavizh
isListenerRequested"0" = regular rotation, "1" = listener-requested track."0" or "1"
isOverrideIf set to 0 (default), the returned data will show the currently playing track. This is the normal behavior.
If set to 1, it will show a preset text from the database. This is used to show special messages or tell the listener what live-show they're listening to.
"0" or "1"
isLiveThis value only counts if the isOverride is set to 1. It will indicate that you are listening to a live show."0" or "1"
isRemoteThis value only counts if the isOverride is set to 1. It will indicate that you are listening to a live show, broadcast from a remote location."0" or "1"
isNew"0" = not new, "1" = new track."0" or "1"
NewDaysShows the number of days a track is considered new.7
PodcastPresent in all responses. Empty string for non-podcast tracks.“”
musicURLDirect URL to the track’s audio file.https://radio.ericade.net/mods/cube-my_pixels_are_weapons.ogg
musicURLFlacDirect URL to the track’s FLAC audio file, when available. Empty if no FLAC version exists.
musicURLOriginal(Not yet implemented) Intended to be the direct URL to the track’s original tracker file (.mod, .it, .xm and so on). The resolver behind it is a stub, so it is currently an empty string on every endpoint — as is the original entry in Media. Do not build a download option on it yet.
MediaThe three URLs above expressed as a typed list, in the fixed order mp3, flac, original. Convenience wrapper for players that iterate over available formats instead of reading each field by name.Array[]
Media => typeWhich representation this entry describes. The original entry’s URL is currently always empty (see musicURLOriginal).mp3, flac or original
Media => urlDirect URL to the file, or an empty string when the track has no file of that type.https://radio.ericade.net/mods/custom.rmx
isBroadcastProhibitedWhether broadcasting this track is prohibited.0 or 1
isDownloadProhibitedWhether downloading this track is prohibited. If 1, the music URLs and every Media entry are empty.0 or 1
NextUpArray of the next track’s info. Only populated when ReturnNextUp=1. Station IDs and adverts are excluded.Array[]
NextUp => ArtistArtist name of the next track.MA2E
NextUp => TitleTitle of the next track.Thrilled 4 noise
NextUp => AddedDateWhen the next track was first added, human-readable.2022-04-09 14:41:38
NextUp => CompositeRatingRating 0.0–5.0.3.5
NextUp => VotersVote count.0
NextUp => ImageImage URL.https://radio.ericade.net/wp-content/uploads/2020/12/amiga_flashback-1024x1024.jpg
NextUp => StationIDStation the next track belongs to.1
NextUp => TrackerTypeTrack type/format.Amiga 4-channel module
NextUp => TrackIDUnique track identifier.11971
PlaylogArray of recent play timestamps for this track on this station.Array[]
Playlog => timestamphrHuman-readable datetime the track was last played.2026-03-30 16:00:06

Example response

{
  "Tracks": [
    {
      "Artist": "Chris Huelsbeck",
      "Title": "Dressed to chill",
      "TrackUpdatedAt": "2026-06-12 09:41:02",
      "TrackArtists": [
        {
          "ArtistID": 4821,
          "Artist": "Chris Huelsbeck",
          "ShortDescription": "A true legend on the Amiga and other systems.",
          "LongDescription": "A true legend on the Amiga and other systems. He's most famous for the music from Turrican I, II and III. His music can be found in many games and demos on various systems.",
          "CompositeRating": 4.6,
          "Votes": 12,
          "TotalPlays": 6789,
          "Demozoo": "https://demozoo.org/sceners/7637/",
          "Wikipedia": "",
          "CSDB": "",
          "OtherUrl": "",
          "ModArchive": "",
          "Bandcamp": "https://chrishuelsbeck.bandcamp.com/",
          "SoundCloud": "",
          "YouTube": "",
          "Pouet": "",
          "isBroadcastProhibited": 0,
          "isDownloadProhibited": 0
        }
      ],
      "StationID": 1,
      "StationName": "24/7 tracked music",
      "Slug": "https://radio.ericade.net/#/song/14051/dressed to chill-chris-huelsbeck",
      "WebStreamingOffset": 12,
      "StreamingOffset": 10,
      "TrackCanBeRequested": 0,
      "RequestVerdict": "Artist was played recently",
      "CreationDateHR": "2022-11-01 16:19:08",
      "CreationDate": "1667315948",
      "AddedDate": "2022-11-01 16:19:08",
      "TrackCanBeStarred": 1,
      "PodcastURL": "",
      "EpisodeNumber": "",
      "Image": "https://radio.ericade.net/images/rmx.png",
      "BroadcastDate": "",
      "TitleID": 12098,
      "TrackID": 14051,
      "TrackerType": "Modern remix",
      "Type": "Song",
      "Tags": "",
      "TagList": [
                  "Revision",
                  "Revision 2026"
                 ],
      "PlayLength": 273.39934240363,
      "PlayLengthHR": "04:33",
      "Batch": "TERN-oct2022-05",
      "Album": "OriginalName:custom.rmx Imported:2022-11-01 (TERN-oct2022-05).",
      "About": "",
      "ProductionNotes": "",
      "PlayList": "",
      "Transcript": "",
      "Footer": "",
      "Equipment": "",
      "CompositeRating": 0,
      "Votes": 0,
      "ArtistCompositeRating": 4.6,
      "ArtistVotes": 12,
      "TimeStamp": 1778939868,
      "TimeStampHumanReadable": "2026-05-16 13:57:48",
      "TrackTotalPlays": 216,
      "ArtistLongDescription": "A true legend on the Amiga and other systems. He's most famous for the music from Turrican I, II and III. His music can be found in many games and demos on various systems.",
      "ArtistShortDescription": "A true legend on the Amiga and other systems. He's most famous for the music from Turrican I, II and III. His music can be found in many games and demos on various systems.",
      "NowPlayingOnPlaylist": "",
      "Demozoo": "https://demozoo.org/sceners/7637/",
      "Wikipedia": "",
      "CSDB": "",
      "OtherUrl": "",
      "ModArchive": "",
      "Bandcamp": "https://chrishuelsbeck.bandcamp.com/",
      "SoundCloud": "",
      "YouTube": "",
      "Pouet": "",
      "isListenerRequested": "0",
      "isOverride": 0,
      "isLive": 0,
      "isRemote": 0,
      "isNew": 0,
      "NewDays": 7,
      "Podcast": "",
      "musicURL": "https://radio.ericade.net/mods/custom.rmx",
      "musicURLFlac": "",
      "musicURLOriginal": "",
      "Media": [
        { "type": "mp3", "url": "https://radio.ericade.net/mods/custom.rmx" },
        { "type": "flac", "url": "" },
        { "type": "original", "url": "" }
      ],
      "isBroadcastProhibited": 0,
      "isDownloadProhibited": 0,
      "ArtistTotalPlays": 6789,
      "NextUp": [
        {
          "Artist": "SoundLogic",
          "Title": "Monty on the run",
          "AddedDate": "2024-09-15 14:12:50",
          "CompositeRating": "5.0",
          "Voters": "1",
          "Image": "https://radio.ericade.net/images/demoscene.png",
          "StationID": "1",
          "TrackerType": "Modern remix (demo scene)",
          "TrackID": "14925"
        }
      ],
      "Playlog": [
        {
          "timestamphr": "2026-05-16 13:57:48"
        },
        {
          "timestamphr": "2026-05-07 22:38:33"
        },
        {
          "timestamphr": "2026-04-28 16:05:51"
        }
      ]
    }
  ]
}

Next Up

Returns the station’s upcoming queue on its own, without the surrounding track record. Equivalent to the NextUp array that Now Playing embeds, but small enough to poll separately.

POST https://api.ericade.net/radio/v2/getnextup

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesThe station to read the queue for. Defaults to 1 when omitted.1 = ericade.radio
2 = Best of ericade.radio

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1
}

Response

Returns a {"NextUp": [...]} object with up to three entries. Each entry has the same fields as NextUp in the Now Playing response.

When the station is running a manual override (a live show or a special message), the queue is replaced by a single synthetic entry: artist ericade.radio, title Back to normal broadcast, tracker type Normal broadcast, AddedDate and ratings zeroed.

Example response

{
  "NextUp": [
    {
      "Artist": "SoundLogic",
      "Title": "Monty on the run",
      "AddedDate": "2024-09-15 14:12:50",
      "CompositeRating": "5.0",
      "Voters": "1",
      "Image": "https://radio.ericade.net/images/demoscene.png",
      "StationID": "1",
      "TrackerType": "Modern remix (demo scene)",
      "TrackID": "14925"
    }
  ]
}
Real-time alternative: the next-up event on the Station Data WebSocket fires whenever the queue changes, avoiding the need to poll.

Track by ID

Returns full metadata for a specific track. The response schema is identical to the Now Playing endpoint.

POST https://api.ericade.net/radio/v2/songs/<trackid>/

Replace <trackid> in the URL with the numeric TrackID. The path segment wins — a TrackID in the body is ignored.

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Password is accepted as an alias.
StationIDYesThe station the track belongs to.1 = ericade.radio
2 = Best of ericade.radio
LastPlaysToReturnNoNumber of Playlog entries to return. Defaults to 3, hard-capped at 15.3
ReturnTranscriptsNo[Podcast] 0 = return an empty Transcript (default), 1 = return the full transcript text.
ReturnProductionNotesNo[Podcast] 0 = off (default), 1 = include ProductionNotes.
EligibilityFilterNo0 = return the track regardless (default), 1 = omit it when it cannot be requested right now.
SequenceNoSame change-detection mechanism as Now Playing. Rarely useful here.
Fixed server-side: ReturnArtistDescription, ReturnArtistLongDescription and ReturnPlayList are forced to 1, so the artist biography and podcast chapter list are always included. NowPlaying, ReturnNextUp and DisableBufferCompensation are not applicable and are not forwarded.
Sending Limit switches this endpoint into paginated search mode, which ignores the track id in the path and returns a page of the whole library instead. Do not send Limit when you want one track.

Example request

{
  "Token": "eyJ0eXAiOiJKV1Qi...",
  "StationID": 1,
  "LastPlaysToReturn": 3,
  "ReturnTranscripts": 1
}

Track Listing

Paged listing of the station’s track library with a total count, for browse and report views. The record is much lighter than the full track object — no ratings, artist links, podcast fields or play history. Use Track by ID when you need the full record for one track.

POST https://api.ericade.net/radio/v2/songs

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesThe station to list tracks from.1 = ericade.radio
2 = Best of ericade.radio
LimitNoNumber of tracks to return. Defaults to 10; values outside 0–9000 are rejected.25
SkipNoNumber of tracks to skip from the start (for pagination). Values outside 0–10000 are rejected.0
SearchNoFree-text term matched against artist and title. Prefix with Tag: to search the tag list instead. Max 30 characters. When omitted, station-ID jingles (artist ericade.radio) are excluded.virgill
Tag:Revision
Results are ordered by artist then title. On StationID 2 they are ordered by creation date descending instead.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Skip": 0,
  "Limit": 25,
  "Search": "virgill"
}

Response

AttributeDescriptionExample
Query => ResultCountNumber of tracks in this response.25
Query => TotalCountTotal number of tracks matching the query, ignoring Skip/Limit.312
Tracks => IDUnique track identifier. Same value as TrackID elsewhere in the API — only the key name differs here.10147
Tracks => StationIDThe station this track belongs to.1
Tracks => StationNameHuman-readable station name.24/7 tracked music
Tracks => TitleTrack title.Bratgrumbeere
Tracks => FullartistComplete artist field including all collaborators.Virgill
Tracks => TrackUpdatedAtWhen the track’s metadata was last updated.2026-06-12 09:41:02
Tracks => AlbumAlbum tag from the audio file’s metadata.Original Amiga Works (.mod) TERN-Okt2020-S1
Tracks => ImageImage URL derived from the album/format.https://radio.ericade.net/images/mod.png
Tracks => CreationdatehrWhen the track was first added, human-readable.2020-10-14 12:02:11
Tracks => LengthLength between Cue In and Cue Out, in seconds.292.757
Tracks => LengthhrLength expressed as MM:SS.04:52
Tracks => TracktypeType/format of the track.Amiga 4-channel module
Tracks => musicURLDirect URL to the track’s audio file.https://radio.ericade.net/mods/virgill-bratgrumbeere.mod
Tracks => PathInternal playout path of the file.
Tracks => GuidInternal GUID from PlayIT Live. Not intended for public use.aace857b-366a-46fe-9208-1d5b9fc0caae
Tracks => TagsComma-separated tag list.Revision, Revision 2026
When nothing matches, the response is { "Software":["No track information was found."]} with HTTP 200 — there is no Query or Tracks key at all. Handle that shape explicitly.

Example response

{
  "Query": [
    {
      "ResultCount": "1",
      "TotalCount": "312"
    }
  ],
  "Tracks": [
    {
      "ID": 10147,
      "StationID": 1,
      "StationName": "24/7 tracked music",
      "Title": "Bratgrumbeere",
      "Fullartist": "Virgill",
      "TrackUpdatedAt": "2026-06-12 09:41:02",
      "Album": "Original Amiga Works (.mod) TERN-Okt2020-S1",
      "Image": "https://radio.ericade.net/images/mod.png",
      "Creationdatehr": "2020-10-14 12:02:11",
      "Length": "292.757",
      "Lengthhr": "04:52",
      "Tracktype": "Amiga 4-channel module",
      "musicURL": "https://radio.ericade.net/mods/virgill-bratgrumbeere.mod",
      "Path": "\\mods\\virgill-bratgrumbeere.mod",
      "Guid": "aace857b-366a-46fe-9208-1d5b9fc0caae",
      "Tags": ""
    }
  ]
}

Artists

Paged listing of artists, each with their biography, external links, rating and the complete list of tracks credited to them.

POST https://api.ericade.net/radio/v2/artists
Response size. Every artist carries a nested Tracks array of full track objects, so a page of 30 prolific artists can run to several megabytes. Limit is capped at 30 for that reason. Use Sitemap Artists when you only need the flat artist records.

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesValidated against the station configuration, but does not filter the result set — artist records are not station-scoped.1 = ericade.radio
2 = Best of ericade.radio
LimitNoNumber of artists to return. Defaults to 10; more than 30 is rejected.10
SkipNoNumber of artists to skip from the start (for pagination). Values outside 0–10000 are rejected.0
SearchNoFree-text term matched against the artist name. Max 30 characters. When omitted, the ericade.radio station identity is excluded.huelsbeck

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Skip": 0,
  "Limit": 10,
  "Search": "huelsbeck"
}

Response

AttributeDescriptionExample
Query => ResultCountNumber of artists in this response.1
Query => TotalCountTotal number of artists matching the query.1
Artists => ArtistIDUnique artist identifier. Matches TrackArtists => ArtistID on the track endpoints.4821
Artists => ArtistArtist name.Chris Huelsbeck
Artists => ShortDescriptionShort artist bio.(text)
Artists => LongDescriptionFull artist bio.(text)
Artists => CompositeRatingArtist rating from 0.0–5.0.4.6
Artists => VotesNumber of votes the artist has received.12
Artists => TotalPlaysNumber of times this artist has been played.6789
Artists => Album(Not populated) Always an empty string.
Artists => Demozoo, Wikipedia, CSDB, OtherUrl, ModArchive, Bandcamp, SoundCloud, YouTube, PouetExternal links for the artist.https://demozoo.org/sceners/7637/
Artists => isBroadcastProhibitedWhether broadcasting this artist’s tracks is prohibited.0 or 1
Artists => isDownloadProhibitedWhether downloading this artist’s tracks is prohibited.0 or 1
Artists => TracksEvery track credited to this artist, each a full track object with the same fields as the Now Playing response.Array[]
When nothing matches, the response is { "Tracks":["No track information was found."]} — note both the unexpected key (Tracks, not Artists) and the array-of-strings shape. Handle it explicitly.

Example response

{
  "Query": [
    {
      "ResultCount": "1",
      "TotalCount": "1"
    }
  ],
  "Artists": [
    {
      "ArtistID": 4821,
      "Artist": "Chris Huelsbeck",
      "ShortDescription": "A true legend on the Amiga and other systems.",
      "LongDescription": "A true legend on the Amiga and other systems. He's most famous for the music from Turrican I, II and III.",
      "CompositeRating": 4.6,
      "Votes": 12,
      "TotalPlays": 6789,
      "Album": "",
      "Demozoo": "https://demozoo.org/sceners/7637/",
      "Wikipedia": "",
      "CSDB": "",
      "OtherUrl": "",
      "ModArchive": "",
      "Bandcamp": "https://chrishuelsbeck.bandcamp.com/",
      "SoundCloud": "",
      "YouTube": "",
      "Pouet": "",
      "isBroadcastProhibited": 0,
      "isDownloadProhibited": 0,
      "Tracks": [
        {
          "Artist": "Chris Huelsbeck",
          "Title": "Dressed to chill",
          "TrackID": 14051,
          "TrackerType": "Modern remix",
          "CompositeRating": 0,
          "Votes": 0,
          "Image": "https://radio.ericade.net/images/rmx.png"
        }
      ]
    }
  ]
}
The Tracks entries are abbreviated above. In a real response each is a full track record with the same field set as the Now Playing response — see that table for every field. Nested track objects always carry NextUp as an empty array; the upcoming queue is only meaningful on the now-playing endpoints.

Artist by ID

Returns one artist. The response schema is identical to the Artists endpoint.

POST https://api.ericade.net/radio/v2/artists/<artistid>

Replace <artistid> with the numeric ArtistID, which you can obtain from the TrackArtists array on any track record.

Request fields are the same as Artists (Token, StationID, optional Limit and Skip).

Sending a Search value overrides the path segment: the search takes precedence and the artist id is ignored. Send one or the other, not both.

Sitemap Artists

Exports artists as flat records without the nested track list, plus the last-modified timestamp a sitemap needs. Because nothing is nested, Limit goes up to 10000 here rather than the 30 of the Artists endpoint.

POST https://api.ericade.net/radio/v2/sitemapartists

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesValidated against the station configuration, but does not filter the result set.1 = ericade.radio
2 = Best of ericade.radio
LimitNoNumber of artists to return. Defaults to 10; more than 10000 is rejected.5000
SkipNoNumber of artists to skip from the start (for pagination). Values outside 0–10000 are rejected.0
SearchNoFree-text term matched against the artist name. Max 30 characters.
Despite the path shape, this endpoint ignores any trailing id segment and always returns a page of artists.

Response

Returns the same Query counters as the other list endpoints, followed by an Artists array.

AttributeDescriptionExample
ArtistIDUnique artist identifier.4821
ArtistArtist name.Chris Huelsbeck
ShortDescription / LongDescriptionArtist bio.(text)
TotalPlaysNumber of times this artist has been played.6789
LastPlayedUnix epoch of the artist’s most recent play.1780262202
CompositeRating / VotesArtist rating and vote count.4.6 / 12
Demozoo, Wikipedia, CSDB, OtherUrl, ModArchive, Bandcamp, SoundCloud, YouTube, PouetExternal links for the artist.
GuidInternal identifier. Not intended for public use.
EligibilityTimeRequest-eligibility timer for the artist, Unix epoch.1780262202
ArtistUpdatedAtWhen the artist record was last updated. This is the value to use as <lastmod> in a sitemap.2026-06-12 09:41:02

Example response

{
  "Query": [
    {
      "ResultCount": "1",
      "TotalCount": "5312"
    }
  ],
  "Artists": [
    {
      "ArtistID": 4821,
      "Artist": "Chris Huelsbeck",
      "ShortDescription": "A true legend on the Amiga and other systems.",
      "LongDescription": "A true legend on the Amiga and other systems.",
      "TotalPlays": 6789,
      "LastPlayed": "1780262202",
      "CompositeRating": "4.6",
      "Votes": "12",
      "Demozoo": "https://demozoo.org/sceners/7637/",
      "Wikipedia": "",
      "CSDB": "",
      "OtherUrl": "",
      "ModArchive": "",
      "Bandcamp": "https://chrishuelsbeck.bandcamp.com/",
      "SoundCloud": "",
      "YouTube": "",
      "Pouet": "",
      "Guid": "",
      "EligibilityTime": "1780262202",
      "ArtistUpdatedAt": "2026-06-12 09:41:02"
    }
  ]
}

Song History

Returns the recently played tracks on a station.

POST https://api.ericade.net/radio/v2/songhistory

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint. Password is accepted as an alias.
StationIDYesThe station to get history for.1 = ericade.radio
2 = Best of ericade.radio
LimitNoNumber of history entries to return. Defaults to 10; more than 9000 is rejected.8
LastAddedModeNo0 = recently played, newest first (default). 1 = recently added to the library, newest first.
The default mode skips the single most recent play, so the first entry is the track before the one currently on air. That keeps the history list from duplicating what Now Playing already shows.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Limit": 8
}

Response

Returns a {"Tracks": [...]} array ordered most-recent first.

AttributeDescriptionExample
TrackIDUnique, stable track identifier.10147
TimeStampHRWhen this track started playing, as a human-readable date string.2026-03-30 20:44:32
TimeStampWhen this track started playing, as a Unix epoch.1774903472
ArtistComplete artist field.Virgill
TitleTrack title.Bratgrumbeere
TrackArtistsArray of all artists linked to this track. Same object structure as TrackArtists in the Now Playing response.Array[]
CreationDateWhen the track was first added, Unix epoch. Populated in last-added mode; empty in the default mode.
CreationDateHR(Not implemented) Always an empty string — the value is fetched but never written to the response.
AlbumAlbum tag from audio file metadata.Original Amiga Works (.mod) TERN-Okt2020-S1
DurationDuration of the track in seconds.292.75718820861700000000
TrackerTypeType of tracker used for the track.Amiga 4-channel module
musicURLDirect URL to the track’s audio file. Empty when downloading the track is prohibited. Song history returns only this one audio URL — there is no Media array or FLAC/original variant here.https://radio.ericade.net/mods/dr_awesome-gone_for_good.mod
ImageURL to the track's image.https://radio.ericade.net/images/mod.png
IsListenerRequestedIndicates if the track was requested by a listener (0 = no, 1 = yes).0
StationIDThe station this track belongs to.1
Guid(Will be removed) Internal GUID from PlayIT Live. Not intended for public use.6894ac27-abc9-4c4a-aad2-15879dda4dff

Example response

{
    "Tracks": [
        {
            "TrackID": "10147",
            "TimeStampHR": "2026-05-31 21:16:42",
            "TimeStamp": "1780262202",
            "Artist": "Dr. Awesome",
            "Title": "Gone For Good",
            "TrackArtists": [
                {
                    "ArtistID": 5133,
                    "Artist": "Dr. Awesome",
                    "ShortDescription": "",
                    "LongDescription": "",
                    "CompositeRating": 4.2,
                    "Votes": 8,
                    "TotalPlays": 412,
                    "Demozoo": "",
                    "Wikipedia": "",
                    "CSDB": "",
                    "OtherUrl": "",
                    "ModArchive": "",
                    "Bandcamp": "",
                    "SoundCloud": "",
                    "YouTube": "",
                    "Pouet": "",
                    "isBroadcastProhibited": 0,
                    "isDownloadProhibited": 0
                }
            ],
            "CreationDate": "",
            "CreationDateHR": "",
            "Album": "Original Amiga Works (.mod) TERN-Okt2020-S1",
            "Duration": "292.75718820861700000000",
            "TrackerType": "Amiga 4-channel module",
            "musicURL": "https://radio.ericade.net/mods/dr_awesome-gone_for_good.mod",
            "Image": "https://radio.ericade.net/images/mod.png",
            "IsListenerRequested": "0",
            "StationID": "1",
            "Guid": "aace857b-366a-46fe-9208-1d5b9fc0caae"
        },
        {
            "TrackID": "12115",
            "TimeStampHR": "2026-05-31 21:16:34",
            "TimeStamp": "1780262194",
            "Artist": "ericade.radio",
            "Title": "You want to hear your favorite song on this station. Go to ericade.radio-song",
            "TrackArtists": [],
            "CreationDate": "",
            "CreationDateHR": "",
            "Album": "Format:.stn TERN.",
            "Duration": "10.44897959183670000000",
            "TrackerType": "StationID",
            "musicURL": "https://radio.ericade.net/mods/ericade_stationid_12115.stn",
            "Image": "https://radio.ericade.net/images/stn.png",
            "IsListenerRequested": "0",
            "StationID": "1",
            "Guid": "3933ca49-d5f3-426e-bbfd-494695977262"
        }
  ]
}

Playout

Returns either the recently played tracks or the recently added ones, selected by LastAddedMode. This is the older, differently shaped sibling of Song History — it carries rating and request-eligibility fields that song history does not.

POST https://api.ericade.net/radio/v2/playout
Use LastAddedMode: 1. In the default mode the underlying query does not select the creation-date columns, and the endpoint emits "CreationDate": with no value — strict JSON parsers reject the body. Until that is fixed, use last-added mode here, or use Song History for play history.

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesThe station to read from.1 = ericade.radio
2 = Best of ericade.radio
LimitNoNumber of entries to return. Defaults to 10; more than 100 is rejected.20
LastAddedModeNo0 = recently played, newest first (default — see the warning above). 1 = recently added to the library, newest first, with the rating and eligibility fields included.1

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Limit": 20,
  "LastAddedMode": 1
}

Response

Returns a {"Tracks": [...]} object. Fields marked [LastAddedMode=1] are present only in last-added mode.

AttributeDescriptionExample
TimeStampHRWhen the track played, or was added in last-added mode, human-readable.2026-03-30 20:44:32
TimeStampThe same moment as a Unix epoch.1774903472
ArtistComplete artist field.Dr. Awesome
TitleTrack title.Gone For Good
TrackArtistsArray of all artists linked to this track. Same object structure as TrackArtists in the Now Playing response.Array[]
PlayLengthHR[LastAddedMode=1] Play length as MM:SS.04:52
PlayLength[LastAddedMode=1] Duration in seconds.292.757
TrackerType[LastAddedMode=1] Type/format of the track.Amiga 4-channel module
CompositeRating[LastAddedMode=1] Track rating from 0.0–5.0.4.2
Votes[LastAddedMode=1] Number of votes the track has received.8
TrackTotalPlays[LastAddedMode=1] Number of times this track has been played.313
TrackCanBeRequested[LastAddedMode=1] Whether the track can be requested right now.0 or 1
RequestVerdict[LastAddedMode=1] Human-readable reason why it cannot be requested. Echo this string to the user.Song was played recently
TrackIDUnique, stable track identifier.10147
CreationDate[LastAddedMode=1] When the track was first added, Unix epoch.1667315948
CreationDateHR[LastAddedMode=1] The same moment, human-readable.2022-11-01 16:19:08
Album[LastAddedMode=1] Album tag from the audio file’s metadata.Original Amiga Works (.mod) TERN-Okt2020-S1
ImageURL to the track’s image.https://radio.ericade.net/images/mod.png
musicURLDirect URL to the track’s audio file.https://radio.ericade.net/mods/dr_awesome-gone_for_good.mod
StationIDThe station this track belongs to.1
GuidInternal GUID from PlayIT Live. Not intended for public use.aace857b-366a-46fe-9208-1d5b9fc0caae

Example response

{
  "Tracks": [
    {
      "TimeStampHR": "2026-05-31 21:16:42",
      "TimeStamp": 1780262202,
      "Artist": "Dr. Awesome",
      "Title": "Gone For Good",
      "TrackArtists": [
        {
          "ArtistID": 5133,
          "Artist": "Dr. Awesome",
          "ShortDescription": "",
          "LongDescription": "",
          "CompositeRating": 4.2,
          "Votes": 8,
          "TotalPlays": 412,
          "Demozoo": "",
          "Wikipedia": "",
          "CSDB": "",
          "OtherUrl": "",
          "ModArchive": "",
          "Bandcamp": "",
          "SoundCloud": "",
          "YouTube": "",
          "Pouet": "",
          "isBroadcastProhibited": 0,
          "isDownloadProhibited": 0
        }
      ],
      "PlayLengthHR": "04:52",
      "PlayLength": 292.757,
      "TrackerType": "Amiga 4-channel module",
      "CompositeRating": 4.2,
      "Votes": 8,
      "TrackTotalPlays": 313,
      "TrackCanBeRequested": 1,
      "RequestVerdict": "Track can be requested",
      "TrackID": 10147,
      "CreationDate": 1667315948,
      "CreationDateHR": "2022-11-01 16:19:08",
      "Album": "Original Amiga Works (.mod) TERN-Okt2020-S1",
      "Image": "https://radio.ericade.net/images/mod.png",
      "musicURL": "https://radio.ericade.net/mods/dr_awesome-gone_for_good.mod",
      "StationID": 1,
      "Guid": "aace857b-366a-46fe-9208-1d5b9fc0caae"
    }
  ]
}

New Songs

Returns the tracks most recently added to the station’s library, newest first, together with their ratings and current request eligibility. Use this to build a “new on the station” panel.

POST https://api.ericade.net/radio/v2/new-songs

This is the last-added view of Playout with the mode fixed server-side, so every entry always carries the rating and eligibility fields and the malformed-JSON caveat on that endpoint does not apply here.

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesThe station to read from.1 = ericade.radio
2 = Best of ericade.radio
LimitNoNumber of tracks to return. Defaults to 10; more than 100 is rejected.20

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Limit": 20
}

Response

Identical to the Playout response in last-added mode.

To tell whether a track is new enough to badge in a player, prefer the isNew and NewDays fields on the Now Playing record — they reflect the station’s own definition of “new”.

News & Podcasts

Lists news posts and podcast episodes, with pagination, free-text and tag search, and optional transcripts. This is the endpoint behind the podcast display pages and the RSS feed builder.

POST https://api.ericade.net/radio/v2/news
This endpoint reads the JWT from Password, not Token. The by-id variant reads Token. Sending the wrong field leaves the call unauthenticated.

Request

AttributeMandatory?DescriptionNotes
PasswordYesJWT token that authenticates the call.Note the field name — not Token.
StationIDYesThe station to read from.1 = ericade.radio
2 = Best of ericade.radio
PodcastsNo0 = do not filter on podcasts (default), 1 = only podcast entries, 2 = only podcast entries including the Length and LengthHR columns.2
NewsNo0 = off (default), 1 = include news entries. Combine with Podcasts to get both kinds in one response.
IDNoReturn only the entry linked to this TrackID. Also switches on the length columns.13770
LimitNoNumber of entries to return. Defaults to 200; values outside 0–200 are rejected.20
SkipNoNumber of entries to skip from the start (for pagination). Values outside 0–300 are rejected.0
SearchNoFree-text term matched against artist and title. Prefix with Tag: to search the tag list instead. Max 30 characters.Tag:Revision 2026
IncludeTagsNo0 = off (default), 1 = join in the tag column so Tags and TagList are populated.
ReturnTranscriptsNo0 = return an empty Transcript (default), 1 = return the full transcript text. Transcripts are large — leave this off unless you display them.
Results are ordered by broadcast date descending, then episode number descending, then timestamp descending, then title.

Example request

{
  "Password": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 2,
  "Podcasts": 2,
  "Limit": 10,
  "Skip": 0,
  "IncludeTags": 1,
  "ReturnTranscripts": 0
}

Response

Returns the Query paging counters followed by a Tracks array. Fields marked [Podcast] are empty for news posts.

AttributeDescriptionExample
Query => ResultCountNumber of entries in this response.10
Query => TotalCountTotal number of entries matching the query.97
TrackIDIdentifier of the track the post is linked to.13770
TitleEpisode or post title.Flashback episode 97
ArtistShow or author name.ericade.radio
TrackUpdatedAtWhen the entry was last updated.2026-06-12 09:41:02
AboutShort description of the episode or post.
SlugURL-friendly slug for the entry.https://radio.ericade.net/#/song/13770/flashback-97
Episode[Podcast] Episode number as a string.97
ExplicitExplicit-content flag for the podcast feed.0 or 1
LastBuildTimestamp of the last RSS feed build. Only present when the stats row exists.2026-08-01 04:00:02
LengthTrack length in seconds. Only present when Podcasts=2 or ID is set.3612.4
LengthHRTrack length as MM:SS (HH:MM:SS when over an hour). Same condition as Length.01:00:12
BroadcastDate[Podcast] Broadcast date of the episode.2022-07-16
ImageImage URL for the entry.https://radio.ericade.net/wp-content/uploads/2020/12/amiga_flashback.jpg
PodcastImage[Podcast] Dedicated podcast artwork URL, when set.
CompositeRatingRating from 0.0–5.0.4.3
TrackVotesNumber of votes the entry has received. Note the name — it is Votes on the track endpoints.12
TagsComma-separated tag list. Empty unless IncludeTags=1 or a tag search was performed.Amiga, Flashback
TagListThe same tags as an array.[]
Equipment[Podcast] Equipment used to record the episode.
PlayList[Podcast] Chapter list for the episode.00:00 Introduction…
ProductionNotes[Podcast] Production notes.
hasTranscript1 when a transcript exists. Use it to decide whether a second call with ReturnTranscripts=1 is worth making.0 or 1
TranscriptFull transcript text. Empty unless ReturnTranscripts=1.
ShowNotes[Podcast] Show notes for the episode.
Footer[Podcast] Footer text appended to the episode.
isNews1 when the entry is a news post.0 or 1
isPodcast1 when the entry is a podcast episode.0 or 1
isRSS1 when the entry is published in the RSS feed.0 or 1
NewsBody text of the news post.
PodcastFileLength[Podcast] Size of the audio file in bytes, for the RSS enclosure.57829120
PodcastURL[Podcast] URL to the podcast audio file.https://radio.ericade.net/Flashback/97.mp3
EpisodeNumber[Podcast] Episode number as a number. 0 for news posts.97
When nothing matches, the response is { "Tracks":["No news information was found."]} — an array of strings rather than of objects. Handle that shape explicitly.

Example response

{
  "Query": [
    {
      "ResultCount": "1",
      "TotalCount": "97"
    }
  ],
  "Tracks": [
    {
      "TrackID": "13770",
      "Title": "Flashback episode 97",
      "Artist": "ericade.radio",
      "TrackUpdatedAt": "2026-06-12 09:41:02",
      "About": "A trip back to the Amiga demo scene of 1992.",
      "Slug": "https://radio.ericade.net/#/song/13770/flashback-episode-97-ericade-radio",
      "Episode": "97",
      "Explicit": "0",
      "LastBuild": "2026-08-01 04:00:02",
      "Length": "3612.4",
      "LengthHR": "01:00:12",
      "BroadcastDate": "2022-07-16",
      "Image": "https://radio.ericade.net/wp-content/uploads/2020/12/amiga_flashback.jpg",
      "PodcastImage": "",
      "CompositeRating": "4.3",
      "TrackVotes": "12",
      "Tags": "Amiga, Flashback",
      "TagList": ["Amiga", "Flashback"],
      "Equipment": "",
      "PlayList": "00:00 Introduction...",
      "ProductionNotes": "",
      "hasTranscript": "1",
      "Transcript": "",
      "ShowNotes": "",
      "Footer": "",
      "isNews": "0",
      "isPodcast": "1",
      "isRSS": "1",
      "News": "",
      "PodcastFileLength": "57829120",
      "PodcastURL": "https://radio.ericade.net/Flashback/97.mp3",
      "EpisodeNumber": 97
    }
  ]
}

News by ID

Returns one news post or podcast episode. The response schema is identical to the News & Podcasts endpoint.

POST https://api.ericade.net/radio/v2/news/<id>

Replace <id> with the TrackID the entry is linked to. Addressing a single entry also switches on the Length and LengthHR columns.

Request fields are the same as News & Podcasts (StationID, optional Podcasts, News, Limit, Skip, Search, ReturnTranscripts), with one difference: this route reads the JWT from Token, not Password.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 2,
  "ReturnTranscripts": 1
}

Statistics

Returns various statistics for a station.

POST https://api.ericade.net/radio/v2/stats

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYes(Not implemented) Accepted, but the response always covers every station.1 = ericade.radio
2 = Best of ericade.radio
Limit and Days are not forwarded on this path — the router only reads them on Statistics by FilterType. On this endpoint every top/bottom list is fixed at 10 rows and the rating and request windows are fixed at 30 days. Earlier revisions of this document listed both fields here as working; that was incorrect.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1
}

Response

Returns a {"Stations": [...]} array. Each element in Stations represents one station and contains the fields below.

AttributeDescriptionExample
StationIDThe station identifier.1
StationNameHuman-readable station name.24/7 tracked music
TotalLengthTotal combined length of all tracks on the station, in hours.180.4
TracksOnStationTotal number of tracks on the station.3125
TrackerstatsArray of tracker-type breakdowns. Each object contains TrackerType (name of the tracker format), Tracks (number of tracks of that type), Percent (percentage of total), and StationID.Array[]
RequestsArray of the most-requested tracks within the last Days days. Each object is a full Track record (see Now Playing response) plus a Count field (number of times requested in the period).Array[]
TopTracksArray of the highest-rated tracks within the last Days days. Each object is a full Track record (see Now Playing response).Array[]
BottomTracksArray of the lowest-rated tracks within the last Days days. Same structure as TopTracks.Array[]
TopArtistsArray of the highest-rated artists. Each object contains Artist, CompositeRating, and Voters.Array[]
BottomArtistsArray of the lowest-rated artists. Same fields as TopArtists.Array[]
StreamingCountriesArray of listener countries ordered by session count. Each object contains Country (country name) and Count (number of streaming sessions).Array[]
StreamingAgentsArray of user-agent strings seen in streaming sessions, ordered by count. Each object contains Agent and Count.Array[]
LogoffPlayArray of tracks most commonly playing when listeners disconnect. Each object contains Track (formatted "Artist-Title." string), NumberOfPlays, and StationID.Array[]
DuplicatesArray of tracks that appear more than once in the library (same artist and title, different IDs). Each object contains FullArtist, Title, and TrackID.Array[]
The Requests, TopTracks and BottomTracks entries in the example below are abbreviated for readability. In a real response each object is a full track record with the same field set as the Now Playing response (see that table for every field), plus a Count field on Requests entries.

Example response

{
    "Stations": [
        {
            "StationID": "1",
            "StationName": "24/7 tracked music",
            "TotalLength": "180.4",
            "TracksOnStation": "3125",
            "Trackerstats": [
                {
                    "TrackerType": "Amiga 4-channel module",
                    "Tracks": "1180",
                    "Percent": "37.8",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Fasttracker",
                    "Tracks": "873",
                    "Percent": "27.9",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Impulsetracker",
                    "Tracks": "539",
                    "Percent": "17.2",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Modern remix",
                    "Tracks": "169",
                    "Percent": "5.4",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Screamtracker",
                    "Tracks": "138",
                    "Percent": "4.4",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Modern remix (demo scene)",
                    "Tracks": "131",
                    "Percent": "4.2",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Multitracker",
                    "Tracks": "49",
                    "Percent": "1.6",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Pretracker",
                    "Tracks": "24",
                    "Percent": "0.8",
                    "StationID": "1"
                },
                {
                    "TrackerType": "OctaMed/MED",
                    "Tracks": "6",
                    "Percent": "0.2",
                    "StationID": "1"
                },
                {
                    "TrackerType": "AHX Synth-tracker",
                    "Tracks": "4",
                    "Percent": "0.1",
                    "StationID": "1"
                },
                {
                    "TrackerType": "MO3",
                    "Tracks": "3",
                    "Percent": "0.1",
                    "StationID": "1"
                },
                {
                    "TrackerType": "C64 Sidtune",
                    "Tracks": "3",
                    "Percent": "0.1",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Digi Booster Pro",
                    "Tracks": "2",
                    "Percent": "0.1",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Unknown",
                    "Tracks": "1",
                    "Percent": "0.0",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Digi Booster",
                    "Tracks": "1",
                    "Percent": "0.0",
                    "StationID": "1"
                },
                {
                    "TrackerType": "Scream tracker 2",
                    "Tracks": "1",
                    "Percent": "0.0",
                    "StationID": "1"
                },
                {
                    "TrackerType": "SoundFX / MultiMedia Sound",
                    "Tracks": "1",
                    "Percent": "0.0",
                    "StationID": "1"
                }
            ],
            "Requests": [
                {
                    "Artist": "Ekorren",
                    "Title": "Little Danyjel",
                    "TrackID": "14050",
                    "Count": "20"
                },
                {
                    "Artist": "Synthesized World 2",
                    "Title": "Radio Smile",
                    "TrackID": "",
                    "Count": "20"
                },
                {
                    "Artist": "Drakonpod",
                    "Title": "Goa-ing",
                    "TrackID": "",
                    "Count": "16"
                },
                {
                    "Artist": "Maf",
                    "Title": "Mafland remix",
                    "TrackID": "14907",
                    "Count": "16"
                },
                {
                    "Artist": "Arpegiator of Chryseis",
                    "Title": "My wolf 2",
                    "TrackID": "10663",
                    "Count": "13"
                },
                {
                    "Artist": "Yannis Brown",
                    "Title": "Tres Dilettantes",
                    "TrackID": "",
                    "Count": "12"
                },
                {
                    "Artist": "Xyce",
                    "Title": "Mirage",
                    "TrackID": "",
                    "Count": "11"
                },
                {
                    "Artist": "CyberZip",
                    "Title": "Ahh My Goddess!",
                    "TrackID": "13528",
                    "Count": "10"
                },
                {
                    "Artist": "Dr Vector",
                    "Title": "Auto rock",
                    "TrackID": "15441",
                    "Count": "9"
                },
                {
                    "Artist": "Arcane toaster",
                    "Title": "Fly Little Dino",
                    "TrackID": "",
                    "Count": "8"
                }
            ],
            "TopTracks": [
                {
                    "Artist": "Xyce",
                    "Title": "Rymdkraft - Dolph's aerobics (remix)",
                    "CompositeRating": "5.0",
                    "Voters": "5",
                    "TrackID": "12003"
                },
                {
                    "Artist": "Nusrat",
                    "Title": "Summertime",
                    "CompositeRating": "5.0",
                    "Voters": "4",
                    "TrackID": "13229"
                },
                {
                    "Artist": "Trackerartist",
                    "Title": "Dragons lair",
                    "CompositeRating": "5.0",
                    "Voters": "4",
                    "TrackID": "10186"
                },
                {
                    "Artist": "Vogue of Triton",
                    "Title": "Ambient power",
                    "CompositeRating": "5.0",
                    "Voters": "4",
                    "TrackID": "10445"
                },
                {
                    "Artist": "Mister E",
                    "Title": "Dedic8ed 2 AsmoDeon",
                    "CompositeRating": "5.0",
                    "Voters": "4",
                    "TrackID": "13194"
                },
                {
                    "Artist": "Blackstar (Oddgeir Hvidsten) and Time Traveller (Geir Rune Ladehaug)",
                    "Title": "Blue stars",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "10688"
                },
                {
                    "Artist": "Phobium",
                    "Title": "Tonik Funture (phob)",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "14504"
                },
                {
                    "Artist": "4-mat",
                    "Title": "Eternity",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "13491"
                },
                {
                    "Artist": "Malmen",
                    "Title": "Edison Glam",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "14849"
                },
                {
                    "Artist": "Alexander Brandon",
                    "Title": "Menu song (Jazz Jackrabbit Intro)",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "14114"
                },
                {
                    "Artist": "Riku Nuottajarvi",
                    "Title": "Hyperspace (From star control)",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "11087"
                },
                {
                    "Artist": "Malmen of Brainstorm",
                    "Title": "Devotion shuttle",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "13373"
                },
                {
                    "Artist": "MyVoice",
                    "Title": "Alertia",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "14915"
                },
                {
                    "Artist": "Danko and Jogeir Liljedahl",
                    "Title": "1992",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "12380"
                },
                {
                    "Artist": "Blue orian",
                    "Title": "Spiral galaxy",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "14160"
                },
                {
                    "Artist": "Sudokan",
                    "Title": "Thoughts Per Second",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "13150"
                },
                {
                    "Artist": "Selecta Novel",
                    "Title": "Simon the Sorcerer - Dragon's Winter Cave",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "14421"
                },
                {
                    "Artist": "Nicsure",
                    "Title": "Occ-san-geen",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "14422"
                },
                {
                    "Artist": "Arpegiator of Chryseis",
                    "Title": "My wolf 2",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "10663"
                },
                {
                    "Artist": "Dr. Awesome",
                    "Title": "Session",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "10927"
                }
            ],
            "BottomTracks": [
                {
                    "Artist": "Sysfins",
                    "Title": "The aooga mooca song",
                    "CompositeRating": "1.0",
                    "Voters": "3",
                    "TrackID": "15657"
                },
                {
                    "Artist": "Uctumi",
                    "Title": "Flimbo's quest medley",
                    "CompositeRating": "1.0",
                    "Voters": "2",
                    "TrackID": "14045"
                },
                {
                    "Artist": "Audiomonster",
                    "Title": "Florence",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "11963"
                },
                {
                    "Artist": "RawArgon",
                    "Title": "They drew 1st Blood Orangeade",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "14518"
                },
                {
                    "Artist": "Jam & Spoon productions",
                    "Title": "Dansa uppa dekki",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "12486"
                },
                {
                    "Artist": "Bst",
                    "Title": "Mayan Paradise*Dim System",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "14267"
                },
                {
                    "Artist": "mA2E / Desire",
                    "Title": "Overjoyed by groove",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "11977"
                },
                {
                    "Artist": "Beldoroon",
                    "Title": "Come allye (remix)",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "13778"
                },
                {
                    "Artist": "Phaser",
                    "Title": "The return of music",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "10996"
                },
                {
                    "Artist": "Speechless",
                    "Title": "Mistake",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "13284"
                },
                {
                    "Artist": "Dr. Awesome",
                    "Title": "Empty Spaces",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "10762"
                },
                {
                    "Artist": "Psirius",
                    "Title": "Musical cloister",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "14102"
                },
                {
                    "Artist": "The Muzycant",
                    "Title": "Guitar Slinger V2",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "14385"
                },
                {
                    "Artist": "Liam the Lemming",
                    "Title": "Auf wiedersehen Monty theme",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "14156"
                },
                {
                    "Artist": "Crk",
                    "Title": "Beatex",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "10624"
                },
                {
                    "Artist": "Mark M. Salud",
                    "Title": "1-2-3-DanceMon",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "14953"
                },
                {
                    "Artist": "Necros of FM",
                    "Title": "The grey note",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "13936"
                },
                {
                    "Artist": "Ceekayed",
                    "Title": "Battle beyond the dark",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "13946"
                },
                {
                    "Artist": "K. Jose",
                    "Title": "It's Time",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "13957"
                },
                {
                    "Artist": "Madminder",
                    "Title": "Shadow Angel",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "14478"
                }
            ],
            "TopArtists": [
                {
                    "Artist": "Xyce",
                    "CompositeRating": "5.0",
                    "Voters": "19"
                },
                {
                    "Artist": "Slash_Atd",
                    "CompositeRating": "5.0",
                    "Voters": "10"
                },
                {
                    "Artist": "Arachno",
                    "CompositeRating": "5.0",
                    "Voters": "6"
                },
                {
                    "Artist": "ArchAngel",
                    "CompositeRating": "5.0",
                    "Voters": "5"
                },
                {
                    "Artist": "Maktone",
                    "CompositeRating": "5.0",
                    "Voters": "5"
                },
                {
                    "Artist": "Vogue",
                    "CompositeRating": "5.0",
                    "Voters": "5"
                },
                {
                    "Artist": "Nusrat",
                    "CompositeRating": "5.0",
                    "Voters": "4"
                },
                {
                    "Artist": "Warder",
                    "CompositeRating": "5.0",
                    "Voters": "4"
                },
                {
                    "Artist": "cs127",
                    "CompositeRating": "5.0",
                    "Voters": "4"
                },
                {
                    "Artist": "AceMan",
                    "CompositeRating": "5.0",
                    "Voters": "4"
                },
                {
                    "Artist": "Mister%20E",
                    "CompositeRating": "5.0",
                    "Voters": "4"
                },
                {
                    "Artist": "Laamaa",
                    "CompositeRating": "5.0",
                    "Voters": "4"
                },
                {
                    "Artist": "Riku%20Nuottajarvi",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Danko",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Saga%20Musix",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Arpegiator",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Bacter%20vs%20Saga%20musix",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Phobium",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Blackstar%20(Oddgeir%20Hvidsten)",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Dippy",
                    "CompositeRating": "5.0",
                    "Voters": "3"
                }
            ],
            "BottomArtists": [
                {
                    "Artist": "Sysfins",
                    "CompositeRating": "1.0",
                    "Voters": "3"
                },
                {
                    "Artist": "Crk",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Madminder",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Sam",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "RawArgon",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Beldoroon",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Ceekayed",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Jam%20&%20Spoon%20productions",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Speechless",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "mA2E%20/%20Desire",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Mark%20M.%20Salud",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "NaBo",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "UsE",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "The%20Muzycant",
                    "CompositeRating": "1.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Efenstor",
                    "CompositeRating": "2.0",
                    "Voters": "2"
                },
                {
                    "Artist": "Audiomonster",
                    "CompositeRating": "2.0",
                    "Voters": "2"
                },
                {
                    "Artist": "View",
                    "CompositeRating": "2.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Tomi%20Blinnikka",
                    "CompositeRating": "2.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Galaxy",
                    "CompositeRating": "2.0",
                    "Voters": "1"
                },
                {
                    "Artist": "Higher%20(than)",
                    "CompositeRating": "2.0",
                    "Voters": "1"
                }
            ],
            "StreamingCountries": [
                {
                    "Country": "Germany",
                    "Count": "930"
                },
                {
                    "Country": "Canada",
                    "Count": "590"
                },
                {
                    "Country": "United States",
                    "Count": "442"
                },
                {
                    "Country": "Croatia",
                    "Count": "332"
                },
                {
                    "Country": "Russia",
                    "Count": "314"
                }
            ],
            "StreamingAgents": [
                {
                    "Agent": "FreeAmp/2.x",
                    "Count": "559"
                },
                {
                    "Agent": "BASS/2.4",
                    "Count": "401"
                },
                {
                    "Agent": "Screamer Radio v0.4.4 beta (20100924)",
                    "Count": "327"
                }
            ],
            "LogoffPlay": [
                {
                    "Track": "Berluskani-Flimbo in tyrol (Arok-remix).",
                    "NumberOfPlays": "8",
                    "StationID": "1"
                },
                {
                    "Track": "Yannis Brown-Banjo Jamming.",
                    "NumberOfPlays": "7",
                    "StationID": "1"
                },
                {
                    "Track": "Trackerartist-Ec#24.",
                    "NumberOfPlays": "7",
                    "StationID": "1"
                }
            ],
            "Duplicates": [
                {
                    "FullArtist": "4-mat",
                    "Title": "Eternity",
                    "TrackID": "13491"
                },
                {
                    "FullArtist": "4-mat",
                    "Title": "Eternity",
                    "TrackID": "15212"
                },
                {
                    "FullArtist": "Arpegiator of Chryseis",
                    "Title": "My wolf 2",
                    "TrackID": "10663"
                },
                {
                    "FullArtist": "Arpegiator of Chryseis",
                    "Title": "My wolf 2",
                    "TrackID": "11987"
                },
                {
                    "FullArtist": "C512w",
                    "Title": "Going to the moon",
                    "TrackID": "15273"
                }
            ]
        },
        {
            "StationID": "2",
            "StationName": "Best of ERICADE.radio",
            "TotalLength": "199.2",
            "TracksOnStation": "178",
            "Trackerstats": [
                {
                    "TrackerType": "Podcast episode",
                    "Tracks": "169",
                    "Percent": "94.9",
                    "StationID": "2"
                },
                {
                    "TrackerType": "Live broadcast rerun",
                    "Tracks": "8",
                    "Percent": "4.5",
                    "StationID": "2"
                },
                {
                    "TrackerType": "Amiga 4-channel module",
                    "Tracks": "1",
                    "Percent": "0.6",
                    "StationID": "2"
                }
            ],
            "Requests": [],
            "TopTracks": [
                {
                    "Artist": "Flashback",
                    "Title": "144. A tracked christmas",
                    "CompositeRating": "5.0",
                    "Voters": "4",
                    "TrackID": "15436"
                },
                {
                    "Artist": "Flashback",
                    "Title": "134. Xmas special",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "15011"
                },
                {
                    "Artist": "Flashback",
                    "Title": "92. As featured on the radio",
                    "CompositeRating": "5.0",
                    "Voters": "3",
                    "TrackID": "12222"
                },
                {
                    "Artist": "Flashback",
                    "Title": "133. Xmas 2024",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "15009"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "16. Doing miscellaneous stuff",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9675"
                },
                {
                    "Artist": "Flashback",
                    "Title": "53. The creation of a station",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9682"
                },
                {
                    "Artist": "Flashback",
                    "Title": "70. Cautious optimism",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9933"
                },
                {
                    "Artist": "The ERICADE Radio Network",
                    "Title": "The \"One year anniversary broadcast 2021\"  - third hour",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9696"
                },
                {
                    "Artist": "Flashback",
                    "Title": "72. 8!ghtBM on every chart",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9981"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "11. Two shades of new year. Hour 2/3.",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9733"
                },
                {
                    "Artist": "Flashback",
                    "Title": "143. Another mix tape",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "15414"
                },
                {
                    "Artist": "ericade.radio",
                    "Title": "Its news time",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9589"
                },
                {
                    "Artist": "Flashback",
                    "Title": "115. The Spirit of Retro and Xmas Part 1",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "14426"
                },
                {
                    "Artist": "Flashback",
                    "Title": "69. A new year - 2022, second hour",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9913"
                },
                {
                    "Artist": "Edison Party 2021",
                    "Title": "The Edison 2021 Live Broadcast hour 3",
                    "CompositeRating": "5.0",
                    "Voters": "2",
                    "TrackID": "9665"
                },
                {
                    "Artist": "Flashback",
                    "Title": "91. Forndata Summer 2022",
                    "CompositeRating": "5.0",
                    "Voters": "1",
                    "TrackID": "12205"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "21. Look at you, hacker!",
                    "CompositeRating": "5.0",
                    "Voters": "1",
                    "TrackID": "9672"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "15. Return of the Tekmann",
                    "CompositeRating": "5.0",
                    "Voters": "1",
                    "TrackID": "9680"
                },
                {
                    "Artist": "Edison Party 2021",
                    "Title": "The Edison 2021 Live Broadcast hour 5",
                    "CompositeRating": "5.0",
                    "Voters": "1",
                    "TrackID": "9681"
                },
                {
                    "Artist": "Flashback",
                    "Title": "44. The fly-over part of summer",
                    "CompositeRating": "5.0",
                    "Voters": "1",
                    "TrackID": "9686"
                }
            ],
            "BottomTracks": [
                {
                    "Artist": "Flashback",
                    "Title": "147. A brand new tracked 2026",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "15490"
                },
                {
                    "Artist": "Flashback",
                    "Title": "108. Chillaxing while waiting",
                    "CompositeRating": "1.0",
                    "Voters": "1",
                    "TrackID": "12961"
                },
                {
                    "Artist": "Flashback",
                    "Title": "135. Springtime",
                    "CompositeRating": "2.0",
                    "Voters": "2",
                    "TrackID": "15165"
                },
                {
                    "Artist": "Flashback",
                    "Title": "40. It feels good to be bad",
                    "CompositeRating": "2.0",
                    "Voters": "1",
                    "TrackID": "9606"
                },
                {
                    "Artist": "Flashback",
                    "Title": "60. Among saints and sinners",
                    "CompositeRating": "2.5",
                    "Voters": "4",
                    "TrackID": "9689"
                },
                {
                    "Artist": "Flashback",
                    "Title": "54. Failure is the interesting option",
                    "CompositeRating": "2.5",
                    "Voters": "2",
                    "TrackID": "9634"
                },
                {
                    "Artist": "Flashback",
                    "Title": "89. In loving memory of Vangelis",
                    "CompositeRating": "3.0",
                    "Voters": "2",
                    "TrackID": "12168"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "20. All you need is love",
                    "CompositeRating": "3.0",
                    "Voters": "1",
                    "TrackID": "9615"
                },
                {
                    "Artist": "Flashback",
                    "Title": "69. A new year - 2022, first hour",
                    "CompositeRating": "3.0",
                    "Voters": "1",
                    "TrackID": "9910"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "33. Tracks from the past",
                    "CompositeRating": "4.0",
                    "Voters": "3",
                    "TrackID": "9600"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "22. Another lazy sunday evening",
                    "CompositeRating": "4.0",
                    "Voters": "2",
                    "TrackID": "9637"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "4. Demos and groups",
                    "CompositeRating": "4.0",
                    "Voters": "2",
                    "TrackID": "9641"
                },
                {
                    "Artist": "Flashback",
                    "Title": "69. A new year - 2022, third hour",
                    "CompositeRating": "4.0",
                    "Voters": "2",
                    "TrackID": "9911"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "27. A pox on all your Amigas",
                    "CompositeRating": "4.0",
                    "Voters": "1",
                    "TrackID": "9669"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "18. From the desk of miscellaneousity",
                    "CompositeRating": "4.0",
                    "Voters": "1",
                    "TrackID": "9676"
                },
                {
                    "Artist": "Flashback",
                    "Title": "46. Do you grok the lingo?",
                    "CompositeRating": "4.0",
                    "Voters": "1",
                    "TrackID": "9687"
                },
                {
                    "Artist": "Flashback",
                    "Title": "130. June",
                    "CompositeRating": "4.0",
                    "Voters": "1",
                    "TrackID": "14830"
                },
                {
                    "Artist": "ericade.radio",
                    "Title": "This is the best of Ericade.radio, here is the latest from Feature Story News",
                    "CompositeRating": "4.0",
                    "Voters": "1",
                    "TrackID": "9804"
                },
                {
                    "Artist": "ericade.radio",
                    "Title": "You are listening to  the best of Ericade.radio, here is the news",
                    "CompositeRating": "4.0",
                    "Voters": "1",
                    "TrackID": "9806"
                },
                {
                    "Artist": "Amiga Flashback",
                    "Title": "17. Standing on the brink in the eve of destruction",
                    "CompositeRating": "4.0",
                    "Voters": "1",
                    "TrackID": "9594"
                }
            ],
            "TopArtists": [
                {
                    "Artist": "The%20ERICADE%20Radio%20Network",
                    "CompositeRating": "5.0",
                    "Voters": "2"
                },
                {
                    "Artist": "Edison%20Party%202021",
                    "CompositeRating": "4.8",
                    "Voters": "6"
                },
                {
                    "Artist": "Flashback",
                    "CompositeRating": "4.6",
                    "Voters": "63"
                },
                {
                    "Artist": "ericade.radio",
                    "CompositeRating": "4.5",
                    "Voters": "4"
                },
                {
                    "Artist": "Amiga%20Flashback",
                    "CompositeRating": "4.4",
                    "Voters": "26"
                }
            ],
            "BottomArtists": [
                {
                    "Artist": "Amiga%20Flashback",
                    "CompositeRating": "4.4",
                    "Voters": "26"
                },
                {
                    "Artist": "ericade.radio",
                    "CompositeRating": "4.5",
                    "Voters": "4"
                },
                {
                    "Artist": "Flashback",
                    "CompositeRating": "4.6",
                    "Voters": "63"
                },
                {
                    "Artist": "Edison%20Party%202021",
                    "CompositeRating": "4.8",
                    "Voters": "6"
                },
                {
                    "Artist": "The%20ERICADE%20Radio%20Network",
                    "CompositeRating": "5.0",
                    "Voters": "2"
                }
            ],
            "StreamingCountries": [
                {
                    "Country": "Germany",
                    "Count": "930"
                },
                {
                    "Country": "Canada",
                    "Count": "590"
                }
            ],
            "StreamingAgents": [
                {
                    "Agent": "FreeAmp/2.x",
                    "Count": "559"
                },
                {
                    "Agent": "BASS/2.4",
                    "Count": "401"
                },
                {
                    "Agent": "Screamer Radio v0.4.4 beta (20100924)",
                    "Count": "327"
                }
            ],
            "LogoffPlay": [
                {
                    "Track": "Flashback-113. Just listening to the radio.",
                    "NumberOfPlays": "14",
                    "StationID": "2"
                },
                {
                    "Track": "Amiga Flashback-21. Look at you, hacker!.",
                    "NumberOfPlays": "11",
                    "StationID": "2"
                }
            ],
            "Duplicates": [
                {
                    "FullArtist": "4-mat",
                    "Title": "Eternity",
                    "TrackID": "13491"
                },
                {
                    "FullArtist": "4-mat",
                    "Title": "Eternity",
                    "TrackID": "15212"
                },
                {
                    "FullArtist": "Arpegiator of Chryseis",
                    "Title": "My wolf 2",
                    "TrackID": "10663"
                }
            ]
        }
    ]
}

Statistics by FilterType

Returns a single category of statistics instead of the whole bundle. The response schema is identical to the Statistics endpoint, with only the requested section populated.

POST https://api.ericade.net/radio/v2/stats/<filtertype>

Replace <filtertype> in the URL with one of the values below.

Filter types

ValuePopulates
most-requestedRequests
starsTopTracks, BottomTracks, TopArtists, BottomArtists
tracktypesTrackerstats
countriesStreamingCountries
agentsStreamingAgents
logoffplayLogoffPlay
duplicatesDuplicates
listenersAccepted by the router, but no section is currently keyed to it — the response comes back with the station header only.
Anything outside this list is rejected with HTTP 400 and the message “Unknown stats type. Permitted types are: most-requested, stars, listeners, tracktypes, countries, agents, logoffplay, duplicates.” A latest-tracks type is planned but is not currently accepted — earlier revisions of this document listed it as a valid value.

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYes(Not implemented) Accepted, but the response always covers every station.1 = ericade.radio
2 = Best of ericade.radio
LimitNoNumber of rows in each top/bottom list. Defaults to 10; must be 1–100.10
DaysNoHow far back the rating and request windows reach, in days. Defaults to 30.7
Unlike the unfiltered Statistics endpoint, this one does forward Limit and Days. If you need to tune either, use this path with the filter type you want.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Limit": 20,
  "Days": 7
}

Requests

Returns the current request queue status and recent request history. Useful for displaying a live request line on a website.

POST https://api.ericade.net/radio/v2/requests

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call.Get from the get-token endpoint.
StationIDYesThe station to get request data from.1 = ericade.radio
2 = Best of ericade.radio
LimitNo(Not implemented) Limit the number of requests returned.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Limit": 10
}

Response

AttributeDescriptionExample
RequestStatisticsArray containing one object with queue wait-time statistics.Array[]
RequestStatistics => TracksInQueueNumber of tracks currently waiting in the request queue.3
RequestStatistics => YourQueueNumberPosition a new request would occupy in the queue.4
RequestStatistics => ExpectedWaitingTimeInMinutesEstimated wait in minutes until a new request would be played.48
RequestStatistics => ExpectedWaitingTimeEstimated wait expressed as a human-readable string, suitable for display on a website.48 minutes
CurrentRequestsArray of the five most recent requests (both waiting and already played).Array[]
CurrentRequests => SongRequested track expressed as “<artist> – <title>”.Tommy Fjelldal - Edificated dreams
CurrentRequests => RequestedTime the request was submitted, as a Unix epoch string.1774902144
CurrentRequests => TrackIDUnique track identifier string.15715
CurrentRequests => SourceOrigin of the request.Internet or Discord
CurrentRequests => StateWhether the request is still waiting or has already been played.Waiting or Played

Example response

{
  "RequestStatistics": [
    {
      "TracksInQueue": "3",
      "YourQueueNumber": "4",
      "ExpectedWaitingTimeInMinutes": "48",
      "ExpectedWaitingTime": "48 minutes"
    }
  ],
  "CurrentRequests": [
    {
      "Song": "Tommy Fjelldal - Edificated dreams",
      "Requested": "1774902144",
      "TrackID": "15715",
      "Source": "Internet",
      "State": "Waiting"
    },
    {
      "Song": "Arpegiator of Chryseis - My wolf 2",
      "Requested": "1774902734",
      "TrackID": "10663",
      "Source": "Internet",
      "State": "Waiting"
    },
    {
      "Song": "Dr Future - Plastic pop (Plastic kills life mix)",
      "Requested": "1774903007",
      "TrackID": "14922",
      "Source": "Internet",
      "State": "Waiting"
    },
    {
      "Song": "X-Ceed of Sco - Let's go for a ride",
      "Requested": "1774902096",
      "TrackID": "15711",
      "Source": "Internet",
      "State": "Played"
    },
    {
      "Song": "Alexander Brandon - Frolick lane",
      "Requested": "1774902091",
      "TrackID": "15714",
      "Source": "Internet",
      "State": "Played"
    }
  ]
}

Add Request

Submits a listener request to the station’s request queue.

POST https://api.ericade.net/radio/v2/addrequest
This endpoint uses Password instead of Token as the field name for the JWT value (legacy naming), and its response uses the capitalised Success / Message envelope rather than the lower-case one used elsewhere.

Request

AttributeMandatory?DescriptionNotes
PasswordYesJWT token that authenticates the call.Get from the get-token endpoint. Note: field is named Password, not Token.
StationIDYesThe station to submit the request to. The station must have requests enabled.1 = ericade.radio
2 = Best of ericade.radio
TrackIDYesUnique identifier of the track to request. Obtain from the Search or Now Playing endpoints.10663
SourceYesOrigin of the request. Can control which jingle plays before the track. Max 20 characters.Internet or Discord
RequesterNoThe self-selected display name of the requester. Max 120 characters.Caller #9
GreetingNo(Deprecated) A user-selectable greeting to the show host. Max 250 characters.Hi! Love your music!

Workflow

  1. Use Search to find the track and obtain its TrackID.
  2. Check that TrackCanBeRequested is 1; if not, show RequestVerdict to the user.
  3. Post to this endpoint with the TrackID.

Limits

The request is rejected, with an explanatory Message, when any of the following applies:

Example request

{
  "Password": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Requester": "Listener",
  "Source": "Internet",
  "TrackID": 10663
}

Response

AttributeDescriptionExample
SuccessIndicates whether the request was accepted. Either Success or Failure.Success
MessageHuman-facing message suitable for display to the end user, including the expected waiting time on success and the reason on failure.Success! The tune you requested has been added to the playlist. Expected waiting time until play: 48 minutes.

Example response

{
  "Success": "Success",
  "Message": "Success! The tune you requested has been added to the playlist. Expected waiting time until play: 48 minutes."
}
Legacy route. The v1 endpoint https://api.ericade.net/radio/addrequest/ still works and takes the same fields, but returns the lower-case message / subcode / submessage envelope instead. New integrations should use the v2 route above. Do not call it as /radio/addrequest/index.php — paths ending in .php under /radio/ are 301-redirected to an extension-less path that does not resolve.
A song-request event fires on the Station Data WebSocket the moment the request is accepted. The greeting and the requester’s IP are never broadcast.

Star Rating

Records a listener’s 1–5 star rating for a track, then recalculates both the track’s and the artist’s composite ratings.

POST https://api.ericade.net/radio/v2/rating
This endpoint returns a third envelope shape: success is a real JSON boolean and the message key is lower-case message.

Request

AttributeMandatory?DescriptionNotes
TokenYesJWT token that authenticates the call. The browser hash inside the token identifies the voter.Get from the get-token endpoint.
TrackIDYesUnique identifier of the track being rated.10663
TrackRatingYesThe rating, 1–5. Single digit; anything outside the range is rejected.4
StationIDNoAccepted, but ignored — the station is resolved from the track itself.

Limits

Latency is deliberate. Each call sleeps for 1–3 seconds before doing its work, as anti-spam throttling. Do not treat this as a timeout and do not retry on slow responses — a retry counts against the 5-per-minute limit.

Example request

{
  "Token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "TrackID": 10663,
  "TrackRating": 4
}

Response

AttributeDescriptionExample
successBoolean. true when the rating was recorded.true
messageHuman-facing message suitable for display to the end user.Stars updated.

Typical failure messages are You may only star 5 items per minute., You may not vote for this track again at this time and TrackRating must be between 1 - 5.

Example response

{
  "success": true,
  "message": "Stars updated."
}
A song-rating event fires on the Station Data WebSocket once the rating is recorded. The voter’s IP and browser hash are never broadcast.

Station Override

Switches a station between normal broadcast and a manual override. With the override on, every now-playing response for the station returns the supplied artist and title instead of the track actually playing — used to announce a live show or display a special message.

POST https://api.ericade.net/radio/v2/settings
Operator endpoint. A normal listener token is accepted by the transport, but a successful call changes what every listener of the station sees. It also uses Password for the JWT and the capitalised Success / Message envelope.

Request

AttributeMandatory?DescriptionNotes
PasswordYesJWT token that authenticates the call.Note the field name — not Token.
StationIDYesThe station to control. A settings row must already exist for it.1 = ericade.radio
2 = Best of ericade.radio
OverrideYes1 = show the supplied artist/title instead of the playing track. 0 = return to normal broadcast. Any other value is rejected.0 or 1
ArtistNoArtist text to display while the override is active. Max 250 characters.ericade.radio
TitleNoTitle text to display while the override is active. Max 250 characters.Live from Revision 2026
While the override is active, Now Playing returns isOverride: 1 and Next Up returns the synthetic “Back to normal broadcast” entry. The isLive and isRemote flags on the track record are read from the settings row and are not settable through this endpoint.

Example request

{
  "Password": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "StationID": 1,
  "Override": 1,
  "Artist": "ericade.radio",
  "Title": "Live from Revision 2026"
}

Response

AttributeDescriptionExample
SuccessEither Success or Failure.Success
MessageHuman-facing message. Override updated. on success.Override updated.

Example response

{
  "Success": "Success",
  "Message": "Override updated."
}
When the override state actually changes, now-playing and override events fire on the Station Data WebSocket. Repeat calls that do not change the state fire nothing.

Ingest

Internal endpoint. Restricted to the internal ingest IP ranges and authenticated with a pre-shared secret rather than a JWT. Documented for completeness; not callable by third parties. Requests from other addresses are rejected with HTTP 400 and “Your IP is not in the allowed range”.

Set Next Up

Replaces the station’s upcoming queue with the supplied track. Called by the playout automation when it schedules the next item: it clears every existing queue row for the station, resolves the track from its GUID and inserts the replacement. Read the queue with Next Up instead.

POST https://api.ericade.net/radio/v2/nextup
AttributeMandatory?DescriptionNotes
PasswordYesPre-shared ingest secret. This is not a JWT.
StationIDYesThe station whose queue is being replaced.1 = ericade.radio
2 = Best of ericade.radio
GuidYesPlayIT Live GUID of the track. Used to resolve the TrackID, artwork, rating and added-date from the library. Max 120 characters.6894ac27-abc9-4c4a-aad2-15879dda4dff
ArtistNoArtist name. Max 255 characters. Replaced by the library value when the track is a listener request.MA2E
TitleNoTrack title. Max 255 characters.Thrilled 4 noise

At least one of Artist, Title, Guid or StationID must be supplied. The response is the standard message / subcode / submessage envelope; on success submessage is Track added to next up.

A next-up event fires on the Station Data WebSocket once the queue is updated.

Other ingest endpoints

The remaining playout-chain endpoints have not been ported to v2 and still live under /radio/. See the v1 documentation for updatetrack, updatestreamevent, getnextrequest, updateplayedrequest, checkifexists, getnowplaying and getlistening.