Skip to main content
GET
/
api
/
public
/
events
{
  "PastEvents": true,
  "Categories": [
    {}
  ],
  "Category": {},
  "CalendarEvents": {},
  "CalendarEvents.Records[].Id": 123,
  "CalendarEvents.Records[].UniqueId": "<string>",
  "CalendarEvents.Records[].Name": "<string>",
  "CalendarEvents.Records[].ShortDescription": "<string>",
  "CalendarEvents.Records[].LongDescription": "<string>",
  "CalendarEvents.Records[].HostFullName": {},
  "CalendarEvents.Records[].Location": {},
  "CalendarEvents.Records[].VenueAddress": {},
  "CalendarEvents.Records[].WebAddress": {},
  "CalendarEvents.Records[].FacebookPage": {},
  "CalendarEvents.Records[].StartDate": "<string>",
  "CalendarEvents.Records[].EndDate": "<string>",
  "CalendarEvents.Records[].StartDateUtc": "<string>",
  "CalendarEvents.Records[].EndDateUtc": "<string>",
  "CalendarEvents.Records[].MultipleDays": true,
  "CalendarEvents.Records[].PublishDate": "<string>",
  "CalendarEvents.Records[].PublishDateUtc": "<string>",
  "CalendarEvents.Records[].HasTickets": true,
  "CalendarEvents.Records[].SoldOut": true,
  "CalendarEvents.Records[].ChepeastPrice": 123,
  "CalendarEvents.Records[].MostExpensivePrice": 123,
  "CalendarEvents.Records[].ChepeastProduct": {},
  "CalendarEvents.Records[].MostExpensiveProduct": {},
  "CalendarEvents.Records[].EventProducts": [
    {}
  ],
  "CalendarEvents.Records[].TicketsPage": {},
  "CalendarEvents.Records[].HasCustomTicketsPage": true,
  "CalendarEvents.Records[].Allocation": {},
  "CalendarEvents.Records[].Sales": {},
  "CalendarEvents.Records[].EnableWaitList": true,
  "CalendarEvents.Records[].TicketNotes": {},
  "CalendarEvents.Records[].AskBuyerAddress": true,
  "CalendarEvents.Records[].EventCategories": [
    {}
  ],
  "CalendarEvents.Records[].ShowInHomePage": true,
  "CalendarEvents.Records[].ShowInHomeBanner": true,
  "CalendarEvents.Records[].AllowComments": true,
  "CalendarEvents.Records[].HasSmallImage": true,
  "CalendarEvents.Records[].HasLargeImage": true,
  "CalendarEvents.Records[].HasAddress": true,
  "CalendarEvents.Records[].Resource": {},
  "CalendarEvents.Records[].HasResource": true,
  "CalendarEvents.Records[].Business": {},
  "CalendarEvents.Records[].Recent10Attendees": {},
  "CalendarEvents.Records[].Comments": [
    {}
  ],
  "CalendarEvents.Records[].CreatedOn": "<string>",
  "CalendarEvents.Records[].CreatedOnUtc": "<string>",
  "CalendarEvents.Records[].UpdatedOn": "<string>",
  "CalendarEvents.Records[].UpdatedOnUtc": "<string>",
  "400 Bad Request": {}
}

List Events

Returns a paginated list of published calendar events for the current location. Supports filtering by past/upcoming, category, keyword search, and featured flag. Used to power the public-facing events catalogue and homepage event grids.
An event is a scheduled activity (workshop, networking session, etc.) published by the space operator. Events may have one or more ticket products with their own prices and availability windows.

Authentication

No authentication required. The response is scoped to the current business location.

Query Parameters

pastEvents
boolean
required
true — return events whose end date is in the past. false — return upcoming and active events.
page
number
1-based page number. Default: 1
top
number
Number of events per page. Default: 25
categoryId
number
Filter to events belonging to a specific category. Omit to return events across all categories.
Keyword filter applied to event name and description. URL-encoded.
When true, returns only events marked as featured by the operator.
onlyHomePage
boolean
When true, returns only events that the operator has flagged to appear on the home page. Used by the upcomingEvents shortcut endpoint.
_shape
string
Comma-separated dot-notated field paths to include in the response. When provided, only the specified fields are returned — useful for reducing payload size. Example: _shape=CalendarEvents.Records.Id,CalendarEvents.Records.Name

Response

Returns an EventList object containing pagination metadata and the paginated event records.

Core Fields

PastEvents
boolean
required
Mirrors the pastEvents query parameter, confirming which slice of events was returned.
Categories
EventCategory[]
All available event categories for the current location — useful for building a category filter UI without a separate request.
Category
EventCategory | null
The currently active category filter, if categoryId was supplied.
CalendarEvents
ApiListResult<CalendarEvent>
Paginated wrapper containing the matching events. See API Overview for pagination fields (CurrentPage, TotalItems, etc.).

CalendarEvent Fields

