Skip to main content
Admin-specific booking operations: status changes, check-in/out, and document generation. For customer booking management, see Customer Booking Lifecycle. For creating bookings, see Admin Booking Creation. For general conventions, see JSON-API Conventions.

Prerequisites

  • A valid Bearer token with admin access — see Authentication
  • Organization context (?o={organization_id})

Status Changes

Request path documentation:
  • paths/admin/bookings.yaml for PATCH /api/v1/bookings/{booking_id}
  • paths/admin/bookings.yaml for GET /api/v1/bookings/{booking_id}/cancel

Accept a Requested Booking

When a booking has status requested, accept it by updating the booking status:
Example payload:

Reject a Requested Booking

Reject a requested booking with the same update endpoint:
Example payload:

Cancel a Booking

Cancel an accepted or requested booking with the dedicated cancel action:
This runs the booking cancellation flow. Refunds and invoice adjustments follow the configured cancellation policy.

Check-In / Check-Out

Request path documentation:
  • paths/admin/bookings.yaml for POST /api/v1/bookings/{booking_id}/check-in
  • paths/admin/bookings.yaml for POST /api/v1/bookings/{booking_id}/check-out
  • Scan for POST /api/v1/scans (staff / kiosk scanner)
Record customer arrivals and departures.

Check-In

Optional body fields:

Check-Out

Both endpoints:
  • Log a Scan record with the timestamp
  • Update the booking’s check-in/check-out status
  • Can be triggered by admin users or via self-service terminals
Resources can be configured with auto-expiry — if a customer doesn’t check in within a configured window, the booking expires automatically.

Delayed forms at check-in

Legal documents and custom forms can be configured with collection timing check_in. If those details are still missing when you check a booking in, the API does not complete the check-in until the client collects and submits them. Advertise support for the dynamic check-in form with:
Without that header (and without form_data), check-in fails with HTTP 400 and code scans.check_in_requires_details_unsupported. 1. First attempt — details still required:
2. Load the form from meta.form_url (GET /api/ui/booking-check-in-form). It returns the same dynamic-form shape as checkout (components, validations), limited to still-missing items (documents.{uuid}, service_custom_fields.{uuid}). 3. Re-submit check-in with the collected values:
On success, meta.status is the resulting scan status (for example valid) and check_in_date is set. Invalid form_data returns HTTP 422. Timing / geo / business-rule failures return HTTP 400 with a scans.* error code.

Scanner endpoint (POST /scans)

Staff and kiosk clients that create scans by booking code use the same delayed-form flow. Unlike the booking check-in action, submit details only as data.attributes.meta.form_data (JSON:API) — top-level form_data is ignored.
See Scan for the resource schema and create parameters.

Generating Documents

Generate a PDF or ticket from a document template:
Returns a files resource with the generated document.
Booking exports are documented with the other admin export endpoints in Exports.

Common Errors