Event Types API Documentation
Overview
This collection represents types of events occurring at a gym, such as climbing sessions and classes.
Subcollections
- Questions
- Schedules
- Schedule Exceptions
- Location Settings
- Pricing Matrices
- Waitlist Entries
Fields
| Name | Type | Restrictions | Required? | Description |
|---|---|---|---|---|
| id | integer | Automatic | Automatic | The unique identifier of the Event Type. This is placed in the URL when making API calls for the Event Type. |
| url | string | Automatic | Automatic | The unique API URL of the Event Type. |
| name | string | Must not be blank. | Yes | The Event Type's name. |
| schedule_type | string | Must be one of the supported schedule types. May not be changed after creation. | Yes | How events of this type are scheduled (repeating, one-off, or rolling). See the schedule types section. |
| description_text | string (markdown) | None | No | A long-form description of the Event Type, shown in the Scheduling Web App. Markdown is supported. |
| status | string | Must be one of the supported statuses. | Yes | The Event Type's publishing status, which determines its availability within the Scheduling Web App. For more information, see the status section. |
| reserves_area_capacity | boolean | None | No | Whether reservations for this Event Type consume capacity in their gym area for the duration of the event (so that other events in the same area cannot oversubscribe it). |
| late_booking_window_minutes | integer | Must be less than 60. | No | How many minutes after an event's start the event may be reserved. This allows users to make bookings after the event has begun, or if set to a negative value, prevents them from booking too close to the start of the event. Defaults to 15 if not provided. |
| is_listed | boolean | None | No | Whether this Event Type is listed in the gym's Scheduling Web App homepage. Defaults to True if not provided. |
| has_automatic_check_in | boolean | None | No | Whether reservations for this Event Type automatically count as a check-in for the customer when the event begins. |
| max_reservations_per_day_for_customer | integer or null | None | No | The maximum number of reservations a single customer may hold for events of this type on any given day. Leave blank for no limit. |
| allow_customer_cancellation | boolean | None | No | Whether customers may cancel their own reservations for events of this type. |
| customer_cancellation_window_hours | integer or null | None | No | How many hours before an event customers may cancel their reservation. After this window, cancellations are no longer permitted. |
| customer_cancellation_currency_refund_amount | decimal or null | None | No | The currency amount refunded when a customer cancels a reservation in time. |
| customer_cancellation_currency_refund_as_credit | boolean | None | No | Whether the refund on cancellation is issued as account credit rather than back to the original payment method. |
| refund_voucher_on_customer_cancellation | boolean | None | No | Whether an event voucher consumed by the booking is returned to the customer when they cancel. |
| min_participant_age | integer or null | None | No | The minimum age a participant must be in order to book this Event Type. Leave blank for no minimum. |
| max_participant_age | integer or null | None | No | The maximum age a participant may be in order to book this Event Type. Leave blank for no maximum. |
| calendar_color_hex | string | Must be a 6-character hex color code (without leading #). |
No | The display color used for events of this type on the Staff Site calendar. |
| require_login_for_booking | boolean | None | No | Whether customers must be logged in to book this Event Type (vs. allowing guest checkout). |
| tax_rate_id | integer or null | Must be the ID of a tax rate belonging to the organization. | No | The tax rate applied to bookings of this Event Type. |
| tax_rate_name | string | Automatic | Automatic | The name of the tax rate referenced by tax_rate_id. |
| max_participant_count | integer or null | None | No | The maximum number of participants allowed per event. Leave blank for no limit. |
| max_bookings_per_event | integer or null | None | No | The maximum number of separate bookings allowed per event (e.g. limit to 10 bookings even if there's seating for more participants). |
| waitlist_scope | string | None | No | How the waitlist is scoped — e.g. per event, per Event Type, or disabled. |
| allow_customers_to_join_waitlist | boolean | None | No | Whether customers may add themselves to the waitlist when an event is full. |
| display_waitlist_count_in_climber_app | boolean | None | No | Whether the current waitlist size is shown to customers in the Climber App. |
| display_pricing_in_climber_app_listings | boolean | None | No | Whether prices are displayed alongside events of this type in the Climber App listings. |
| automatically_invite_off_waitlist | boolean | None | No | Whether customers should be automatically invited off the waitlist when a spot opens up. |
| min_hours_before_event_for_automatic_waitlist_invite | integer or null | None | No | The minimum number of hours before an event at which automatic waitlist invitations will still be sent. |
| hours_to_accept_waitlist_spot | integer or null | None | No | How many hours a customer has to accept a waitlist invitation before it is rescinded. |
| require_payment_method_to_join_waitlist | boolean | None | No | Whether customers must have a payment method on file to join the waitlist. |
| require_membership_ts_and_cs_to_join_waitlist | boolean | None | No | Whether customers must have accepted the organization's membership terms & conditions to join the waitlist. |
| is_private_event_request_form | boolean | None | No | Whether this Event Type is a private-event request form rather than a directly bookable type. |
| has_limited_location_availability | boolean | None | No | Whether this Event Type is only available at specific locations (see allowed_location_ids) rather than every location in the organization. |
| allowed_location_ids | array of integers | Each value must be a location ID belonging to the organization. Applies only when has_limited_location_availability is true. |
No | The list of location IDs at which this Event Type is offered. |
| allowed_location_names | array of strings | Automatic | Automatic | The names of the locations referenced by allowed_location_ids. |
| created_at | string (ISO-8601 datetime) | Automatic | Automatic | When the Event Type was added to the Capitan database. |
| updated_at | string (ISO-8601 datetime) | Automatic | Automatic | When the Event Type's record in the Capitan database was last updated. |
| questions_url | string (URL) | Automatic | Automatic | The API URL of this Event Type's Questions subcollection. |
| schedules_url | string (URL) | Automatic | Automatic | The API URL of this Event Type's Schedules subcollection. |
| schedule_exceptions_url | string (URL) | Automatic | Automatic | The API URL of this Event Type's Schedule Exceptions subcollection (one-off overrides to the recurring schedule). |
| location_settings_url | string (URL) | Automatic | Automatic | The API URL of this Event Type's per-location settings subcollection. |
| pricing_matrices_url | string (URL) | Automatic | Automatic | The API URL of this Event Type's Pricing Matrices subcollection. |
| waitlist_entries_url | string (URL) | Automatic | Automatic | The API URL of this Event Type's Waitlist Entries subcollection. |
| capitan_scheduler_url | string (URL) | Automatic | Automatic | The URL of this Event Type within the Scheduling Web App. |
Statuses
| Name | Syntax | Description |
|---|---|---|
| Draft | DRA |
An unpublished draft Event Type. In the Scheduling Web App, the Event Type is only visible to gym staff. |
| Active | ACT |
An active Event Type. The Event Type is available to all users. |
| Retired | RET |
A retired Event Type. The Event Type is not available in the Climber App, except for the purpose of displaying past reservations. |
Schedule Types
| Name | Syntax | Description |
|---|---|---|
| Repeating | REP |
An Event Type whose events recur on a regular weekly schedule. |
| One-off | ONE |
An Event Type for individual, non-recurring events (e.g. a multi-part class or a private event). |
| Rolling | ROL |
An Event Type for ongoing rolling-enrollment programs where customers join an open roster rather than booking a specific date. |
Filters
See the filtering documentation for more information on how to use filters in the Capitan API.
| Name | Syntax | Description |
|---|---|---|
| General Search | search |
Filters for Event Types whose name contains the given search terms. |
| Status | status |
Filters for Event Types with the given status. |
| Schedule Type | schedule_type |
Filters for Event Types with the given schedule type. |
| Waitlist Scope | waitlist_scope |
Filters for Event Types with the given waitlist scope. |
| Location ID | location_id |
Filters for Event Types offered at the given location. The provided value must be a location ID. Matches Event Types that are unrestricted (has_limited_location_availability=false) or that explicitly include this location. |
| Event Category ID | event_category_id |
Filters for Event Types assigned to the given event category. |
Operations
List
Request
GET /api/event-types/
Response
200 OK
{
"count": 11,
"next": "https://api.hellocapitan.com/api/event-types/?page=2",
"previous": null,
"results": [
{
"id": 42,
"url": "https://api.hellocapitan.com/api/event-types/42/",
"name": "Belay Class",
...
},
...
]
}
Read
Request
GET /api/event-types/42/
Response
200 OK
{
"id": 42,
"url": "https://api.hellocapitan.com/api/event-types/42/",
"name": "Belay Class",
...
}
Create
Request
POST /api/event-types/
{
"name": "Bouldering Technique Session",
"schedule_type": "REP",
"status": "DRA"
}
Response
201 Created
{
"id": 53,
"url": "https://api.hellocapitan.com/api/event-types/53/",
"name": "Bouldering Technique Session",
...
}
Replace
Request
PUT /api/event-types/53/
{
"name": "Bouldering Technique Class",
"schedule_type": "REP",
"status": "DRA"
}
Response
200 OK
{
"id": 53,
"url": "https://api.hellocapitan.com/api/event-types/53/",
"name": "Bouldering Technique Class",
...
}
Update
Request
PATCH /api/event-types/53/
{
"name": "Bouldering Technique Master Class"
}
Response
200 OK
{
"id": 53,
"url": "https://api.hellocapitan.com/api/event-types/53/",
"name": "Bouldering Technique Master Class",
...
}
Delete (retire)
An event type is never removed. DELETE retires it — the same thing setting status to RET does — because an event type is referenced by everything that ever happened under it: its events, its bookings, and the revenue and check-in totals in your reports. Deleting the record would take that history with it.
So a retired event type still appears in list and read responses, with status now RET, so you can still read its history. To leave retired types out of a listing, filter on status.
Retiring cannot be undone. Statuses only move forwards — Draft to Active to Retired — so a retired event type cannot be set back to active, by this endpoint or any other. Treat DELETE as final.
Retiring also withdraws the event type's event vouchers from your point of sale, and clears its future events, so it stops being schedulable and sellable straight away. Which future events go depends on the schedule type:
- Rolling event types: all future events are removed, including ones people have booked. Their bookings and reservations are removed with them, because attendance on a rolling type is carried by its membership rather than by individual bookings.
- Every other schedule type: only future events that nobody has booked are removed. Booked events are left alone.
Because a rolling retirement discards existing bookings and cannot be reversed, check what is booked before calling DELETE on a rolling event type.
Request
DELETE /api/event-types/53/
Response
204 No Content
The event type is still readable, now retired
GET /api/event-types/53/
{
"id": 53,
"url": "https://api.hellocapitan.com/api/event-types/53/",
"name": "Bouldering Technique Master Class",
"status": "RET",
...
}