Docs-Such-API
Durchsuchen Sie Ihre Jamdesk-Dokumentation programmatisch. Betreiben Sie Chatbots, Slack-Bots, eigene Suchen und KI-Agenten mit aktuellen Antworten.
Die Docs Search API bietet Ihnen programmatischen Zugriff auf Ihre Dokumentationsinhalte über semantische Suche. Ein Endpunkt (POST /_api/search) nimmt eine Suchanfrage in natürlicher Sprache entgegen und gibt die relevantesten Passagen aus Ihrer Dokumentation zurück, sortiert nach Relevanz.
Anwendungsfälle
Schnellstart
Gehen Sie zu Project Settings → API Keys im Jamdesk-Dashboard. Klicken Sie auf Generate Key, vergeben Sie einen Namen und kopieren Sie den Schlüssel. Er beginnt mit jd_live_, gefolgt von 32 Hex-Zeichen (insgesamt 40 Zeichen). Er wird nur einmal angezeigt.
Senden Sie eine POST-Anfrage an /_api/search auf Ihrer Dokumentations-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 enthält ein Array passender Passagen mit Relevanzwerten und Seitenmetadaten:
{
"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
Die Search API funktioniert auf Websites mit Passwort- oder JWT-Authentifizierung. Sie prüft Ihren API-Schlüssel, nicht den Login eines Besuchers. Sie müssen /_api/search nicht zu auth.jwt.public hinzufügen. Ergebnisse können Seiten hinter dem Login enthalten. Rufen Sie die API von Ihrem Server aus auf und fügen Sie den Schlüssel niemals in Browser-Code ein. Für Ergebnisse gelten dieselben Regeln wie für die Website-Suche: Seiten mit Gruppenbeschränkung werden nie zurückgegeben. Versteckte Seiten und Seiten mit search: false werden nicht berücksichtigt, sofern Sie sie nicht durchsuchbar gemacht haben.
Derselbe Schlüssel öffnet auf diesen Websites außerdem den MCP-Server, die .md-Seiten-URLs und llms.txt und llms-full.txt.
API-Schlüssel generieren
Navigieren Sie im Jamdesk-Dashboard zu Ihrem Projekt und klicken Sie auf Settings.
Wählen Sie den Tab API Keys.
Klicken Sie auf Generate Key, geben Sie einen aussagekräftigen Namen ein (z. B. „Intercom-Chatbot“) und klicken Sie auf Create.
Kopieren Sie den Schlüssel sofort. Er beginnt mit jd_live_, gefolgt von 32 Hex-Zeichen. Er wird nur einmal angezeigt. Speichern Sie ihn in Ihrem Secrets-Manager oder in Umgebungsvariablen.
Schlüsselverwaltung
API-Schlüssel gelten jeweils für ein Projekt. Ein Schlüssel für acme.jamdesk.app kann nicht auf die Dokumentation eines anderen Projekts zugreifen.
| Regel | Details |
|---|---|
| Format | jd_live_<32 Hex-Zeichen> (insgesamt 40 Zeichen, läuft nie ab) |
| Geltungsbereich | Ein Schlüssel pro Projekt (kein Zugriff auf andere Projekte) |
| Rotation | Jederzeit in den Project Settings widerrufen und neu generieren |
| Speicherung | In Umgebungsvariablen oder einem Secrets-Manager speichern; niemals in die Versionsverwaltung committen |
Schlüssel widerrufen
Gehen Sie zu Project Settings → API Keys, suchen Sie den Schlüssel nach Namen und klicken Sie auf Revoke. Widerrufene Schlüssel funktionieren sofort nicht mehr. Erstellen Sie einen neuen Schlüssel als Ersatz.
Rate-Limits
Anfragen sind pro API-Schlüssel ratenbegrenzt.
| Plan | Limit |
|---|---|
| Pro | 60 Anfragen / Minute |
| Enterprise | Individuell; Support kontaktieren |
Auf einer login-geschützten Website teilen sich MCP-, .md- und llms.txt-Anfragen mit demselben Schlüssel ein separates Limit von 120 Anfragen pro Minute. Sie zählen nicht auf das Limit der Search API, und Search-API-Anfragen zählen nicht auf deren Limit.
Bei Überschreitung des Limits antwortet die API mit 429 Too Many Requests, einem Retry-After: 60-Header und {"error": "Rate limit exceeded"} im Body.
Kontaktieren Sie uns zu Enterprise-Optionen für höhere Ratenlimits bei einer Produktionsintegration.
Abfragelimits
Jede Anfrage akzeptiert einen limit-Parameter, der die Anzahl der zurückgegebenen Ergebnisse steuert. Das Maximum beträgt 20, der Standardwert 5 und das Minimum 1. Es gibt keine Paginierung. Alle passenden Ergebnisse kommen in einer Antwort zurück. Für mehr Kontext versuchen Sie eine präzisere Suchanfrage statt eines höheren Limits.
Eine Abfrage ohne Treffer gibt HTTP 200 mit einem leeren Ergebnis-Array zurück:
{"query": "quantum entanglement", "results": [], "total": 0, "durationMs": 48}
Nach Sprache filtern
Auf einer mehrsprachigen Website filtert die API die Ergebnisse pro Anfrage auf eine Sprache. Übergeben Sie language im Request-Body 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). Lassen Sie das Feld weg oder übergeben Sie null, um den Standard 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 liefern 400 mit {"error": "Invalid language code"}. |
| 3-teilige Tags | Derzeit nicht unterstützt. Codes wie zh-Hant-HK und sr-Latn-RS liefern 400. Support kontaktieren, falls Sie diese benötigen. |
| Mehrsprachige Projekte | Der Filter ist strikt: Es werden nur Chunks zurückgegeben, die mit der angefragten Sprache markiert sind. Eine Anfrage für de an ein Projekt mit nur Englisch und Französisch liefert eine leere Ergebnismenge, keinen 400. |
| Einsprachige Projekte | Der Filter wird ignoriert. Sie erhalten immer die vollständige Ergebnismenge. Das Senden von language führt zu keinem Fehler. |
| In der Antwort enthalten | Jede erfolgreiche Antwort enthält ein Feld language mit dem vom Server ermittelten Wert (Anfragewert oder Standard en). |
Ein Projekt ist mehrsprachig, wenn seine docs.json ein Array navigation.languages mit zwei oder mehr Einträgen hat. Prüfen Sie den Tab Settings → Languages im Dashboard oder die docs.json, um zu sehen, ob Ihre Website mehrsprachig ist.
Der Standard en gilt auch für Projekte ohne englische Version. Ein Projekt mit Französisch und Spanisch, das ohne Feld language aufgerufen wird, filtert auf en und liefert eine leere Ergebnismenge. Übergeben Sie auf Websites ohne Englisch immer eine explizite language.
Fehlerbehandlung
Alle Fehlerantworten enthalten ein maschinenlesbares Feld error, nach dem Sie programmatisch verzweigen können.
| Status | Wert von error | Bedeutung | Maßnahme |
|---|---|---|---|
| 400 | Missing or empty "query" field | Request-Body fehlt oder enthält kein query | Einen nicht leeren query-String hinzufügen |
| 400 | Invalid language code | Das Feld language ist kein String oder entspricht nicht dem BCP-47-Muster (null ist in Ordnung; leere oder nur aus Leerzeichen bestehende Strings und 3-teilige Tags nicht) | Einen gültigen 1- oder 2-teiligen Code wie en, es, fr oder pt-BR verwenden |
| 401 | invalid_key_format | Authorization-Header fehlt oder der Schlüssel entspricht nicht jd_live_<32 Hex> | Headerformat prüfen; er muss Bearer jd_live_... lauten |
| 401 | invalid_key | Schlüssel wird nicht erkannt oder wurde widerrufen | Im Dashboard einen neuen Schlüssel erstellen |
| 403 | wrong_project | Schlüssel ist gültig, wurde aber für ein anderes Projekt erstellt | Einen Schlüssel verwenden, der zum Projekt-Slug in der URL passt |
| 429 | Rate limit exceeded | Mehr als 60 Anfragen pro Minute | Die Anzahl Sekunden im Header Retry-After warten |
| 502 | Search temporarily unavailable | Vektorsuch-Backend ist nicht erreichbar | Nach kurzer Wartezeit erneut versuchen |
| 503 | lookup_failed oder redis_unavailable | Backend zur Schlüsselprüfung ist nicht erreichbar | Nach kurzer Wartezeit erneut versuchen |
401 und 403 sind dauerhafte Fehler. Ein erneuter Versuch mit demselben Schlüssel hilft nicht. 429, 502 und 503 sind vorübergehend. Versuchen Sie es mit exponentiellem Backoff erneut.
CORS
CORS ist für alle Endpunkte aktiviert. Browserbasierte Clients (Single-Page-Apps, Browsererweiterungen, statische Websites) können /_api/search direkt aufrufen, ohne einen Backend-Proxy. Alle Ursprünge sind erlaubt.
SDKs
Derzeit gibt es keine offiziellen SDKs für Programmiersprachen. Nutzen Sie die REST-API direkt über fetch, requests, curl oder einen beliebigen HTTP-Client. Die Postman-Collection unten bietet sofort nutzbare Beispiele zum Forken.
Versionierung
Die API befindet sich derzeit in Version v1.0.0. Breaking Changes (umbenannte Felder, entfernte Endpunkte, geänderte Authentifizierung) werden über den Jamdesk-Blog und einen Deprecation-Hinweis im Antwort-Header X-Deprecation mindestens 90 Tage vor der Entfernung angekündigt.
OpenAPI-Spezifikation
Die vollständige OpenAPI-3.1-Spezifikation ist als YAML verfügbar. Importieren Sie sie in Ihr Codegen-Tool, Ihren API-Client oder Ihre Contract-Testing-Pipeline.
Postman-Sammlung
Wir veröffentlichen einen offiziellen Postman-Workspace mit der vollständigen OpenAPI-Spezifikation und einer sofort nutzbaren Collection zum Forken. Testen Sie Anfragen in der Postman-Oberfläche, ohne Code zu schreiben.
Aktualisieren Sie zwei Collection-Variablen in der geforkten Collection. Ohne diese funktioniert keine Anfrage:
baseUrl: auf Ihre eigene Jamdesk-Dokumentationswebsite setzen. Üblicherweisehttps://your-project.jamdesk.app(ersetzen Sieyour-projectdurch Ihren Projekt-Slug). Bei einer eigenen Domain verwenden Sie Ihren Host. Bei Dokumentation unter einem Unterpfad geben Sie den vollständigen Pfad an (z. B.https://example.com/docs).apiKey: den Platzhalter durch einen echten Schlüssel ersetzen, der unter Dashboard → Project Settings → API Keys erstellt wurde.
