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

CORS enabled

Call from any domain

No authentication

Open public access

Parsed metadata

Artists, status, platforms extracted

Cached responses

5 min cache for performance

Filtering support

Filter by date range or artist

Rate limited

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 window
  • X-RateLimit-Remaining: Requests remaining in current window
  • X-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:

ParameterTypeDescription
startstringFilter events starting from this date (ISO 8601, e.g. 2025-01-01)
endstringFilter events up to this date (ISO 8601, e.g. 2025-12-31)
artiststringFilter 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

FieldTypeDescription
idstringUnique event identifier
titlestringEvent title
startstringISO 8601 start date/time
endstringISO 8601 end date/time
isAllDaybooleanWhether event is all-day
isSingleDayboolean?Whether all-day event spans one day
locationstring?Event location
descriptionstring | nullClean description (tags removed)
imagestring | nullEvent poster image URL
isBirthdaybooleanWhether event is a birthday
artistsarrayList of artists (code, name, image)
statusobject | nullEvent status (code: TBA/PST/CXL, detail)
platformsarraySocial/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:

ParameterDescription
themeForce light or dark theme (light | dark)
startShow events from this date (e.g. 2025-01-01)
endShow events up to this date (e.g. 2025-12-31)
artistShow 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