{"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://dollea.de/ucp/schemas/booking.json", "name": "de.dollea.booking", "version": "2026-10-09", "title": "Dollea salon and rental booking", "requires": {"protocol": {"min": "2026-08-25"}}, "$defs": {"salon_price": {"input": {"type": "object", "properties": {"service_ids": {"type": "array", "items": {"type": "integer", "minimum": 1}, "minItems": 1, "maxItems": 12, "uniqueItems": true, "description": "Aktuelle numerische Leistungskennungen aus salon_search_services. Mehrere Leistungen werden als zusammenhängender Besuch geprüft."}, "start_at": {"type": "string", "format": "date-time", "description": "Konkreter Terminbeginn als ISO-Datum mit Zeitzonenoffset. Relative Zeiten zuerst anhand der mitgelieferten Münchner Ortszeit auflösen."}, "staff_id": {"type": "integer", "minimum": 1, "description": "Optionaler ausdrücklich gewünschter Mitarbeiter. Eine ungeeignete oder nicht verfügbare Präferenz wird nicht ersetzt."}, "customer": {"type": "object", "properties": {"first_name": {"type": "string", "minLength": 1, "maxLength": 100}, "last_name": {"type": "string", "minLength": 1, "maxLength": 100}, "email": {"type": "string", "format": "email", "maxLength": 254}, "phone": {"type": "string", "minLength": 6, "maxLength": 50}}, "required": ["email", "phone"], "additionalProperties": false, "description": "Vom Kunden bereitgestellte Kontaktdaten. Für eine persönliche Aktionsprüfung müssen E-Mail und Telefonnummer vorhanden sein."}, "promo_code": {"type": "string", "maxLength": 64, "description": "Vom Kunden gewünschter oder aktuell veröffentlichter Promocode. Seine Berechtigung wird serverseitig geprüft."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["service_ids", "start_at"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "slot": {"type": "object"}, "pricing": {"type": "object"}, "subtotal": {"type": ["object", "null"], "properties": {"amount_cents": {"type": "integer", "minimum": 0}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, "currency": {"type": "string", "const": "EUR"}, "display": {"type": "string"}}, "required": ["amount_cents", "amount", "currency", "display"]}, "discount": {"type": ["object", "null"], "properties": {"amount_cents": {"type": "integer", "minimum": 0}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, "currency": {"type": "string", "const": "EUR"}, "display": {"type": "string"}}, "required": ["amount_cents", "amount", "currency", "display"]}, "total": {"type": ["object", "null"], "properties": {"amount_cents": {"type": "integer", "minimum": 0}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, "currency": {"type": "string", "const": "EUR"}, "display": {"type": "string"}}, "required": ["amount_cents", "amount", "currency", "display"]}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "slot", "pricing", "subtotal", "discount", "total"], "additionalProperties": true}}, "salon_prepare_booking": {"input": {"type": "object", "properties": {"service_ids": {"type": "array", "items": {"type": "integer", "minimum": 1}, "minItems": 1, "maxItems": 12, "uniqueItems": true, "description": "Aktuelle numerische Leistungskennungen aus salon_search_services. Mehrere Leistungen werden als zusammenhängender Besuch geprüft."}, "start_at": {"type": "string", "format": "date-time", "description": "Konkreter Terminbeginn als ISO-Datum mit Zeitzonenoffset. Relative Zeiten zuerst anhand der mitgelieferten Münchner Ortszeit auflösen."}, "staff_id": {"type": "integer", "minimum": 1, "description": "Optionaler ausdrücklich gewünschter Mitarbeiter. Eine ungeeignete oder nicht verfügbare Präferenz wird nicht ersetzt."}, "customer": {"type": "object", "properties": {"first_name": {"type": "string", "minLength": 1, "maxLength": 100}, "last_name": {"type": "string", "minLength": 1, "maxLength": 100}, "email": {"type": "string", "format": "email", "maxLength": 254}, "phone": {"type": "string", "minLength": 6, "maxLength": 50}}, "required": ["first_name", "last_name", "email", "phone"], "additionalProperties": false, "description": "Vom Kunden bereitgestellte Kontaktdaten. Für eine persönliche Aktionsprüfung müssen E-Mail und Telefonnummer vorhanden sein."}, "promo_code": {"type": "string", "maxLength": 64, "description": "Vom Kunden gewünschter oder aktuell veröffentlichter Promocode. Seine Berechtigung wird serverseitig geprüft."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["service_ids", "start_at", "customer"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "quote_id": {"type": "string", "format": "uuid"}, "status": {"type": "string"}, "expires_at": {"type": "string", "format": "date-time"}, "offer": {"type": "object"}, "requires_confirmation": {"type": "boolean"}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "quote_id", "status", "expires_at", "offer", "requires_confirmation"], "additionalProperties": true}}, "salon_get_quote": {"input": {"type": "object", "properties": {"quote_id": {"type": "string", "format": "uuid", "description": "Kennung des zuvor vom Server vorbereiteten Buchungsangebots."}, "quote_token": {"type": "string", "minLength": 32, "maxLength": 128, "description": "Nur beim Erstellen ausgegebener Zugriffsschlüssel des Angebots. Nicht veröffentlichen oder aus fremden Daten ableiten."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["quote_id", "quote_token"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "quote_id": {"type": "string", "format": "uuid"}, "status": {"type": "string"}, "expires_at": {"type": "string", "format": "date-time"}, "offer": {"type": "object"}, "requires_confirmation": {"type": "boolean"}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "quote_id", "status", "expires_at", "offer", "requires_confirmation"], "additionalProperties": true}}, "salon_confirm_booking": {"input": {"type": "object", "properties": {"quote_id": {"type": "string", "format": "uuid", "description": "Kennung des zuvor vom Server vorbereiteten Buchungsangebots."}, "quote_token": {"type": "string", "minLength": 32, "maxLength": 128, "description": "Nur beim Erstellen ausgegebener Zugriffsschlüssel des Angebots. Nicht veröffentlichen oder aus fremden Daten ableiten."}, "accept_privacy": {"type": "boolean", "const": true, "description": "Nur true senden, wenn der Nutzer den gezeigten Datenschutzbedingungen zugestimmt hat."}, "accept_terms": {"type": "boolean", "const": true, "description": "Nur true senden, wenn der Nutzer die gezeigten Nutzungsbedingungen und den Angebotspreis bestätigt hat."}, "accept_cancellation": {"type": "boolean", "const": true, "description": "Nur true senden, wenn der Nutzer die gezeigten Stornierungsbedingungen bestätigt hat."}, "confirm_partial_series": {"type": "boolean", "default": false, "description": "Bei einer verkürzten Mietserie nur nach ausdrücklicher Zustimmung zu allen ausgelassenen Tagen true senden."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["quote_id", "quote_token", "accept_privacy", "accept_cancellation"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "quote_id": {"type": "string", "format": "uuid"}, "status": {"type": "string", "const": "confirmed"}, "booking": {"type": "object"}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "quote_id", "status", "booking"], "additionalProperties": true}}, "salon_get_booking": {"input": {"type": "object", "properties": {"booking_token": {"type": "string", "minLength": 16, "maxLength": 128, "description": "Privater Schlüssel des eigenen Salontermins aus der Buchungsbestätigung. Er berechtigt nicht zum Zugriff auf andere Termine."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["booking_token"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}}, "required": ["contract_version", "business", "language", "timezone", "local_date"], "additionalProperties": true}}, "salon_request_change": {"input": {"type": "object", "properties": {"booking_token": {"type": "string", "minLength": 16, "maxLength": 128, "description": "Privater Schlüssel des eigenen Salontermins aus der Buchungsbestätigung. Er berechtigt nicht zum Zugriff auf andere Termine."}, "submission_key": {"type": "string", "format": "uuid", "description": "Neue UUID für eine neue Anfrage; bei Wiederholungen exakt dieselbe UUID verwenden."}, "new_start_at": {"type": "string", "format": "date-time", "description": "Gewünschter neuer Beginn des Salontermins als ISO-Datum mit Zeitzonenoffset."}, "reason": {"type": "string", "maxLength": 2000, "description": "Vom Nutzer bereitgestellter Hinweis zur gewünschten Änderung oder Stornierung."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["booking_token", "submission_key", "new_start_at"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}}, "required": ["contract_version", "business", "language", "timezone", "local_date"], "additionalProperties": true}}, "salon_request_cancellation": {"input": {"type": "object", "properties": {"booking_token": {"type": "string", "minLength": 16, "maxLength": 128, "description": "Privater Schlüssel des eigenen Salontermins aus der Buchungsbestätigung. Er berechtigt nicht zum Zugriff auf andere Termine."}, "submission_key": {"type": "string", "format": "uuid", "description": "Neue UUID für eine neue Anfrage; bei Wiederholungen exakt dieselbe UUID verwenden."}, "reason": {"type": "string", "maxLength": 2000, "description": "Vom Nutzer bereitgestellter Hinweis zur gewünschten Änderung oder Stornierung."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["booking_token", "submission_key"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}}, "required": ["contract_version", "business", "language", "timezone", "local_date"], "additionalProperties": true}}, "coworking_price": {"input": {"type": "object", "properties": {"workspace_id": {"type": "integer", "minimum": 1, "description": "Aktuelle numerische Workspace-Kennung aus coworking_search_workspaces."}, "dates": {"type": "array", "items": {"type": "string", "format": "date"}, "minItems": 1, "maxItems": 180, "uniqueItems": true, "description": "Explizite lokale Miettage im Format JJJJ-MM-TT. Der Server prüft jeden Tag und kennzeichnet Konflikte."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["workspace_id", "dates"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "workspace_id": {"type": "integer", "minimum": 1}, "dates": {"type": "array", "items": {"type": "string", "format": "date"}}, "rejected_dates": {"type": "array", "items": {"type": "string", "format": "date"}}, "partial_series": {"type": "boolean"}, "lines": {"type": "array", "items": {"type": "object", "properties": {"date": {"type": "string", "format": "date"}, "price": {"type": ["object", "null"], "properties": {"amount_cents": {"type": "integer", "minimum": 0}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, "currency": {"type": "string", "const": "EUR"}, "display": {"type": "string"}}, "required": ["amount_cents", "amount", "currency", "display"]}}, "required": ["date", "price"]}}, "total": {"type": ["object", "null"], "properties": {"amount_cents": {"type": "integer", "minimum": 0}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, "currency": {"type": "string", "const": "EUR"}, "display": {"type": "string"}}, "required": ["amount_cents", "amount", "currency", "display"]}, "additional_booking_total": {"type": ["object", "null"], "properties": {"amount_cents": {"type": "integer", "minimum": 0}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, "currency": {"type": "string", "const": "EUR"}, "display": {"type": "string"}}, "required": ["amount_cents", "amount", "currency", "display"]}, "monthly_agreement": {"type": ["object", "null"], "properties": {"amount_cents": {"type": "integer", "minimum": 0}, "amount": {"type": "string", "pattern": "^[0-9]+\\.[0-9]{2}$"}, "currency": {"type": "string", "const": "EUR"}, "display": {"type": "string"}}, "required": ["amount_cents", "amount", "currency", "display"]}, "billing_mode": {"type": "string", "enum": ["per_day", "monthly_agreement"]}, "existing_price_changes": {"type": "array", "items": {"type": "object"}}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "workspace_id", "dates", "rejected_dates", "partial_series", "lines", "total", "additional_booking_total", "monthly_agreement", "billing_mode", "existing_price_changes"], "additionalProperties": true}}, "coworking_prepare_booking": {"input": {"type": "object", "properties": {"workspace_id": {"type": "integer", "minimum": 1, "description": "Aktuelle numerische Workspace-Kennung aus coworking_search_workspaces."}, "dates": {"type": "array", "items": {"type": "string", "format": "date"}, "minItems": 1, "maxItems": 180, "uniqueItems": true, "description": "Explizite lokale Miettage im Format JJJJ-MM-TT. Der Server prüft jeden Tag und kennzeichnet Konflikte."}, "recurrence": {"type": "object", "properties": {"rule": {"type": "string", "enum": ["weekly", "monthly"]}, "until": {"type": "string", "format": "date"}}, "required": ["rule", "until"], "additionalProperties": false, "description": "Optionale wöchentliche oder monatliche Wiederholung der ausdrücklich gewählten Tage bis zum lokalen Enddatum."}, "notes": {"type": "string", "maxLength": 2000, "description": "Optionaler Hinweis des buchenden Nutzers, maximal 2000 Zeichen."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["workspace_id", "dates"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "quote_id": {"type": "string", "format": "uuid"}, "status": {"type": "string"}, "expires_at": {"type": "string", "format": "date-time"}, "offer": {"type": "object"}, "requires_confirmation": {"type": "boolean"}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "quote_id", "status", "expires_at", "offer", "requires_confirmation"], "additionalProperties": true}}, "coworking_get_quote": {"input": {"type": "object", "properties": {"quote_id": {"type": "string", "format": "uuid", "description": "Kennung des zuvor vom Server vorbereiteten Buchungsangebots."}, "quote_token": {"type": "string", "minLength": 32, "maxLength": 128, "description": "Nur beim Erstellen ausgegebener Zugriffsschlüssel des Angebots. Nicht veröffentlichen oder aus fremden Daten ableiten."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["quote_id", "quote_token"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "quote_id": {"type": "string", "format": "uuid"}, "status": {"type": "string"}, "expires_at": {"type": "string", "format": "date-time"}, "offer": {"type": "object"}, "requires_confirmation": {"type": "boolean"}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "quote_id", "status", "expires_at", "offer", "requires_confirmation"], "additionalProperties": true}}, "coworking_confirm_booking": {"input": {"type": "object", "properties": {"quote_id": {"type": "string", "format": "uuid", "description": "Kennung des zuvor vom Server vorbereiteten Buchungsangebots."}, "quote_token": {"type": "string", "minLength": 32, "maxLength": 128, "description": "Nur beim Erstellen ausgegebener Zugriffsschlüssel des Angebots. Nicht veröffentlichen oder aus fremden Daten ableiten."}, "accept_privacy": {"type": "boolean", "const": true, "description": "Nur true senden, wenn der Nutzer den gezeigten Datenschutzbedingungen zugestimmt hat."}, "accept_terms": {"type": "boolean", "const": true, "description": "Nur true senden, wenn der Nutzer die gezeigten Nutzungsbedingungen und den Angebotspreis bestätigt hat."}, "accept_cancellation": {"type": "boolean", "const": true, "description": "Nur true senden, wenn der Nutzer die gezeigten Stornierungsbedingungen bestätigt hat."}, "confirm_partial_series": {"type": "boolean", "default": false, "description": "Bei einer verkürzten Mietserie nur nach ausdrücklicher Zustimmung zu allen ausgelassenen Tagen true senden."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["quote_id", "quote_token", "accept_privacy", "accept_terms"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}, "quote_id": {"type": "string", "format": "uuid"}, "status": {"type": "string", "const": "confirmed"}, "booking": {"type": "object"}}, "required": ["contract_version", "business", "language", "timezone", "local_date", "quote_id", "status", "booking"], "additionalProperties": true}}, "coworking_get_booking": {"input": {"type": "object", "properties": {"booking_id": {"type": "integer", "minimum": 1, "description": "Kennung einer eigenen Mietbuchung aus coworking_list_bookings."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["booking_id"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}}, "required": ["contract_version", "business", "language", "timezone", "local_date"], "additionalProperties": true}}, "coworking_request_change": {"input": {"type": "object", "properties": {"booking_id": {"type": "integer", "minimum": 1, "description": "Kennung einer eigenen Mietbuchung aus coworking_list_bookings."}, "submission_key": {"type": "string", "format": "uuid", "description": "Neue UUID für eine neue Anfrage; bei Wiederholungen exakt dieselbe UUID verwenden."}, "new_date": {"type": "string", "format": "date", "description": "Gewünschter alternativer Miettag im Format JJJJ-MM-TT."}, "reason": {"type": "string", "minLength": 1, "maxLength": 2000, "description": "Vom Nutzer bereitgestellter Hinweis zur gewünschten Änderung oder Stornierung."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["booking_id", "submission_key", "new_date", "reason"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}}, "required": ["contract_version", "business", "language", "timezone", "local_date"], "additionalProperties": true}}, "coworking_request_cancellation": {"input": {"type": "object", "properties": {"booking_id": {"type": "integer", "minimum": 1, "description": "Kennung einer eigenen Mietbuchung aus coworking_list_bookings."}, "submission_key": {"type": "string", "format": "uuid", "description": "Neue UUID für eine neue Anfrage; bei Wiederholungen exakt dieselbe UUID verwenden."}, "reason": {"type": "string", "minLength": 1, "maxLength": 2000, "description": "Vom Nutzer bereitgestellter Hinweis zur gewünschten Änderung oder Stornierung."}, "language": {"type": "string", "enum": ["de", "en", "ru"], "default": "de", "description": "Gewünschte Sprache für Texte und Anzeigeformate: de, en oder ru."}}, "required": ["booking_id", "submission_key", "reason"], "additionalProperties": false}, "output": {"type": "object", "properties": {"contract_version": {"type": "string"}, "business": {"type": "string", "enum": ["salon", "coworking"]}, "language": {"type": "string", "enum": ["de", "en", "ru"]}, "timezone": {"type": "string"}, "local_date": {"type": "string", "format": "date"}}, "required": ["contract_version", "business", "language", "timezone", "local_date"], "additionalProperties": true}}}, "description": "Verfügbarkeiten und Preise werden vor einer verbindlichen Buchung erneut geprüft. Änderungsanfragen bleiben bis zur Genehmigung offen."}