Rental inventory doesn't fit into fixed slots. Floyd's windows-mode returns continuous free ranges up to 31 days, with atomic holds during payment and auto-expiration on failure.
{
"startTime": "2026-03-07T00:00:00Z",
"endTime": "2026-03-14T00:00:00Z"
}→ 200
{
"windows": [
{ "start": "Mar 7 08:00", "end": "Mar 12 18:00"}
]
}Continuous free ranges up to 31 days. Native variable-length support.
Block holidays and seasonal closures. Enforced at query time.
Lock inventory during checkout. Payment fails? Hold auto-expires.
Everything you need to handle real-world booking complexity out of the box.
POST /availability/windows returns continuous free ranges up to 31 days. Built for multi-day rentals - not a workaround on top of slot-based scheduling.
Policy rules enforce minimum and maximum rental periods per service type. Define 2-hour minimum for short rentals, 7-day maximum for long ones. Floyd enforces constraints at query time.
Configure after-buffer per service for turnaround time between allocations. Define it once in the policy - Floyd subtracts it from available windows automatically.
Require 24-hour advance booking for one service type, allow same-day for another. Different lead time rules per service, all declarative in the policy.
Database-level row locking ensures one hold per time range per resource. Two concurrent requests on the same item and dates? One succeeds, the other gets 409.
Hold inventory during payment processing with a configurable TTL. No reservation queue in your app - the hold expires on payment failure and confirms on success.
3 API calls. Hold, confirm, done.
POST /v1/services/svc_kayaks/availability/windows
{
"startTime": "2026-03-07T00:00:00Z",
"endTime": "2026-03-14T00:00:00Z"
}→ { "windows": [{ "start": "Mar 7 08:00", "end": "Mar 12 18:00" }] }Continuous availability windows for multi-day rentals.
POST /v1/bookings
{
"serviceId": "svc_kayaks",
"resourceId": "rsc_kayak_3",
"startTime": "2026-03-07T08:00:00Z",
"endTime": "2026-03-09T18:00:00Z"
}→ { "id": "bkg_rnt_1", "status": "hold" }Kayak held during payment processing.
POST /v1/bookings/bkg_rnt_1/confirm→ { "id": "bkg_rnt_1", "status": "confirmed" }Holds expire automatically after a TTL. Conflicts are handled at the database level.