# Lobby booking created

**Event:** `lobby.booked`

## Description

A new booking has been created for a lobby.

**Event name:** `lobby:booked`

This event fires when a guest completes booking for a lobby (via a lobby link/handle).

The `booking` object includes the guest's answers to the lobby's custom questions in
`booking.responses`, including hidden fields populated from URL query parameters on
the lobby link (e.g. `?utm_source=partner`).

## Webhook Payload

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `lobby` | LobbyConfiguration | Yes |  |
| `booking` | LobbyBooking | Yes |  |

**LobbyConfiguration**:

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | Unique identifier for the lobby configuration |
| `slug` | string | Yes | URL-safe slug for the lobby |
| `displayName` | string | Yes | Human-readable name of the lobby |
| `active` | boolean | Yes | Whether the lobby is currently active |
| `url` | string | Yes | Public URL for the lobby |
| `handle` | string | No | The handle extracted from the lobby URL, if available |

**LobbyBooking**:

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `id` | string | Yes | Unique booking identifier |
| `start` | string | Yes | Start time in RFC3339 |
| `end` | string | Yes | End time in RFC3339 |
| `status` | string | Yes | Current status of the booking |
| `timeZone` | string | No | IANA time zone of the booking times |
| `notes` | string | No | Optional notes provided by the booker |
| `created` | string | No | Creation time |
| `hosts` | LobbyBookingHost[] | No |  |
| `invitees` | LobbyBookingInvitee[] | No |  |
| `responses` | LobbyBookingResponse[] | No | The guest's answers to the lobby's custom questions, including hidden fields populated from URL query parameters on the lobby link. One entry per answered question; empty or absent when the guest answ |
| `meetingLink` | string | No | Meeting link URL, used to join the meeting |

**LobbyBookingHost** (array item):

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | No | Display name of the host |
| `email` | string | Yes | Email address of the host |
| `isOrganizer` | boolean | Yes | Whether this host is the organizer |

**LobbyBookingInvitee** (array item):

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `name` | string | No | Display name of the invitee |
| `email` | string | Yes | Email address of the invitee |
| `status` | string | Yes | Invitee's RSVP or booking status |
| `isBooker` | boolean | No | Whether this invitee created the booking |

**LobbyBookingResponse** (array item):

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `fieldId` | string | Yes | ID of the custom field (question) this answer belongs to. |
| `key` | string | No | The field's stable key, if the lobby owner assigned one, as captured when the booking was made. For hidden fields this is the URL query parameter name used to populate the value.  |
| `question` | string | No | The question's display name. Omitted if the field definition can no longer be found on the lobby configuration.  |
| `type` | "short_text" | "text" | "email" | "phone_number" | "radio" | "checkbox" | "dropdown" | "hidden" | No | The custom field type. Omitted when `question` is omitted. |
| `value` | object | No | The human-readable answer. For option fields (radio, checkbox, dropdown) this is the selected option label(s), not internal option IDs. Checkbox answers are arrays of strings; all other answers are st |

---

*Machine-readable API documentation.*
*Full documentation: https://developer.ro.am/docs/webhooks-v0-dev/lobby-booked*
