The best way to add booking to your product. Capacity, payments, waitlists, and packs — all through a simple API.
Quickstart
Install the SDK. Query availability. Create a booking. That's it.
1import { Seshn } from '@seshn/sdk';23const seshn = new Seshn('sk_live_...');45const slots = await seshn.availability.query({6 serviceId: 'svc_yoga_class',7 from: '2026-03-15',8 to: '2026-03-22',9});1011const booking = await seshn.bookings.create({12 slotId: slots[0].id,13 contactId: 'ct_jane_doe',14 seats: 2,15});Built-in
Capacity math, credit ledgers, waitlists, payments — built in, not bolted on.
Seat-based booking with race-condition protection. No double-books, ever.
Session packs, memberships, and credits with a double-entry ledger.
Automatic promotion when cancellations free up seats.
Stripe built in. Hold, charge, confirm, refund — one integration.
Weekly or monthly series. All-or-nothing atomic reservation.
HMAC-signed with automatic retry. 15+ event types.
Track arrivals, flag no-shows, auto-mark after the slot ends.
Organizations, scoped API keys, role-based access, audit log.
Per-seat, flat, tiered, or per-duration. Calculated server-side.
Payment flow
Stripe built in. Hold a seat, collect payment, auto-confirm. No webhooks to wire up.
1// 1. Create a held booking with payment2const { booking, clientSecret } = await seshn.bookings.create({3 slotId: slots[0].id,4 contactId: 'ct_jane_doe',5 seats: 2,6 hold: true,7 payment: { amount: 4000, currency: 'usd' },8});910// 2. Complete payment on the frontend with Stripe.js11const stripe = Stripe('pk_live_...');12await stripe.confirmPayment({ clientSecret });1314// 3. Seshn auto-confirms via Stripe webhook15// booking.status → 'confirmed'Recurring bookings
Book a recurring series in a single request. All-or-nothing — every slot reserved atomically.
1const series = await seshn.bookingSeries.create({2 contactId: 'ct_jane_doe',3 serviceId: 'svc_yoga_class',4 resourceId: 'res_studio_a',5 seats: 1,6 recurrence: {7 frequency: 'weekly',8 dayOfWeek: 2, // Tuesday9 time: '14:00',10 count: 8, // 8 weeks11 },12});1314// series.bookings → 8 confirmed bookings15// Cancel just one: seshn.bookingSeries.cancelOccurrence(id, 3)Why Seshn
Other APIs were designed for 1:1 meetings. Seshn is built for shared capacity, seat math, and session packs.
| Feature | Seshn | OnSched | Hapio | Cal.com |
|---|---|---|---|---|
| Native seat-based capacity engine | ~ | ~ | ||
| Session pack / credit ledger | ||||
| Waitlist with auto-promote | ~ | |||
| Check-in tracking | ||||
| Recurring series booking | ||||
| Stripe-native hold → pay → confirm | ~ | ~ | ||
| Pricing engine (4 strategies) | ||||
| Race condition protection | ||||
| Provisional booking holds | ||||
| TypeScript SDK |
~ = limited or partial support
API
/v1/availability
Query slots with real-time capacity
/v1/bookings
Atomic seat reservation with race protection
/v1/booking-series
Create recurring booking series
/v1/bookings/:id/confirm
Confirm a held booking after payment
/v1/entitlements
Pack credits, memberships, session passes
/v1/waitlist
Auto-promote when slots open up
/v1/payments
Stripe-integrated payment tracking
/v1/webhooks
Real-time events with retry + HMAC signing
Free to start. We're opening to a small group of developers first.