curl --request GET \
--url https://spaportal.cz/api/v2/room-types \
--header 'X-SpaPortal-Public-Key: <api-key>'import requests
url = "https://spaportal.cz/api/v2/room-types"
headers = {"X-SpaPortal-Public-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-SpaPortal-Public-Key': '<api-key>'}};
fetch('https://spaportal.cz/api/v2/room-types', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://spaportal.cz/api/v2/room-types",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-SpaPortal-Public-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://spaportal.cz/api/v2/room-types"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-SpaPortal-Public-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://spaportal.cz/api/v2/room-types")
.header("X-SpaPortal-Public-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://spaportal.cz/api/v2/room-types")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-SpaPortal-Public-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "66f16191f739705faa020003",
"hotelId": "66f16191f739705faa020001",
"code": "2_APARTMA",
"disabled": false,
"name": "STANDARD 1/2 - BEL",
"description": {
"cs-CZ": "**Světlý pokoj** v prvním patře.\n\n- výhled do parku",
"de": null,
"en": null,
"ru": null
},
"unitType": {
"code": "double_twin",
"label": {
"cs-CZ": "Dvoulůžkový pokoj s oddělenými postelemi",
"de": "Zweibettzimmer",
"en": "Twin room",
"ru": "Двухместный номер с раздельными кроватями"
}
},
"tier": {
"code": "komfort",
"label": {
"cs-CZ": "Komfort",
"de": "Komfort",
"en": "Komfort",
"ru": "Komfort"
}
},
"occupancy": {
"standard": 2,
"max": 3,
"singleUse": true,
"infantsExcluded": true
},
"bedConfiguration": [
{
"code": "single",
"count": 2,
"label": {
"cs-CZ": "Samostatná postel",
"de": "Einzelbett",
"en": "Single bed",
"ru": "Односпальная кровать"
}
}
],
"size": {
"min": 26,
"max": 30
},
"renovationYear": 2023,
"rules": {
"smokingAllowed": false,
"petsAllowed": true
},
"building": {
"id": "66f16191f739705faa0200b2",
"name": {
"cs-CZ": "Villa Anna",
"de": "Villa Anna",
"en": null,
"ru": null
},
"label": {
"cs-CZ": "Villa Anna — krytou chodbou, 60 m",
"de": null,
"en": null,
"ru": null
}
},
"amenityCategories": [
{
"category": {
"code": "bathroom"
},
"amenities": [
{
"code": "toilet"
},
{
"code": "shower",
"coverage": "all"
}
]
},
{
"category": {
"code": "view"
},
"amenities": [
{
"code": "balcony",
"coverage": "all"
}
]
},
{
"category": {
"code": "inclusions"
},
"amenities": [
{
"code": "parking",
"pricing": {
"type": "included",
"schedule": null
}
},
{
"code": "welcome_drink"
},
{
"code": "fruit_bowl"
}
]
}
],
"images": [
{
"url": "https://cdn.example.com/rooms/superior.jpg",
"width": 1100,
"height": 733,
"alt": {
"cs-CZ": "STANDARD 1/2 - BEL",
"en": "STANDARD 1/2 - BEL"
},
"variants": {
"w480": "https://cdn.example.com/rooms/superior/generation-1/w480.webp",
"w960": "https://cdn.example.com/rooms/superior/generation-1/w960.webp"
}
}
]
}
],
"pagination": {
"limit": 25,
"nextCursor": null,
"hasMore": false,
"total": 1
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}List room types
Returns room types of active hotels across the companies your public
key is scoped to. Localized fields (name, description) return
the locale keys selected by Accept-Language.
Only enabled room types are returned by default (disabled=false). Use
disabled=true for disabled room types or disabled=all for both states.
Draft room types are never returned.
See the Room type object for the full field reference.
curl --request GET \
--url https://spaportal.cz/api/v2/room-types \
--header 'X-SpaPortal-Public-Key: <api-key>'import requests
url = "https://spaportal.cz/api/v2/room-types"
headers = {"X-SpaPortal-Public-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-SpaPortal-Public-Key': '<api-key>'}};
fetch('https://spaportal.cz/api/v2/room-types', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://spaportal.cz/api/v2/room-types",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-SpaPortal-Public-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://spaportal.cz/api/v2/room-types"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-SpaPortal-Public-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://spaportal.cz/api/v2/room-types")
.header("X-SpaPortal-Public-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://spaportal.cz/api/v2/room-types")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-SpaPortal-Public-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "66f16191f739705faa020003",
"hotelId": "66f16191f739705faa020001",
"code": "2_APARTMA",
"disabled": false,
"name": "STANDARD 1/2 - BEL",
"description": {
"cs-CZ": "**Světlý pokoj** v prvním patře.\n\n- výhled do parku",
"de": null,
"en": null,
"ru": null
},
"unitType": {
"code": "double_twin",
"label": {
"cs-CZ": "Dvoulůžkový pokoj s oddělenými postelemi",
"de": "Zweibettzimmer",
"en": "Twin room",
"ru": "Двухместный номер с раздельными кроватями"
}
},
"tier": {
"code": "komfort",
"label": {
"cs-CZ": "Komfort",
"de": "Komfort",
"en": "Komfort",
"ru": "Komfort"
}
},
"occupancy": {
"standard": 2,
"max": 3,
"singleUse": true,
"infantsExcluded": true
},
"bedConfiguration": [
{
"code": "single",
"count": 2,
"label": {
"cs-CZ": "Samostatná postel",
"de": "Einzelbett",
"en": "Single bed",
"ru": "Односпальная кровать"
}
}
],
"size": {
"min": 26,
"max": 30
},
"renovationYear": 2023,
"rules": {
"smokingAllowed": false,
"petsAllowed": true
},
"building": {
"id": "66f16191f739705faa0200b2",
"name": {
"cs-CZ": "Villa Anna",
"de": "Villa Anna",
"en": null,
"ru": null
},
"label": {
"cs-CZ": "Villa Anna — krytou chodbou, 60 m",
"de": null,
"en": null,
"ru": null
}
},
"amenityCategories": [
{
"category": {
"code": "bathroom"
},
"amenities": [
{
"code": "toilet"
},
{
"code": "shower",
"coverage": "all"
}
]
},
{
"category": {
"code": "view"
},
"amenities": [
{
"code": "balcony",
"coverage": "all"
}
]
},
{
"category": {
"code": "inclusions"
},
"amenities": [
{
"code": "parking",
"pricing": {
"type": "included",
"schedule": null
}
},
{
"code": "welcome_drink"
},
{
"code": "fruit_bowl"
}
]
}
],
"images": [
{
"url": "https://cdn.example.com/rooms/superior.jpg",
"width": 1100,
"height": 733,
"alt": {
"cs-CZ": "STANDARD 1/2 - BEL",
"en": "STANDARD 1/2 - BEL"
},
"variants": {
"w480": "https://cdn.example.com/rooms/superior/generation-1/w480.webp",
"w960": "https://cdn.example.com/rooms/superior/generation-1/w960.webp"
}
}
]
}
],
"pagination": {
"limit": 25,
"nextCursor": null,
"hasMore": false,
"total": 1
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}Authorizations
See Authentication for how to obtain and send your public key.
Headers
Comma-separated BCP 47 language tags selecting which locale keys localized fields return. When omitted or *, all locale keys are returned. Inside a list, * adds the locales you do not list, at its own quality value. See Localization for details.
"cs-CZ,de"
Optional client-provided request identifier echoed in error responses.
Query Parameters
Number of records to return. See Pagination.
1 <= x <= 100Cursor from the previous page's pagination.nextCursor. See Pagination.
2000Filter by hotel id.
^[0-9a-fA-F]{24}$Use false (the default) for enabled room types, true for disabled room types, or all for both. The filter applies before pagination and totals.
false, true, all Filter room types by their exact standard occupancy, the number of guests included in the base price. Pass an integer in the query string, for example ?occupancy=2, to return room types whose response contains occupancy.standard: 2. This filter does not match maximum capacity or a specific guest party.
1 <= x <= 10Filter by exact room type code.
200Search the room type name (case- and diacritics-insensitive). To match a room type code, use code.
200Orders by unique record id descending or ascending. IDs generally follow creation order; this is not a separate timestamp sort. Keep the sort and filters unchanged while paging. Cursors do not freeze a snapshot when records change between requests.
createdAt:desc, createdAt:asc Match any of the comma-separated unit type codes.
single, double_double, double_twin, double_either, triple, quad, family, suite, studio, apartment Match any of the comma-separated tier codes.
economy, economy_plus, standard, standard_plus, komfort, komfort_plus, superior, deluxe