Docs-Such-API
Durchsuche deine Jamdesk-Dokumentation programmgesteuert und versorge Chatbots, Slack-Bots und KI-Agenten mit aktuellen Antworten.
Die Docs-Such-API ermöglicht dir über die semantische Suche programmgesteuerten Zugriff auf deine Dokumentationsinhalte. Ein Endpoint (POST /_api/search) nimmt eine Anfrage in natürlicher Sprache entgegen und gibt die relevantesten Passagen deiner Dokumentation nach Relevanz sortiert zurück.
Anwendungsfälle
Schnellstart
Gehe im Jamdesk-Dashboard zu Project Settings → API Keys. Klicke auf Generate Key, gib dem Schlüssel einen Namen und kopiere ihn. Er beginnt mit jd_live_, gefolgt von 32 Hexadezimalzeichen (insgesamt 40 Zeichen), und wird nur einmal angezeigt.
Sende eine POST-Anfrage an /_api/search auf deiner Docs-Subdomain:
curl -X POST https://your-project.jamdesk.app/_api/search \
-H "Authorization: Bearer jd_live_c83003a54ae0a83123454c3f7ec82f0a" \
-H "Content-Type: application/json" \
-d '{"query": "How do I set up a custom domain?", "limit": 5, "language": "en"}'Die Antwort gibt ein Array übereinstimmender Passagen mit Relevanzwerten und Seitenmetadaten zurück:
{
"query": "How do I set up a custom domain?",
"language": "en",
"results": [
{
"title": "Custom Domains",
"section": "Step 4: Deploy",
"slug": "deploy/custom-domains",
"content": "To add a custom domain, go to Project Settings and enter your domain. You'll need to add a CNAME record pointing to your Jamdesk subdomain.",
"url": "https://your-project.jamdesk.app/deploy/custom-domains",
"score": 0.94
}
],
"total": 1,
"durationMs": 85
}Authentifizierung
Alle Anfragen benötigen ein Bearer-Token im Authorization-Header.
Authorization: Bearer jd_live_c83003a54ae0a83123454c3f7ec82f0a
API-Schlüssel generieren
Navigiere im Jamdesk-Dashboard zu deinem Projekt und klicke auf Settings.
Wähle den Tab API Keys aus.
Klicke auf Generate Key, gib einen aussagekräftigen Namen ein (z. B. "Intercom chatbot") und klicke auf Create.
Kopiere den Schlüssel sofort. Er beginnt mit jd_live_, gefolgt von 32 Hexadezimalzeichen, und wird nur einmal angezeigt. Speichere ihn in deinem Secrets-Manager oder in Umgebungsvariablen.
Schlüsselverwaltung
API-Schlüssel sind auf ein einzelnes Projekt beschränkt. Ein Schlüssel für acme.jamdesk.app kann nicht die Dokumentation eines anderen Projekts abfragen.
| Regel | Details |
|---|---|
| Format | jd_live_<32 hex chars> (insgesamt 40 Zeichen, läuft nie ab) |
| Gültigkeitsbereich | Ein Schlüssel pro Projekt (kein Zugriff auf andere Projekte) |
| Rotation | Jederzeit über Project Settings widerrufen und neu generieren |
| Speicherung | In Umgebungsvariablen oder einem Secrets-Manager speichern, niemals in die Quellcodeverwaltung übernehmen |
Schlüssel widerrufen
Um einen Schlüssel zu widerrufen, gehe zu Project Settings → API Keys, suche den Schlüssel anhand seines Namens und klicke auf Revoke. Widerrufene Schlüssel funktionieren sofort nicht mehr. Generiere einen neuen Schlüssel als Ersatz.
Rate-Limits
Anfragen werden pro API-Schlüssel mit einem Rate-Limit versehen.
| Plan | Limit |
|---|---|
| Pro | 60 Anfragen / Minute |
| Enterprise | Benutzerdefiniert; kontaktiere den Support |
Wenn du das Limit überschreitest, gibt die API 429 Too Many Requests mit einem Retry-After: 60-Header und {"error": "Rate limit exceeded"} im Body zurück.
Wenn du für eine produktive Integration höhere Rate-Limits benötigst, kontaktiere uns, um Enterprise-Optionen zu besprechen.
Abfragelimits
Jede Anfrage akzeptiert einen limit-Parameter, der steuert, wie viele Ergebnisse zurückgegeben werden. Das Maximum ist 20, der Standardwert ist 5 und das Minimum ist 1. Es gibt keine Paginierung; alle übereinstimmenden Ergebnisse werden in einer einzigen Antwort zurückgegeben. Wenn du mehr Kontext benötigst, versuche eine spezifischere Anfrage, statt das Limit zu erhöhen.
Eine Anfrage ohne Treffer gibt HTTP 200 mit einem leeren Ergebnis-Array zurück:
{"query": "quantum entanglement", "results": [], "total": 0, "durationMs": 48}
Nach Sprache filtern
Wenn deine Docs-Site mehrere Sprachen unterstützt, filtert die API die Ergebnisse pro Anfrage auf eine einzelne Sprache. Übergebe language im Anfragetext mit einem BCP-47-Code (z. B. en, es, fr, pt-BR, zh-Hans).
curl -X POST https://your-project.jamdesk.app/_api/search \
-H "Authorization: Bearer jd_live_c83003a54ae0a83123454c3f7ec82f0a" \
-H "Content-Type: application/json" \
-d '{"query": "¿Cómo configuro un dominio personalizado?", "language": "es"}'
| Regel | Details |
|---|---|
| Standard | en (Englisch). Lass das Feld weg oder übergebe null, um den Standardwert zu verwenden. |
| Format | BCP-47 (^[a-zA-Z]{2,3}([-_][a-zA-Z]{2,4})?$). Beispiele: en, es, fr, pt-BR, zh-Hans. |
| Validierung | Fehlerhafte Werte geben 400 mit {"error": "Invalid language code"} zurück. |
| Tags mit 3 Segmenten | Derzeit nicht unterstützt. Codes wie zh-Hant-HK und sr-Latn-RS geben 400 zurück. Kontaktiere den Support, wenn du sie benötigst. |
| Mehrsprachige Projekte | Der Filter ist strikt: Nur Chunks mit der angeforderten Sprache werden zurückgegeben. Eine Anfrage für de an ein Projekt, das nur Englisch und Französisch enthält, gibt eine leere Ergebnismenge und nicht 400 zurück. |
| Einsprachige Projekte | Der Filter wird ignoriert; du erhältst immer die vollständige Ergebnismenge. Das Senden von language ist unproblematisch und kein Fehler. |
| In der Antwort enthalten | Jede erfolgreiche Antwort enthält ein language-Feld mit dem vom Server aufgelösten Wert (Anfragewert oder Standardwert en). |
Ein Projekt ist mehrsprachig, wenn docs.json ein navigation.languages-Array mit mindestens zwei Einträgen enthält. Um zu prüfen, ob deine Site mehrsprachig ist, öffne den Tab Settings → Languages im Dashboard oder öffne docs.json direkt.
Der Standardwert en gilt auch für Projekte, die keine englische Version haben. Wenn dein mehrsprachiges Projekt beispielsweise nur Französisch und Spanisch enthält, filtert ein Aufruf des Endpoints ohne language-Feld nach en und gibt eine leere Ergebnismenge zurück. Übergib von nicht ausschließlich englischsprachigen Sites immer einen expliziten language-Wert.
Fehlerbehandlung
Alle Fehlerantworten enthalten ein maschinenlesbares error-Feld, anhand dessen du programmgesteuert verzweigen kannst.
| Status | error-Wert | Bedeutung | Aktion |
|---|---|---|---|
| 400 | Missing or empty "query" field | Im Anfragetext fehlt query oder das Feld ist leer | Füge einen nicht leeren query-String hinzu |
| 400 | Invalid language code | Das Feld language ist kein String oder entspricht nicht dem BCP-47-Muster (null ist zulässig; leere Strings, Strings aus Leerzeichen und Tags mit 3 Segmenten sind nicht zulässig) | Verwende einen gültigen Code mit 1 oder 2 Segmenten wie en, es, fr oder pt-BR |
| 401 | invalid_key_format | Der Authorization-Header fehlt oder der Schlüssel entspricht nicht jd_live_<32 hex> | Prüfe das Header-Format; es muss Bearer jd_live_... lauten |
| 401 | invalid_key | Der Schlüssel wird nicht erkannt oder wurde widerrufen | Generiere im Dashboard einen neuen Schlüssel |
| 403 | wrong_project | Der Schlüssel ist gültig, wurde aber für ein anderes Projekt generiert | Verwende einen Schlüssel, der zum Projektslug in der URL passt |
| 429 | Rate limit exceeded | 60 Anfragen pro Minute wurden überschritten | Warte die im Retry-After-Header angegebene Anzahl von Sekunden |
| 502 | Search temporarily unavailable | Das Backend der Vektorsuche ist nicht verfügbar | Wiederhole die Anfrage nach einer kurzen Wartezeit |
| 503 | lookup_failed oder redis_unavailable | Das Backend zur Schlüsselüberprüfung ist nicht erreichbar | Wiederhole die Anfrage nach einer kurzen Wartezeit |
401 und 403 sind dauerhafte Fehler. Ein erneuter Versuch mit demselben Schlüssel hilft nicht. 429, 502 und 503 sind vorübergehende Fehler; wiederhole die Anfrage mit exponentiellem Backoff.
CORS
CORS ist für alle Endpoints aktiviert. Browserbasierte Clients (Single-Page-Apps, Browsererweiterungen, statische Sites) können /_api/search direkt ohne Backend-Proxy aufrufen. Alle Origins sind zulässig.
SDKs
Derzeit gibt es keine offiziellen SDKs für Programmiersprachen. Verwende die REST-API direkt über fetch, requests, curl oder einen beliebigen HTTP-Client. Die Postman-Sammlung unten bietet sofort verwendbare Beispiele, die du forken kannst.
Versionierung
Die API befindet sich derzeit bei v1.0.0. Breaking Changes (Umbenennungen von Feldern, entfernte Endpoints, geänderte Authentifizierung) werden mindestens 90 Tage vor ihrer Entfernung über den Jamdesk-Blog und einen Hinweis zur Einstellung im X-Deprecation-Antwortheader angekündigt.
OpenAPI-Spezifikation
Die vollständige OpenAPI-3.1-Spezifikation ist als YAML verfügbar. Importiere sie in dein Codegen-Tool, deinen API-Client oder deine Pipeline für Vertragstests.
Postman-Sammlung
Wir veröffentlichen einen offiziellen Postman-Arbeitsbereich mit der vollständigen OpenAPI-Spezifikation und einer Sammlung, die du forken kannst, um Anfragen in der Postman-Oberfläche ohne eigenen Code zu testen.
Nach dem Forken der Sammlung musst du vor der ersten funktionierenden Anfrage zwei Sammlungsvariablen aktualisieren:
baseUrl: Setze den Wert auf deine eigene Jamdesk-Docs-Site. Für die meisten Kunden ist dieshttps://your-project.jamdesk.app(ersetzeyour-projectdurch deinen Projektslug). Kunden mit eigener Domain verwenden ihren eigenen Host. Kunden, die ihre Dokumentation unter einem Unterpfad bereitstellen, müssen den vollständigen Pfad angeben (z. B.https://example.com/docs).apiKey: Ersetze den Platzhalter durch einen echten Schlüssel, der unter Dashboard → Project Settings → API Keys generiert wurde.
