Booking
for developers

The best way to add booking to your product. Capacity, payments, waitlists, and packs — all through a simple API.

Quickstart

Start booking in minutes

Install the SDK. Query availability. Create a booking. That's it.

book.ts
1import { Seshn } from '@seshn/sdk';
2
3const seshn = new Seshn('sk_live_...');
4
5const slots = await seshn.availability.query({
6 serviceId: 'svc_yoga_class',
7 from: '2026-03-15',
8 to: '2026-03-22',
9});
10
11const booking = await seshn.bookings.create({
12 slotId: slots[0].id,
13 contactId: 'ct_jane_doe',
14 seats: 2,
15});

Built-in

Everything you need to ship

Capacity math, credit ledgers, waitlists, payments — built in, not bolted on.

Shared capacity

Seat-based booking with race-condition protection. No double-books, ever.

Pack credits

Session packs, memberships, and credits with a double-entry ledger.

Waitlist

Automatic promotion when cancellations free up seats.

Payments

Stripe built in. Hold, charge, confirm, refund — one integration.

Recurring

Weekly or monthly series. All-or-nothing atomic reservation.

Webhooks

HMAC-signed with automatic retry. 15+ event types.

Check-in

Track arrivals, flag no-shows, auto-mark after the slot ends.

Multi-tenant

Organizations, scoped API keys, role-based access, audit log.

Pricing

Per-seat, flat, tiered, or per-duration. Calculated server-side.

Payment flow

Hold → Pay → Confirm

Stripe built in. Hold a seat, collect payment, auto-confirm. No webhooks to wire up.

payment.ts
1// 1. Create a held booking with payment
2const { 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});
9
10// 2. Complete payment on the frontend with Stripe.js
11const stripe = Stripe('pk_live_...');
12await stripe.confirmPayment({ clientSecret });
13
14// 3. Seshn auto-confirms via Stripe webhook
15// booking.status → 'confirmed'

Recurring bookings

One call, weeks of sessions

Book a recurring series in a single request. All-or-nothing — every slot reserved atomically.

recurring.ts
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, // Tuesday
9 time: '14:00',
10 count: 8, // 8 weeks
11 },
12});
13
14// series.bookings → 8 confirmed bookings
15// Cancel just one: seshn.bookingSeries.cancelOccurrence(id, 3)

AI-ready

Your customers' AI can book for them

Seshn ships an MCP server out of the box. Any AI assistant — Claude, ChatGPT, custom agents — can check availability, book sessions, and manage appointments through your API.

AI assistant
User“Book me into hot yoga Saturday morning”
Agentseshn_check_availability → 3 slots
Agent“9am (4 spots), 10:30am (1 left), or noon. Which one?”
User“9am, and add my friend Sarah”
Agentseshn_create_booking → confirmed
Agent“Done — 2 seats booked for 9am Saturday. 6 classes left on your pack.”
claude_desktop_config.json
1{
2 "mcpServers": {
3 "seshn": {
4 "command": "npx",
5 "args": ["-y", "@seshn/mcp"],
6 "env": {
7 "SESHN_API_KEY": "sk_live_...",
8 "SESHN_BASE_URL": "https://api.seshn.net"
9 }
10 }
11 }
12}

One config file. 12 tools. Works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible client.

seshn_check_availability

Query open slots

seshn_create_booking

Reserve a seat

seshn_cancel_booking

Cancel + auto-refund

seshn_reschedule_booking

Move to new slot

seshn_list_services

Browse services

seshn_find_contact

Look up customers

seshn_check_entitlements

Credit balances

seshn_join_waitlist

Auto-promote on cancel

Why Seshn

Not another calendar tool

Other APIs were designed for 1:1 meetings. Seshn is built for shared capacity, seat math, and session packs.

FeatureSeshnOnSchedHapioCal.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

Clean, RESTful, predictable

GET

/v1/availability

Query slots with real-time capacity

POST

/v1/bookings

Atomic seat reservation with race protection

POST

/v1/booking-series

Create recurring booking series

POST

/v1/bookings/:id/confirm

Confirm a held booking after payment

GET

/v1/entitlements

Pack credits, memberships, session passes

POST

/v1/waitlist

Auto-promote when slots open up

GET

/v1/payments

Stripe-integrated payment tracking

POST

/v1/webhooks

Real-time events with retry + HMAC signing

Start building

Free to start. No credit card required.