CalendarEvents.Records[].Id
number
required
Unique integer identifier for the event. Use this as {id} in detail, product, and waiting-list endpoints.
CalendarEvents.Records[].UniqueId
string
UUID for the event — stable across edits and suitable as a cache key.
CalendarEvents.Records[].Name
string
required
Display name of the event.
CalendarEvents.Records[].ShortDescription
string
Brief summary shown in list cards.
CalendarEvents.Records[].LongDescription
string
Full event description. May contain HTML.
CalendarEvents.Records[].HostFullName
string | null
Full name of the event host.
CalendarEvents.Records[].Location
string | null
Venue name or room identifier.
CalendarEvents.Records[].VenueAddress
string | null
Full postal address of the event venue.
CalendarEvents.Records[].WebAddress
string | null
External event URL (e.g., a Zoom or Eventbrite link).
CalendarEvents.Records[].FacebookPage
string | null
Facebook event page URL.

Dates

CalendarEvents.Records[].StartDate
string
Event start datetime in the location’s local timezone (ISO 8601).
CalendarEvents.Records[].EndDate
string
Event end datetime in the location’s local timezone (ISO 8601).
CalendarEvents.Records[].StartDateUtc
string
Event start datetime in UTC (ISO 8601).
CalendarEvents.Records[].EndDateUtc
string
Event end datetime in UTC (ISO 8601).
CalendarEvents.Records[].MultipleDays
boolean
When true, the event spans more than one calendar day.
CalendarEvents.Records[].PublishDate
string
Local datetime from which the event becomes visible to customers.
CalendarEvents.Records[].PublishDateUtc
string
UTC equivalent of PublishDate.

Tickets & Pricing

CalendarEvents.Records[].HasTickets
boolean
When true, the event has at least one purchasable ticket product.
CalendarEvents.Records[].SoldOut
boolean
When true, all ticket products are sold out or past their sale window.
CalendarEvents.Records[].ChepeastPrice
number
Lowest ticket price across all ticket products. Note the typo in the field name (Chepeast) — it is preserved as-is in the API.
CalendarEvents.Records[].MostExpensivePrice
number
Highest ticket price across all ticket products.
CalendarEvents.Records[].ChepeastProduct
EventProduct | null
Full EventProduct object for the cheapest ticket option.
CalendarEvents.Records[].MostExpensiveProduct
EventProduct | null
Full EventProduct object for the most expensive ticket option.
CalendarEvents.Records[].EventProducts
EventProduct[]
All ticket products for this event.
CalendarEvents.Records[].TicketsPage
string | null
External URL for purchasing tickets when HasCustomTicketsPage is true.
CalendarEvents.Records[].HasCustomTicketsPage
boolean
When true, ticket purchase is handled on an external page (TicketsPage) rather than the portal checkout.
CalendarEvents.Records[].Allocation
number | null
Total number of available spots. null means unlimited.
CalendarEvents.Records[].Sales
number | null
Number of tickets sold so far.
CalendarEvents.Records[].EnableWaitList
boolean
When true, customers can join a waiting list when the event is sold out.
CalendarEvents.Records[].TicketNotes
string | null
Additional notes displayed to customers during ticket purchase.
CalendarEvents.Records[].AskBuyerAddress
boolean
When true, the checkout form collects the buyer’s postal address.

Categorisation & Display

CalendarEvents.Records[].EventCategories
EventCategory[]
Categories this event belongs to.
CalendarEvents.Records[].ShowInHomePage
boolean
When true, the event appears on the portal home page.
CalendarEvents.Records[].ShowInHomeBanner
boolean
When true, the event is promoted in the home page banner carousel.
CalendarEvents.Records[].AllowComments
boolean
When true, authenticated customers can post and view comments on the event detail page.

Media & Resource

CalendarEvents.Records[].HasSmallImage
boolean
When true, a small thumbnail image is available.
CalendarEvents.Records[].HasLargeImage
boolean
When true, a full-size banner image is available.
CalendarEvents.Records[].HasAddress
boolean
Convenience flag — true when either Location or VenueAddress is set.
CalendarEvents.Records[].Resource
Resource | null
The bookable resource associated with this event, if the event is tied to a room or desk.
CalendarEvents.Records[].HasResource
boolean
When true, a resource is linked to this event (Resource is non-null).
CalendarEvents.Records[].Business
Business
The coworking location that published the event.
CalendarEvents.Records[].Recent10Attendees
{ Id: number; UpdatedOn: string }[] | null
Lightweight list of up to 10 recent attendees, used for social proof display.
CalendarEvents.Records[].Comments
EventComment[]
Published comments on the event.

Timestamps

All datetime fields are ISO 8601 strings. *On fields are in the location’s local timezone; *OnUtc fields are UTC.
CalendarEvents.Records[].CreatedOn
string
Local datetime the event record was created.
CalendarEvents.Records[].CreatedOnUtc
string
UTC datetime the event record was created.
CalendarEvents.Records[].UpdatedOn
string
Local datetime of the last update.
CalendarEvents.Records[].UpdatedOnUtc
string
UTC datetime of the last update.

Examples

