API Resources
This page lists the common JSON shapes returned across multiple endpoints. Each module reference page shows the response specific to its operations.
Calendar
{
"id": 1,
"title": "Sales Calendar",
"slug": "sales",
"description": "...",
"user_id": 1,
"type": "user",
"status": "active",
"settings": { "...": "..." },
"created_at": "2026-01-01 12:00:00",
"updated_at": "2026-01-01 12:00:00"
}Calendar Event (Slot)
{
"id": 10,
"calendar_id": 1,
"title": "15 Minute Consultation",
"slug": "15-min",
"duration": 15,
"duration_type": "minutes",
"event_type": "single",
"status": "active",
"settings": { "...": "..." }
}Booking
{
"id": 100,
"hash": "ab12cd34...",
"calendar_id": 1,
"event_id": 10,
"person_user_id": 5,
"host_user_id": 1,
"first_name": "Ada",
"last_name": "Lovelace",
"email": "[email protected]",
"start_time": "2026-01-01 14:00:00",
"end_time": "2026-01-01 14:15:00",
"slot_minutes": 15,
"status": "scheduled",
"payment_status": null,
"person_time_zone": "Europe/London"
}Availability Schedule
Availability is stored in fcal_meta with object_type='availability'. The columns are polymorphic-meta columns (id, object_type, object_id, key, value); the recurring weekly schedule lives in the serialized value.
{
"id": 1,
"object_type": "availability",
"object_id": 1,
"key": "default",
"value": {
"title": "Default schedule",
"timezone": "UTC",
"is_default": 1,
"schedule": {
"monday": [{ "start_time": "09:00", "end_time": "17:00" }],
"tuesday": [{ "start_time": "09:00", "end_time": "17:00" }]
}
}
}The exact shape of value is set by the admin UI when an availability is created — treat it as an opaque payload and let the model accessors handle (de)serialization.
Booking Meta
fcal_booking_meta rows are key/value pairs attached to a booking. Columns: id, booking_id, meta_key, value.
{
"id": 500,
"booking_id": 100,
"meta_key": "custom_field_company",
"value": "ACME Corp"
}Booking field answers, location data, and integration payloads are stored here. Use Helper::getBookingMeta($bookingId, $metaKey) to read.
Paginated Response
List endpoints return paginated payloads:
{
"data": [/* …items… */],
"total": 124,
"per_page": 20,
"current_page": 1,
"last_page": 7,
"from": 1,
"to": 20
}Use ?page=N&per_page=M to navigate. The maximum per_page is configurable via the fluent_booking/booking_per_page_options filter.
Timestamps & Timezones
- Database columns (
start_time,end_time,created_at,updated_at) are stored in UTC (Y-m-d H:i:s). - Booking responses include
person_time_zoneso clients can render the attendee's local time. - Calendar settings expose the host timezone separately.
Always treat stored values as UTC unless the response field name explicitly says otherwise.
Hash IDs
Bookings expose a public hash value used for permalinks and reschedule/cancellation flows. Prefer hash over the numeric id in customer-facing URLs to keep IDs non-enumerable.