Legends Alley
Base URL: https://api.vrchatlegends.com/api. Every GET below is public, needs no key, returns JSON and can be read from any origin. Responses are cached for about two minutes, so poll no faster than once a minute.
Endpoints
| GET path | Result |
|---|---|
/alley | Index of the endpoints on this page |
/alley/landing | Event, lineup and event board in one request. Use this in worlds, where string loading is throttled |
/alley/event | The current event |
/alley/communities | Communities that have uploaded a booth |
/alley/communities/:id | One community from the lineup |
/alley/schedule | The event board |
/alley/schedule/:id | One event board entry |
Event
{
"event": {
"id": "legends-alley-2027",
"slug": "alley-2027",
"name": "Legends Alley 2027",
"year": 2027,
"displayDate": "November 6-7, 2027",
"startsAt": "2027-11-05T16:30:00.000Z",
"endsAt": "2027-11-08T04:00:00.000Z",
"timezone": "America/Chicago",
"status": "upcoming",
"acceptingBooths": true,
"uploadDeadline": null
}
}
status is upcoming, live or ended. Times are UTC ISO 8601 strings, or null when not set.
Communities
Only communities with an uploaded booth are listed. An approved community appears as soon as its first booth is accepted.
{
"count": 1,
"communities": [
{
"id": "665f0c...",
"name": "Cozy Corner",
"description": "A late night hangout community.",
"logoUrl": "https://alley.vrchatlegends.com/api/communities/665f0c.../logo",
"publicUrl": "https://discord.gg/example",
"boothVersion": 3,
"boothUpdatedAt": "2027-10-01T12:00:00.000Z"
}
]
}
Event board
Accepted community events, DJ sets and live performances. Entries are added automatically when staff accept the application, and the host fills in the time and details afterwards.
{
"count": 1,
"schedule": [
{
"id": "evt_4f1c2a9b7d3e5a601b2c",
"kind": "community-event",
"kindLabel": "Community event",
"category": "Meetup or hangout",
"title": "Midnight Meetup",
"summary": "A relaxed hangout under the signs.",
"hostName": "Neon Host",
"startsAt": "2027-11-06T23:00:00.000Z",
"endsAt": "2027-11-07T00:30:00.000Z",
"durationMinutes": 90,
"location": "Main Stage",
"worldUrl": "https://vrchat.com/home/world/wrld_...",
"link": null,
"updatedAt": "2027-10-20T18:04:11.000Z"
}
]
}
kind is community-event, dj or performer. Scheduled entries come first in time order, followed by entries whose startsAt is still null.
Editing an entry
Hosts edit their own entry from the event board on the Legends Alley page. The same actions are available with a signed-in session token:
| Method and path | Result |
|---|---|
GET /alley/schedule/manage | Entries the signed-in user can edit |
PATCH /alley/schedule/:id | Update title, summary, startsAt, durationMinutes, location, worldUrl or link |
Send only the fields you want to change. startsAt is an ISO 8601 time or null, durationMinutes is 5 to 720, and links must start with https://. Staff can also set status to published or hidden.
Udon example
public VRCUrl landingUrl = new VRCUrl("https://api.vrchatlegends.com/api/alley/landing");
void Start() { VRCStringDownloader.LoadUrl(landingUrl, (IUdonEventReceiver)this); }
public override void OnStringLoadSuccess(IVRCStringDownload result)
{
if (!VRCJson.TryDeserializeFromJson(result.Result, out DataToken data)) return;
DataList schedule = data.DataDictionary["schedule"].DataList;
for (int i = 0; i < schedule.Count; i++)
{
DataDictionary entry = schedule[i].DataDictionary;
Debug.Log(entry["title"].String + " hosted by " + entry["hostName"].String);
}
}