Fetch upcoming events (full payload)

GET /api/public/events?pastEvents=false&page=1&top=9
{
  "PastEvents": false,
  "Categories": [
    {
      "Id": 3,
      "Title": "Workshops",
      "UniqueId": "a1b2c3d4-...",
      "CreatedOn": "2024-01-10T10:00:00",
      "UpdatedOn": "2024-01-10T10:00:00",
      "CreatedOnUtc": "2024-01-10T10:00:00Z",
      "UpdatedOnUtc": "2024-01-10T10:00:00Z",
      "IdString": "3",
      "IsNull": false
    }
  ],
  "Category": null,
  "CalendarEvents": {
    "Records": [
      {
        "Id": 412,
        "Name": "Morning Yoga & Mindfulness",
        "ShortDescription": "Start your week with a guided yoga session open to all levels.",
        "LongDescription": "<p>Join us every Monday for a 45-minute yoga session...</p>",
        "HostFullName": "Sarah Chen",
        "Location": "Studio Room B",
        "VenueAddress": null,
        "StartDate": "2026-03-23T07:30:00",
        "EndDate": "2026-03-23T08:15:00",
        "StartDateUtc": "2026-03-23T07:30:00Z",
        "EndDateUtc": "2026-03-23T08:15:00Z",
        "MultipleDays": false,
        "HasTickets": true,
        "SoldOut": false,
        "ChepeastPrice": 0,
        "MostExpensivePrice": 12.0,
        "HasCustomTicketsPage": false,
        "TicketsPage": null,
        "Allocation": 20,
        "Sales": 7,
        "EnableWaitList": false,
        "AllowComments": true,
        "ShowInHomePage": true,
        "ShowInHomeBanner": false,
        "HasSmallImage": true,
        "HasLargeImage": true,
        "HasAddress": true,
        "HasResource": false,
        "Resource": null,
        "EventCategories": [{ "Id": 3, "Title": "Workshops" }],
        "EventProducts": [{ "Id": 88, "Name": "Free Entry", "Price": 0, "TicketsLeft": 13, "SoldOut": false, "IsAvailableNow": true }],
        "Business": { "Id": 5, "Name": "Downtown Coworking Hub" },
        "Comments": [],
        "UniqueId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "IdString": "412",
        "CreatedOn": "2025-11-01T09:00:00",
        "UpdatedOn": "2026-03-01T12:00:00",
        "CreatedOnUtc": "2025-11-01T09:00:00Z",
        "UpdatedOnUtc": "2026-03-01T12:00:00Z",
        "IsNull": false
      }
    ],
    "CurrentPage": 1,
    "CurrentPageSize": 9,
    "TotalItems": 1,
    "TotalPages": 1,
    "HasNextPage": false,
    "HasPreviousPage": false
  }
}

Fetch events with a minimal field set

Use _shape to return only the data your UI needs, reducing payload size.
GET /api/public/events?pastEvents=false&page=1&top=9&_shape=CalendarEvents.Records.Id,CalendarEvents.Records.Name,CalendarEvents.Records.StartDateUtc,CalendarEvents.Records.HasLargeImage
{
  "CalendarEvents": {
    "Records": [{ "Id": 412, "Name": "Morning Yoga & Mindfulness", "StartDateUtc": "2026-03-23T07:30:00Z", "HasLargeImage": true }],
    "CurrentPage": 1,
    "CurrentPageSize": 9,
    "TotalItems": 1,
    "TotalPages": 1,
    "HasNextPage": false,
    "HasPreviousPage": false
  }
}

TypeScript Integration

import endpoints from '@/api/endpoints'
import { EventList } from '@/types/endpoints/EventList'
import { useData } from '@/api/fetchData'

const endpoint = endpoints.events.events({
  pastEvents: false,
  page: 1,
  top: 9,
  categoryId: undefined,
  search: undefined,
  featured: false,
})

const { resource: eventList } = useData<EventList>(httpClient, endpoint.url, {
  shape: {
    fields: [
      'CalendarEvents.Records.Id',
      'CalendarEvents.Records.Name',
      'CalendarEvents.Records.StartDateUtc',
      'CalendarEvents.Records.HasLargeImage',
      'CalendarEvents.Records.ChepeastPrice',
      'CalendarEvents.Records.SoldOut',
    ],
  },
})

Usage in Portal

ContextSource file
Events catalogue (/events)src/views/events/list/useEventsData.ts
Homepage events grid (public home page)src/views/public/home-business/components/SimpleEventsGrid.tsx

Error Responses

400 Bad Request
error
A query parameter value is invalid — for example, a non-boolean pastEvents or a negative page.
MethodEndpointDescription
GET/api/public/events/{id}Full detail for a single event
GET/api/public/events?onlyHomePage=trueUpcoming home-page events (no auth required)
GET/api/public/events/myEvents the authenticated customer has tickets for
GET/api/public/events/{eventId}/product/{productId}Ticket product detail
POST/api/public/events/{id}/joinWaitingListJoin the waiting list for a sold-out event