Open-source booking engine

Build resource booking without calendar dependencies.

Model each asset as a resource, define turnover buffers and grid alignment in policy, and book through a single API. Native inventory with atomic holds and conflict detection - no calendar middleware.

POST /v1/services/svc_rooms/availability/slots
{
  "startTime": "2026-03-01T09:00:00Z",
  "endTime": "2026-03-01T18:00:00Z",
  "durationMs": 3600000
}
→ 200
{
  "slots": [
    { "startTime": "10:00", "endTime": "11:00"},
    { "startTime": "11:15", "endTime": "12:15"},
    ...
  ]
}
// 9:00 blocked by maintenance - 15 min buffer between slots

Row-Level Conflict Detection

One hold per time range at the database level. Second request gets 409.

Automatic Turnover Buffers

After-buffers for resets, prep, and cleaning. Enforced in all queries.

Maintenance Blocks

Block resources for maintenance or setup. Respected in all queries.

Key Capabilities

Everything you need to handle real-world booking complexity out of the box.

01

Native Resource Inventory

Create resources via API - no external calendar dependency. Each resource has its own timezone, metadata (capacity, section, floor), and availability rules.

02

Fixed-Duration Slots

POST /availability/slots returns grid-aligned, policy-compliant time slots. 1-hour meeting rooms, 2-hour studio sessions, 30-minute court bookings.

03

Turnover Buffers

Configure after-buffers per service for reset, sanitization, or prep time. Buffers are subtracted from availability automatically - your slot responses only return bookable times.

04

Grid Alignment

Snap booking start times to 15 or 30-minute boundaries via policy rules. No odd start times - clean, predictable schedules.

05

Raw Allocations

Block time for maintenance, events, or breaks without creating a booking. Allocations are first-class objects enforced in all availability calculations.

06

Multi-Resource Services

Group resources under a service. A booking request checks availability across all assigned resources - rooms on a floor, desks in a zone, courts in a facility.

Resource Booking Flow

3 API calls. Hold, confirm, done.

1
Block Maintenance Time
POST /v1/allocations

{
  "resourceId": "rsc_room_a",
  "startTime": "2026-03-01T08:00:00Z",
  "endTime": "2026-03-01T09:00:00Z"
}
{ "id": "alc_mnt_1", "resourceId": "rsc_room_a" }

Maintenance block respected in all availability queries.

2
Check Room Availability
POST /v1/services/{id}/availability/slots

{
  "startTime": "2026-03-01T09:00:00Z",
  "endTime": "2026-03-01T18:00:00Z",
  "durationMs": 3600000
}
{ "slots": [{ "startTime": "10:00", "endTime": "11:00" }, ...] }

9:00 blocked by maintenance. Slots start at 10:00.

3
Hold the Room
POST /v1/bookings

{
  "serviceId": "svc_rooms",
  "resourceId": "rsc_room_a",
  "startTime": "2026-03-01T10:00:00Z",
  "endTime": "2026-03-01T11:00:00Z"
}
{ "id": "bkg_rm_1", "status": "hold" }

Holds expire automatically after a TTL. Conflicts are handled at the database level.

Ready to integrate?Ship bookings today

Sign up for Floyd and integrate our REST API to handle bookings in your agent framework.