# Book a Session — Agent Reference

> This page is for LLM agents assisting a customer with checking or booking a photography session. It mirrors the exact same live data the site's own booking pages use — not a cached or stale copy. Every value below is queried fresh on each request.

This covers the two flows on this site with **real, checkable availability** — a self-scheduled promo calendar, or an instant-book-and-pay package. It does not cover plain inquiry categories with no calendar; those only end in a contact form, which this route has nothing structured to say about (see "What this doesn't cover" below).

## How to Use This Page

1. If the customer already named a specific thing to book, find it in the **Currently Bookable** table below by title. Note its `type` (`promo` or `package`) and `id`.
2. If the customer's request is underspecified ("does Errol have anything open next week?", "what can I book?"), call the discovery endpoint first instead of guessing:
   `GET https://erroldphoto.com/agent/booking/list` (optionally `?days=N`). It returns every currently-bookable thing with a live "has an opening in the next N days" flag, so you can narrow down before asking the customer anything.
3. Once you have a `type` and `id`, fetch `GET https://erroldphoto.com/agent/booking/{type}/{id}` (optionally `?days=N`) for that item's actual open time slots.
4. Hand the customer the `bookingUrl` from that response — it's the real, live page where they finish booking themselves. **This route never collects payment or personal information and never completes a booking itself** — it only checks availability and hands off to the real page.
5. If `type` isn't `promo` or `package`, or the `id` doesn't match anything currently bookable, both endpoints below return a helpful JSON body explaining what to fix — never a bare 404 or a crash.

## Parameters

| Endpoint | Param | Where | Required | Format | Default |
|---|---|---|---|---|---|
| `/agent/booking/list` | `days` | query | optional | positive integer | 30 |
| `/agent/booking/{type}/{id}` | `type` | path | required | `promo` \| `package` | — |
| `/agent/booking/{type}/{id}` | `id` | path | required | integer, from the table below or `/agent/booking/list` | — |
| `/agent/booking/{type}/{id}` | `days` | query | optional | positive integer | 14 |

## Currently Bookable (live, queried just now)

| type | id | title | session type | duration (min) | price | detail | book |
|---|---|---|---|---|---|---|---|
| promo | 7 | Fall Family Portraits | family | 45 | not fixed — set on the day | [detail](https://erroldphoto.com/agent/booking/promo/7) | [book](https://erroldphoto.com/fall-family-portraits) |
| package | 1 | Quick Portrait Session | — | 30 | $350.00 | [detail](https://erroldphoto.com/agent/booking/package/1) | [book](https://erroldphoto.com/book-now/1) |
| package | 2 | Standard Portrait Session | — | 60 | $550.00 | [detail](https://erroldphoto.com/agent/booking/package/2) | [book](https://erroldphoto.com/book-now/2) |
| package | 3 | Extended Portrait Session | — | 60 | $850.00 | [detail](https://erroldphoto.com/agent/booking/package/3) | [book](https://erroldphoto.com/book-now/3) |
| package | 9 | Individual Headshots | — | 60 | $450.00 | [detail](https://erroldphoto.com/agent/booking/package/9) | [book](https://erroldphoto.com/book-now/9) |
| package | 24 | Family Mini Session | — | 60 | $350.00 | [detail](https://erroldphoto.com/agent/booking/package/24) | [book](https://erroldphoto.com/book-now/24) |

## What This Doesn't Cover

Plain session-type categories with no live calendar (a category the studio only handles by manual inquiry) aren't listed above — there's no real availability to check for those. If the customer's request doesn't match anything in the table, send them to the full site to start a general inquiry: https://erroldphoto.com/

## FAQ

**What's a "promo"?** A limited-run, self-scheduled booking window (e.g. a seasonal mini-session offer) with its own daily hours and days of week. Booking one reserves a real slot immediately — no payment required at booking time.

**What's a "package"?** A fixed-scope, fixed-price offering with instant book-and-pay: picking a slot and paying via Stripe Checkout confirms it immediately, on the spot.

**Why does a promo have no listed price?** Promos don't carry a structured price field — pricing for that offer is described in the promo's own page copy, not this API. Packages always have a fixed `priceCents`.

**What timezone are the returned times in?** All slot times are real UTC ISO-8601 instants (e.g. `2026-10-03T14:00:00.000Z`). The studio's own business hours are defined and interpreted in `America/New_York` — convert to that zone if you need to describe a time in the studio's own local terms.

**What currency are prices in?** US dollars. `priceCents` is an integer number of cents (e.g. `30000` = $300.00).

**Does checking availability or fetching these endpoints book anything?** No. Every endpoint here is read-only. The only way to actually complete a booking is the human `bookingUrl` handed back in each response — this route never writes data, never requires authentication, and never collects payment or personal information.

## Related

- Discovery: https://erroldphoto.com/agent/booking/list
- Full human booking experience: https://erroldphoto.com/
- Site agent index: https://erroldphoto.com/llms.txt
