generated: '2026-10-09' method: derived generator: derive-data-model.py source: - openapi/withlocals-partner-api-openapi.yml notation: has_one = property $ref; has_many = array of $ref; belongs_to = _id field summary: entities: 20 entities_in_spec: 20 relationships: 14 entities: - name: AmendRequest fields: 4 description: Body of `PATCH /bookings/{bookingId}`. Any subset of fields may be supplied. - name: AvailabilityCalendar fields: 1 description: Day-grain availability calendar — one entry per day in the range. - name: AvailabilityRequest fields: 2 description: Availability lookup for a single product over a date range. - name: Booking fields: 16 description: A partner booking. Returned by create, amend, cancel, and read. - name: BookingCancelledEvent fields: 6 description: Payload of the `booking.cancelled` webhook. Thin by design — partner - name: CalendarDay fields: 4 description: One day in the availability calendar. - name: CancelRequest fields: 1 description: Optional body of `DELETE /bookings/{bookingId}`. - name: CreateBookingRequest fields: 10 description: Body of `POST /bookings` — creates a `CONFIRMED` booking. - name: Error fields: 3 description: Error envelope. - name: Guest fields: 4 description: A single guest on a booking. - name: GuestPrice fields: 3 description: Per-person price for a specific party size. - name: MeetingPoint fields: 5 description: Where the experience starts. - name: Money fields: 2 description: A monetary amount in minor units. - name: Product fields: 11 description: A bookable experience. - name: ProductOption fields: 5 description: A bookable variant of a product (e.g. a specific start-time slot). - name: ProductPage fields: 4 description: One page of `Product` results. - name: Restrictions fields: 2 description: Booking-size limits for a product option. - name: Supplier fields: 2 description: Self-describing supplier metadata. Returned from `GET /`. Partners SHOULD - name: Webhook fields: 2 description: Webhook registration. A single URL receives all event types; partners - name: WebhookRegistration fields: 1 description: Request body for `PUT /webhooks`. Only `url` is accepted — the signing relationships: - from: GuestPrice to: Money type: has_one via: retailPrice - from: GuestPrice to: Money type: has_one via: netPrice - from: ProductOption to: Restrictions type: has_one via: restrictions - from: ProductOption to: GuestPrice type: has_many via: pricingPerGuest - from: Product to: ProductOption type: has_many via: options - from: ProductPage to: Product type: has_many via: items - from: AvailabilityRequest to: Product type: belongs_to via: productId - from: AvailabilityCalendar to: CalendarDay type: has_many via: availability - from: Booking to: Product type: belongs_to via: productId - from: Booking to: MeetingPoint type: has_one via: meetingPoint - from: CreateBookingRequest to: Product type: belongs_to via: productId - from: CreateBookingRequest to: Guest type: has_one via: mainGuest - from: CreateBookingRequest to: Guest type: has_many via: otherGuests - from: BookingCancelledEvent to: Booking type: belongs_to via: bookingId