Skip to main content
GET
Get booking configuration
Everything needed to render the form. Call it once when the page loads.

Questions live inside each service

form_fields is a property of a service, not of the tenant, and there is deliberately no top-level mirror — a mirror is how the two lists drift and the form starts asking the wrong thing. If the customer switches service, re-render from the new service’s list. See Questions in the guide for the per-type validation rules and a client-side normalizer that matches the server.

Things that will catch you out

  • price_cents can be null and carries no currency. null means the tenant doesn’t publish a price for that service — render nothing, not “$0”.
  • sms_consent_enabled is a tenant-level capability, not a prompt. It is true only when the tenant has an active phone source. Show the consent checkbox only when it is true and the customer has entered a phone number.
  • Only active services appear. Combined with the 5-minute shared cache, a service deactivated moments ago can still be listed here and then fail the submit with 400 invalid_service. Treat that error as “reload the config”, not as a bug.
  • A question that was soft-deleted while still attached is silently skipped, not an error. The booking page stays up; the missing question is only visible in our logs.

Path Parameters

slug
string
required

The tenant's public booking slug. Issued by DPC; there is no discovery endpoint.

Response

Booking configuration

business_name
string
required
branding
object
required
timezone
string
required
services
object[]
required