The Events API is read-only โ events cannot be created, updated, or deleted via the M2M API. For customer booking transactions, see Bookings.
List events
GET /events
Scope: events:read
Returns all active events (with dates) for your company. Only events with at least one active date are returned. Archived events are excluded.
Query parameters:
| Parameter | Default | Description |
|---|---|---|
timeFilter | (none) | future or past. When omitted, returns all events regardless of date. |
startDate | (none) | ISO 8601 datetime (UTC). Required when timeFilter is set. |
endDate | (none) | ISO 8601 datetime (UTC). Required when timeFilter is past. |
Examples:
GET /events
GET /events?timeFilter=future&startDate=2026-02-24T00:00:00.000Z
GET /events?timeFilter=past&startDate=2026-01-01T00:00:00.000Z&endDate=2026-02-24T00:00:00.000Z
Response:
{
"data": [
{
"id": "evt_42",
"type": "event",
"name": "Monday Yoga",
"format": "PHYSICAL",
"booking_configuration": {
"max_attendees": 20,
"waiting_list_enabled": true,
"booking_types": ["INDIVIDUAL"],
"payment_methods": ["CARD", "PASS"]
},
"dates": [
{
"id": "date_501",
"type": "event_date",
"datetime": "2026-03-03T09:00:00",
"tz": "Europe/London",
"duration": 60
},
{
"id": "date_502",
"type": "event_date",
"datetime": "2026-03-10T09:00:00",
"tz": "Europe/London",
"duration": 60
}
],
"facilitators": [
{ "id": "fac_10", "type": "facilitator", "name": "Sarah Jones" }
]
}
]
}
Event fields
| Field | Type | Description |
|---|---|---|
id | string | Event ID (prefixed with evt_) |
type | string | Always "event" |
name | string | Event name |
format | string | PHYSICAL or VIRTUAL |
booking_configuration | object | Booking and capacity settings (see below) |
dates | array | Event dates (see below) |
facilitators | array | Assigned facilitators (see below) |
Booking configuration fields
| Field | Type | Description |
|---|---|---|
max_attendees | number or null | Maximum capacity (null if unlimited) |
waiting_list_enabled | boolean | Whether the waiting list is enabled |
booking_types | string[] | ["INDIVIDUAL"], ["BLOCK"], or ["INDIVIDUAL", "BLOCK"] |
payment_methods | string[] | Accepted payment methods: CARD, PASS |
Date fields
| Field | Type | Description |
|---|---|---|
id | string | Date ID (prefixed with date_) |
type | string | Always "event_date" |
datetime | string | Local ISO 8601 datetime without Z suffix (e.g. 2026-03-03T09:00:00). See tz for timezone. |
tz | string | IANA timezone (e.g. Europe/London) |
duration | number | Duration in minutes |
Facilitator fields
| Field | Type | Description |
|---|---|---|
id | string | Facilitator ID (prefixed with fac_) |
type | string | Always "facilitator" |
name | string | Full name |
Get event detail
GET /event/{id}
Scope: events:read
The {id} path parameter uses the prefixed event ID (e.g. evt_42).
Returns the full detail for a single event, including payment details (pricing options, allowed passes, vouchers) which are not included in the list response.
Response:
{
"data": {
"id": "evt_42",
"type": "event",
"name": "Monday Yoga",
"format": "PHYSICAL",
"booking_configuration": {
"max_attendees": 20,
"waiting_list_enabled": true,
"booking_types": ["INDIVIDUAL"],
"payment_methods": ["CARD", "PASS"],
"allowed_passes": [
{
"id": "pass_5",
"type": "pass_template",
"name": "10-Class Pass",
"credits": 10,
"price": 5000,
"currency": "GBP",
"expiry_days": 180
}
]
},
"dates": [
{
"id": "date_501",
"type": "event_date",
"datetime": "2026-03-03T09:00:00",
"tz": "Europe/London",
"duration": 60
}
],
"facilitators": [
{ "id": "fac_10", "type": "facilitator", "name": "Sarah Jones" }
],
"payment_details": {
"pricing_options": [
{
"id": "opt_1",
"type": "pricing_option",
"name": "Standard",
"price": 1200,
"stock": 0,
"credits": 1
}
],
"vouchers": [
{
"id": "voucher_12",
"type": "voucher",
"name": "Early Bird",
"code": "EARLY10",
"discount_type": "PERCENTAGE",
"discount_value": 10,
"currency": "GBP"
}
]
}
}
}
Additional fields (beyond the list response)
| Field | Type | Description |
|---|---|---|
booking_configuration.allowed_passes | array | Pass templates that can be used for this event |
payment_details | object | Pricing options and vouchers |
Allowed pass fields
| Field | Type | Description |
|---|---|---|
id | string | Pass template ID (prefixed with pass_) |
type | string | Always "pass_template" |
name | string | Pass name |
credits | number | Total credits on the pass |
price | number | Price in base-100 (pence/cents) |
currency | string | Currency code (e.g. GBP) |
expiry_days | number | Days until expiry (0 = no expiry) |
Pricing option fields
| Field | Type | Description |
|---|---|---|
id | string | Option ID (prefixed with opt_) |
type | string | Always "pricing_option" |
name | string | Display name |
price | number | Price in base-100 (pence/cents) |
stock | number | Stock limit (0 = unlimited) |
credits | number | Pass credits consumed per booking |
Voucher fields
| Field | Type | Description |
|---|---|---|
id | string | Voucher ID (prefixed with voucher_) |
type | string | Always "voucher" |
name | string | Voucher name |
code | string | Voucher code customers enter at checkout |
discount_type | string | PERCENTAGE or FIXED |
discount_value | number | Discount amount (percentage or base-100 fixed amount) |
currency | string | Currency code |
Get event date register
GET /event/{id}/dates/{dateId}/register
Scope: events-register:read
The {id} and {dateId} path parameters use prefixed IDs (e.g. evt_42, date_501).
Returns the attendance register for a specific event date, split into three lists: confirmed attendees, waiting list, and cancelled.
Response:
{
"data": {
"event_id": "evt_42",
"date_id": "date_501",
"attendees": [
{
"id": "cust_123",
"type": "customer",
"firstname": "Jane",
"lastname": "Smith",
"email": "jane@example.com",
"status": "ACTIVE",
"attended": true,
"payment_method": "card",
"base100_price_paid": 1200,
"currency": "GBP",
"pricing_option_id": "opt_1",
"created_at": "2026-02-20T10:30:00"
}
],
"waiting_list": [
{
"id": "cust_456",
"type": "customer",
"firstname": "Bob",
"lastname": "Lee",
"email": "bob@example.com",
"status": "WAITING",
"attended": false,
"payment_method": "pass",
"base100_price_paid": 0,
"currency": "CR",
"pricing_option_id": "opt_1",
"created_at": "2026-02-21T08:15:00"
}
],
"cancelled_list": [
{
"id": "cust_789",
"type": "customer",
"firstname": "Alice",
"lastname": "Cooper",
"email": "alice@example.com",
"status": "VOID",
"attended": false,
"payment_method": "card",
"base100_price_paid": 1200,
"currency": "GBP",
"pricing_option_id": "opt_1",
"created_at": "2026-02-19T14:00:00"
}
]
}
}
Attendee fields
| Field | Type | Description |
|---|---|---|
id | string | Customer ID (prefixed with cust_) |
type | string | Always "customer" |
firstname | string | First name |
lastname | string | Last name |
email | string | Email address |
status | string | ACTIVE, WAITING, VOID, or VOID_REFUND |
attended | boolean | Whether the customer was marked as attended |
payment_method | string | card, pass, or cash |
base100_price_paid | number | Amount paid in base-100 (pence/cents). 0 for pass payments. |
currency | string | Currency code (GBP, EUR, USD) or CR for credits |
pricing_option_id | string | Which pricing option was selected |
created_at | string | Booking timestamp |
A client can have events:read without events-register:read โ they can browse the event catalogue but not see whoโs booked.
