Open-source booking engine

Deploy your own booking engine.

Same hold-then-confirm API, same atomic guarantees - running in your infrastructure. A single stateless Node.js process with PostgreSQL. No vendor lock-in, no data leaving your network.

POST https://your-floyd.internal/v1/bookings
Idempotency-Key: key_abc123
{
  "serviceId": "svc_main",
  "resourceId": "rsc_provider_1",
  "startTime": "2026-03-01T09:00:00Z",
  "endTime": "2026-03-01T09:30:00Z"
}
→ 201
{ "id": "bkg_sh_1", "status": "hold"}
// same API - your infrastructure, your data

Apache 2.0 Licensed

Fork it, modify it, run it forever. No vendor lock-in.

Full Source Access

Read the source, run the tests, verify the logic yourself.

Runs in Your Infrastructure

Your VPC, your Kubernetes, your Postgres. Nothing leaves your network.

Key Capabilities

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

01

Apache 2.0 Licensed

Use Floyd commercially, modify the source, fork it. No proprietary dependencies, no license fees, no usage limits.

02

Stateless, Horizontally Scalable

The Floyd engine is a stateless Node.js process. Scale horizontally behind a load balancer. No in-memory state, no sticky sessions.

03

PostgreSQL-Backed

All booking state lives in your Postgres database. Row locking + GiST index for conflict detection. Use your existing backup, replication, and monitoring.

04

Idempotent Mutations

Every mutation accepts an Idempotency-Key. Payload-bound, cached 24 hours. Safe retries across network failures.

05

Full Data Sovereignty

Booking data never leaves your network. Meet HIPAA, GDPR, or any compliance requirement that prohibits third-party data processing.

06

Cloud-to-Self-Host Migration

Start with Floyd Cloud during development. Export your configuration and migrate to self-hosted when you're ready - same API, same behavior.

Idempotent Retry Pattern

3 API calls. Hold, confirm, done.

1
Create Hold (with Idempotency-Key)
POST https://your-floyd.internal/v1/bookings

{
  "serviceId": "svc_main",
  "resourceId": "rsc_provider_1",
  "startTime": "2026-03-01T09:00:00Z",
  "endTime": "2026-03-01T09:30:00Z"
}
{ "id": "bkg_sh_1", "status": "hold" }

Header: Idempotency-Key: key_abc123

2
Retry Same Request (network failure)
POST https://your-floyd.internal/v1/bookings

{
  "serviceId": "svc_main",
  "resourceId": "rsc_provider_1",
  "startTime": "2026-03-01T09:00:00Z",
  "endTime": "2026-03-01T09:30:00Z"
}
{ "id": "bkg_sh_1", "status": "hold" }

Same Idempotency-Key → same response. No duplicate.

3
Verify State
GET https://your-floyd.internal/v1/bookings/bkg_sh_1
{ "id": "bkg_sh_1", "status": "hold", "expiresAt": "..." }

Single booking created despite two requests.

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.