> For the complete documentation index, see [llms.txt](https://mobile-calendar.gitbook.io/v1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mobile-calendar.gitbook.io/v1/rest-api/room-types.md).

# Room Types

room-types

## Get all room types

> Lists room types (templates shared by several rooms). Each entry carries \`rooms\` — ids of the rooms currently assigned to that type; an empty array means the type exists but no room uses it. Do not confuse a room type with \`roomType\` on a room, which is only the kind of unit (ROOM, APARTMENT...).

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"tags":[{"name":"room-types","description":"room-types"}],"servers":[{"url":"https://api.mobile-calendar.com/v1/public","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","description":"Pass the token in header: Authorization: Bearer <JWT>","bearerFormat":"JWT","scheme":"bearer"}},"schemas":{"RoomTypesResponse":{"description":"Response containing all room types","required":["data","meta"],"properties":{"data":{"description":"List of all available room types","type":"array","items":{"$ref":"#/components/schemas/RoomType"}},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"RoomType":{"description":"Room type configuration with specifications and amenities","required":["roomTypeId","type","description","singleBed","doubleBed","extraBed","square","maxAdults","maxChildren","maxPeople","equipment"],"properties":{"roomTypeId":{"description":"Unique room type identifier","type":"integer"},"type":{"description":"Room type category","type":"string","enum":["TWIN_ROOM","QUAD_ROOM","HOLIDAY_HOME","SINGLE_ROOM","DOUBLE_ROOM","SUITE","APARTMENT"]},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"singleBed":{"description":"Number of single beds","type":"integer"},"doubleBed":{"description":"Number of double beds","type":"integer"},"extraBed":{"description":"Number of extra beds available","type":"integer"},"square":{"description":"Room area in square meters","type":"integer"},"maxAdults":{"description":"Maximum number of adults","type":"integer"},"maxChildren":{"description":"Maximum number of children","type":"integer"},"maxPeople":{"description":"Maximum total number of people","type":"integer"},"equipment":{"description":"List of equipment/amenities available in this room type","type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"rooms":{"description":"Ids of the rooms currently assigned to this type. Empty array = the type exists but no room uses it yet.","type":"array","items":{"type":"integer"}}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"},"ApiProblem401":{"description":"Missing authentication or invalid credentials.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"401 Unauthorized","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}}},"paths":{"/room-types":{"get":{"tags":["room-types"],"summary":"Get all room types","description":"Lists room types (templates shared by several rooms). Each entry carries `rooms` — ids of the rooms currently assigned to that type; an empty array means the type exists but no room uses it. Do not confuse a room type with `roomType` on a room, which is only the kind of unit (ROOM, APARTMENT...).","operationId":"getRoomTypes","responses":{"200":{"description":"List of all available room types","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomTypesResponse"}}}},"401":{"description":"Unauthorized - invalid or missing authentication token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem401"}}}}}}}}}
```

## Create room type

> Creates a room type — a TEMPLATE shared by several rooms, which is a different thing from a single room (POST /rooms) and from \`roomType\`, the kind of unit on a room. Optional \`rooms\` assigns existing rooms to the new type; assigning OVERWRITES their capacity, beds, area, description and equipment with the values of the type.

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"tags":[{"name":"room-types","description":"room-types"}],"servers":[{"url":"https://api.mobile-calendar.com/v1/public","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","description":"Pass the token in header: Authorization: Bearer <JWT>","bearerFormat":"JWT","scheme":"bearer"}},"schemas":{"RoomTypeCreateRequest":{"description":"Create room type payload","required":["type","description","singleBed","doubleBed","extraBed","square","maxAdults","maxChildren","maxPeople","equipment"],"properties":{"type":{"description":"Room type category.","type":"string","enum":["SINGLE_ROOM","DOUBLE_ROOM","TWIN_ROOM","TRIPLE_ROOM","QUAD_ROOM","QUEEN_ROOM","KING_ROOM","SUITE","JUNIOR_SUITE","FAMILY_ROOM","CONNECTING_ROOMS","DELUXE_ROOM","SUPERIOR_ROOM","STANDARD_ROOM","STUDIO_ROOM","APARTMENT","LOFT","ACCESSIBLE_ROOM","VILLA","BUNGALOW"]},"description":{"description":"Localized description map (key 'default' plus ISO language codes), or a plain string.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"singleBed":{"type":"integer"},"doubleBed":{"type":"integer"},"extraBed":{"type":"integer"},"square":{"description":"Area in square meters.","type":"integer"},"maxAdults":{"description":"Max adults. Capacity rule: maxPeople >= maxAdults > maxChildren.","type":"integer"},"maxChildren":{"description":"Max children, STRICTLY lower than maxAdults.","type":"integer"},"maxPeople":{"description":"Max total people; must be >= maxAdults.","type":"integer"},"equipment":{"type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"locationId":{"type":"integer","nullable":true},"rooms":{"description":"Ids of existing rooms to assign to the new type. WARNING: assigning a room OVERWRITES its capacity, beds, area, description and equipment with the values of this type.","type":"array","items":{"type":"integer"}}},"type":"object"},"RoomTypeResponse":{"description":"Single room type response","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/RoomType"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"RoomType":{"description":"Room type configuration with specifications and amenities","required":["roomTypeId","type","description","singleBed","doubleBed","extraBed","square","maxAdults","maxChildren","maxPeople","equipment"],"properties":{"roomTypeId":{"description":"Unique room type identifier","type":"integer"},"type":{"description":"Room type category","type":"string","enum":["TWIN_ROOM","QUAD_ROOM","HOLIDAY_HOME","SINGLE_ROOM","DOUBLE_ROOM","SUITE","APARTMENT"]},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"singleBed":{"description":"Number of single beds","type":"integer"},"doubleBed":{"description":"Number of double beds","type":"integer"},"extraBed":{"description":"Number of extra beds available","type":"integer"},"square":{"description":"Room area in square meters","type":"integer"},"maxAdults":{"description":"Maximum number of adults","type":"integer"},"maxChildren":{"description":"Maximum number of children","type":"integer"},"maxPeople":{"description":"Maximum total number of people","type":"integer"},"equipment":{"description":"List of equipment/amenities available in this room type","type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"rooms":{"description":"Ids of the rooms currently assigned to this type. Empty array = the type exists but no room uses it yet.","type":"array","items":{"type":"integer"}}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"},"ApiProblem401":{"description":"Missing authentication or invalid credentials.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"401 Unauthorized","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"},"ApiProblem404":{"description":"Resource specified in the request was not found.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"404 Not Found","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblem422":{"description":"Input data validation error.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"422 Unprocessable Entity (validation)","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"errors":{"description":"Map: field name → error message(s)","type":"object","additionalProperties":{"$ref":"#/components/schemas/ErrorValue"}}},"type":"object"}]},"ErrorValue":{"description":"Single error message or list of messages.","oneOf":[{"description":"Error value in error map can be:\n- single string, or\n- array of strings (multiple messages for one field).","type":"string"},{"type":"array","items":{"type":"string"}}]}}},"paths":{"/room-types":{"post":{"tags":["room-types"],"summary":"Create room type","description":"Creates a room type — a TEMPLATE shared by several rooms, which is a different thing from a single room (POST /rooms) and from `roomType`, the kind of unit on a room. Optional `rooms` assigns existing rooms to the new type; assigning OVERWRITES their capacity, beds, area, description and equipment with the values of the type.","operationId":"createRoomType","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomTypeCreateRequest"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomTypeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem401"}}}},"404":{"description":"One of the rooms does not exist","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem404"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem422"}}}}}}}}}
```

## Get room type

> Returns one room type together with \`rooms\` — the ids of the rooms currently assigned to it. To fetch those rooms in full use GET /rooms?roomTypeId={id}.

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"tags":[{"name":"room-types","description":"room-types"}],"servers":[{"url":"https://api.mobile-calendar.com/v1/public","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","description":"Pass the token in header: Authorization: Bearer <JWT>","bearerFormat":"JWT","scheme":"bearer"}},"schemas":{"RoomTypeResponse":{"description":"Single room type response","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/RoomType"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"RoomType":{"description":"Room type configuration with specifications and amenities","required":["roomTypeId","type","description","singleBed","doubleBed","extraBed","square","maxAdults","maxChildren","maxPeople","equipment"],"properties":{"roomTypeId":{"description":"Unique room type identifier","type":"integer"},"type":{"description":"Room type category","type":"string","enum":["TWIN_ROOM","QUAD_ROOM","HOLIDAY_HOME","SINGLE_ROOM","DOUBLE_ROOM","SUITE","APARTMENT"]},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"singleBed":{"description":"Number of single beds","type":"integer"},"doubleBed":{"description":"Number of double beds","type":"integer"},"extraBed":{"description":"Number of extra beds available","type":"integer"},"square":{"description":"Room area in square meters","type":"integer"},"maxAdults":{"description":"Maximum number of adults","type":"integer"},"maxChildren":{"description":"Maximum number of children","type":"integer"},"maxPeople":{"description":"Maximum total number of people","type":"integer"},"equipment":{"description":"List of equipment/amenities available in this room type","type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"rooms":{"description":"Ids of the rooms currently assigned to this type. Empty array = the type exists but no room uses it yet.","type":"array","items":{"type":"integer"}}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"},"ApiProblem401":{"description":"Missing authentication or invalid credentials.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"401 Unauthorized","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"},"ApiProblem404":{"description":"Resource specified in the request was not found.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"404 Not Found","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]}}},"paths":{"/room-types/{id}":{"get":{"tags":["room-types"],"summary":"Get room type","description":"Returns one room type together with `rooms` — the ids of the rooms currently assigned to it. To fetch those rooms in full use GET /rooms?roomTypeId={id}.","operationId":"getRoomType","parameters":[{"name":"id","in":"path","description":"Room type ID","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Room type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomTypeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem401"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem404"}}}}}}}}}
```

## Delete room type

> Deletes the type. The rooms are NOT deleted — they only lose the assignment and keep the parameters they had (same as in the panel).

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"tags":[{"name":"room-types","description":"room-types"}],"servers":[{"url":"https://api.mobile-calendar.com/v1/public","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","description":"Pass the token in header: Authorization: Bearer <JWT>","bearerFormat":"JWT","scheme":"bearer"}},"schemas":{"ApiProblem401":{"description":"Missing authentication or invalid credentials.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"401 Unauthorized","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"},"ApiProblem404":{"description":"Resource specified in the request was not found.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"404 Not Found","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]}}},"paths":{"/room-types/{id}":{"delete":{"tags":["room-types"],"summary":"Delete room type","description":"Deletes the type. The rooms are NOT deleted — they only lose the assignment and keep the parameters they had (same as in the panel).","operationId":"deleteRoomType","parameters":[{"name":"id","in":"path","description":"Room type ID","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem401"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem404"}}}}}}}}}
```

## Update room type

> Patch semantics: fields left out keep their current value. Editing the parameters of a type PROPAGATES them to every room of that type. Sending \`rooms\` replaces the assignment (rooms missing from the list lose the type).

```json
{"openapi":"3.0.0","info":{"title":"Public REST API v1 – mobile-calendar.com","version":"1.0.0"},"tags":[{"name":"room-types","description":"room-types"}],"servers":[{"url":"https://api.mobile-calendar.com/v1/public","description":"Production"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","description":"Pass the token in header: Authorization: Bearer <JWT>","bearerFormat":"JWT","scheme":"bearer"}},"schemas":{"RoomTypeUpdateRequest":{"description":"Update room type payload. Patch semantics: fields left out keep their current value.","properties":{"type":{"description":"Room type category.","type":"string","enum":["SINGLE_ROOM","DOUBLE_ROOM","TWIN_ROOM","TRIPLE_ROOM","QUAD_ROOM","QUEEN_ROOM","KING_ROOM","SUITE","JUNIOR_SUITE","FAMILY_ROOM","CONNECTING_ROOMS","DELUXE_ROOM","SUPERIOR_ROOM","STANDARD_ROOM","STUDIO_ROOM","APARTMENT","LOFT","ACCESSIBLE_ROOM","VILLA","BUNGALOW"]},"description":{"description":"Localized description map (key 'default' plus ISO language codes), or a plain string.","oneOf":[{"type":"string"},{"type":"object","additionalProperties":{"type":"string"}}]},"singleBed":{"type":"integer"},"doubleBed":{"type":"integer"},"extraBed":{"type":"integer"},"square":{"description":"Area in square meters.","type":"integer"},"maxAdults":{"description":"Max adults. Capacity rule: maxPeople >= maxAdults > maxChildren.","type":"integer"},"maxChildren":{"description":"Max children, STRICTLY lower than maxAdults.","type":"integer"},"maxPeople":{"description":"Max total people; must be >= maxAdults.","type":"integer"},"equipment":{"type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"locationId":{"type":"integer","nullable":true},"rooms":{"description":"TARGET list of rooms for this type — it replaces the current assignment: rooms missing from the list lose the type, rooms on it gain it together with the type's parameters. Leave the field out to keep the current assignment (the rooms then simply inherit the edited parameters).","type":"array","items":{"type":"integer"}}},"type":"object"},"RoomTypeResponse":{"description":"Single room type response","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/RoomType"},"meta":{"$ref":"#/components/schemas/MetaWithRuid"}},"type":"object"},"RoomType":{"description":"Room type configuration with specifications and amenities","required":["roomTypeId","type","description","singleBed","doubleBed","extraBed","square","maxAdults","maxChildren","maxPeople","equipment"],"properties":{"roomTypeId":{"description":"Unique room type identifier","type":"integer"},"type":{"description":"Room type category","type":"string","enum":["TWIN_ROOM","QUAD_ROOM","HOLIDAY_HOME","SINGLE_ROOM","DOUBLE_ROOM","SUITE","APARTMENT"]},"description":{"description":"Localized description map. Key 'default' is required. Other keys = ISO language codes.","type":"object","additionalProperties":{"type":"string"}},"singleBed":{"description":"Number of single beds","type":"integer"},"doubleBed":{"description":"Number of double beds","type":"integer"},"extraBed":{"description":"Number of extra beds available","type":"integer"},"square":{"description":"Room area in square meters","type":"integer"},"maxAdults":{"description":"Maximum number of adults","type":"integer"},"maxChildren":{"description":"Maximum number of children","type":"integer"},"maxPeople":{"description":"Maximum total number of people","type":"integer"},"equipment":{"description":"List of equipment/amenities available in this room type","type":"array","items":{"type":"string","enum":["AIR_CONDITIONING","KITCHENETTE","TELEVISION","BATHROOM","POOL","BALCONY","WASHING_MACHINE","KITCHEN_UTENSILS","BABY_CRIB","BLANKET","SCREEN","UMBRELLA","LOUNGER","CLOTHES_HANGER","DRYER","TOWELS","FLOOR_COVERING","FIREPLACE","HEATING","IRON","SAFE","DESK","BIDET","TOOTHBRUSH","SHAMPOO","HAIR_CONDITIONER","SOAP","RADIO","TABLE","WINE_GLASSES","CORKSCREW","WATER","GRILL","DISHWASHER","MINIBAR","REFRIGERATOR","COFFEE_MACHINE"]}},"rooms":{"description":"Ids of the rooms currently assigned to this type. Empty array = the type exists but no room uses it yet.","type":"array","items":{"type":"integer"}}},"type":"object"},"MetaWithRuid":{"description":"Metadata with request tracking.","required":["ruid"],"properties":{"ruid":{"description":"Request Unique ID","type":"string","format":"uuid"}},"type":"object"},"ApiProblem401":{"description":"Missing authentication or invalid credentials.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"401 Unauthorized","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblemBase":{"description":"RFC 7807 Problem Details (base schema).","required":["type","title","status","detail","instance"],"properties":{"type":{"description":"RFC 7807 base — DO NOT use directly in endpoints.\nIn endpoints reference ApiProblem400/401/403/409/422/429/500.","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"},"ApiProblem404":{"description":"Resource specified in the request was not found.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"404 Not Found","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"type":"object"}]},"ApiProblem422":{"description":"Input data validation error.","allOf":[{"$ref":"#/components/schemas/ApiProblemBase"},{"properties":{"type":{"description":"422 Unprocessable Entity (validation)","type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"errors":{"description":"Map: field name → error message(s)","type":"object","additionalProperties":{"$ref":"#/components/schemas/ErrorValue"}}},"type":"object"}]},"ErrorValue":{"description":"Single error message or list of messages.","oneOf":[{"description":"Error value in error map can be:\n- single string, or\n- array of strings (multiple messages for one field).","type":"string"},{"type":"array","items":{"type":"string"}}]}}},"paths":{"/room-types/{id}":{"patch":{"tags":["room-types"],"summary":"Update room type","description":"Patch semantics: fields left out keep their current value. Editing the parameters of a type PROPAGATES them to every room of that type. Sending `rooms` replaces the assignment (rooms missing from the list lose the type).","operationId":"updateRoomType","parameters":[{"name":"id","in":"path","description":"Room type ID","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomTypeUpdateRequest"}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomTypeResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem401"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem404"}}}},"422":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiProblem422"}}}}}}}}}
```
