# Booking created

Webhook event: `booking.created`

Fired when a new booking is created. The full booking object is spread into `data`.

Delivered payload:

```ts
{
  id: string // uuid
  event: "booking.created"
  resource: "booking"
  resourceId: string
  timestamp: string // date-time
  apiVersion: "v1"
  data: {
    attribution?: {
      firstTouch?: {
        capturedAt: string // date-time
        utmSource?: string
        utmMedium?: string
        utmCampaign?: string
        utmContent?: string
        utmTerm?: string
        referrer?: string
        landingPage?: string
      }
      bookingTouch?: {
        capturedAt: string // date-time
        utmSource?: string
        utmMedium?: string
        utmCampaign?: string
        utmContent?: string
        utmTerm?: string
        referrer?: string
        landingPage?: string
      }
      reportedSource?: string
      recordedAt: string // date-time
    } | null
    customFields?: Array<{
        fieldId: string
        key: string
        label: string
        group: string
        type: string
        value: unknown
        displayValue: string
        version: integer
        status: string
      }>
    metadata?: Record<string, unknown> | null
    id: string // uuid
    locationId: integer
    tableId: string | null
    bookingDate: string
    startTime: string
    endTime: string
    timezone: string
    primaryUserId: integer | null
    participants?: {
      bookedForOther: boolean
      booker?: {
        name: string
        email: string
        phone?: string
      }
    }
    adultCount?: integer | null
    childCount?: integer | null
    guestCount: integer
    occasion: "none" | "birthday" | "anniversary" | "business" | "date" | "celebration" | "other" | null
    specialRequests: string | null
    internalNotes: string | null
    notes: Array<{
        uuid: string // uuid
        note: string
        sortOrder: integer
        createdByRetailerUserId: …
        updatedByRetailerUserId: …
        createdAt: string // date-time
        updatedAt: string // date-time
      }>
    status: "pending" | "confirmed" | "checked_in" | "seated" | "completed" | "cancelled" | "no_show"
    paymentType: "none" | "deposit" | "full_prepayment" | null
    depositAmountCents: integer | null
    purchaseId: integer | null
    purchase?: {
      id: integer
      customFields?: { … }[]
      metadata?: Record<string, unknown> | null
    }
    confirmationCode: string
    bookingSource: "direct" | "website" | "app" | "phone" | "walkin" | "third_party" | "waitlist" | null
    estimatedRevenueCents: integer | null
    resourceLocked: boolean
    defaultTabStrategy: "single" | "per_resource"
    resources: Record<string, unknown>[]
    guestName?: string
    guestEmail?: string
    guestPhone?: string
    createdAt: string // date-time
    updatedAt: string // date-time
    confirmedAt: string | null
    seatedAt: string | null
    completedAt: string | null
    cancelledAt: string | null
    tabId: string | null
  }
}
```
