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 (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."
}
}
}