> ## 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.

# Booking surfaces

> The four ways a scheduled call can be created

A booking can be created through any of these surfaces. All of them
land in the same data model and share the same lifecycle events —
only the **source** of the booking changes.

## 1. Agent — my schedules

Agents open `Apps → [your video app] → My schedules` and see only
**their own** bookings. They can:

* Create a booking for a customer they're already talking to.
* Block time with a do-not-disturb window.
* Open a specific booking to see notes, reschedule, or cancel.

This is the page you hand agents day-to-day.

## 2. Public booking page

Each video app exposes a hosted booking page at
`https://video.apifycloud.io/book/{appId}` (authenticated with the
app's widget key). Customers open the page, pick a slot, fill the
form, and confirm.

You distribute the link however you want:

* A direct URL in WhatsApp, SMS, email, or a QR code.
* A button on your website that opens it in a new tab.
* Embedded in a landing page.

The page respects the agent's working hours, exceptions, DND windows,
buffers, and the booking rate limits configured on the preset.

## 3. Public API — OAuth-gated

External systems — your CRM, automation tools, partner apps — create
bookings programmatically via the public API on
`api.apifycloud.io`, authenticated with OAuth client credentials
and the `scheduling:write` scope.

See the [Scheduled Calls API reference](/api-reference/scheduled-calls/create)
for the full contract. Typical use cases:

* A CRM creates a booking automatically when a deal reaches a
  certain stage.
* An automation tool reschedules when a customer replies with a
  new time.
* A partner app queries availability before suggesting slots in
  its own UI.

## 4. Admin — console master view

From `Apps → [your video app] → Scheduled calls` in the console, an
admin (with the right permission) can create a booking on behalf of
any agent, see every booking across the app, filter, search, and
cancel or reschedule.

Use this for:

* Manually adding a booking a customer agreed to over the phone.
* Oversight — finance, ops, or leadership reviewing the full
  pipeline.
* Bulk management (bulk cancel, bulk reassign).

## Source is always tracked

Every booking stores its `booking_source` — `admin`, `agent`,
`public_booking`, or `api`. The timeline and the webhook payload
expose it, so downstream systems can behave differently depending
on where the booking came from.

## What's next

<CardGroup cols={2}>
  <Card title="Assignment modes" href="/guides/scheduled-calls/assignment-modes">
    How an agent gets picked for a booking.
  </Card>

  <Card title="Agent availability" href="/guides/scheduled-calls/agent-availability">
    What the booking flow checks before accepting a slot.
  </Card>

  <Card title="API reference" href="/api-reference/scheduled-calls/create">
    Create a booking from an external system.
  </Card>
</CardGroup>
