App Configuration API
Station list, stream URLs, artwork, navigation links, and app settings.
Endpoints
GET
/appv1.json
Legacy config for v1 apps. Points to old schedule URLs.
GET
/appv2.json
New config for v2 apps. Points to v2 schedule URLs with improved schema.
Which version to use?
New integrations should use
appv2.json. The schedule URLs in appv2 point to the v2 schema with numeric days, 24-hour times, and categories.
Response Format
{
"config": {
"version": "20251212.1052",
"logoLightMode": "https://assets.radiomv.studio/logo-light-mode.png",
"logoDarkMode": "https://assets.radiomv.studio/logo-dark-mode.png"
},
"navigation": { ... },
"settings": { ... },
"stations": [ ... ]
}
Config Object
version
string
required
Date-based version in format
YYYYMMDD.HHMM. Use for cache invalidation.
logoLightMode
string
required
URL to logo image for light mode backgrounds.
logoDarkMode
string
required
URL to logo image for dark mode backgrounds.
Navigation Object
Contains navigation URLs organized by language group:
{
"navigation": {
"english": {
"explore": {
"url": "https://radiomv.com/support/#english"
}
},
"spanish": { ... },
"german": { ... },
"slavic": { ... }
}
}
Each language group contains:
explore.url
string
URL to the explore/support page for that language.
Settings Object
Contact information and links organized by language group:
{
"settings": {
"english": {
"website": "https://en.radiomv.com/",
"office": "+1-830-208-2494",
"sms": "+1-830-208-2494",
"beta-program": "https://...",
"report-a-bug": "https://..."
}
}
}
website
string
Main website URL for the language.
office
string
Office phone number.
sms
string
SMS contact number.
beta-program
string
URL to beta program signup.
report-a-bug
string
URL to bug report form.
Stations Array
Array of all station objects. Each station contains:
{
"id": "1",
"station": "English",
"language": "English",
"isMain": true,
"artworkUrl16x9": "https://assets.radiomv.studio/...",
"artworkUrl1x1": "https://assets.radiomv.studio/...",
"artworkUrlNowPlaying1x1": "https://assets.radiomv.studio/...",
"audioPriority": "hls",
"hlsStreamUrl": "https://stream.radiomv.com/english.m3u8",
"iceStreamUrl": "https://stream.radiomv.com/english.m3u",
"shareUrl": "https://player.radiomv.com/english.html",
"stationScheduleUrl": "https://apps.radiomv.com/program/english-program.json",
"metadataUrl": "https://api.radiomv.com/english.txt"
}
Station Fields
id
string
required
Unique station identifier (1-14).
station
string
required
Station display name.
language
string
required
Language group: "English", "Spanish", "German", or "Slavic".
isMain
boolean
required
Whether this is a main station (true) or auxiliary channel (false).
artworkUrl16x9
string
optional
Wide artwork URL. Only present on main stations.
artworkUrl1x1
string
required
Square artwork URL for station display.
artworkUrlNowPlaying1x1
string
required
Square artwork URL for now playing display.
audioPriority
string
required
Preferred stream type: "hls" or "ice".
hlsStreamUrl
string
required
HLS stream URL (.m3u8).
iceStreamUrl
string
required
Icecast stream URL (.m3u) as fallback.
shareUrl
string
required
Web player URL for sharing.
stationScheduleUrl
string
optional
URL to station schedule JSON. Only present on main stations.
metadataUrl
string
required
URL to current track metadata.
Station List
| ID | Station | Language | Main |
|---|---|---|---|
| 1 | English | English | Yes |
| 2 | English Old Testament | English | No |
| 3 | English New Testament | English | No |
| 4 | Radio Cristiana en Español | Spanish | Yes |
| 5 | El Antiguo Testamento | Spanish | No |
| 6 | El Nuevo Testamento | Spanish | No |
| 7 | Deutsch RadioMv | German | Yes |
| 8 | Altes Testament | German | No |
| 9 | Neues Testament | German | No |
| 10 | Христианское Радио | Slavic | Yes |
| 11 | Музыкальный Канал | Slavic | No |
| 12 | Детский Канал | Slavic | No |
| 13 | Новый Завет | Slavic | No |
| 14 | Ветхий Завет | Slavic | No |
Code Examples
Get All Main Stations
const response = await fetch('https://api.radiomv.studio/appv1.json');
const data = await response.json();
const mainStations = data.stations.filter(s => s.isMain);
// Returns stations with IDs: 1, 4, 7, 10
Get Stations by Language
function getStationsByLanguage(stations, language) {
return stations.filter(s => s.language === language);
}
const englishStations = getStationsByLanguage(data.stations, 'English');
// Returns stations with IDs: 1, 2, 3
Play Station with Fallback
function getStreamUrl(station) {
if (station.audioPriority === 'hls') {
return {
primary: station.hlsStreamUrl,
fallback: station.iceStreamUrl
};
}
return {
primary: station.iceStreamUrl,
fallback: station.hlsStreamUrl
};
}
Check for Config Updates
async function checkForUpdates(cachedVersion) {
const response = await fetch('https://api.radiomv.studio/appv1.json');
const data = await response.json();
if (data.config.version !== cachedVersion) {
// New version available, update cache
return { updated: true, data };
}
return { updated: false };
}