{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/tourscanner-ai/json-schema/tourscanner-ai-post-booking-hold-request-schema.json",
  "title": "PostBookingHoldRequest",
  "x-generated": "2026-10-29",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/_ae-authored/tourscanner-ai-openapi-generated.yml#/components/schemas/PostBookingHoldRequest",
  "type": "object",
  "properties": {
    "activityId": {
      "type": "number",
      "description": "Activity ID"
    },
    "date": {
      "type": "string",
      "description": "Travel date (YYYY-MM-DD)"
    },
    "startTime": {
      "type": "string",
      "description": "Time slot (HH:MM) or omit for ON_DEMAND product"
    },
    "productOptionCode": {
      "type": "string",
      "description": "Product variant code (from booking/options)"
    },
    "passengers": {
      "type": "object",
      "description": "Either { adults, children?, infants?, seniors?, youth? } or [{ bandId: 'adult'|'child'|..., count }]. adults >= 1 is required."
    },
    "contact": {
      "type": "object",
      "description": "{ firstName, lastName, email, phone }"
    },
    "travelers": {
      "type": "array",
      "description": "Traveler details per person booking"
    },
    "bookingAnswers": {
      "type": "array",
      "description": "Answers to booking questions"
    },
    "languageGuide": {
      "type": "object",
      "description": "Selected language guide"
    },
    "currency": {
      "type": "string",
      "description": "Currency (default: EUR)"
    },
    "baseUrl": {
      "type": "string",
      "description": "Origin to send the customer back to after Stripe"
    }
  },
  "required": [
    "activityId",
    "date",
    "productOptionCode",
    "passengers",
    "contact"
  ]
}