Upcoming Classes Public API
e-Ballroom's public API allows for rendering of upcoming group classes and social dances on a custom website. This page outlines technical documentation on interfacing with the public API.
You will require the studio GUID to use these public routes. These are available in the Client Portal settings from the e-Ballroom Web Console.
API
https://clientapi.e-ballroom.com
Common behavior
- Authentication: none
- Content type:
application/json - Studio identification: both routes require the public studio GUID from
subscriptions.studioGUID; an internal subscription ID is not accepted. - Class types:
GroupClassandSocialDance - Capacity:
classSizeandspotsAvailablearenullwhen capacity is unlimited. Available spots never falls below zero. - Results include group classes and social dances.
GET /Studio/UpcomingClasses/calendar
Returns a FullCalendar-compatible JSON event array. This route is intended for use as a FullCalendar event source and accepts FullCalendar's start and end range parameters.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
studio |
UUID | Yes | Public studio GUID. |
start |
date-time | No | Beginning of the requested range. Defaults to midnight 7 days before the server's current date. |
end |
date-time | No | End of the requested range. Defaults to the final tick of the day 45 days after the server's current date. Must be later than start. |
Use ISO 8601 date-time values. Date-only values are also accepted by ASP.NET date-time binding and represent midnight.
Example request
GET /Studio/UpcomingClasses/calendar?studio=0197ad2c-5dce-7e88-81b2-b854eaeb3862&start=2026-09-01T00:00:00&end=2026-10-01T00:00:00
Accept: application/json
Success response
200 OK
[
{
"id": "1842",
"title": "Beginner Waltz - Group Class (Alex Morgan)",
"start": "2026-09-08T18:30:00",
"end": "2026-09-08T19:15:00",
"extendedProps": {
"classType": "GroupClass",
"instructorName": "Alex Morgan",
"price": 20.00,
"classSize": 16,
"spotsAvailable": 5
}
}
]
An empty range returns 200 OK with [].
Event schema
| Field | Type | Nullable | Description |
|---|---|---|---|
id |
string | No | Group class record ID. |
title |
string | No | Class name, display class type, and instructor when one is assigned. |
start |
date-time | No | Event start time. |
end |
date-time | No | Event end time, calculated from the class duration. |
extendedProps.classType |
string | No | GroupClass or SocialDance. |
extendedProps.instructorName |
string | Yes | Instructor display name. |
extendedProps.price |
decimal | No | Class price. |
extendedProps.classSize |
integer | Yes | Maximum attendance, or null for unlimited capacity. |
extendedProps.spotsAvailable |
integer | Yes | Remaining capacity, or null for unlimited capacity. |
Errors
| Status | Condition |
|---|---|
400 Bad Request |
studio is missing or is not a valid non-empty UUID. |
400 Bad Request |
end is not later than start. |
404 Not Found |
No studio exists for the supplied public studio GUID. |
Results are cached for five minutes per studio, start, and end combination.
GET /Studio/UpcomingClasses/datatables
Returns a DataTables.net server-side processing response. The server uses a fixed date window from midnight 7 days before its current date through the end of the day 45 days after its current date. Clients cannot override this window.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
studio |
UUID | Yes | - | Public studio GUID. |
draw |
integer | No | 0 |
DataTables draw counter, returned unchanged when it is a valid integer. |
start |
integer | No | 0 |
Zero-based row offset. Negative values are treated as 0. |
length |
integer | No | 10 |
Requested page size. Values less than or equal to zero are treated as 10. |
search[value] |
string | No | empty | Case-insensitive search text. |
columns[i][data] |
string | No | - | Data field for column index i; used to resolve the requested sort field. Indices must be contiguous from zero. |
order[0][column] |
integer | No | -1 |
Index into the submitted columns entries. No sort is applied when the index or field is invalid. |
order[0][dir] |
string | No | asc |
Use desc for descending order; every other value is ascending. |
Search matches className, instructorName, and the display labels Group Class or Social Dance.
The following columns[i][data] values are sortable:
classIdclassNameclassTypeinstructorNamestartTimeendTimepriceclassSizespotsAvailable
Example request
GET /Studio/UpcomingClasses/datatables?studio=0197ad2c-5dce-7e88-81b2-b854eaeb3862&draw=3&start=0&length=10&search%5Bvalue%5D=waltz&columns%5B0%5D%5Bdata%5D=startTime&order%5B0%5D%5Bcolumn%5D=0&order%5B0%5D%5Bdir%5D=asc
Accept: application/json
The bracketed query parameter names are URL-encoded in this example. DataTables normally generates them automatically.
Success response
200 OK
{
"draw": 3,
"recordsTotal": 24,
"recordsFiltered": 4,
"data": [
{
"classId": 1842,
"className": "Beginner Waltz",
"classType": "GroupClass",
"instructorName": "Alex Morgan",
"startTime": "2026-09-08T18:30:00",
"endTime": "2026-09-08T19:15:00",
"price": 20.00,
"classSize": 16,
"spotsAvailable": 5
}
]
}
Response schema
| Field | Type | Nullable | Description |
|---|---|---|---|
draw |
integer | No | Draw counter parsed from the request. |
recordsTotal |
integer | No | Number of rows in the fixed date window before search filtering. |
recordsFiltered |
integer | No | Number of rows after search filtering and before pagination. |
data |
array | No | Current page of class rows. |
data[].classId |
integer | No | Group class record ID. |
data[].className |
string | No | Class name. |
data[].classType |
string | No | GroupClass or SocialDance. |
data[].instructorName |
string | Yes | Instructor display name. |
data[].startTime |
date-time | No | Class start time. |
data[].endTime |
date-time | No | Class end time, calculated from the class duration. |
data[].price |
decimal | No | Class price. |
data[].classSize |
integer | Yes | Maximum attendance, or null for unlimited capacity. |
data[].spotsAvailable |
integer | Yes | Remaining capacity, or null for unlimited capacity. |
Errors
| Status | Condition |
|---|---|
400 Bad Request |
studio is missing or is not a valid non-empty UUID. |
404 Not Found |
No studio exists for the supplied public studio GUID. |
The unfiltered row set is cached for five minutes per studio and server date. Search, sorting, and pagination are applied after the cached rows are loaded.