> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voxhealth.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Scheduling widget

> Embeddable self-serve appointment booking for a practice website.

The VoxHealth scheduling widget is a single script tag that puts real appointment booking on a practice's website. It reads live availability from the practice's PMS and writes the booking back to it. The same path the voice agent uses.

<CardGroup cols={2}>
  <Card title="Installation" icon="code" href="/developers/widget/installation">
    The script tag, and where to put it.
  </Card>

  <Card title="Configuration" icon="sliders" href="/developers/widget/configuration">
    Every attribute and programmatic option.
  </Card>

  <Card title="Localization" icon="language" href="/developers/widget/localization">
    Six languages, and how one is chosen.
  </Card>

  <Card title="Security" icon="shield" href="/developers/widget/security">
    Tokens, the domain allow-list, and rate limits.
  </Card>
</CardGroup>

## What it is

* **Standalone.** One script, no SDK, no framework. It works on any site. WordPress, Squarespace, Webflow, a hand-written page.
* **Isolated.** The UI renders inside a shadow DOM, so the host page's CSS cannot break it and it cannot break the host page.
* **Slot-first.** It opens on real available times. Identity is collected *after* a time is chosen, so a visitor sees a genuine opening before typing anything.
* **No OTP.** The patient is matched or created server-side from the details they type. There is no text-message code to wait for.

## The booking flow

<Steps>
  <Step title="Availability">
    The widget loads its configuration and shows open times. This needs only the public token. Nothing about the visitor.
  </Step>

  <Step title="Location">
    With more than one office, the visitor picks one, or finds the nearest by ZIP or browser geolocation.
  </Step>

  <Step title="Reason and patient status">
    The visit reason maps to an appointment type and duration. New-versus-returning is asked only where it changes what is offered, and the answer stays in the browser.
  </Step>

  <Step title="Identity">
    Name, mobile number, and date of birth. The chart is matched or created server-side.
  </Step>

  <Step title="Insurance">
    Optional, if the practice has it enabled.
  </Step>

  <Step title="Booked">
    The appointment is written to the PMS and the patient gets a confirmation.
  </Step>
</Steps>

Returning patients use the same form to find, reschedule, or cancel an existing appointment.

## Two surfaces, one implementation

| Surface                                                    | What it is                                                                                    |
| ---------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| **Embedded widget**                                        | A floating bubble and panel on the practice's own site                                        |
| **[Hosted booking page](/developers/hosted-booking-page)** | A practice-branded page at `booking.voxhealth.ai`, for practices without a site to embed into |

Only the shell differs. Every step, request, and guard is shared, so the two cannot drift apart.

## Getting a token

An admin generates the embed snippet in the VoxHealth app: **Settings → Scheduling Widget**. That page mints the token, sets the domain allow-list, and gives you the tag to paste. Requires the `SCHEDULING_WIDGET` feature.
