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

# Agent availability

> Working hours, exceptions, and do-not-disturb windows that drive every booking decision

Every booking flow — admin, agent-assisted, public page, API — asks
the same question: **is this agent free at this time?** The answer
combines four inputs, each configured in the console.

## Working hours

The baseline of when an agent is available to take bookings. Each
working-hours window has:

* A **day of the week**.
* A **start time** and **end time** (local to the window's
  timezone).
* A **timezone** — per window, not per agent. An agent who travels
  or works split schedules can mix windows in different timezones.

An agent can have **multiple windows per day** (e.g. 9:00–13:00 and
14:00–18:00 to block a lunch break), and different weekdays can
have completely different shapes.

## Availability exceptions

Exceptions override working hours for specific date ranges:

* **Blocked** — the agent is not available during the range,
  regardless of working hours. Use for holidays, training, PTO.
* **Available-extra** — the agent *is* available during the range,
  even if it falls outside working hours. Use for a one-off
  weekend appointment.

Exceptions apply on top of working hours. Available-extra windows
extend availability, blocked windows shrink it.

## Do-not-disturb windows

A DND window is a short-term, ad-hoc block that the agent creates
themselves from their `My schedules` page. Think "I need 30 minutes
to focus" rather than "I'm on vacation next week".

DND windows behave like blocked exceptions for the booking engine —
they remove availability during the range.

<Note>
  If an agent creates a DND window that overlaps **existing**
  bookings, the console prompts them: "this affects N bookings — do
  you want to notify the customers and let them reschedule?" That
  notification is an optional extra reminder (see
  [Reminders — conflict notice](/guides/scheduled-calls/reminders)).
</Note>

## Buffers

The scheduling preset can add a **buffer before** and **buffer
after** every meeting (e.g. 5 minutes before, 10 after). Buffers
are treated as unavailable time by the booking engine — a booking
can't start within another booking's trailing buffer, and
vice-versa.

Use buffers to give agents breathing room between back-to-back
calls.

## Timezones

Everything is stored in UTC internally. The display timezone is:

* The **agent's timezone** for the agent view.
* The **app's timezone** for admin views.
* The **customer's browser timezone** for the public booking page
  (with a visible picker so they can confirm).

Daylight-saving transitions are handled by the engine — windows
configured in local time stay anchored to the wall clock, not to a
fixed UTC offset.

## What the booking engine does before accepting a slot

For any slot being booked, the engine checks, in order:

1. Is the slot inside the agent's **working hours** (or inside an
   **available-extra** exception)?
2. Is the slot outside every **blocked exception**?
3. Is the slot outside every **DND window**?
4. Does the slot (plus buffers) **not overlap** any existing
   booking for that agent?
5. Does the **customer rate limit** still allow another booking?

If all five pass, the booking is accepted. If any fails, the API
returns a conflict and the UI surfaces the reason.

## What's next

<CardGroup cols={2}>
  <Card title="Assignment modes" href="/guides/scheduled-calls/assignment-modes">
    How the engine picks which agent gets the slot.
  </Card>

  <Card title="Reminders" href="/guides/scheduled-calls/reminders">
    Conflict notices and scheduled reminders.
  </Card>
</CardGroup>
