SDKs

Reservory ships TypeScript/JavaScript and Python SDKs. Both mirror the same surface (discovery, booking flow, payments) and handle auth, idempotency, and retries for you.

TypeScript / JavaScript

Dependency-free and isomorphic (Node 18+ and modern browsers). Source lives at sdks/typescript (package @reservory/sdk).

import { ReservoryClient } from '@reservory/sdk';

const client = new ReservoryClient({ apiKey: process.env.RESERVORY_API_KEY });

// 1. Discover an experience + upcoming slots (public).
const { experience, slots } = await client.widget.getExperience('acme-escape', 'the-vault');

// 2. Hold seats, then convert to a booking.
const hold = await client.bookings.hold({
  slotId: slots[0].id,
  experienceId: experience.id,
  seats: 2,
});
const booking = await client.bookings.create({
  holdId: hold.hold_id,
  slotId: slots[0].id,
  experienceId: experience.id,
  venueId: '...',
  customer: { email: 'alice@example.com', first_name: 'Alice' },
  guestCount: 2,
});

// 3. Mint a Stripe PaymentIntent.
const intent = await client.payments.createIntent({
  bookingId: booking.booking_id,
  bookingToken: booking.booking_token,
});

Python

Pure-stdlib client (optionally uses requests if installed). Source lives at sdks/python.

from reservory import ReservoryClient

client = ReservoryClient(api_key="rsv_live_...")

data = client.widget.get_experience("acme-escape", "the-vault")
hold = client.bookings.hold(
    slot_id=data["slots"][0]["id"],
    experience_id=data["experience"]["id"],
    seats=2,
)

Direct API Usage (No SDK Required)

Every endpoint is plain REST — you can skip the SDK and call it with fetch:

// Discover an experience + upcoming slots
const res = await fetch(
  'https://api.reservory.com/api/widget/experience?tenant=acme-escape&experience=the-vault'
);
const { experience, slots } = await res.json();

// Hold seats (mutations should send an Idempotency-Key)
const hold = await fetch('https://api.reservory.com/api/bookings/hold', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json', 'Idempotency-Key': crypto.randomUUID() },
  body: JSON.stringify({
    slot_id: slots[0].id,
    experience_id: experience.id,
    seats: 2,
  }),
}).then((r) => r.json());

Getting Help

Have questions or need an SDK in a different language? Reach out: