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 a phone line that is both active and A2P/10DLC registered — the same bar the send path applies, so true means a text can really be delivered. Render the consent checkbox only when it is true. Leave it unticked, and label it as what the customer is asking for, above the compliance disclosure. It is a TCPA consent record: never pre-tick it. Scope the label to the appointment, not to one message — our hosted page says “Text me about this appointment” rather than “…a confirmation”, because reminders are the obvious next transactional message and you cannot go back and re-consent people. The disclosure’s “Message frequency may vary” is what covers that.
  • 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