curl --request POST \
--url https://spaportal.cz/api/v1/booking \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"binding_booking": true,
"currency": "EUR",
"visit_type_id": 1,
"hotel_id": 1,
"room_type_id": 1,
"date_from": "2026-04-01",
"date_to": "2026-04-21",
"customer_note": "I prefer the corner room on the third floor.",
"affilUserName": "e-shop@pawlik-aquaforum.cz",
"billed_to": {
"gender": "male",
"first_name": "Bohuslav",
"last_name": "Martinu",
"email": "bohuslav@example.com",
"phone": "+420355455675",
"consent_marketing": true,
"address": {
"street": "Milady Horakove",
"house_number": "5A",
"city": "Praha",
"zip_code": "16000",
"country": "CZE"
}
},
"guests": [
{
"gender": "female",
"first_name": "Charlotte",
"last_name": "Martinu",
"birth_date": "1894-01-01",
"loyalty_program_id": 1,
"loyalty_program_code": "GOLD000001"
}
]
}
'import requests
url = "https://spaportal.cz/api/v1/booking"
payload = {
"binding_booking": True,
"currency": "EUR",
"visit_type_id": 1,
"hotel_id": 1,
"room_type_id": 1,
"date_from": "2026-04-01",
"date_to": "2026-04-21",
"customer_note": "I prefer the corner room on the third floor.",
"affilUserName": "e-shop@pawlik-aquaforum.cz",
"billed_to": {
"gender": "male",
"first_name": "Bohuslav",
"last_name": "Martinu",
"email": "bohuslav@example.com",
"phone": "+420355455675",
"consent_marketing": True,
"address": {
"street": "Milady Horakove",
"house_number": "5A",
"city": "Praha",
"zip_code": "16000",
"country": "CZE"
}
},
"guests": [
{
"gender": "female",
"first_name": "Charlotte",
"last_name": "Martinu",
"birth_date": "1894-01-01",
"loyalty_program_id": 1,
"loyalty_program_code": "GOLD000001"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
binding_booking: true,
currency: 'EUR',
visit_type_id: 1,
hotel_id: 1,
room_type_id: 1,
date_from: '2026-04-01',
date_to: '2026-04-21',
customer_note: 'I prefer the corner room on the third floor.',
affilUserName: 'e-shop@pawlik-aquaforum.cz',
billed_to: {
gender: 'male',
first_name: 'Bohuslav',
last_name: 'Martinu',
email: 'bohuslav@example.com',
phone: '+420355455675',
consent_marketing: true,
address: {
street: 'Milady Horakove',
house_number: '5A',
city: 'Praha',
zip_code: '16000',
country: 'CZE'
}
},
guests: [
{
gender: 'female',
first_name: 'Charlotte',
last_name: 'Martinu',
birth_date: '1894-01-01',
loyalty_program_id: 1,
loyalty_program_code: 'GOLD000001'
}
]
})
};
fetch('https://spaportal.cz/api/v1/booking', 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/v1/booking",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'binding_booking' => true,
'currency' => 'EUR',
'visit_type_id' => 1,
'hotel_id' => 1,
'room_type_id' => 1,
'date_from' => '2026-04-01',
'date_to' => '2026-04-21',
'customer_note' => 'I prefer the corner room on the third floor.',
'affilUserName' => 'e-shop@pawlik-aquaforum.cz',
'billed_to' => [
'gender' => 'male',
'first_name' => 'Bohuslav',
'last_name' => 'Martinu',
'email' => 'bohuslav@example.com',
'phone' => '+420355455675',
'consent_marketing' => true,
'address' => [
'street' => 'Milady Horakove',
'house_number' => '5A',
'city' => 'Praha',
'zip_code' => '16000',
'country' => 'CZE'
]
],
'guests' => [
[
'gender' => 'female',
'first_name' => 'Charlotte',
'last_name' => 'Martinu',
'birth_date' => '1894-01-01',
'loyalty_program_id' => 1,
'loyalty_program_code' => 'GOLD000001'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://spaportal.cz/api/v1/booking"
payload := strings.NewReader("{\n \"binding_booking\": true,\n \"currency\": \"EUR\",\n \"visit_type_id\": 1,\n \"hotel_id\": 1,\n \"room_type_id\": 1,\n \"date_from\": \"2026-04-01\",\n \"date_to\": \"2026-04-21\",\n \"customer_note\": \"I prefer the corner room on the third floor.\",\n \"affilUserName\": \"e-shop@pawlik-aquaforum.cz\",\n \"billed_to\": {\n \"gender\": \"male\",\n \"first_name\": \"Bohuslav\",\n \"last_name\": \"Martinu\",\n \"email\": \"bohuslav@example.com\",\n \"phone\": \"+420355455675\",\n \"consent_marketing\": true,\n \"address\": {\n \"street\": \"Milady Horakove\",\n \"house_number\": \"5A\",\n \"city\": \"Praha\",\n \"zip_code\": \"16000\",\n \"country\": \"CZE\"\n }\n },\n \"guests\": [\n {\n \"gender\": \"female\",\n \"first_name\": \"Charlotte\",\n \"last_name\": \"Martinu\",\n \"birth_date\": \"1894-01-01\",\n \"loyalty_program_id\": 1,\n \"loyalty_program_code\": \"GOLD000001\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://spaportal.cz/api/v1/booking")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"binding_booking\": true,\n \"currency\": \"EUR\",\n \"visit_type_id\": 1,\n \"hotel_id\": 1,\n \"room_type_id\": 1,\n \"date_from\": \"2026-04-01\",\n \"date_to\": \"2026-04-21\",\n \"customer_note\": \"I prefer the corner room on the third floor.\",\n \"affilUserName\": \"e-shop@pawlik-aquaforum.cz\",\n \"billed_to\": {\n \"gender\": \"male\",\n \"first_name\": \"Bohuslav\",\n \"last_name\": \"Martinu\",\n \"email\": \"bohuslav@example.com\",\n \"phone\": \"+420355455675\",\n \"consent_marketing\": true,\n \"address\": {\n \"street\": \"Milady Horakove\",\n \"house_number\": \"5A\",\n \"city\": \"Praha\",\n \"zip_code\": \"16000\",\n \"country\": \"CZE\"\n }\n },\n \"guests\": [\n {\n \"gender\": \"female\",\n \"first_name\": \"Charlotte\",\n \"last_name\": \"Martinu\",\n \"birth_date\": \"1894-01-01\",\n \"loyalty_program_id\": 1,\n \"loyalty_program_code\": \"GOLD000001\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://spaportal.cz/api/v1/booking")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"binding_booking\": true,\n \"currency\": \"EUR\",\n \"visit_type_id\": 1,\n \"hotel_id\": 1,\n \"room_type_id\": 1,\n \"date_from\": \"2026-04-01\",\n \"date_to\": \"2026-04-21\",\n \"customer_note\": \"I prefer the corner room on the third floor.\",\n \"affilUserName\": \"e-shop@pawlik-aquaforum.cz\",\n \"billed_to\": {\n \"gender\": \"male\",\n \"first_name\": \"Bohuslav\",\n \"last_name\": \"Martinu\",\n \"email\": \"bohuslav@example.com\",\n \"phone\": \"+420355455675\",\n \"consent_marketing\": true,\n \"address\": {\n \"street\": \"Milady Horakove\",\n \"house_number\": \"5A\",\n \"city\": \"Praha\",\n \"zip_code\": \"16000\",\n \"country\": \"CZE\"\n }\n },\n \"guests\": [\n {\n \"gender\": \"female\",\n \"first_name\": \"Charlotte\",\n \"last_name\": \"Martinu\",\n \"birth_date\": \"1894-01-01\",\n \"loyalty_program_id\": 1,\n \"loyalty_program_code\": \"GOLD000001\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": "66f16191f739705faa020009",
"id": "66f16191f739705faa020009"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}Create booking
Creates a booking or a non-binding booking request.
When binding_booking is false, SpaPortal creates a non-binding request and an operator can contact the customer later. When binding_booking is true, the billed contact must include an address.
The price is always calculated server-side from the current price list; any price sent in the request body is ignored. The stay costs the requested room type’s configured price whatever share of its beds is occupied, so guests must hold at least one guest and no more than the room type has beds.
The first Accept-Language value determines the customer communication language for automated emails.
curl --request POST \
--url https://spaportal.cz/api/v1/booking \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"binding_booking": true,
"currency": "EUR",
"visit_type_id": 1,
"hotel_id": 1,
"room_type_id": 1,
"date_from": "2026-04-01",
"date_to": "2026-04-21",
"customer_note": "I prefer the corner room on the third floor.",
"affilUserName": "e-shop@pawlik-aquaforum.cz",
"billed_to": {
"gender": "male",
"first_name": "Bohuslav",
"last_name": "Martinu",
"email": "bohuslav@example.com",
"phone": "+420355455675",
"consent_marketing": true,
"address": {
"street": "Milady Horakove",
"house_number": "5A",
"city": "Praha",
"zip_code": "16000",
"country": "CZE"
}
},
"guests": [
{
"gender": "female",
"first_name": "Charlotte",
"last_name": "Martinu",
"birth_date": "1894-01-01",
"loyalty_program_id": 1,
"loyalty_program_code": "GOLD000001"
}
]
}
'import requests
url = "https://spaportal.cz/api/v1/booking"
payload = {
"binding_booking": True,
"currency": "EUR",
"visit_type_id": 1,
"hotel_id": 1,
"room_type_id": 1,
"date_from": "2026-04-01",
"date_to": "2026-04-21",
"customer_note": "I prefer the corner room on the third floor.",
"affilUserName": "e-shop@pawlik-aquaforum.cz",
"billed_to": {
"gender": "male",
"first_name": "Bohuslav",
"last_name": "Martinu",
"email": "bohuslav@example.com",
"phone": "+420355455675",
"consent_marketing": True,
"address": {
"street": "Milady Horakove",
"house_number": "5A",
"city": "Praha",
"zip_code": "16000",
"country": "CZE"
}
},
"guests": [
{
"gender": "female",
"first_name": "Charlotte",
"last_name": "Martinu",
"birth_date": "1894-01-01",
"loyalty_program_id": 1,
"loyalty_program_code": "GOLD000001"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
binding_booking: true,
currency: 'EUR',
visit_type_id: 1,
hotel_id: 1,
room_type_id: 1,
date_from: '2026-04-01',
date_to: '2026-04-21',
customer_note: 'I prefer the corner room on the third floor.',
affilUserName: 'e-shop@pawlik-aquaforum.cz',
billed_to: {
gender: 'male',
first_name: 'Bohuslav',
last_name: 'Martinu',
email: 'bohuslav@example.com',
phone: '+420355455675',
consent_marketing: true,
address: {
street: 'Milady Horakove',
house_number: '5A',
city: 'Praha',
zip_code: '16000',
country: 'CZE'
}
},
guests: [
{
gender: 'female',
first_name: 'Charlotte',
last_name: 'Martinu',
birth_date: '1894-01-01',
loyalty_program_id: 1,
loyalty_program_code: 'GOLD000001'
}
]
})
};
fetch('https://spaportal.cz/api/v1/booking', 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/v1/booking",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'binding_booking' => true,
'currency' => 'EUR',
'visit_type_id' => 1,
'hotel_id' => 1,
'room_type_id' => 1,
'date_from' => '2026-04-01',
'date_to' => '2026-04-21',
'customer_note' => 'I prefer the corner room on the third floor.',
'affilUserName' => 'e-shop@pawlik-aquaforum.cz',
'billed_to' => [
'gender' => 'male',
'first_name' => 'Bohuslav',
'last_name' => 'Martinu',
'email' => 'bohuslav@example.com',
'phone' => '+420355455675',
'consent_marketing' => true,
'address' => [
'street' => 'Milady Horakove',
'house_number' => '5A',
'city' => 'Praha',
'zip_code' => '16000',
'country' => 'CZE'
]
],
'guests' => [
[
'gender' => 'female',
'first_name' => 'Charlotte',
'last_name' => 'Martinu',
'birth_date' => '1894-01-01',
'loyalty_program_id' => 1,
'loyalty_program_code' => 'GOLD000001'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://spaportal.cz/api/v1/booking"
payload := strings.NewReader("{\n \"binding_booking\": true,\n \"currency\": \"EUR\",\n \"visit_type_id\": 1,\n \"hotel_id\": 1,\n \"room_type_id\": 1,\n \"date_from\": \"2026-04-01\",\n \"date_to\": \"2026-04-21\",\n \"customer_note\": \"I prefer the corner room on the third floor.\",\n \"affilUserName\": \"e-shop@pawlik-aquaforum.cz\",\n \"billed_to\": {\n \"gender\": \"male\",\n \"first_name\": \"Bohuslav\",\n \"last_name\": \"Martinu\",\n \"email\": \"bohuslav@example.com\",\n \"phone\": \"+420355455675\",\n \"consent_marketing\": true,\n \"address\": {\n \"street\": \"Milady Horakove\",\n \"house_number\": \"5A\",\n \"city\": \"Praha\",\n \"zip_code\": \"16000\",\n \"country\": \"CZE\"\n }\n },\n \"guests\": [\n {\n \"gender\": \"female\",\n \"first_name\": \"Charlotte\",\n \"last_name\": \"Martinu\",\n \"birth_date\": \"1894-01-01\",\n \"loyalty_program_id\": 1,\n \"loyalty_program_code\": \"GOLD000001\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://spaportal.cz/api/v1/booking")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"binding_booking\": true,\n \"currency\": \"EUR\",\n \"visit_type_id\": 1,\n \"hotel_id\": 1,\n \"room_type_id\": 1,\n \"date_from\": \"2026-04-01\",\n \"date_to\": \"2026-04-21\",\n \"customer_note\": \"I prefer the corner room on the third floor.\",\n \"affilUserName\": \"e-shop@pawlik-aquaforum.cz\",\n \"billed_to\": {\n \"gender\": \"male\",\n \"first_name\": \"Bohuslav\",\n \"last_name\": \"Martinu\",\n \"email\": \"bohuslav@example.com\",\n \"phone\": \"+420355455675\",\n \"consent_marketing\": true,\n \"address\": {\n \"street\": \"Milady Horakove\",\n \"house_number\": \"5A\",\n \"city\": \"Praha\",\n \"zip_code\": \"16000\",\n \"country\": \"CZE\"\n }\n },\n \"guests\": [\n {\n \"gender\": \"female\",\n \"first_name\": \"Charlotte\",\n \"last_name\": \"Martinu\",\n \"birth_date\": \"1894-01-01\",\n \"loyalty_program_id\": 1,\n \"loyalty_program_code\": \"GOLD000001\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://spaportal.cz/api/v1/booking")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"binding_booking\": true,\n \"currency\": \"EUR\",\n \"visit_type_id\": 1,\n \"hotel_id\": 1,\n \"room_type_id\": 1,\n \"date_from\": \"2026-04-01\",\n \"date_to\": \"2026-04-21\",\n \"customer_note\": \"I prefer the corner room on the third floor.\",\n \"affilUserName\": \"e-shop@pawlik-aquaforum.cz\",\n \"billed_to\": {\n \"gender\": \"male\",\n \"first_name\": \"Bohuslav\",\n \"last_name\": \"Martinu\",\n \"email\": \"bohuslav@example.com\",\n \"phone\": \"+420355455675\",\n \"consent_marketing\": true,\n \"address\": {\n \"street\": \"Milady Horakove\",\n \"house_number\": \"5A\",\n \"city\": \"Praha\",\n \"zip_code\": \"16000\",\n \"country\": \"CZE\"\n }\n },\n \"guests\": [\n {\n \"gender\": \"female\",\n \"first_name\": \"Charlotte\",\n \"last_name\": \"Martinu\",\n \"birth_date\": \"1894-01-01\",\n \"loyalty_program_id\": 1,\n \"loyalty_program_code\": \"GOLD000001\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": "66f16191f739705faa020009",
"id": "66f16191f739705faa020009"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "<string>"
}Authorizations
See Authentication for how to obtain and send your API key.
Headers
Comma-separated list of languages to include. See Localization for details.
"cs_CZ,de"
Body
Show child attributes
Show child attributes
The people staying in the room. At least one guest is required, and there
cannot be more guests than the requested room type has beds — a request
that exceeds the room's capacity is rejected with 422.
Occupancy does not change the price: the stay always costs the room's configured price, so one guest in a double pays the double-room rate. This holds for price lists quoted per person too, because the per-person rate is multiplied by the room's bed count.
1Show child attributes
Show child attributes
CZK, EUR