Get started
Quickstart: your first call in 5 minutes
You need a STRYK user account with the right to manage channels, and a terminal with curl, Node.js 18+ or Python 3.
1. Create a key in STRYK
- Open the API channel
In STRYK, go to Channels → API and choose Create API key.
- Name the integration
Use a name your colleagues will recognise later, for example “Booking website (agency Example)”.
- Choose scopes
For this quickstart, Read only is enough. Grant only what the integration needs; a write permission includes reading the same area. See scopes.
- Copy the key
STRYK shows the key once. Store it in your password manager or secret store. If it is lost, rotate the key.
export STRYK_API_KEY="stryk_live_…"2. Call GET /me
GET /me works with every valid key and returns the key's name, scopes, hotel and rate limit. It is the quickest way to check your setup.
curl https://app.staystryk.com/api/partner/v1/me \
-H "Authorization: Bearer $STRYK_API_KEY"// Node.js 18+ (built-in fetch). Run on your server, never in the browser.
const response = await fetch('https://app.staystryk.com/api/partner/v1/me', {
headers: { Authorization: `Bearer ${process.env.STRYK_API_KEY}` },
});
if (!response.ok) {
const problem = await response.json();
throw new Error(`${problem.code}: ${problem.detail}`);
}
console.log(await response.json());import os
import requests
response = requests.get(
"https://app.staystryk.com/api/partner/v1/me",
headers={"Authorization": f"Bearer {os.environ['STRYK_API_KEY']}"},
timeout=30,
)
response.raise_for_status()
print(response.json()){
"keyId": "6f0f3a52-41a8-4d7e-9a43-2b8f5d1c7e90",
"keyName": "Booking website",
"keyPrefix": "Hq7bT2xa",
"scopes": ["property:read", "availability:read", "rates:read"],
"hotel": { "id": "hotel-alpenblick", "name": "Hotel Alpenblick" },
"expiresAt": null,
"rateLimit": { "limit": 120, "windowSeconds": 60 }
}3. List room types
Now read real data. GET /room-types returns the hotel's categories with occupancy, descriptions per language and images.
curl "https://app.staystryk.com/api/partner/v1/room-types?limit=20" \
-H "Authorization: Bearer $STRYK_API_KEY"const response = await fetch('https://app.staystryk.com/api/partner/v1/room-types?limit=20', {
headers: { Authorization: `Bearer ${process.env.STRYK_API_KEY}` },
});
const { data, nextCursor, hasMore } = await response.json();
for (const roomType of data) {
console.log(roomType.name, roomType.maxOccupancy, roomType.images.length);
}response = requests.get(
"https://app.staystryk.com/api/partner/v1/room-types",
headers={"Authorization": f"Bearer {os.environ['STRYK_API_KEY']}"},
params={"limit": 20},
timeout=30,
)
response.raise_for_status()
page = response.json()
for room_type in page["data"]:
print(room_type["name"], room_type["maxOccupancy"], len(room_type["images"])){
"data": [
{
"id": "0b7e2c1d-5f4a-4c3b-9e8d-7a6b5c4d3e2f",
"name": "Double room with balcony",
"code": "DZB",
"description": { "de": "Doppelzimmer mit Balkon …", "en": "Double room with balcony …" },
"maxOccupancy": 3,
"maxAdults": 2,
"maxChildren": 1,
"standardOccupancy": 2,
"images": [{ "url": "https://…/dzb-1.jpg", "alt": "Room with balcony", "position": 1 }],
"unitCount": 8,
"active": true,
"updatedAt": "2026-11-02T09:41:12.000Z",
"version": "8c1d2e4f"
}
],
"nextCursor": null,
"hasMore": false
}Lists return data, nextCursor and hasMore. When hasMore is true, pass nextCursor as cursor to get the next page, see Pagination.