openapi: 3.2.0 info: title: Booking Com Manage bathrooms API version: '1.0' contact: name: Connectivity Team url: https://connect.booking.com email: connectivity@booking.com description: 'Operations tagged Manage bathrooms across 2 of this provider''s published API definitions: booking-com-facilities-api-openapi.yml, booking-com-facilities-api-remote-sync-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: https://supply-xml.booking.com/ description: Test using live endpoint - url: https://supply-xml.booking.com/facilities-api/ tags: - name: Manage bathrooms description: 'Use the GET and the PUT endpoints to: Retrieve room bathroom configuration Add, modify or delete room-level bathroom information' paths: /facilities-api/properties/{propertyId}/rooms/{roomId}/bathrooms: get: tags: - Manage bathrooms summary: Retrieve room bathroom configuration description: Retrieve room bathroom configuration. Bathroom attached to rooms. operationId: getBathroomDetails parameters: - name: propertyId in: path required: true schema: type: integer - name: roomId in: path required: true schema: type: integer responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ApiResponseBathroomDetails' put: tags: - Manage bathrooms summary: Manage bathrooms description: 'Add, modify or delete room-level bathroom information. **Important — overlay semantics:** This endpoint uses full-replace mode. Any bathroom definition absent from the request body is permanently deleted. Before updating existing bathroom configuration, call `GET /facilities-api/properties/{propertyId}/rooms/{roomId}/bathrooms` to retrieve the current state, then include all existing bathroom entries in your PUT body alongside any changes.' operationId: setBathroomDetails parameters: - name: propertyId in: path required: true schema: type: integer - name: roomId in: path required: true schema: type: integer requestBody: content: application/json: schema: $ref: '#/components/schemas/BathroomDetailsRequest' examples: Enable hotel group bathrooms: description: Enable hotel group bathrooms value: hotel_bathroom_details: shared_bathroom_state: PRESENT private_bathroom_state: PRESENT number_of_bathrooms: 3 Add hotel group bathroom details: description: Add hotel group bathroom details value: hotel_bathroom_details: shared_bathroom_state: MISSING private_bathroom_state: PRESENT private_bathroom_details: type: EXTERNAL_BATHROOM location_type: OTHER location_other: outside of the room number_of_bathrooms: 2 Add homes group bathroom details: description: Add homes group bathroom details value: property_bathroom_details: bathrooms: - bathroom_type: PRIVATE - bathroom_type: SHARED Add homes group bathroom details with location: description: Add homes group bathroom details with location value: property_bathroom_details: bathrooms: - bathroom_type: PRIVATE bathroom_location: ENSUITE - bathroom_type: SHARED bathroom_location: OPPOSITE_THE_ROOM Add hostel bathroom details: description: Add hostel bathroom details value: property_bathroom_details: bathrooms: - bathroom_type: PRIVATE bathroom_location: DOWN_THE_HALL hostel_bathroom_details: bathroom_facilities: - type: SHOWER count: 98 - type: TOILET count: 21 - type: SINK count: 68 - type: BATH count: 16 - type: TOILET_PAPER - type: HAIR_DRYER - type: SLIPPERS is_paid: true - type: BIDET - type: TOOTHBRUSH is_paid: true - type: SHAMPOO is_paid: false - type: CONDITIONER is_paid: false - type: BODY_SOAP is_paid: true - type: TOWEL is_paid: false - type: HOT_WATER - bathroom_type: SHARED bathroom_location: DOWN_THE_HALL hostel_bathroom_details: gender: MIXED num_guests_with_access_type: NUMBER_LESS_THAN_5 bathroom_facilities: - type: SHOWER count: 98 - type: TOILET count: 21 - type: SINK count: 68 - type: BATH count: 16 - type: TOILET_PAPER - type: HAIR_DRYER - type: SLIPPERS is_paid: true - type: BIDET - type: TOOTHBRUSH is_paid: true - type: SHAMPOO is_paid: false - type: CONDITIONER is_paid: false - type: BODY_SOAP is_paid: true - type: TOWEL is_paid: true - type: HOT_WATER Disable hotel group bathroom details: description: Disable hotel group bathroom details value: hotel_bathroom_details: shared_bathroom_state: MISSING private_bathroom_state: MISSING number_of_bathrooms: 0 Remove bathroom details for homes and hostel group: description: Remove bathroom details for homes and hostel group value: property_bathroom_details: bathrooms: [] required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ApiResponseSuccess' '400': description: 'Invalid request payload. The `errors` array contains one or more entries with `code: 320`. The `details.fields` path identifies the exact field that failed validation.' content: application/json: schema: $ref: '#/components/schemas/ApiResponseSuccessObject' examples: Hostel private bathroom limit exceeded: description: A hostel property cannot have more than 1 private bathroom. value: warnings: [] errors: - message: Invalid value code: 320 details: fields: - property_bathroom_details.bathrooms description: Hostel properties support a maximum of 1 private bathroom and 5 shared bathrooms. meta: ruid: X-RUID-EXAMPLE Shared hostel bathroom missing required fields: description: A SHARED hostel bathroom must include `gender` and `num_guests_with_access_type`. value: warnings: [] errors: - message: Invalid value code: 320 details: fields: - property_bathroom_details.bathrooms[0].hostel_bathroom_details.gender description: must not be null meta: ruid: X-RUID-EXAMPLE Hotel bathroom state and count inconsistency: description: Both `private_bathroom_state` and `shared_bathroom_state` are MISSING but `number_of_bathrooms` is greater than 0. value: warnings: [] errors: - message: Invalid value code: 320 details: fields: - hotel_bathroom_details.number_of_bathrooms description: number_of_bathrooms must be 0 when both private_bathroom_state and shared_bathroom_state are MISSING meta: ruid: X-RUID-EXAMPLE servers: - url: https://supply-xml.booking.com/ description: Test using live endpoint /properties/{propertyId}/rooms/{roomId}/bathrooms: get: tags: - Manage bathrooms summary: Retrieve room bathroom configuration description: Retrieve room bathroom configuration. Bathroom attached to rooms. operationId: getPropertiesByPropertyIdRoomsByRoomIdBathrooms parameters: - name: propertyId in: path required: true schema: type: integer format: int32 - name: roomId in: path required: true schema: type: integer format: int64 responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseBathroomDetails_2' x-operation-id-source: normalized x-operation-id-original: getBathroomDetails put: tags: - Manage bathrooms summary: Manage bathrooms description: Add, modify or delete room-level bathroom information operationId: putPropertiesByPropertyIdRoomsByRoomIdBathrooms parameters: - name: propertyId in: path required: true schema: type: integer format: int32 - name: roomId in: path required: true schema: type: integer format: int64 requestBody: content: application/json: schema: $ref: '#/components/schemas/BathroomDetails' examples: Enable hotel group bathrooms: description: Enable hotel group bathrooms value: hotel_bathroom_details: shared_bathroom_state: PRESENT private_bathroom_state: PRESENT number_of_bathrooms: 3 Add hotel group bathroom details: description: Add hotel group bathroom details value: hotel_bathroom_details: shared_bathroom_state: MISSING private_bathroom_state: PRESENT private_bathroom_details: type: EXTERNAL_BATHROOM location_type: OTHER location_other: outside of the room number_of_bathrooms: 2 Add homes group bathroom details: description: Add homes group bathroom details value: property_bathroom_details: bathrooms: - bathroom_type: PRIVATE - bathroom_type: SHARED Add homes group bathroom details with location: description: Add homes group bathroom details with location value: property_bathroom_details: bathrooms: - bathroom_type: PRIVATE bathroom_location: ENSUITE - bathroom_type: SHARED bathroom_location: OPPOSITE_THE_ROOM Add hostel bathroom details: description: Add hostel bathroom details value: property_bathroom_details: bathrooms: - bathroom_type: PRIVATE bathroom_location: DOWN_THE_HALL hostel_bathroom_details: bathroom_facilities: - type: SHOWER count: 98 - type: TOILET count: 21 - type: SINK count: 68 - type: BATH count: 16 - type: TOILET_PAPER - type: HAIR_DRYER - type: SLIPPERS is_paid: true - type: BIDET - type: TOOTHBRUSH is_paid: true - type: SHAMPOO is_paid: false - type: CONDITIONER is_paid: false - type: BODY_SOAP is_paid: true - type: TOWEL is_paid: false - type: HOT_WATER - bathroom_type: SHARED bathroom_location: DOWN_THE_HALL hostel_bathroom_details: gender: MIXED num_guests_with_access_type: NUMBER_LESS_THAN_5 bathroom_facilities: - type: SHOWER count: 98 - type: TOILET count: 21 - type: SINK count: 68 - type: BATH count: 16 - type: TOILET_PAPER - type: HAIR_DRYER - type: SLIPPERS is_paid: true - type: BIDET - type: TOOTHBRUSH is_paid: true - type: SHAMPOO is_paid: false - type: CONDITIONER is_paid: false - type: BODY_SOAP is_paid: true - type: TOWEL is_paid: true - type: HOT_WATER Disable hotel group bathroom details: description: Disable hotel group bathroom details value: hotel_bathroom_details: shared_bathroom_state: MISSING private_bathroom_state: MISSING number_of_bathrooms: 0 Remove bathroom details for homes and hostel group: description: Remove bathroom details for homes and hostel group value: property_bathroom_details: bathrooms: [] required: true responses: '200': description: OK content: '*/*': schema: $ref: '#/components/schemas/ApiResponseSuccessObject_2' x-operation-id-source: normalized x-operation-id-original: setBathroomDetails servers: - url: https://supply-xml.booking.com/facilities-api/ components: schemas: ApiError: type: object properties: message: type: string code: type: integer description: Error code description: type: string description: Detailed error description details: type: object description: Additional error context BathroomResponse: type: object properties: id: type: integer format: int32 bathroom_type: type: string enum: - PRIVATE - SHARED bathroom_location: type: string enum: - ENSUITE - NEXT_DOOR - DOWN_THE_HALL - OPPOSITE_THE_ROOM - IN_THE_HALLWAY - OTHER - INSIDE_THE_UNIT hostel_bathroom_details: $ref: '#/components/schemas/HostelBathroomDetailsResponse' BathroomRequest: required: - bathroom_type type: object properties: id: type: integer format: int32 bathroom_type: type: string enum: - PRIVATE - SHARED bathroom_location: type: string description: 'Location of the bathroom relative to the room. The set of allowed values differs by unit type — call `GET /facilities-api/meta` and inspect `bathroom_configurations[*].allowed_options` for the applicable `unit_type_id`. Submitting a location not in the allowed list for your unit type returns a 400 error. Note: BED_IN_DORMITORY (unit_type_id 26) does not allow a location for private bathrooms.' enum: - ENSUITE - NEXT_DOOR - DOWN_THE_HALL - OPPOSITE_THE_ROOM - IN_THE_HALLWAY - OTHER - INSIDE_THE_UNIT hostel_bathroom_details: $ref: '#/components/schemas/HostelBathroomDetailsRequest' HostelBathroomFacilityRequest: required: - type type: object properties: type: type: string enum: - SHOWER - TOILET - SINK - BATH - TOILET_PAPER - HAIR_DRYER - SLIPPERS - BIDET - TOOTHBRUSH - SHAMPOO - CONDITIONER - BODY_SOAP - TOWEL - HOT_WATER count: maximum: 100 minimum: 1 type: integer format: int32 description: Number of units of this facility. Only applicable to SHOWER, TOILET, SINK, and BATH. Must not be provided for other facility types. is_paid: type: boolean description: Whether guests are charged for this amenity. Only applicable to SLIPPERS, TOOTHBRUSH, SHAMPOO, CONDITIONER, BODY_SOAP, and TOWEL. Must not be provided for other facility types. PropertyBathroomDetailsResponse: type: object properties: bathrooms: maxItems: 20 minItems: 0 type: array items: $ref: '#/components/schemas/BathroomResponse' BathroomDetailsRequest: type: object properties: property_bathroom_details: $ref: '#/components/schemas/PropertyBathroomDetailsRequest' hotel_bathroom_details: $ref: '#/components/schemas/HotelBathroomDetailsRequest' HotelBathroomDetailsResponse: type: object description: Bathroom details for hotel-group properties. properties: private_bathroom_state: type: string enum: - MISSING - PRESENT shared_bathroom_state: type: string enum: - MISSING - PRESENT private_bathroom_details: $ref: '#/components/schemas/PrivateBathroomDetails' number_of_bathrooms: maximum: 20 minimum: 0 type: integer format: int32 ResponseMeta: type: object properties: ruid: type: string SuccessObject: type: object properties: success: type: boolean PropertyBathroomDetailsRequest: required: - bathrooms type: object properties: bathrooms: maxItems: 20 minItems: 0 type: array items: $ref: '#/components/schemas/BathroomRequest' BathroomDetailsResponse: type: object properties: property_bathroom_details: $ref: '#/components/schemas/PropertyBathroomDetailsResponse' hotel_bathroom_details: $ref: '#/components/schemas/HotelBathroomDetailsResponse' HostelBathroomDetailsResponse: type: object description: 'Bathroom details for hostel-group properties. Property-level limits apply: maximum 1 private bathroom and 5 shared bathrooms per property.' properties: gender: type: string enum: - FEMALE - MALE - MIXED num_guests_with_access_type: type: string enum: - NUMBER_LESS_THAN_5 - NUMBER_5_TO_10 - NUMBER_11_TO_20 - NUMBER_21_TO_30 - NUMBER_31_TO_40 - NUMBER_41_TO_50 - NUMBER_MORE_THAN_50 bathroom_facilities: type: array items: $ref: '#/components/schemas/HostelBathroomFacilityResponse' PrivateBathroomDetails: type: object properties: type: type: string enum: - DEFAULT - EXTERNAL_BATHROOM - ATTACHED_BATHROOM location_type: type: string enum: - DEFAULT - NEXT_DOOR - DOWN_THE_HALL - ACROSS_FROM_THE_ROOM - IN_THE_LOBBY - OTHER location_other: type: string HostelBathroomDetailsRequest: required: - bathroom_facilities type: object description: 'Bathroom details for hostel-group properties. Property-level limits apply: maximum 1 private bathroom and 5 shared bathrooms per property. Rules for `gender` and `num_guests_with_access_type` differ by `bathroom_type`: required for SHARED bathrooms, prohibited for PRIVATE bathrooms.' properties: gender: type: string description: Gender access for this shared bathroom. Required when `bathroom_type` is SHARED. Must not be provided when `bathroom_type` is PRIVATE. enum: - FEMALE - MALE - MIXED num_guests_with_access_type: type: string description: Approximate number of guests with access to this shared bathroom. Required when `bathroom_type` is SHARED. Must not be provided when `bathroom_type` is PRIVATE. enum: - NUMBER_LESS_THAN_5 - NUMBER_5_TO_10 - NUMBER_11_TO_20 - NUMBER_21_TO_30 - NUMBER_31_TO_40 - NUMBER_41_TO_50 - NUMBER_MORE_THAN_50 bathroom_facilities: type: array description: 'List of facilities in this bathroom. Must include at least one of: SHOWER, TOILET, SINK, BATH.' minItems: 1 items: $ref: '#/components/schemas/HostelBathroomFacilityRequest' HostelBathroomFacilityResponse: type: object properties: type: type: string enum: - SHOWER - TOILET - SINK - BATH - TOILET_PAPER - HAIR_DRYER - SLIPPERS - BIDET - TOOTHBRUSH - SHAMPOO - CONDITIONER - BODY_SOAP - TOWEL - HOT_WATER count: maximum: 100 minimum: 1 type: integer format: int32 is_paid: type: boolean ApiResponseSuccessObject: type: object properties: data: allOf: - $ref: '#/components/schemas/SuccessObject' warnings: type: array items: $ref: '#/components/schemas/ApiError' errors: type: array items: $ref: '#/components/schemas/ApiError' meta: $ref: '#/components/schemas/ResponseMeta' HotelBathroomDetailsRequest: required: - number_of_bathrooms - private_bathroom_state - shared_bathroom_state type: object description: 'Bathroom details for hotel-group properties. Consistency rules: if both `private_bathroom_state` and `shared_bathroom_state` are MISSING, `number_of_bathrooms` must be 0. If either state is PRESENT, `number_of_bathrooms` must be greater than 0.' properties: private_bathroom_state: type: string description: Whether the property has private bathrooms. If PRESENT, `number_of_bathrooms` must be greater than 0. enum: - MISSING - PRESENT shared_bathroom_state: type: string description: Whether the property has shared bathrooms. If PRESENT, `number_of_bathrooms` must be greater than 0. enum: - MISSING - PRESENT private_bathroom_details: $ref: '#/components/schemas/PrivateBathroomDetails' number_of_bathrooms: maximum: 20 minimum: 0 type: integer format: int32 description: Total number of bathrooms (private + shared combined). Must be 0 if both states are MISSING. Must be greater than 0 if either state is PRESENT. ApiResponseBathroomDetails: type: object properties: data: $ref: '#/components/schemas/BathroomDetailsResponse' warnings: type: array items: $ref: '#/components/schemas/ApiError' errors: type: array items: $ref: '#/components/schemas/ApiError' meta: $ref: '#/components/schemas/ResponseMeta' ApiResponseSuccess: type: object description: Successful response with empty warnings and errors properties: data: $ref: '#/components/schemas/SuccessObject' warnings: type: array maxItems: 0 errors: type: array maxItems: 0 meta: $ref: '#/components/schemas/ResponseMeta' ApiError_2: properties: message: type: string code: type: string details: type: object BathroomDetails: properties: property_bathroom_details: $ref: '#/components/schemas/PropertyBathroomDetails' hotel_bathroom_details: $ref: '#/components/schemas/HotelBathroomDetails' PrivateBathroomDetails_2: properties: type: type: string enum: - DEFAULT - EXTERNAL_BATHROOM - ATTACHED_BATHROOM location_type: type: string enum: - DEFAULT - NEXT_DOOR - DOWN_THE_HALL - ACROSS_FROM_THE_ROOM - IN_THE_LOBBY - OTHER location_other: type: string HotelBathroomDetails: properties: private_bathroom_state: type: string enum: - MISSING - PRESENT shared_bathroom_state: type: string enum: - MISSING - PRESENT private_bathroom_details: $ref: '#/components/schemas/PrivateBathroomDetails_2' number_of_bathrooms: type: integer format: int32 maximum: 20 minimum: 0 required: - number_of_bathrooms - private_bathroom_state - shared_bathroom_state ApiResponseSuccessObject_2: properties: ruid: type: string writeOnly: true data: $ref: '#/components/schemas/SuccessObject_2' warnings: type: array items: $ref: '#/components/schemas/ApiError_2' errors: type: array items: $ref: '#/components/schemas/ApiError_2' meta: $ref: '#/components/schemas/ResponseMeta_2' ResponseMeta_2: properties: ruid: type: string ApiResponseBathroomDetails_2: properties: ruid: type: string writeOnly: true data: $ref: '#/components/schemas/BathroomDetails' warnings: type: array items: $ref: '#/components/schemas/ApiError_2' errors: type: array items: $ref: '#/components/schemas/ApiError_2' meta: $ref: '#/components/schemas/ResponseMeta_2' SuccessObject_2: properties: success: type: boolean HostelBathroomFacility: properties: type: type: string enum: - SHOWER - TOILET - SINK - BATH - TOILET_PAPER - HAIR_DRYER - SLIPPERS - BIDET - TOOTHBRUSH - SHAMPOO - CONDITIONER - BODY_SOAP - TOWEL - HOT_WATER count: type: integer format: int32 maximum: 100 minimum: 1 is_paid: type: boolean required: - type Bathroom: properties: id: type: integer format: int32 bathroom_type: type: string enum: - PRIVATE - SHARED bathroom_location: type: string enum: - ENSUITE - NEXT_DOOR - DOWN_THE_HALL - OPPOSITE_THE_ROOM - IN_THE_HALLWAY - OTHER - INSIDE_THE_UNIT hostel_bathroom_details: $ref: '#/components/schemas/HostelBathroomDetails' required: - bathroom_type HostelBathroomDetails: properties: gender: type: string enum: - FEMALE - MALE - MIXED num_guests_with_access_type: type: string enum: - NUMBER_LESS_THAN_5 - NUMBER_5_TO_10 - NUMBER_11_TO_20 - NUMBER_21_TO_30 - NUMBER_31_TO_40 - NUMBER_41_TO_50 - NUMBER_MORE_THAN_50 bathroom_facilities: type: array items: $ref: '#/components/schemas/HostelBathroomFacility' minItems: 1 required: - bathroom_facilities PropertyBathroomDetails: properties: bathrooms: type: array items: $ref: '#/components/schemas/Bathroom' maxItems: 20 minItems: 0 required: - bathrooms x-refined-from: - booking-com-facilities-api-openapi.yml - booking-com-facilities-api-remote-sync-openapi.yml x-tagGroups: - name: API Endpoints tags: - Charges endpoint - Charges meta endpoint - name: Documentation tags: - About Try it