Schedule API
Program schedules for RadioMV main stations including show times, categories, and descriptions.
Endpoints
GET
/english-programv2.json
GET
/slavic-programv2.json
GET
/spanish-programv2.json
GET
/german-programv2.json
Response Format
{
"schemaVersion": "2.0.0",
"lastUpdated": "2024-12-19",
"station": {
"id": 1,
"name": "English",
"language": "en",
"timezone": "America/Los_Angeles"
},
"schedule": [
{
"id": "1-001",
"name": "Kids Hour",
"description": "An hour-long children's program.",
"category": "children",
"days": [0, 1, 2, 3, 4, 5, 6],
"startTime": "07:00",
"endTime": "08:00"
}
]
}
Root Fields
schemaVersion
string
required
Semantic version of the schema format. Check this for compatibility.
lastUpdated
string
required
ISO 8601 date when schedule content was last modified (e.g., "2024-12-19").
station
object
required
Station metadata object.
schedule
array
required
Array of program schedule items.
Station Object
id
number
required
Unique station identifier. Matches IDs in appv1.json.
name
string
required
Station display name.
language
string
required
ISO 639-1 language code:
en, es, de, ru
timezone
string
required
IANA timezone identifier. All times in schedule are in this timezone.
Schedule Item Object
id
string
required
Unique identifier in format
{stationId}-{sequence} (e.g., "1-001").
name
string
required
Program name in the station's language.
description
string
required
Program description. May be empty string.
category
string
required
Standardized category for filtering. See Categories.
days
number[]
required
Array of day numbers (0-6). See Days of Week.
startTime
string
required
Start time in 24-hour format
HH:MM.
endTime
string
required
End time in 24-hour format
HH:MM.Days of Week
Days are represented as numbers following JavaScript's Date.getDay() convention:
| Number | Day |
|---|---|
0 | Sunday |
1 | Monday |
2 | Tuesday |
3 | Wednesday |
4 | Thursday |
5 | Friday |
6 | Saturday |
Time Format
Times use 24-hour format (HH:MM) for consistent parsing:
| 12-Hour | 24-Hour |
|---|---|
| 12:00 AM | 00:00 |
| 7:00 AM | 07:00 |
| 12:00 PM | 12:00 |
| 1:00 PM | 13:00 |
| 6:30 PM | 18:30 |
| 11:00 PM | 23:00 |
Timezone
All times are in the station's local timezone (specified in
station.timezone). Currently all stations use America/Los_Angeles (Pacific Time).
Categories
Standardized categories enable filtering across all stations regardless of language:
| Category | Description |
|---|---|
bible-reading | Scripture reading (OT, NT, Psalms, Proverbs) |
bible-study | In-depth Bible teaching/study programs |
sermon | Preaching/sermons from pastors |
testimony | Personal testimonies |
music | Music programs |
children | Children's programming |
family | Family-focused content |
live | Live broadcasts, call-in shows |
missionary | Missionary reports and updates |
educational | Educational/science programs |
audiobook | Audiobook readings |
devotional | Daily devotional content |
talk-show | Discussion/interview programs |
Code Examples
Get Current Program
function getCurrentProgram(schedule) {
const now = new Date();
const currentDay = now.getDay();
const currentTime = now.toTimeString().slice(0, 5); // "HH:MM"
return schedule.find(item =>
item.days.includes(currentDay) &&
item.startTime <= currentTime &&
item.endTime > currentTime
);
}
Get Today's Schedule
function getTodaySchedule(schedule) {
const today = new Date().getDay();
return schedule
.filter(item => item.days.includes(today))
.sort((a, b) => a.startTime.localeCompare(b.startTime));
}
Filter by Category
function getProgramsByCategory(schedule, category) {
return schedule.filter(item => item.category === category);
}
// Get all sermons
const sermons = getProgramsByCategory(schedule, 'sermon');
Check for Updates
function isScheduleStale(data, maxAgeDays = 30) {
const lastUpdated = new Date(data.lastUpdated);
const now = new Date();
const diffDays = (now - lastUpdated) / (1000 * 60 * 60 * 24);
return diffDays > maxAgeDays;
}
Swift Example
func getScheduleForDay(_ schedule: [ScheduleItem], day: Int) -> [ScheduleItem] {
return schedule
.filter { $0.days.contains(day) }
.sorted { $0.startTime < $1.startTime }
}
Kotlin Example
fun getProgramsByCategory(
schedule: List<ScheduleItem>,
category: String
): List<ScheduleItem> {
return schedule.filter { it.category == category }
}