Skip to main content
Retrieve booking-focused calendar data and occupancy counts for display in calendar UIs. This endpoint belongs to the Bookings surface, even though the aggregate route itself lives in the misc path file. For general conventions, see JSON-API Conventions. For availability search, see Availability & Booking Search.

Prerequisites

  • At least one resource with a configured schedule
  • Public endpoint — no authentication required for basic usage

Unified Calendar View

Request path documentation:
  • paths/public/misc.yaml for GET /api/v1/calendar-events
The main endpoint aggregates multiple data sources into a single response:

Parameters

Multiple Resources

Query multiple resources in a single request:

Event Types

The response contains events of different types, combined from booking and availability data sources:

Response Structure

Timeslot-backed events can include timeslot_id. Use it to fetch the canonical timeslot resource through the admin timeslot endpoints, open the matching editor, or reconcile calendar cards with resource_info and allocation state.

Admin context (display_lines)

When the request runs with an organization context, the admin calendar renders backend-composed display_lines below display_label. Each line is { key, icon, label, image, object }; order is significant. key identifies the line kind so clients can find or override a specific line without parsing label (time for the formatted clock range, timeslot for the timeslot title, customer, service, resource, admin_note, customer_note, order_item). For timeslot events the lines are: time, then timeslot when the title is non-empty, then resource. Untitled timeslots omit the title line; the time range is the information. For a single confirmed booking in admin context the lines are: customer (only when the headline is a custom description) → timetimeslot (when the timeslot has a specific title) → serviceresourceadmin_notecustomer_note. Non-admin responses do not receive this enrichment: display_lines stay the public composition, and is_paid stays null. For a single confirmed booking in admin context, the event also includes add_on_count: the sum of add-on quantities on that booking. Aggregated events leave the field null at the event level and put the count on each nested bookings[] entry. Sequence wrappers report only their own add-ons, not those of child bookings. Non-admin responses always get null.

Capacity-Based Rendering

The API adapts its response based on resource capacity:
  • Small resources (capacity ≤ 25): Returns individual booking events with customer details. Use these to render detailed calendar entries.
  • Large resources (capacity > 25): Returns booking_count events with aggregated occupancy numbers. Use these for heatmap or occupancy bar display.

Booking Detail Preview

For calendar detail views, use the booking preview endpoint to get a summary of a specific booking without fetching the full resource:

Common Patterns

Daily Calendar View

Weekly Multi-Resource View

Correlate a Calendar Event to Timeslot CRUD

When an event includes timeslot_id, you can jump from the aggregate calendar response to the admin timeslot resource:
For the full admin workflow, see Admin Timeslot Management.

Common Errors