Your platform's customers need scheduling. Floyd gives you isolated ledgers, scoped API keys, and atomic booking - integrate once, scale to many tenants.
{
"name": "Acme Salon"
}→ 201
{
"id": "ldg_acme_1",
"apiKey": "sk_ldg_...",
"isolation": "full"
}Each customer gets an isolated ledger. No cross-tenant leakage.
Ledger-scoped policies. Update one tenant without affecting others.
Route events per ledger to each customer's systems independently.
Everything you need to handle real-world booking complexity out of the box.
Each customer lives in an isolated ledger with separate resources, policies, and API keys. Isolation enforced at the API level, not the application level.
Issue API keys per ledger. Each key only accesses its own tenant's resources and bookings. Revoke or rotate per customer without affecting others.
Policy updates create new versions - in-flight bookings reference their original version. No inconsistent behavior during policy rollouts.
Every tenant gets the same transactional guarantees: row-level locking, 409 conflicts, auto-expiration, and idempotency. No custom booking logic per customer.
Subscribe to events per ledger. Route booking lifecycle events to each customer's backend independently.
Floyd Engine is a single stateless process. Scale horizontally behind a load balancer - all state lives in PostgreSQL. No sticky sessions.
3 API calls. Hold, confirm, done.
POST /v1/ledgers
{
"name": "Acme Salon"
}→ { "id": "ldg_acme_1" }Isolated namespace for this tenant's resources and bookings.
POST /v1/ledgers/ldg_acme_1/policies
{
"name": "Salon Hours",
"rules": [{
"match": { "type": "weekly", "days": "weekdays" },
"windows": [["09:00", "18:00"]]
}]
}→ { "id": "pol_acme_1", "version": "pvr_001" }Tenant-scoped policy. Other tenants unaffected.
POST /v1/ledgers/ldg_acme_1/bookings
{
"serviceId": "svc_client_a",
"resourceId": "rsc_stylist_1",
"startTime": "2026-03-01T09:00:00Z",
"endTime": "2026-03-01T09:30:00Z"
}→ { "id": "bkg_plt_1", "status": "hold" }Holds expire automatically after a TTL. Conflicts are handled at the database level.