Skip to main content
POST
/
hotels
/
netstorming
/
batch
Batch fetch hotels by Netstorming IDs
curl --request POST \
  --url https://connect.valpashotels.com/hotels/netstorming/batch \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '
{
  "netstorming_ids": [
    "45373",
    "63148"
  ]
}
'
import requests

url = "https://connect.valpashotels.com/hotels/netstorming/batch"

payload = { "netstorming_ids": ["45373", "63148"] }
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({netstorming_ids: ['45373', '63148']})
};

fetch('https://connect.valpashotels.com/hotels/netstorming/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/netstorming/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([
'netstorming_ids' => [
'45373',
'63148'
]
]),
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/netstorming/batch"

payload := strings.NewReader("{\n \"netstorming_ids\": [\n \"45373\",\n \"63148\"\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/netstorming/batch")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"netstorming_ids\": [\n \"45373\",\n \"63148\"\n ]\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://connect.valpashotels.com/hotels/netstorming/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 \"netstorming_ids\": [\n \"45373\",\n \"63148\"\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",
    "latitude": 48.831917,
    "longitude": 2.340172,
    "language": null,
    "room_count": 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"
  }
]
{
"error": "Request body must include a `netstorming_ids` array"
}
{
"error": "Unauthorized"
}
{
"error": "Internal server error"
}

Authorizations

x-api-key
string
header
required

Body

application/json
netstorming_ids
string[]
required

Array of Netstorming IDs to look up (max 1000)

Example:
["45373", "63148"]

Response

List of matching hotels

id
string
required

Unique hotel identifier

Example:

"00391351-e308-4aae-8b66-d868ebb37ff3"

name
string
required

Hotel name

Example:

"Grand Helsinki Hotel"

description
string | null
required

Marketing description of the hotel (null if not available)

Example:

"A refined stay in the heart of Helsinki, steps from the central railway station."

language
string | null
required

Primary language at the hotel (ISO 639-1 code)

Example:

"fi"

images
object[]
required

Hotel photos (up to 3), served from the Valpas CDN. Empty array if no photos are available.

Example:
[
{
"url": "https://misxceaqoppcaiaitpkj.supabase.co/storage/v1/object/public/hotel-images/00391351-e308-4aae-8b66-d868ebb37ff3/1.jpg",
"caption": "Great Room Lobby"
}
]
certified
boolean
required

Whether the hotel holds a current Valpas certification

Example:

true

certified_from
string<date> | null
required

Date when the hotel's Valpas certification becomes valid (YYYY-MM-DD)

Example:

"2026-01-15"

certified_until
string<date> | null
required

Date when the hotel's Valpas certification expires (YYYY-MM-DD)

Example:

"2026-03-30"

certification_url
string<uri> | null
required

Link target for the Valpas certification badge (null when the hotel is not certified)

Example:

"https://valpashotels.com"

netstorming_id
string | null
required

Netstorming integration identifier

Example:

"45373"

address
string | null

Street address of the hotel

Example:

"Mannerheimintie 1, 00100 Helsinki"

latitude
number | null

Geographic latitude in decimal degrees

Example:

60.1699

longitude
number | null

Geographic longitude in decimal degrees

Example:

24.9384

room_count
integer | null

Total number of rooms (null if not configured)

Example:

85