ResytechResytech Docs

ResytechClient Reference

Complete API reference for ResytechClient — the iframe-based booking widget.

ResytechClient opens a full-screen booking modal powered by an iframe. It handles the overlay, loading spinner, body scroll lock, and cross-frame communication automatically.

Constructor

const client = new ResytechClient(config);

ResytechClientConfig

PropertyTypeRequiredDescription
locationIdstringYesYour Resytech location UUID
baseUrlstringYesBase URL of your booking platform (e.g. https://booking.yourdomain.com)
themeobjectNoTheme overrides
theme.primaryColorstringNoPrimary brand color (CSS color value)
theme.fontFamilystringNoFont family for the booking UI
debugbooleanNoEnable debug logging to the console. Default: false
const client = new ResytechClient({
  locationId: 'abc123-def456',
  baseUrl: 'https://booking.yourdomain.com',
  theme: {
    primaryColor: '#e63946',
    fontFamily: '"Poppins", sans-serif'
  },
  debug: true
});

Throws an Error if locationId or baseUrl is missing.

Auto-Initialization

When loaded via a script tag with data-resytech-location-id and data-resytech-base-url attributes, the library automatically creates a ResytechClient instance and assigns it to window.resytech.

<script
  src="https://static.resytech.com/js/resytech.js"
  data-resytech-location-id="YOUR_LOCATION_ID"
  data-resytech-base-url="https://booking.yourdomain.com"
  data-resytech-debug="true">
</script>

<script>
  // The client is ready to use
  window.resytech.showUI();
</script>

Auto-initialization also scans the DOM for elements with data-resytech-activity-id or data-resytech-equipment-id and binds click handlers to them. See Embedding the Booking UI for details.

Methods

showUI(options?)

Opens the booking modal. If the modal is already open, this is a no-op.

client.showUI();

With pre-fill options:

client.showUI({
  activity: 'activity-uuid',
  equipment: 'equipment-uuid',
  date: '2025-07-15',
  durationMins: 120,
  timeSlotStart: '2025-07-15T14:00:00',
  timeSlotEnd: '2025-07-15T16:00:00',
  timeSlotPrice: 199.99
});

CheckoutRequest Options

PropertyTypeDescription
locationstringLocation UUID. Auto-filled from config.
activitystringActivity UUID to pre-select
equipmentstringEquipment UUID to pre-select
datestringDate to pre-select (format: YYYY-MM-DD)
durationMinsnumberDuration in minutes
timeSlotStartstringTime slot start (ISO 8601 datetime)
timeSlotEndstringTime slot end (ISO 8601 datetime)
timeSlotPricenumberPrice for the selected time slot

When showUI() is called it:

  1. Creates a fixed-position overlay covering the entire viewport with a dark blurred backdrop
  2. Displays a loading spinner while the iframe loads
  3. Loads the booking UI in an iframe
  4. Locks body scroll (document.body.style.overflow = 'hidden')
  5. Emits the checkout:open event

close()

Closes the booking modal, removes the iframe and overlay, and restores body scroll.

client.close();

Emits the checkout:close event. If the modal is not open, this is a no-op.

on(event, callback)

Registers an event listener.

client.on('checkout:complete', (data) => {
  console.log('Booking confirmed:', data.confirmationCode);
});
ParameterTypeDescription
eventstringEvent name (see Checkout Events)
callback(data: any) => voidFunction called when the event fires

off(event, callback)

Removes a previously registered event listener. You must pass the same function reference used with on().

function onComplete(data) {
  console.log('Done:', data);
}

client.on('checkout:complete', onComplete);
// Later...
client.off('checkout:complete', onComplete);
ParameterTypeDescription
eventstringEvent name
callback(data: any) => voidThe same function reference passed to on()

updateConfig(config)

Merges new configuration values into the current config. Does not affect an already-open modal.

client.updateConfig({
  debug: true,
  theme: { primaryColor: '#22c55e' }
});
ParameterTypeDescription
configPartial<ResytechClientConfig>Properties to merge

destroy()

Closes the modal (if open), removes the window.message listener, and clears all event listeners. Call this when you no longer need the client (e.g. in a SPA on route change).

client.destroy();

When showUI() is called, the widget:

  • Creates a fixed-position overlay at z-index: 2147483645 covering the full viewport (100dvw x 100dvh)
  • Applies a dark backdrop (rgba(0, 0, 0, 0.8)) with a blur(4px) backdrop filter
  • Shows a loading spinner centered in the overlay while the iframe loads
  • Loads the booking UI in an iframe that fills the overlay. The iframe fades in (opacity 0 -> 1 over 300ms) once the checkout-ready message is received from the iframe (or after a 3-second timeout)
  • Locks body scroll to prevent background scrolling
  • The iframe has the allow="payment" attribute for Stripe payment integration
  • The background overlay is not clickable -- the user must complete or close the booking through the iframe UI itself

Full Example

<!DOCTYPE html>
<html>
<head>
  <title>My Rental Shop</title>
</head>
<body>
  <h1>Kayak Rentals</h1>

  <button id="book-btn">Book a Kayak</button>

  <script src="https://static.resytech.com/js/resytech.js"></script>
  <script>
    const client = new ResytechClient({
      locationId: 'YOUR_LOCATION_ID',
      baseUrl: 'https://booking.yourdomain.com'
    });

    // Listen for completed bookings
    client.on('checkout:complete', (data) => {
      alert('Booking confirmed! Code: ' + data.confirmationCode);
    });

    // Open modal on button click
    document.getElementById('book-btn').addEventListener('click', () => {
      client.showUI({
        activity: 'kayak-activity-uuid',
        date: '2025-08-01'
      });
    });
  </script>
</body>
</html>

On this page