curl --request POST \
--url https://connect.valpashotels.com/hotels/giata/batch \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"giata_ids": [
99999999,
99999998
]
}
'import requests
url = "https://connect.valpashotels.com/hotels/giata/batch"
payload = { "giata_ids": [99999999, 99999998] }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({giata_ids: [99999999, 99999998]})
};
fetch('https://connect.valpashotels.com/hotels/giata/batch', 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://connect.valpashotels.com/hotels/giata/batch",
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([
'giata_ids' => [
99999999,
99999998
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://connect.valpashotels.com/hotels/giata/batch"
payload := strings.NewReader("{\n \"giata_ids\": [\n 99999999,\n 99999998\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://connect.valpashotels.com/hotels/giata/batch")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"giata_ids\": [\n 99999999,\n 99999998\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.valpashotels.com/hotels/giata/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"giata_ids\": [\n 99999999,\n 99999998\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"id": "00391351-e308-4aae-8b66-d868ebb37ff3",
"name": "Paris Marriott Rive Gauche Hotel & Conference Center",
"description": "Surrounded by diverse attractions, Paris Marriott Rive Gauche Hotel is a stylish haven in an iconic travel destination.",
"address": "17 Boulevard Saint Jacques, 75014 Paris France",
"postal_code": "75014",
"city": "Paris",
"country_code": "FR",
"latitude": 48.831917,
"longitude": 2.340172,
"language": null,
"star_rating": null,
"room_count": null,
"website_url": "https://www.marriott.com/en-us/hotels/parst-paris-marriott-rive-gauche-hotel-and-conference-center/overview/",
"email": null,
"images": [
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/1.jpg",
"caption": "Great Room Lobby"
},
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/2.jpg",
"caption": "Palyma Bar"
},
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/3.jpg",
"caption": "Brasserie Restaurant"
}
],
"certified": true,
"certified_from": null,
"certified_until": null,
"certification_url": "https://valpashotels.com",
"netstorming_id": "45373",
"giata_id": 99999999
}
]{
"error": "Request body must include a `giata_ids` array"
}{
"error": "Unauthorized"
}{
"error": "Forbidden"
}{
"error": "Internal server error"
}Batch fetch hotels by GIATA IDs
Returns multiple hotels matching the provided GIATA MultiCodes identifiers. Maximum 1000 IDs per request. IDs with no matching hotel are omitted from the response. Requires the giata scope.
curl --request POST \
--url https://connect.valpashotels.com/hotels/giata/batch \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"giata_ids": [
99999999,
99999998
]
}
'import requests
url = "https://connect.valpashotels.com/hotels/giata/batch"
payload = { "giata_ids": [99999999, 99999998] }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({giata_ids: [99999999, 99999998]})
};
fetch('https://connect.valpashotels.com/hotels/giata/batch', 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://connect.valpashotels.com/hotels/giata/batch",
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([
'giata_ids' => [
99999999,
99999998
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://connect.valpashotels.com/hotels/giata/batch"
payload := strings.NewReader("{\n \"giata_ids\": [\n 99999999,\n 99999998\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://connect.valpashotels.com/hotels/giata/batch")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"giata_ids\": [\n 99999999,\n 99999998\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://connect.valpashotels.com/hotels/giata/batch")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"giata_ids\": [\n 99999999,\n 99999998\n ]\n}"
response = http.request(request)
puts response.read_body[
{
"id": "00391351-e308-4aae-8b66-d868ebb37ff3",
"name": "Paris Marriott Rive Gauche Hotel & Conference Center",
"description": "Surrounded by diverse attractions, Paris Marriott Rive Gauche Hotel is a stylish haven in an iconic travel destination.",
"address": "17 Boulevard Saint Jacques, 75014 Paris France",
"postal_code": "75014",
"city": "Paris",
"country_code": "FR",
"latitude": 48.831917,
"longitude": 2.340172,
"language": null,
"star_rating": null,
"room_count": null,
"website_url": "https://www.marriott.com/en-us/hotels/parst-paris-marriott-rive-gauche-hotel-and-conference-center/overview/",
"email": null,
"images": [
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/1.jpg",
"caption": "Great Room Lobby"
},
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/2.jpg",
"caption": "Palyma Bar"
},
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/3.jpg",
"caption": "Brasserie Restaurant"
}
],
"certified": true,
"certified_from": null,
"certified_until": null,
"certification_url": "https://valpashotels.com",
"netstorming_id": "45373",
"giata_id": 99999999
}
]{
"error": "Request body must include a `giata_ids` array"
}{
"error": "Unauthorized"
}{
"error": "Forbidden"
}{
"error": "Internal server error"
}Authorizations
Body
Array of GIATA IDs to look up (max 1000). Integer-valued strings are also accepted.
[99999999, 99999998]
Response
List of matching hotels
Unique hotel identifier
"00391351-e308-4aae-8b66-d868ebb37ff3"
Hotel name
"Grand Helsinki Hotel"
Marketing description of the hotel (null if not available)
"A refined stay in the heart of Helsinki, steps from the central railway station."
Postal code (null if not available)
"00100"
City name (null if not available)
"Helsinki"
Country code (ISO 3166-1 alpha-2, null if not available)
"FI"
Primary language at the hotel (ISO 639-1 code)
"fi"
Official hotel star rating, e.g. 4 or 4.5 (null if not available)
4.5
Hotel website URL (null if not available)
"https://www.grandhelsinkihotel.com"
Hotel reception email address (null if not available)
"reception@grandhelsinkihotel.com"
Hotel photos (up to 3), served from the Valpas CDN. Empty array if no photos are available.
Show child attributes
Show child attributes
[
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/1.jpg",
"caption": "Great Room Lobby"
}
]
Whether the hotel holds a current Valpas certification
true
Date when the hotel's Valpas certification becomes valid (YYYY-MM-DD)
"2026-01-15"
Date when the hotel's Valpas certification expires (YYYY-MM-DD)
"2026-03-30"
Link target for the Valpas certification badge (null when the hotel is not certified)
"https://valpashotels.com"
Netstorming integration identifier
"45373"
GIATA MultiCodes property identifier (null if the hotel is not mapped to a GIATA code, or if your API key lacks the giata scope)
99999999
Street address of the hotel
"Mannerheimintie 1, 00100 Helsinki"
Geographic latitude in decimal degrees
60.1699
Geographic longitude in decimal degrees
24.9384
Total number of rooms (null if not configured)
85