Developers

The API isn't a feature. It's the product.

Our own dashboard and storefront are clients of the same REST API you get: an OpenAPI spec, signed webhooks, and a generated TypeScript SDK. If we can build on it, so can you.

TypeScript SDK

Generated from the spec, typed end to end.

book-a-room.ts

import { storefrontGetAvailability, storefrontCreateBooking } from "@studio/sdk";

const day = await storefrontGetAvailability({ path: { slug: "riff-city" }, query: { roomId, date } });
await storefrontCreateBooking({ path: { slug: "riff-city" }, body: { roomId, startsAt, endsAt } });

Availability is computed, never stored — location hours ∩ room overrides − blackouts − existing bookings, with the studio's minimums and turnover buffers already applied. What the API returns is what can actually be booked.

Surface area

Endpoint groups

GroupAuthCovers
StorefrontpublicRooms, tiers, rates, computed availability per room and day
Bookingscustomer sessionCreate a booking, pay (Payment Element), list my sessions, cancel
Seriescustomer sessionRecurring weekly slots with saved-card auto-charge
Admin — calendarstaff sessionDay calendar feed, create/move/resize bookings, refunds
Admin — approvalsstaff sessionApproval queue, approve (captures the card hold), decline (releases it)
Admin — catalogstaff sessionRooms, series, customers, org settings, Stripe Connect + billing
Webhooksstaff sessionRegister endpoints, signed deliveries (standard-webhooks), retries

Webhooks

Signed events, from day one.

Every mutation fans out to your registered endpoints, signed with the standard-webhooks scheme and retried on failure. Point Zapier, your Slack bot, or your smart locks at it.

booking.createda booking was made (storefront or desk)
booking.updatedtime, room, or details changed
booking.cancelledcancelled by the customer or the desk
booking.approvedan approval-room booking was confirmed; card captured
booking.declineddeclined; the card hold was released
payment.succeededmoney in — booking paid
payment.authorizedcard hold placed for an approval room
payment.faileda charge or auto-charge failed
payment.refundedrefund issued (card or account credit)
series.createda recurring weekly slot was set up
series.updatedseries edited — applies forward only