App Configuration API

Station list, stream URLs, metadata paths, artwork, schedules, and app settings — one JSON file that drives a complete RadioMV client.

Endpoint

GET https://stream.radiomv.com/static/appv3.json

Current configuration (v3). This is the only URL an app needs to hardcode — everything else is discovered from it.

How v3 URLs work config.baseUrl is the root for every relative path in the file. To build a full URL, prepend it: baseUrl + station.streams.hls → https://stream.radiomv.com/stream/english.m3u8. Paths that already start with https:// (like shareUrl) are used as-is. Keep query strings (e.g. ?v=1 on artwork) intact — they version the cache.

Response Format

{
    "config": {
        "version": "20260428.2044",
        "baseUrl": "https://stream.radiomv.com",
        "analytics": "/api/analytics"
    },
    "navigation": { ... },
    "settings": { ... },
    "stations": [ ... ]
}

Config Object

version string required
Date-based version in format YYYYMMDD.HHMM. Use for cache invalidation.
baseUrl string required
Root URL for every relative path in this file.
analytics string required
Relative path of the playback-analytics endpoint (first-party apps POST batched events here).

Navigation URLs organized by language group — each group has an explore URL (absolute):

{
    "navigation": {
        "english": { "explore": "https://radiomv.com/support/#english" },
        "spanish": { ... },
        "german": { ... },
        "slavic": { ... }
    }
}

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://...",
            "share-url": "https://radiomv.com/apps/"
        }
    }
}
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.
share-url string
URL to share when recommending the apps.

Stations Array

Array of all station objects. Each station contains:

{
    "id": "english",
    "name": "English",
    "language": "english",
    "isMain": true,
    "streams": {
        "hls": "/stream/english.m3u8",
        "mp3": "/stream/english.m3u"
    },
    "metadata": "/api/metadata/english",
    "artwork": {
        "1x1": "/assets/english/artwork-1x1.jpg?v=1",
        "1x1Small": "/assets/english/artwork-1x1-small.jpg?v=2",
        "16x9": "/assets/english/artwork-16x9.jpg?v=1",
        "nowPlaying": "/assets/english/artwork-now-playing.jpg?v=1",
        "nowPlayingSmall": "/assets/english/artwork-now-playing-small.jpg?v=2",
        "miniPlayer": "/assets/english/mini-player.jpg?v=1"
    },
    "video": "/assets/english/video-loop.mp4?v=1",
    "schedule": "/static/schedules/english.json",
    "shareUrl": "https://player.radiomv.com/english.html"
}

Station Fields

id string required
Station slug (e.g. english, slavic-nt). Identical to the station IDs used by the Streaming & Metadata API.
name string required
Station display name, in the station's own language.
language string required
Language group: english, spanish, german, or slavic. Matches the keys of navigation and settings.
isMain boolean required
Whether this is a main station (true) or auxiliary channel (false).
streams.hls string required
Relative path of the HLS master playlist (.m3u8). Preferred stream for apps.
streams.mp3 string required
Relative path of the MP3 playlist (.m3u) — fetch it, then follow the stream URL inside. Fallback for players without HLS.
metadata string required
Relative path of the now-playing JSON endpoint. Append /events for the SSE live stream — see Streaming & Metadata.
artwork object required
Relative artwork paths: 1x1, 1x1Small, 16x9, nowPlaying, nowPlayingSmall, miniPlayer; some stations add motionArtwork4x3 / motionArtwork1x1 (MP4). Keep the ?v= query — it busts caches on artwork updates.
video string optional
Relative path of a background video loop (MP4). Present on some main stations.
schedule string optional
Relative path of the station's program schedule JSON. Only present on stations with a published schedule — see Schedule.
shareUrl string required
Absolute web-player URL for sharing.

Station List

ID Name Language Main
englishEnglishenglishYes
english-otEnglish Old TestamentenglishNo
english-ntEnglish New TestamentenglishNo
spanishRadio Cristiana en EspañolspanishYes
spanish-otEl Antiguo TestamentospanishNo
spanish-ntEl Nuevo TestamentospanishNo
germanDeutsch RadioMvgermanYes
german-otAltes TestamentgermanNo
german-ntNeues TestamentgermanNo
slavicХристианское РадиоslavicYes
slavic-musicМузыкальный КаналslavicNo
slavic-kidsДетский КаналslavicNo
slavic-ntНовый ЗаветslavicNo
slavic-otВетхий ЗаветslavicNo

Code Examples

Fetch Config and Resolve URLs

const response = await fetch('https://stream.radiomv.com/static/appv3.json');
const data = await response.json();

// Resolve a relative path against baseUrl
const resolve = (path) =>
    path.startsWith('http') ? path : data.config.baseUrl + path;

Get All Main Stations

const mainStations = data.stations.filter(s => s.isMain);
// Returns: english, spanish, german, slavic

Play a Station

const station = data.stations.find(s => s.id === 'slavic');
const hlsUrl = resolve(station.streams.hls);
// https://stream.radiomv.com/stream/slavic.m3u8 — hand to your player

Show Now Playing

const now = await (await fetch(resolve(station.metadata))).json();
console.log(now.title, now.artist);

// Or subscribe to live updates (SSE)
const es = new EventSource(resolve(station.metadata) + '/events');

Check for Config Updates

async function checkForUpdates(cachedVersion) {
    const response = await fetch('https://stream.radiomv.com/static/appv3.json');
    const data = await response.json();

    if (data.config.version !== cachedVersion) {
        // New version available, update cache
        return { updated: true, data };
    }
    return { updated: false };
}

Legacy Versions

appv1.json and appv2.json (served from api.radiomv.studio) are the previous config generations: numeric station IDs, absolute URLs per field, and plain-text metadata endpoints. They remain online for existing app builds but are deprecated — do not use them for new work.