Developer API & Embed
Integrate BUS artist schedule into your website using our open API or embed widget.
Endpoint
GET https://thebeus.com/api/calendar/public/Returns all artist schedule events with parsed and enriched data ready to use. All hash-tag metadata (artists, status, platforms, images) are extracted from event descriptions and provided as structured fields. The cleaned description text is also included separately.
Features
Call from any domain
Open public access
Artists, status, platforms extracted
5 min cache for performance
Filter by date range or artist
60 requests/min per IP
Rate Limiting
60 requests per minute per IP address
The API includes rate limiting headers in responses to help you track usage:
X-RateLimit-Limit: Maximum requests per windowX-RateLimit-Remaining: Requests remaining in current windowX-RateLimit-Reset: Unix timestamp when limit resets
If you exceed the limit, you'll receive a 429 Too Many Requests response.
Example Request
curl "https://thebeus.com/api/calendar/public/"Query Parameters (Optional)
Filter events by date range or artist using query parameters:
| Parameter | Type | Description |
|---|---|---|
| start | string | Filter events starting from this date (ISO 8601, e.g. 2025-01-01) |
| end | string | Filter events up to this date (ISO 8601, e.g. 2025-12-31) |
| artist | string | Filter by artist code(s), comma-separated (e.g. AL,MK,H) |
# Events in January 2025
curl "https://thebeus.com/api/calendar/public/?start=2025-01-01&end=2025-01-31"
# Events featuring ALAN
curl "https://thebeus.com/api/calendar/public/?artist=AL"
# Events featuring ALAN or HEART in March 2025
curl "https://thebeus.com/api/calendar/public/?start=2025-03-01&end=2025-03-31&artist=AL,H"Response Format
{
"ok": true,
"count": 42,
"filters": {
"start": "2025-01-01",
"end": "2025-12-31",
"artist": ["AL"]
},
"events": [
{
"id": "event-uid-string",
"title": "Event Title",
"start": "2025-01-15T18:00:00.000Z",
"end": "2025-01-15T20:00:00.000Z",
"isAllDay": false,
"isSingleDay": true,
"location": "Bangkok, Thailand",
"description": "Clean description text without tags",
"image": "/images/events/poster.webp",
"isBirthday": false,
"artists": [
{
"code": "AL",
"name": "ALAN",
"image": "/images/artists/ALAN.webp"
}
],
"status": {
"code": "TBA",
"detail": "Waiting for confirmation"
},
"platforms": [
{
"code": "YT",
"url": "https://youtube.com/...",
"label": "Watch Live"
}
]
}
]
}Field Reference
| Field | Type | Description |
|---|---|---|
| id | string | Unique event identifier |
| title | string | Event title |
| start | string | ISO 8601 start date/time |
| end | string | ISO 8601 end date/time |
| isAllDay | boolean | Whether event is all-day |
| isSingleDay | boolean? | Whether all-day event spans one day |
| location | string? | Event location |
| description | string | null | Clean description (tags removed) |
| image | string | null | Event poster image URL |
| isBirthday | boolean | Whether event is a birthday |
| artists | array | List of artists (code, name, image) |
| status | object | null | Event status (code: TBA/PST/CXL, detail) |
| platforms | array | Social/streaming links (code, url, label) |
JavaScript Example
// Fetch BUS artist schedule events
async function getBusSchedule() {
const response = await fetch('https://thebeus.com/api/calendar/public/')
const data = await response.json()
if (data.ok) {
console.log(`Found ${data.count} events`)
data.events.forEach(event => {
console.log(event.title, event.start)
console.log('Artists:', event.artists.map(a => a.name).join(', '))
if (event.status) {
console.log('Status:', event.status.code, event.status.detail)
}
})
}
}
getBusSchedule()Embed the full BUS artist schedule calendar directly into your website using an iframe. The embedded calendar uses the same components, design, and responsive layout as the main schedule page — including the mobile morphing calendar, desktop sidebar, event cards, search, and filters.
Basic Embed Code
<iframe
src="https://thebeus.com/schedule/embed/"
width="100%"
height="800"
frameborder="0"
style="border: none; border-radius: 12px;"
title="BUS Artist Schedule"
></iframe>Filtering Parameters
Pre-filter events shown in the embed using URL query parameters:
| Parameter | Description |
|---|---|
| theme | Force light or dark theme (light | dark) |
| start | Show events from this date (e.g. 2025-01-01) |
| end | Show events up to this date (e.g. 2025-12-31) |
| artist | Show only specific artist(s) (e.g. AL,MK,H) |
<!-- Show only ALAN's events -->
<iframe src="https://thebeus.com/schedule/embed/?artist=AL" ...></iframe>
<!-- Show events in March 2025, dark theme -->
<iframe src="https://thebeus.com/schedule/embed/?start=2025-03-01&end=2025-03-31&theme=dark" ...></iframe>
<!-- Show ALAN and HEART events only -->
<iframe src="https://thebeus.com/schedule/embed/?artist=AL,H" ...></iframe>Theme Options
Force a specific theme using the theme URL parameter:
<!-- Light theme -->
<iframe src="https://thebeus.com/schedule/embed/?theme=light" ...></iframe>
<!-- Dark theme -->
<iframe src="https://thebeus.com/schedule/embed/?theme=dark" ...></iframe>
<!-- Auto (follows user system preference) -->
<iframe src="https://thebeus.com/schedule/embed/" ...></iframe>Responsive Embed
<div style="position: relative; width: 100%; max-width: 900px; margin: 0 auto;">
<iframe
src="https://thebeus.com/schedule/embed/"
width="100%"
height="800"
frameborder="0"
style="border: none; border-radius: 12px;"
title="BUS Artist Schedule"
></iframe>
</div>Preview
BUS Because of you i shine — Schedule API v1.0