Hostinger OpenClaw VPS

create_booking_page

Create a booking page BEFORE deploying (Plus/Pro). Returns the two-line widget embed + the frozen .db-* styling contract — embed verbatim, STYLE the classes (mandatory: match the site's fonts, colors, spacing, radius), never reimplement booking logic. Every request needs the owner's approval. Unavailable until assign_to_project. Retrying the same name while unassigned returns the existing page. Name it "<Business Name> — <Purpose>". For a business with priced services (salon, barber, clinic, tours), pass `services` so the widget shows a service picker sourced from the project's "services" Data collection — you must supply the currency; the collection is auto-detected.

Remote dplooyinc/hosting

Remote (network-hosted)

Other tools also called create_booking_page? See providers with this name

Input Schema


            {
  "type": "object",
  "properties": {
    "kind": {
      "enum": [
        "appointments",
        "reservations"
      ],
      "type": "string",
      "description": "appointments = one visitor per slot (consultations, services). reservations = multiple parties per slot with party size (restaurants, venues). Default: appointments."
    },
    "name": {
      "type": "string",
      "description": "Professional name including the business, e.g. \"GreenScape Landscaping — Consultation Bookings\" (max 50 chars)"
    },
    "rules": {
      "type": "object",
      "properties": {
        "weekly": {
          "type": "object",
          "description": "Open intervals per weekday (keys mon..sun), \"HH:MM\" wall times; [] = closed. E.g. { mon: [{open:\"09:00\",close:\"17:00\"}], sun: [] }",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "open",
                "close"
              ],
              "properties": {
                "open": {
                  "type": "string"
                },
                "close": {
                  "type": "string"
                }
              }
            }
          }
        },
        "slotMinutes": {
          "type": "number",
          "description": "Slot length: 15, 30, 45, 60, 90 or 120"
        },
        "maxDaysAhead": {
          "type": "number",
          "description": "Booking window in days (plan-capped: Plus 60, Pro 365)"
        },
        "maxPartySize": {
          "type": [
            "number",
            "null"
          ],
          "description": "Reservations only; null for appointments"
        },
        "capacityPerSlot": {
          "type": "number",
          "description": "1 for appointments; tables/seats per slot for reservations"
        },
        "leadTimeMinutes": {
          "type": "number",
          "description": "Minimum notice before a slot can be requested"
        },
        "cancelCutoffHours": {
          "type": "number",
          "description": "How close to the slot a visitor may still cancel"
        }
      },
      "description": "Schedule rules — get_guide('bookings') documents the full schema"
    },
    "services": {
      "type": "object",
      "required": [
        "currency"
      ],
      "properties": {
        "currency": {
          "type": "string",
          "description": "ISO 4217 code for the prices, e.g. \"USD\", \"GBP\" — REQUIRED, not inferable"
        },
        "perPerson": {
          "type": "boolean",
          "description": "Price × party size (tours, classes). Default false for appointments, true for reservations"
        },
        "nameFieldId": {
          "type": "string",
          "description": "Only when the name column id is not \"name\""
        },
        "collectionId": {
          "type": "string",
          "description": "Only for a hand-built collection; omitted = the project's services-preset collection is detected"
        },
        "priceFieldId": {
          "type": "string",
          "description": "Only when the price column id is not \"price\" (must be a number column)"
        },
        "askForService": {
          "type": "boolean",
          "description": "Widget requires a service pick before booking. Default false"
        }
      },
      "description": "Services & prices: show a service picker sourced from the project's \"services\" Data collection (create_data_collection with preset \"services\", assign it to the same project). The chosen name + price are copied onto each booking. Booked value only — no payments."
    },
    "timezone": {
      "type": "string",
      "description": "IANA timezone of the business, e.g. \"America/New_York\" — slot times are wall times in this zone"
    },
    "notifyEmail": {
      "type": "string",
      "description": "Email address that receives booking-request notifications. ASK THE USER which address they want BEFORE creating — omitted = their Dplooy account email."
    },
    "publicReplyEmail": {
      "type": "string",
      "description": "The reply address GUESTS see on booking emails (confirmations/decisions). ASK THE USER — omitted = falls back to the notification address."
    }
  }
}