Für Partner von Hessen Tourismus
MCP-Server Hessens Tourismusdaten direkt in Ihrem KI-Assistenten
Sehenswürdigkeiten, Veranstaltungen, Wander- und Radtouren, Gastronomie und Unterkünfte — gepflegt im Content Hub Hessen, täglich aktualisiert. Ihr Assistent kann sie direkt abfragen und beantwortet damit Fragen Ihrer Gäste, statt zu raten.
Was ist das?
Eine genormte Steckdose für KI-Assistenten. Sie verbinden Ihren Assistenten einmal mit unserer Datenquelle — danach kann er Fragen dazu beantworten.
Die Verbindung wird in den Einstellungen Ihres Assistenten eingetragen — eine Adresse, ein Zugangsschlüssel, fertig. Rechnen Sie mit zehn Minuten.
Sie stellen Ihre Frage wie immer. Der Assistent entscheidet selbst, welche Daten er dafür braucht, holt sie und formuliert die Antwort.
Was Sie fragen können
Vier Beispiele. Die Trefferzahlen und die gezeigten Daten stammen aus echten Abfragen — nichts davon ist erfunden.
- Terrainkurweg K1: Thermalquellenweg · 4.2 km, leicht
- Terrainkurweg K2: Prinzenweg · 7.5 km, leicht
- Willingen Loipe Stryck (1) · 3.1 km, leicht
- Queer leben in Marburg · 01.10.2026 · Marburg
- Nineteen Echoes · 01.10.2026 · Marburg
- Tina Teubner · 02.10.2026 · Marburg
- Altes Rathaus · Wiesbaden · 0.19 km entfernt
- RöRth Studio · Wiesbaden · 0.19 km entfernt
- Marktbrunnen · Wiesbaden · 0.2 km entfernt
- Kursaalgebäude · Bad Ems · Bauwerk, Familie, Barrierefrei
- Bottega - Tapas und mehr · Marburg · Kulinarisch, Gruppen, Außengastronomie
- Shaky Shake Lingelgasse · Marburg · Kulinarisch, Lieferservice, Außengastronomie
Gezeigt sind die Daten, die die Schnittstelle liefert. Wie Ihr Assistent daraus eine Antwort formuliert, entscheidet er selbst — das hängt vom jeweiligen Assistenten ab und nicht von uns. Stand der Beispiele: 16. September 2026.
Was Sie brauchen
- Einen KI-Assistenten, der Connectors unterstütztClaude oder ChatGPT — beide sind mit diesem Zugang erprobt, in der Web-Anwendung ebenso wie als Programm auf dem Rechner. Andere Assistenten, die eigene Konnektoren mit Zugangsschlüssel erlauben, funktionieren nach demselben Muster.
- Einen Zugangsschlüssel von unsDen beantragen Sie unten. Wir prüfen jede Anfrage und melden uns.
- Etwa zehn MinutenFür die einmalige Einrichtung. Danach fragen Sie einfach.
Einrichtung
So verbinden Sie Ihren Assistenten — in Claude und in ChatGPT. Beide Wege brauchen keine Kommandozeile. Suchen Sie sich die Spalte aus, die zu Ihnen passt.
In Claude
Einstellungen → Connectors. In einer Organisation macht das die Administratorin oder der Administrator einmal für alle.
- „Add custom connector“ wählenUnd als Adresse eintragen:
https://hessenexplorer.travel-commerce.de/api/mcp - Authentication auf „None“ stellenDas klingt widersprüchlich, ist aber richtig: Der Zugang läuft nicht über eine Anmeldung, sondern über den Schlüssel im nächsten Schritt.
- Unter „Request headers“ den Schlüssel eintragenAls Name
authorizationwählen, als Wert Ihren Schlüssel mit vorangestelltem Bearer und einem Leerzeichen:Bearer mcp_IHR-SCHLÜSSELHier gehört „Bearer“ davor. Claude fragt nach dem vollständigen Wert der Kopfzeile, nicht nach dem Schlüssel allein. Ohne das Wort und das Leerzeichen dahinter wird der Zugang abgelehnt — auch wenn der Schlüssel stimmt. - SpeichernDanach schalten Sie den Connector im Gespräch über das Plus-Zeichen zu und können loslegen.
In ChatGPT
Über die Einstellungen einen eigenen Konnektor anlegen. Es öffnet sich der Dialog „Neues Plugin“.
- Namen vergebenZum Beispiel Hessen Content Hub. Unter diesem Namen taucht der Zugang später im Gespräch auf. Symbol und Beschreibung sind freiwillig.
- Verbindung eintragenDie Umschaltung auf Server URL stehen lassen (nicht „Tunnel“) und dort eintragen:
https://hessenexplorer.travel-commerce.de/api/mcpDas Beispiel im leeren Feld endet auf/sse. Das ist nur ein Platzhalter — tragen Sie die Adresse oben vollständig so ein, wie sie hier steht. - Authentifizierung einstellenBei Authentifizierung den Eintrag Zugriffstoken/API-Schlüssel wählen, bei Header-Schema den Eintrag Bearer.
- Hinweis bestätigen und „Erstellen“ChatGPT weist darauf hin, dass eigene MCP-Server nicht von OpenAI geprüft sind. Setzen Sie das Häkchen bei Ich verstehe und ich möchte fortfahren; erst danach lässt sich Erstellen anklicken.
- Erst jetzt den Schlüssel eingebenEs öffnet sich ein zweiter Dialog mit dem Feld Zugriffstoken oder API-Schlüssel eingeben. Dort Ihren Schlüssel eintragen und verbinden:
mcp_IHR-SCHLÜSSELHier gehört „Bearer“ ausdrücklich NICHT davor. Das haben Sie im Schritt zuvor schon als Header-Schema ausgewählt; ChatGPT setzt es selbst davor. Wer es trotzdem mitschreibt, sendet es doppelt und wird abgelehnt.
In Claude fehlt der Abschnitt „Request headers“
Dann ist diese Eingabemöglichkeit für Ihr Konto noch nicht freigeschaltet — sie befindet sich bei Anthropic in der Erprobung und ist nicht für jede Organisation verfügbar. In ChatGPT gibt es diese Einschränkung nicht; der oben beschriebene Weg steht dort jedem Konto offen. Für Claude gibt es einen zweiten Weg, der immer funktioniert, aber einmalig eine Kommandozeile braucht:
npx mcp-remote https://hessenexplorer.travel-commerce.de/api/mcp --header "Authorization: Bearer mcp_IHR-SCHLÜSSEL"Unter Windows PowerShell ist curl übrigens ein anderer Befehl als der gleichnamige aus Anleitungen im Netz. Wenn eine Zeile dort nicht funktioniert, schreiben Sie curl.exe.
Am einfachsten: melden Sie sich bei uns. Wir richten es gemeinsam mit Ihnen ein.
Zugang beantragen
Wir prüfen jede Anfrage und melden uns bei Ihnen. Der Zugang ist für Partner von Hessen Tourismus kostenfrei.
Technische Dokumentation
Für alle, die die Schnittstelle selbst ansprechen wollen. Werkzeuge, Parameter und Beispiele stammen unmittelbar aus dem laufenden Server.
Endpunkt
Streamable HTTP, zustandslos, ausschliesslich lesend. Der Zugang läuft über die Kopfzeile Authorization: Bearer <schlüssel>.
https://hessenexplorer.travel-commerce.de/api/mcp
Die fünf Werkzeuge
Ein Suchwerkzeug für alle Inhaltsarten statt eines je Art — der Datentyp ist ein Filter wie jeder andere. Dazu Auskunft über den Bestand, Nachschlagen gültiger Filterwerte, Abruf ganzer Datensätze und Auszählung.
hessen_describe_datasetDatenbestand beschreiben
Überblick über den Datenbestand: Umfang, vorkommende Datentypen mit deutschem Label, Destinationen mit Mittelpunkt für Umkreissuchen, Sprachabdeckung und Aktualität. Vor der ersten Suche aufrufen. Die gelieferten Werte von "types" und "destinations" sind genau die, die hessen_search als Filter akzeptiert — damit entfällt das Raten von Filterwerten. Alle Zahlen sind bei jedem Aufruf frisch gemessen. Abgelaufene und abgesagte Veranstaltungen zählen hier, in hessen_search und in hessen_aggregate standardmässig nicht mit; wie viele das sind, steht in "notes". Die Suche zeigt sie auf Wunsch, hessen_get_records liefert sie per ID immer.
Parameter
| Name | Typ | Bedeutung |
|---|---|---|
| sections | Liste von string | Welche Abschnitte geliefert werden. Ohne Angabe: alle fünf.Werte: overview, types, destinations, languages, freshness |
* Pflichtangabe
Beispiel
{
"name": "hessen_describe_dataset",
"arguments": {
"sections": [
"overview",
"types"
]
}
}{
"notes": [
"4489 abgelaufene und 4 abgesagte Veranstaltungen sind in allen Zahlen dieses Servers ausgeblendet.",
"24 Veranstaltungen tragen ein Startdatum vor 2020. Sie werden nicht gefiltert — der Wert steht so im Quellsystem.",
"1566 sichtbare Datensätze haben keine Koordinate und fehlen daher in jeder Umkreis- und Kartenausschnittsuche (1216 ohne Angabe in der Quelle, 338 mit der unbrauchbaren Angabe 0°/0°, 12 ausserhalb des gültigen Werteberei …"
],
"overview": {
"total_records": 22480,
"visible_records": 17987,
"hidden_expired_events": 4489,
"hidden_cancelled_events": 4,
"with_coordinates": 16421,
"with_image": 10956,
"with_city": 14500,
"without_coordinates": {
"total": 1566,
"source_had_none": 1216,
"source_had_null_island": 338,
"source_out_of_range": 12
},
"event_date_range": {
"earliest_date": "1980-01-01",
"latest_date": "2028-01-29",
"implausible_before_2020": 24
}
},
"types": [
{
"value": "PointOfInterest",
"count": 5325,
"label": "Sehenswürdigkeit"
},
{
"value": "FoodEstablishmentLodgingBusiness",
"count": 3479,
"label": "Gastro/Unterkunft"
},
{
"value": "Event",
"count": 2950,
"label": "Veranstaltung"
},
"… 14 weitere"
]
}hessen_lookup_valuesGültige Filterwerte nachschlagen
Liefert die gültigen Werte eines Filters mit Trefferzahlen — für type, destination, city, category und organizer. Statt einen Ortsnamen oder eine Kategorie zu raten und bei null Treffern im Dunkeln zu stehen: hier nachsehen, welche Werte es gibt. "q" sucht unscharf, findet also auch Teilnamen ("Homburg" → "Bad Homburg vor der Höhe") und Tippfehler. Bei "city" und "destination" kommt ein Mittelpunkt aus den echten Koordinaten des Bestands mit, samt Angabe, auf wie vielen Datensätzen er beruht — damit lässt sich filters.near füllen, ohne zu geocodieren. Kategorien werden als lesbares Label geliefert; genau dieses Label gehört in filters.category.
Parameter
| Name | Typ | Bedeutung |
|---|---|---|
| field* | string | Welcher Filter. Die gelieferten Werte sind genau die, die hessen_search akzeptiert.Werte: type, destination, city, category, organizer |
| q | string | Sucheinschränkung. Teiltreffer und Tippfehler werden über Trigramm-Ähnlichkeit gefunden. |
| limit | integer | Wie viele Werte, 1 bis 50, voreingestellt 20. |
| include_audience_tags | boolean | Nur bei field="category": die 15 Zielgruppen-Tags ("ZG …") mitliefern. Voreingestellt aus. |
* Pflichtangabe
Beispiel
{
"name": "hessen_lookup_values",
"arguments": {
"field": "city",
"q": "Homburg",
"limit": 3
}
}{
"field": "city",
"values": [
{
"value": "Homberg (Efze)",
"label": "Homberg (Efze)",
"count": 99,
"center_based_on": 99,
"center": {
"lat": 51.01828,
"lon": 9.41134
}
},
{
"value": "Naumburg",
"label": "Naumburg",
"count": 75,
"center_based_on": 75,
"center": {
"lat": 51.23557,
"lon": 9.17466
}
},
{
"value": "Homberg (Ohm)",
"label": "Homberg (Ohm)",
"count": 39,
"center_based_on": 39,
"center": {
"lat": 50.7294,
"lon": 8.99851
}
}
],
"returned": 3,
"total_matching": 7,
"notes": [
"7 Werte passen insgesamt, 3 sind hier aufgeführt. Mit \"q\" einschränken oder \"limit\" erhöhen (höchstens 50)."
]
}hessen_searchIm Bestand suchen
Sucht im Content Hub von Hessen Tourismus — Sehenswürdigkeiten, Veranstaltungen, Touren, Gastronomie, Unterkünfte, Infrastruktur und mehr in EINEM Tool. Der Datentyp ist ein Filter, keine eigene Funktion; "was kann ich in Fulda machen" ist damit eine einzige Anfrage. Der Bestand folgt den zehn Tourismusdestinationen, nicht der Landesgrenze: Wo eine Reiseregion darüber hinausreicht, liegen einzelne Orte in Nachbarbundesländern. Ein Aufruf ohne jeden Parameter ist ausdrücklich erlaubt und sinnvoll: er liefert den Gesamtbestand mit Facetten über Typ, Destination, Ort und Kategorie — die beste Grundlage, um gezielt zu verfeinern, statt Filterwerte zu raten. "total_count" ist exakt und zählt die ganze Treffermenge, nicht nur die gelieferte Seite. Geblättert wird über "next_cursor"; Filter und Sortierung müssen dabei unverändert bleiben. Unbekannte Filterwerte werden abgelehnt statt stillschweigend zu einer leeren Liste zu führen, und die Ablehnung nennt Vorschläge. Abgelaufene und abgesagte Veranstaltungen sind standardmässig ausgeblendet (filters.include_past_events / include_cancelled_events zeigen sie); wie viele es sind, steht immer in "notes". Für Einzelheiten zu einzelnen Treffern hessen_get_records benutzen, statt hier auf "detailed" umzuschalten — das spart rund zwei Drittel der Antwortgrösse.
Parameter
| Name | Typ | Bedeutung |
|---|---|---|
| query | string | Volltext über Titel und Beschreibung, Präfixsuche je Wort. Leer lassen ist erlaubt und liefert den gefilterten Gesamtbestand mit Facetten. |
| filters | object | Felder: type, destination, city, postal_code, organizer, category, category_match, language, has_image, has_coordinates, near, bbox, event, trail, include_past_events, include_cancelled_events |
| sort | string | "id": Stabile technische Reihenfolge. Voreinstellung, weil sie immer anwendbar ist. "relevance": Volltext-Relevanz. Verlangt "query". "distance": Entfernung zum Punkt aus "near". Verlangt filters.near. "event_date": Startdatum aufsteigend. Datensätze ohne Datum stehen am Ende. "recently_updated": Zuletzt geändert zuerst. Datensätze ohne Änderungsdatum stehen am Ende.Werte: id, relevance, distance, event_date, recently_updated |
| pagination | object | Felder: limit, cursor |
| output | object | Felder: response_format, fields, include_facets |
* Pflichtangabe
Beispiel
{
"name": "hessen_search",
"arguments": {
"query": "Burg",
"filters": {
"destination": [
"taunus"
]
},
"pagination": {
"limit": 2
}
}
}{
"total_count": 61,
"returned": 2,
"has_more": true,
"next_cursor": "eyJzIjoiaWQiLCJrIjpbImVfMTAwMDM4NzUwLWh1YmVyIiwiZV8xMDAwMzg3NTAtaHViZXIiXSwiaCI6IjE0VW90MDRYV21KSyJ9",
"truncated": false,
"applied_filters": {
"destination": [
"taunus"
]
},
"sort": "id",
"notes": [],
"facets": {
"type": [
{
"value": "PointOfInterest",
"count": 43
},
{
"value": "Trail",
"count": 8
},
{
"value": "Event",
"count": 5
},
"… 1 weitere"
],
"destination": [
{
"value": "taunus",
"count": 61
}
],
"city": [
{
"value": "Kronberg im Taunus",
"count": 12
},
{
"value": "Eppstein",
"count": 10
},
{
"value": "Königstein im Taunus",
"count": 7
},
"… 5 weitere"
],
"category": [
{
"value": "Burg",
"count": 26
},
{
"value": "Bauwerk",
"count": 20
},
{
"value": "Interessantes in der Natur",
"count": 15
},
"… 5 weitere"
]
},
"results": [
{
"id": "e_100038737-huber",
"type": "FoodEstablishmentLodgingBusiness",
"title": "Restaurant-Café-Pension Zum Feldbergblick",
"city": "Schmitten - Hunoldstal",
"destination": "taunus"
},
{
"id": "e_100038750-huber",
"type": "FoodEstablishmentLodgingBusiness",
"title": "Restaurant Bürgerklause",
"city": "Glashütten",
"destination": "taunus"
}
]
}hessen_get_recordsDatensätze im Detail holen
Holt vollständige Einzelheiten zu bis zu 20 Datensätzen in EINEM Aufruf — die IDs kommen unverändert aus hessen_search. Voreingestellt kommen nur die Stammdaten. Was zusätzlich mitkommt, entscheidet "include": media, contact, opening_hours, amenities, offers, highlights, event, article, person, snow_conditions, destination_info, lodging, activity, trail_line, other_fields, raw. "other_fields" ist der Auffangblock und die eigentliche Zusage dieses Servers: er enthält JEDES Feld des Rohdatensatzes, das keiner der benannten Blöcke schon zeigt. Es gibt damit kein Feld im Content Hub, das über diese Schnittstelle unerreichbar wäre — auch keines, das erst künftig hinzukommt. "raw" und "trail_line" sind je Datensatz gross und deshalb auf 5 IDs je Aufruf begrenzt. Eine Tourenlinie wird auf höchstens 100 Stützpunkte ausgedünnt; dabei bleiben nur Originalpunkte stehen, es werden keine Zwischenpunkte berechnet, und wie stark ausgedünnt wurde, steht im Ergebnis.
Parameter
| Name | Typ | Bedeutung |
|---|---|---|
| ids* | Liste von string | 1 bis 20 Datensatz-IDs aus hessen_search. Mit "raw" oder "trail_line" höchstens 5. |
| include | Liste von string | Welche Zusatzblöcke. Ohne Angabe kommen nur die Stammdaten. "other_fields" ist der generische Auffangblock: er enthält jedes Rohdatenfeld, das keiner der benannten Blöcke schon zeigt — damit ist nichts unerreichbar.Werte: media, contact, opening_hours, amenities, offers, highlights, event, article, person, snow_conditions, destination_info, lodging, activity, trail_line, other_fields, raw |
| response_format | string | Steuert nur die Langtexte. "detailed" (Voreinstellung) bringt zusätzlich teaser, description und weitere Beschreibungstexte; "concise" lässt genau diese weg (gemessen 2.670 statt 6.949 Byte für fünf Datensätze). Stammdaten und die über "include" angeforderten Blöcke sind in beiden Formaten identisch.Werte: concise, detailed |
* Pflichtangabe
Beispiel
{
"name": "hessen_get_records",
"arguments": {
"ids": [
"e_01600962-4f80-4de9-9b97-62d23807de69-feratel",
"e_074d1ce7-af62-4a41-a84a-76547e23fc69-feratel"
],
"include": [
"contact",
"opening_hours"
]
}
}{
"requested": 2,
"returned": 2,
"not_found": [],
"truncated": false,
"notes": [],
"records": [
{
"id": "e_01600962-4f80-4de9-9b97-62d23807de69-feratel",
"type": "PointOfInterest",
"title": "Wendelgasse",
"city": "Marburg",
"postal_code": "35037",
"region": null,
"destination": "lahntal",
"destination_name": "Lahntal",
"coordinates": {
"lat": 50.80885,
"lon": 8.76852
},
"categories": [
"Verkehrsbau",
"Bauwerk",
"Straßenbauanlage",
"… 3 weitere"
],
"languages": [
"de",
"en"
],
"url": null,
"author": "Marburg Stadt und Land Tourismus",
"license": "https://creativecommons.org/licenses/by/4.0/de/",
"image_url": "https://resc.deskline.net/images/RPT/1/565d4421-e6ed-4261-aafe-837063ffbc57/99/image.jpg",
"image_count": 4,
"is_expired": false,
"updated_at": "2025-07-07T11:36:36Z",
"teaser": null,
"description": "Etwa auf halbem Wege zwischen Lahn und Landgrafenschloss liegt das nicht einmal 100 Meter lange Gässchen, das auf beiden Seiten von den in Marburg typischen Fachwerkhäusern gesäumt wird. Über die dazugehörige Wendeltrepp …",
"contact": {
"street": null,
"country": "Deutschland",
"phone": null,
"fax": null,
"email": null
},
"opening_hours": {
"regular": [
{
"day": "Montag",
"hours": [
"00:00–00:00"
]
},
{
"day": "Dienstag",
"hours": [
"00:00–00:00"
]
},
{
"day": "Mittwoch",
"hours": [
"00:00–00:00"
]
},
"… 4 weitere"
]
}
},
{
"id": "e_074d1ce7-af62-4a41-a84a-76547e23fc69-feratel",
"type": "PointOfInterest",
"title": "Wasserscheide",
"city": "Marburg",
"postal_code": "35037",
"region": null,
"destination": "lahntal",
"destination_name": "Lahntal",
"coordinates": {
"lat": 50.81085,
"lon": 8.77044
},
"categories": [
"ZG Kultur- und Landschaftsliebhaber (O)",
"ZG Kultur- und Landschaftsliebhaber (R)",
"ZG Städte-Genießer (O)",
"… 3 weitere"
],
"languages": [
"de",
"en"
],
"url": null,
"author": "Marburg Stadt und Land Tourismus",
"license": "https://creativecommons.org/licenses/by/3.0/de/",
"image_url": "https://resc.deskline.net/images/RPT/1/74b350d9-39df-4168-9ace-ec2a8cdd99cb/99/image.jpg",
"image_count": 1,
"is_expired": false,
"updated_at": "2025-07-11T09:13:25Z",
"teaser": null,
"description": "An der Wasserscheide wurde \"Christian\", dem letzten Marburger Dienstmann 1988 ein Denkmal aus Bronze gesetzt. Die Geschichte der Wasserscheide indes reicht weit bis in das Mittelalter zurück. Im 13. Jahrhundert betrat hi …",
"contact": {
"street": "Wettergasse",
"country": "Deutschland",
"phone": null,
"fax": null,
"email": null
},
"opening_hours": {
"regular": [
{
"day": "Montag",
"hours": [
"00:00–00:00"
]
},
{
"day": "Dienstag",
"hours": [
"00:00–00:00"
]
},
{
"day": "Mittwoch",
"hours": [
"00:00–00:00"
]
},
"… 4 weitere"
]
}
}
]
}hessen_aggregateBestand auszählen
Zählt den Bestand über eine oder zwei Dimensionen — destination, type, city, category, trail_difficulty, event_month, organizer — mit denselben Filtern wie hessen_search. Für Fragen, die keine Trefferliste beantwortet: "Veranstaltungen pro Monat", "welche Destination hat die meisten Touren", "wo fehlen die Bilder". Ohne dieses Tool müsste man Treffer seitenweise durchblättern und selbst zählen, und jede Antwort wäre eine Schätzung. Metriken neben "count": with_image, with_coordinates und language_coverage (Zahl der Datensätze je Sprache). Zwei Dimensionen ergeben eine Kreuztabelle, höchstens 400 Zellen. Alle Zahlen sind exakt und beziehen sich auf denselben sichtbaren Bestand wie die Suche.
Parameter
| Name | Typ | Bedeutung |
|---|---|---|
| group_by* | Liste von string | Eine oder zwei Dimensionen. Bei zwei entsteht eine Kreuztabelle.Werte: destination, type, city, category, trail_difficulty, event_month, organizer |
| metrics | Liste von string | Voreingestellt nur "count". "language_coverage" liefert je Zelle die Zahl der Datensätze pro Sprache.Werte: count, with_image, with_coordinates, language_coverage |
| filters | object | Derselbe Filterblock wie bei hessen_search.Felder: type, destination, city, postal_code, organizer, category, category_match, language, has_image, has_coordinates, near, bbox, event, trail, include_past_events, include_cancelled_events |
| limit | integer | Höchstzahl Zellen, 1 bis 400, voreingestellt 400. |
* Pflichtangabe
Beispiel
{
"name": "hessen_aggregate",
"arguments": {
"group_by": [
"destination"
],
"metrics": [
"count",
"with_image"
],
"limit": 4
}
}{
"group_by": [
"destination"
],
"metrics": [
"count",
"with_image"
],
"cells": [
{
"destination": "nordhessen",
"count": 4900,
"with_image": 4101
},
{
"destination": "lahntal",
"count": 3285,
"with_image": 2056
},
{
"destination": "rhoen",
"count": 2145,
"with_image": 14
},
"… 1 weitere"
],
"returned": 4,
"total_cells": 11,
"total_records": 17987,
"applied_filters": {},
"notes": [
"Die Zelle mit dem Wert null bei destination zählt die Datensätze ohne Angabe in diesem Feld. Sie ist bewusst enthalten, weil ihre Grösse selbst eine Aussage ist.",
"11 Zellen entstehen insgesamt, 4 sind hier aufgeführt. Enger filtern oder \"limit\" erhöhen."
]
}Blättern, Sortieren, Antwortgrösse
Die Trefferzahl ist exakt. total_count zählt die ganze Treffermenge, nicht nur die gelieferte Seite und kein Sortierfenster.
Geblättert wird über next_cursor, nicht über einen Zähler. Filter und Sortierung müssen dabei unverändert bleiben; sonst wird der Cursor abgelehnt, statt eine Seite zu liefern, die zur vorigen nicht passt. Der Bestand ändert sich nächtlich — mit einem Zähler übersprängen Sie Datensätze oder bekämen sie doppelt.
Fünf Sortierungen: id (stabil, Voreinstellung), relevance (verlangt eine Volltextsuche), distance (verlangt einen Punkt), event_date und recently_updated.
Zwei Ausführlichkeiten. concise liefert das Nötige zur Auswahl, detailed zusätzlich Beschreibung, Adresse, Koordinaten und Kategorien — gemessen 151 gegen 670 Byte je Treffer. Einzelheiten zu ausgewählten Treffern holt man besser über hessen_get_records nach.
Wenn etwas nicht stimmt
Ein Fehler ist hier eine Antwortmöglichkeit und keine Sackgasse. Ein unbekannter Filterwert führt nicht zu einer leeren Trefferliste, sondern zu einer Ablehnung mit Vorschlägen — sonst liesse sich „falsch gefragt" nicht von „gibt es nicht" unterscheiden. Ein unbekannter Parametername kommt mit der vollständigen Liste der akzeptierten zurück. Und eine Zeitüberschreitung wird als solche benannt, statt wie null Treffer auszusehen.
{
"error": "unbekannter_wert",
"field": "filters.type",
"value": "Museum",
"message": "„Museum\" ist kein Datentyp, sondern eine Kategorie (im Bestand als „Museum\" mit 290 Datensätzen). Gemeint ist vermutlich filters.category: [\"Museum\"].",
"valid_values_via": "hessen_lookup_values({field:'type'})"
}Grenzen
| Anfragen je Minute | 60 je Zugang, auf Wunsch anders eingestellt |
|---|---|
| Antwortgrösse | höchstens 80 KB; wird gekürzt und sagt es in „notes" |
| Treffer je Seite | 1 bis 50, voreingestellt 20 |
| Datensätze je Abruf | bis zu 20 auf einmal, mit Rohdaten 5 |
| Umkreis | bis 50 km |
| Auswertung | bis 400 Zellen |
Werkzeuge, Parameter und Beispiele auf dieser Seite stammen unmittelbar aus dem laufenden Server, zuletzt abgerufen am 16. September 2026.