Public widget API reference
The public widget API exposes a calendar widget's event data as read-only JSON. It has two endpoints: the initial widget response, which includes pre-sale data, and a paginated events response, which does not. Neither endpoint requires authentication.
Endpoints
Endpoint | Purpose |
|---|---|
| Initial widget render. Returns the widget config, its events, and the top-level |
| Paginated event list for calendar navigation and list or card pagination. Events only; no pre-sale data. |
Initial widget response
Call GET /api/widgets/:uuid to load a widget and its pre-sale data. This is the only widget response that includes pre-sale information.
Request parameters
Parameter | Behavior |
|---|---|
| Optional. Defaults to |
| Optional. Sanitized to a numeric string of at most 19 digits; invalid values are ignored. |
Response
{
"widget": {
"id": 123,
"name": "Widget name",
"config": {},
"embedType": "combined"
},
"events": [],
"preSales": []
}The widget object identifies the widget. The events array contains the widget's events, each with fields such as id, title, date, timezone, location, imageUrl, categoryName, tagNames, ticketPrice, spotsRemaining, soldOut, and registrationUrl. When the pre-sale feature is enabled, events also include purchasable, purchasableAt, lockedLabel, cardBadgeText, and requiresPreSaleUnlock.
The top-level preSales collection lists the pre-sales that apply to this widget's events. Each entry includes id, tagId, name, currentState, visibleAt, earlyAccessStartsAt, onSaleAt, the announcement fields announceEyebrow, announceHeadline, announceSubtext, announceButtonLabel, and announceButtonUrl, the access fields accessEyebrow, accessHeadline, and accessSubtext, and requiresCode, unlocked, earlyAccessActive, and unlockUrl. When no pre-sale applies, preSales is an empty array.
Paginated events response
Call GET /api/widgets/:uuid/events to page through a widget's events. This response contains only events and pagination metadata — it never includes a preSales field, so do not try to reconstruct pre-sale strips from later event pages.
Request parameters
Parameter | Behavior |
|---|---|
| Optional. Minimum |
| Optional. Default |
| Optional. Start of the date range. |
| Optional. End of the date range. |
| Optional. Sanitized numeric ID. On page 1, the endpoint may insert the deep-linked event. |
Response
{
"events": [],
"total": 30,
"page": 1,
"per_page": 25
}events is the array of events for this page, total is the total matching event count, and page and per_page echo the current page and page size.
Errors and transport
An unknown widget returns {"error": "Widget not found"} with HTTP 404. Cross-origin GET and OPTIONS requests are allowed for /api/*. Requests to /api/widgets/ are throttled to 60 requests per IP per 60 seconds.