Developers
The Davos week, as an API.
Read-only JSON for the curated 2027 side events, the 2025 and 2026 archives, their hosts and venues, and places to stay — plus an MCP server so Claude, ChatGPT and other assistants can answer from the same records.
What it is
Everything the API returns is already published on this site; the API is a structured way to read it. Every item carries a site_url — its page here — and the source fields the page shows: the host’s own link for an event, the originating programme for an archived session, the pages a hotel’s facts were read from.
Base URL: https://davosevents.co/api/v1. Only GET. CORS is open (*), so it works from a browser.
Want the whole thing at once? The open datasets are the same records as files, regenerated continuously. Use the API for filtered, paged, current reads; use the datasets to load everything.
Authentication
Send a key as a bearer token: Authorization: Bearer dvs_live_…. Keys belong to an organisation: an owner or admin creates them on the organisation’s page under Account → Organisations (up to 10 active keys each). A key is shown once; we store only its hash.
No key? Requests without an Authorization header use the anonymous tier: 60 requests an hour per IP address. That is enough to try every example on this page. A malformed or revoked key is refused with 401 — it never falls back to the anonymous tier.
Limits
- Burst: 20 requests per 10 seconds per IP, for everyone.
- Anonymous: 60 requests per hour per IP.
- With a key: a daily limit per key (10,000 by default), resetting at 00:00 UTC. Today’s count is on your organisation page.
Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix seconds) for whichever limit is closest to running out. Over a limit you get 429 with Retry-After in seconds.
Responses
Every success has the same envelope:
{
"data": [ … ] | { … },
"next_cursor": "MjUuYWJj…" | null,
"meta": {
"source": "davosevents.co",
"generated_at": "2026-09-27T10:00:00.000Z",
"total": 214,
"license": "https://davosevents.co/terms",
"attribution": "…",
"provenance": "…",
"sources_url": "https://davosevents.co/sources"
}
}Lists take limit (1–100, default 25) and return next_cursor; pass it back as cursor with the same filters for the next page. A cursor from a different query is refused. Unknown parameters are refused too, so a typo cannot quietly return the unfiltered list.
Errors are always:
{ "error": { "code": "invalid_parameter", "message": "`type` must be one of: Dinner, Reception, …" } }Responses carry an ETag; send it back as If-None-Match and an unchanged result is a bodiless 304. Clients may cache for a minute (Cache-Control).
Endpoints
| Path | What | Parameters |
|---|---|---|
/api/v1/events | List Davos 2027 side events | day, type, topic, access, q, limit, cursor |
/api/v1/events/{slug} | One side event | — |
/api/v1/archive/events | Search the 2025 and 2026 archives | year, host, venue, q, limit, cursor |
/api/v1/archive/hosts | List archive hosts | q, limit, cursor |
/api/v1/archive/hosts/{slug} | One archive host, with its sessions | — |
/api/v1/archive/venues | List archive venues and places | kind, q, limit, cursor |
/api/v1/archive/venues/{slug} | One archive venue, with its sessions | — |
/api/v1/stays | List accommodation | area, guests, category, limit, cursor |
/api/v1/stays/{slug} | One stay | — |
/api/v1/search | Search the whole site | q, kind, limit, cursor |
Full field-by-field reference: openapi.json — load it into Postman, Insomnia, Swagger UI or a client generator.
Examples
Dinners on the Tuesday, with curl (no key needed to try it):
curl "https://davosevents.co/api/v1/events?type=Dinner&day=2027-01-19&limit=5"With a key:
curl -H "Authorization: Bearer $DAVOS_API_KEY" \
"https://davosevents.co/api/v1/archive/events?year=2026&host=ai-house"In JavaScript, paging through every stay for eight or more:
const base = "https://davosevents.co/api/v1";
const headers = { Authorization: `Bearer ${process.env.DAVOS_API_KEY}` };
let cursor = null;
const stays = [];
do {
const url = new URL(base + "/stays");
url.searchParams.set("guests", "8");
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const res = await fetch(url, { headers });
if (res.status === 429) {
await new Promise((r) => setTimeout(r, Number(res.headers.get("Retry-After")) * 1000));
continue;
}
const body = await res.json();
if (!res.ok) throw new Error(body.error.message);
stays.push(...body.data);
cursor = body.next_cursor;
} while (cursor);Search everything:
curl "https://davosevents.co/api/v1/search?q=ai%20house&kind=Venue"MCP server for AI assistants
https://davosevents.co/api/mcp speaks the Model Context Protocol over Streamable HTTP (stateless, JSON responses). It exposes 8 read-only tools that mirror the API: search_davos, list_events, get_event, search_archive, get_host, get_venue, list_stays, get_stay. It uses the same keys and limits as the API — each MCP request counts as one request — and works without a key on the anonymous tier.
Claude
Claude (web and desktop): Settings → Connectors → Add custom connector, and paste https://davosevents.co/api/mcp. Custom connectors connect without a key, on the anonymous tier.
Claude Code, with a key:
claude mcp add --transport http davos-events https://davosevents.co/api/mcp \
--header "Authorization: Bearer $DAVOS_API_KEY"Claude Desktop config (claude_desktop_config.json), through the mcp-remote bridge so a header can be sent:
{
"mcpServers": {
"davos-events": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://davosevents.co/api/mcp",
"--header", "Authorization: Bearer ${DAVOS_API_KEY}"],
"env": { "DAVOS_API_KEY": "dvs_live_…" }
}
}
}ChatGPT
In ChatGPT, turn on developer mode (Settings → Apps & Connectors → Advanced settings), then create a connector with the server URL https://davosevents.co/api/mcp and authentication set to none. ChatGPT connectors do not send custom headers, so they run on the anonymous tier. For an agent built on the OpenAI API, pass the key in the MCP tool’s headers (or authorization) field.
Anything else
A raw request, to see what a client sends:
curl -X POST https://davosevents.co/api/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"list_events","arguments":{"type":"Dinner","limit":3}}}'Terms of use
- Attribute. Credit “Davos Events” and link each record you show to its
site_url. Show photo credits (image_credit) with photos. - No resale of personal data. Do not sell, rent or bulk redistribute names or other details of people from this data, or use it to build contact or marketing lists.
- It is a pointer, not a promise. The data is compiled from public sources and has not been independently verified; times, venues and access change. The organiser’s own page is the authority — see sources.
- Be reasonable. Stay within the limits, cache what you can, and keep keys secret. We may revoke keys that are abused.
The site’s terms apply. Questions or a higher limit: contact us.