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:
- API support: support@reservory.com
- Developer questions: hello@reservory.com