curl --request GET \
--url https://spaportal.cz/api/v2/hotels/{hotelId} \
--header 'X-SpaPortal-Public-Key: <api-key>'import requests
url = "https://spaportal.cz/api/v2/hotels/{hotelId}"
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/hotels/{hotelId}', 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/hotels/{hotelId}",
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/hotels/{hotelId}"
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/hotels/{hotelId}")
.header("X-SpaPortal-Public-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://spaportal.cz/api/v2/hotels/{hotelId}")
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{
"id": "66f16191f739705faa020001",
"name": {
"cs-CZ": "Spa Resort Pawlik",
"de": "Kurhotel Pawlik",
"en": "Spa Resort Pawlik",
"ru": "Spa Resort Pawlik"
},
"shortDescription": {
"cs-CZ": "Lázeňský hotel s přímým vstupem do aquaparku.",
"de": "Kurhotel mit direktem Zugang zum Aquapark.",
"en": "Spa hotel with direct access to the aquapark.",
"ru": "Спа-отель с прямым доступом в аквапарк."
},
"channelContent": {
"tagline": {
"cs-CZ": "Lázeňská péče pod jednou střechou",
"de": "Kurbehandlungen unter einem Dach",
"en": "Spa care under one roof",
"ru": "Санаторно-курортное лечение под одной крышей"
}
},
"stars": 4,
"address": {
"addressLine": "Národní 25",
"city": "Františkovy Lázně",
"postalCode": "351 01",
"country": "cze"
},
"email": "hotel@example.com",
"phoneNumber": "+420 123 456 789",
"url": "https://hotel.example.com",
"images": [
{
"url": "https://files.example.com/hotel.jpg",
"thumbnailUrl": "https://files.example.com/hotel-thumbnail.webp"
}
],
"accommodationRules": {
"checkIn": {
"from": "14:00",
"to": "20:00"
},
"checkOut": {
"from": "07:00",
"to": "10:00"
},
"children": {
"allowed": true,
"minimumAge": 6
},
"pets": {
"allowed": true,
"minimumNights": 2,
"feePerNight": {
"czk": 500,
"eur": 20
},
"conditions": {
"cs-CZ": "Mazlíčci jsou povoleni ve vybraných pokojích.",
"de": "Haustiere sind in ausgewählten Zimmern erlaubt.",
"en": "Pets are allowed in selected rooms.",
"ru": "Размещение с домашними животными разрешено в отдельных номерах."
}
}
},
"mealServices": {
"breakfast": {
"enabled": true,
"servingTime": {
"from": "07:00",
"to": "10:00"
},
"serviceMethod": "buffet",
"drinksIncluded": true,
"drinksNote": {
"cs-CZ": "Nealkoholické nápoje jsou v ceně.",
"de": "Alkoholfreie Getränke sind inklusive.",
"en": "Soft drinks are included.",
"ru": "Безалкогольные напитки включены в стоимость."
}
},
"lunch": {
"enabled": true,
"servingTime": {
"from": "11:30",
"to": "14:30"
},
"serviceMethod": "buffet",
"drinksIncluded": true,
"drinksNote": {
"cs-CZ": "Voda je zahrnuta v ceně oběda.",
"de": "Wasser ist im Mittagessen inbegriffen.",
"en": "Water is included with lunch.",
"ru": "Вода включена в стоимость обеда."
}
},
"dinner": {
"enabled": true,
"servingTime": {
"from": "18:00",
"to": "21:00"
},
"serviceMethod": "served",
"drinksIncluded": false,
"drinksNote": {
"cs-CZ": "Nápoje se hradí samostatně.",
"de": "Getränke werden separat berechnet.",
"en": "Drinks are charged separately.",
"ru": "Напитки оплачиваются отдельно."
}
}
},
"indications": [
"musculoskeletal",
"cardiovascular",
"diabetes"
],
"staffLanguages": [
"cs",
"de",
"en"
],
"amenityCategories": [
{
"category": {
"code": "wellness"
},
"amenities": [
{
"code": "aquapark",
"proximity": "nearby",
"proximityMeters": 250,
"access": "included",
"openingHours": {
"continuous": false,
"blocks": [
{
"days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"from": "09:00",
"to": "21:00"
}
]
}
},
{
"code": "sauna",
"proximity": "in-hotel",
"proximityMeters": null,
"access": "included",
"options": [
{
"code": "finnish"
},
{
"code": "steam"
}
],
"openingHours": {
"continuous": false,
"blocks": [
{
"days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"from": "09:00",
"to": "21:00"
}
]
}
}
]
},
{
"category": {
"code": "parking",
"label": {
"cs-CZ": "Parkování",
"de": "Parken",
"en": "Parking",
"ru": "Парковка"
}
},
"amenities": [
{
"code": "parking",
"access": "paid",
"options": [
{
"code": "covered",
"label": {
"cs-CZ": "Kryté",
"de": "Überdacht",
"en": "Covered",
"ru": "Крытая"
}
},
{
"code": "guarded",
"label": {
"cs-CZ": "Hlídané",
"de": "Bewacht",
"en": "Guarded",
"ru": "Охраняемая"
}
}
],
"note": {
"cs-CZ": "Hlídané parkoviště je přímo u hotelu.",
"de": "Der bewachte Parkplatz befindet sich direkt am Hotel.",
"en": "Guarded parking is available next to the hotel.",
"ru": "Охраняемая парковка находится рядом с отелем."
}
}
]
}
],
"priceFrom": {
"CZK": {
"perNight": {
"amountMinor": 288000,
"currency": "CZK",
"currencyExponent": 2
},
"perNightOriginal": {
"amountMinor": 320000,
"currency": "CZK",
"currencyExponent": 2
},
"minimumStay": {
"amountMinor": 576000,
"currency": "CZK",
"currencyExponent": 2
},
"minimumStayOriginal": {
"amountMinor": 640000,
"currency": "CZK",
"currencyExponent": 2
},
"guests": 2,
"minimumNights": 2
},
"EUR": {
"perNight": {
"amountMinor": 11340,
"currency": "EUR",
"currencyExponent": 2
},
"perNightOriginal": {
"amountMinor": 12600,
"currency": "EUR",
"currencyExponent": 2
},
"minimumStay": {
"amountMinor": 22680,
"currency": "EUR",
"currencyExponent": 2
},
"minimumStayOriginal": {
"amountMinor": 25200,
"currency": "EUR",
"currencyExponent": 2
},
"guests": 2,
"minimumNights": 2
}
}
}{
"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": [
{}
]
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}Get a hotel
Returns a single hotel with its localized content, complete structured profile, and amenities by id.
See the Hotel object for the full field
reference, including the allowed values for serviceMethod,
indications, and staffLanguages.
curl --request GET \
--url https://spaportal.cz/api/v2/hotels/{hotelId} \
--header 'X-SpaPortal-Public-Key: <api-key>'import requests
url = "https://spaportal.cz/api/v2/hotels/{hotelId}"
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/hotels/{hotelId}', 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/hotels/{hotelId}",
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/hotels/{hotelId}"
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/hotels/{hotelId}")
.header("X-SpaPortal-Public-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://spaportal.cz/api/v2/hotels/{hotelId}")
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{
"id": "66f16191f739705faa020001",
"name": {
"cs-CZ": "Spa Resort Pawlik",
"de": "Kurhotel Pawlik",
"en": "Spa Resort Pawlik",
"ru": "Spa Resort Pawlik"
},
"shortDescription": {
"cs-CZ": "Lázeňský hotel s přímým vstupem do aquaparku.",
"de": "Kurhotel mit direktem Zugang zum Aquapark.",
"en": "Spa hotel with direct access to the aquapark.",
"ru": "Спа-отель с прямым доступом в аквапарк."
},
"channelContent": {
"tagline": {
"cs-CZ": "Lázeňská péče pod jednou střechou",
"de": "Kurbehandlungen unter einem Dach",
"en": "Spa care under one roof",
"ru": "Санаторно-курортное лечение под одной крышей"
}
},
"stars": 4,
"address": {
"addressLine": "Národní 25",
"city": "Františkovy Lázně",
"postalCode": "351 01",
"country": "cze"
},
"email": "hotel@example.com",
"phoneNumber": "+420 123 456 789",
"url": "https://hotel.example.com",
"images": [
{
"url": "https://files.example.com/hotel.jpg",
"thumbnailUrl": "https://files.example.com/hotel-thumbnail.webp"
}
],
"accommodationRules": {
"checkIn": {
"from": "14:00",
"to": "20:00"
},
"checkOut": {
"from": "07:00",
"to": "10:00"
},
"children": {
"allowed": true,
"minimumAge": 6
},
"pets": {
"allowed": true,
"minimumNights": 2,
"feePerNight": {
"czk": 500,
"eur": 20
},
"conditions": {
"cs-CZ": "Mazlíčci jsou povoleni ve vybraných pokojích.",
"de": "Haustiere sind in ausgewählten Zimmern erlaubt.",
"en": "Pets are allowed in selected rooms.",
"ru": "Размещение с домашними животными разрешено в отдельных номерах."
}
}
},
"mealServices": {
"breakfast": {
"enabled": true,
"servingTime": {
"from": "07:00",
"to": "10:00"
},
"serviceMethod": "buffet",
"drinksIncluded": true,
"drinksNote": {
"cs-CZ": "Nealkoholické nápoje jsou v ceně.",
"de": "Alkoholfreie Getränke sind inklusive.",
"en": "Soft drinks are included.",
"ru": "Безалкогольные напитки включены в стоимость."
}
},
"lunch": {
"enabled": true,
"servingTime": {
"from": "11:30",
"to": "14:30"
},
"serviceMethod": "buffet",
"drinksIncluded": true,
"drinksNote": {
"cs-CZ": "Voda je zahrnuta v ceně oběda.",
"de": "Wasser ist im Mittagessen inbegriffen.",
"en": "Water is included with lunch.",
"ru": "Вода включена в стоимость обеда."
}
},
"dinner": {
"enabled": true,
"servingTime": {
"from": "18:00",
"to": "21:00"
},
"serviceMethod": "served",
"drinksIncluded": false,
"drinksNote": {
"cs-CZ": "Nápoje se hradí samostatně.",
"de": "Getränke werden separat berechnet.",
"en": "Drinks are charged separately.",
"ru": "Напитки оплачиваются отдельно."
}
}
},
"indications": [
"musculoskeletal",
"cardiovascular",
"diabetes"
],
"staffLanguages": [
"cs",
"de",
"en"
],
"amenityCategories": [
{
"category": {
"code": "wellness"
},
"amenities": [
{
"code": "aquapark",
"proximity": "nearby",
"proximityMeters": 250,
"access": "included",
"openingHours": {
"continuous": false,
"blocks": [
{
"days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"from": "09:00",
"to": "21:00"
}
]
}
},
{
"code": "sauna",
"proximity": "in-hotel",
"proximityMeters": null,
"access": "included",
"options": [
{
"code": "finnish"
},
{
"code": "steam"
}
],
"openingHours": {
"continuous": false,
"blocks": [
{
"days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"from": "09:00",
"to": "21:00"
}
]
}
}
]
},
{
"category": {
"code": "parking",
"label": {
"cs-CZ": "Parkování",
"de": "Parken",
"en": "Parking",
"ru": "Парковка"
}
},
"amenities": [
{
"code": "parking",
"access": "paid",
"options": [
{
"code": "covered",
"label": {
"cs-CZ": "Kryté",
"de": "Überdacht",
"en": "Covered",
"ru": "Крытая"
}
},
{
"code": "guarded",
"label": {
"cs-CZ": "Hlídané",
"de": "Bewacht",
"en": "Guarded",
"ru": "Охраняемая"
}
}
],
"note": {
"cs-CZ": "Hlídané parkoviště je přímo u hotelu.",
"de": "Der bewachte Parkplatz befindet sich direkt am Hotel.",
"en": "Guarded parking is available next to the hotel.",
"ru": "Охраняемая парковка находится рядом с отелем."
}
}
]
}
],
"priceFrom": {
"CZK": {
"perNight": {
"amountMinor": 288000,
"currency": "CZK",
"currencyExponent": 2
},
"perNightOriginal": {
"amountMinor": 320000,
"currency": "CZK",
"currencyExponent": 2
},
"minimumStay": {
"amountMinor": 576000,
"currency": "CZK",
"currencyExponent": 2
},
"minimumStayOriginal": {
"amountMinor": 640000,
"currency": "CZK",
"currencyExponent": 2
},
"guests": 2,
"minimumNights": 2
},
"EUR": {
"perNight": {
"amountMinor": 11340,
"currency": "EUR",
"currencyExponent": 2
},
"perNightOriginal": {
"amountMinor": 12600,
"currency": "EUR",
"currencyExponent": 2
},
"minimumStay": {
"amountMinor": 22680,
"currency": "EUR",
"currencyExponent": 2
},
"minimumStayOriginal": {
"amountMinor": 25200,
"currency": "EUR",
"currencyExponent": 2
},
"guests": 2,
"minimumNights": 2
}
}
}{
"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": [
{}
]
}
}{
"error": {
"code": "invalid_request",
"message": "<string>",
"requestId": "<string>",
"details": [
{}
]
}
}roomTypes response field and expand=roomTypes
behavior are still in progress. Their response shape may change
before they are finalized.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, all locale keys are returned. See Localization for details.
"cs-CZ,de"
Optional client-provided request identifier echoed in error responses.
Path Parameters
Hotel id.
^[0-9a-fA-F]{24}$Query Parameters
Comma-separated list of expansions (for example expand=amenityLabels or expand=roomTypes,amenityLabels). amenityLabels inlines the localized category, amenity, and option labels in amenityCategories, so no dictionary lookup is needed. roomTypes (draft, response shape may change) embeds the hotel's room types (otherwise fetch them via GET /room-types?hotelId={hotelId}).
roomTypes, amenityLabels Response
The hotel.
^[0-9a-fA-F]{24}$"66f16191f739705faa020001"
Localized hotel name (plain text). Falls back to the default locale (cs-CZ) when a requested locale has no value, so it is never null.
Show child attributes
Show child attributes
{ "cs-CZ": "Pawlik", "de": "Pawlik-Aquaforum" }
Localized short hotel description (plain text). Each locale value is at most 400 characters.
Show child attributes
Show child attributes
{ "cs-CZ": "Český text", "de": "Deutscher Text" }
Show child attributes
Show child attributes
1 <= x <= 54
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
{ "breakfast": { "enabled": true, "servingTime": { "from": "07:00", "to": "10:00" }, "serviceMethod": "buffet", "drinksIncluded": true, "drinksNote": { "cs-CZ": "Nealkoholické nápoje jsou v ceně.", "de": "Alkoholfreie Getränke sind inklusive.", "en": "Soft drinks are included.", "ru": "Безалкогольные напитки включены в стоимость." } }, "lunch": { "enabled": true, "servingTime": { "from": "11:30", "to": "14:30" }, "serviceMethod": "buffet", "drinksIncluded": true, "drinksNote": { "cs-CZ": "Voda je zahrnuta v ceně oběda.", "de": "Wasser ist im Mittagessen inbegriffen.", "en": "Water is included with lunch.", "ru": "Вода включена в стоимость обеда." } }, "dinner": { "enabled": true, "servingTime": { "from": "18:00", "to": "21:00" }, "serviceMethod": "served", "drinksIncluded": false, "drinksNote": { "cs-CZ": "Nápoje se hradí samostatně.", "de": "Getränke werden separat berechnet.", "en": "Drinks are charged separately.", "ru": "Напитки оплачиваются отдельно." } } }
Medical indications the hotel specializes in, in display order.
musculoskeletal, cardiovascular, dermatology, digestion_metabolism, nervous_system, prevention, gynecology, oncology_aftercare, diabetes Languages spoken by hotel staff.
cs, en, de, ru Structured amenities assigned to this hotel, grouped by category. Categories without assigned amenities are omitted. Category, amenity, and option are returned by code only — resolve their localized labels and supported detail kinds against the amenity dictionary (GET /amenity-categories).
Show child attributes
Show child attributes
[ { "category": { "code": "wellness" }, "amenities": [ { "code": "aquapark", "proximity": "nearby", "proximityMeters": 250, "access": "included", "openingHours": { "continuous": false, "blocks": [ { "days": ["monday", "tuesday", "wednesday"], "from": "09:00", "to": "21:00" } ] } } ] } ]
Cheapest available current or future room price for the room's standard occupancy, including an applicable public-channel promotion, or null when no usable price is available.
Show child attributes
Show child attributes
{ "CZK": { "perNight": { "amountMinor": 288000, "currency": "CZK", "currencyExponent": 2 }, "perNightOriginal": { "amountMinor": 320000, "currency": "CZK", "currencyExponent": 2 }, "minimumStay": { "amountMinor": 576000, "currency": "CZK", "currencyExponent": 2 }, "minimumStayOriginal": { "amountMinor": 640000, "currency": "CZK", "currencyExponent": 2 }, "guests": 2, "minimumNights": 2 }, "EUR": { "perNight": { "amountMinor": 11340, "currency": "EUR", "currencyExponent": 2 }, "perNightOriginal": { "amountMinor": 12600, "currency": "EUR", "currencyExponent": 2 }, "minimumStay": { "amountMinor": 22680, "currency": "EUR", "currencyExponent": 2 }, "minimumStayOriginal": { "amountMinor": 25200, "currency": "EUR", "currencyExponent": 2 }, "guests": 2, "minimumNights": 2 } }
Draft: This field and its response shape are still in progress and may change before they are finalized.
Embedded only when expand=roomTypes;
otherwise fetch them via GET /room-types?hotelId={hotelId}. Each
item omits the nested hotel block (it is this hotel).
Show child attributes
Show child attributes