Jamdesk Documentation logo

Docs 搜索 API

以编程方式搜索您的 Jamdesk 文档。为聊天机器人、Slack 机器人、自定义搜索和 AI 智能体提供最新答案。

Docs Search API 通过语义搜索为您提供文档内容的编程访问。一个端点(POST /_api/search)接收自然语言查询,并返回文档中按相关性排序的最相关段落。

使用场景

支持聊天机器人

将 Intercom Fin、Zendesk AI 或自定义聊天机器人连接到您的文档。机器人会基于引用的内容回答问题。

Slack 机器人

构建一个 /docs Slack 命令,搜索您的文档并将排名靠前的结果发布到任意频道。

自定义搜索

在您的产品、仪表板或内部工具中添加搜索界面,在上下文中展示相关文档。

AI 智能体

为 Claude 或 GPT 等 AI 智能体提供一个工具,让它们检索您最新的文档,而不是依赖其训练数据。

快速开始

1
生成 API 密钥

前往 Jamdesk 仪表板中的 Project Settings → API Keys。点击 Generate Key,为其命名并复制密钥。密钥以 jd_live_ 开头,后跟 32 个十六进制字符(共 40 个字符)。密钥仅显示一次。

2
发起第一个搜索请求

在您的文档子域名上向 /_api/search 发送 POST 请求:

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"}'
3
使用结果

响应返回一个匹配段落数组,包含相关性分数和页面元数据:

{
  "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
}

身份验证

所有请求都需要在 Authorization 头中提供 Bearer 令牌。

Authorization: Bearer jd_live_c83003a54ae0a83123454c3f7ec82f0a

Search API 适用于使用密码或 JWT 身份验证的站点。它检查的是您的 API 密钥,而不是访问者的登录状态。您无需将 /_api/search 添加到 auth.jwt.public。结果可能包含需要登录才能访问的页面。请从您的服务器调用该 API,切勿将密钥放入浏览器代码中。结果遵循与站内搜索相同的规则:受组限制的页面永远不会返回。隐藏页面以及设置了 search: false 的页面会被排除,除非您已将其设为可搜索。

同一密钥也可用于这些站点上的 MCP 服务器、.md 页面 URL 以及 llms.txt 和 llms-full.txt。

生成 API 密钥

1
打开项目设置

在 Jamdesk 仪表板中,进入您的项目并点击 Settings。

2
进入 API Keys

选择 API Keys 标签页。

3
创建密钥

点击 Generate Key,输入一个描述性名称(例如 "Intercom chatbot"),然后点击 Create。

4
复制密钥

立即复制密钥。它以 jd_live_ 开头,后跟 32 个十六进制字符。密钥仅显示一次。请将其存储在您的密钥管理器或环境变量中。

密钥管理

API 密钥仅限于一个项目。针对 acme.jamdesk.app 的密钥无法查询其他项目的文档。

规则详情
格式jd_live_<32 个十六进制字符>(共 40 个字符,永不过期)
范围每个项目一个密钥(无法访问其他项目)
轮换可随时在 Project Settings 中撤销并重新生成
存储存储在环境变量或密钥管理器中;切勿提交到源代码管理

撤销密钥

前往 Project Settings → API Keys,按名称找到该密钥,然后点击 Revoke。已撤销的密钥会立即失效。生成新密钥以替换它。

速率限制

请求按 API 密钥进行速率限制。

套餐限制
Pro60 次请求 / 分钟
Enterprise自定义;请联系支持

在需要登录的站点上,使用同一密钥发出的 MCP、.md 和 llms.txt 请求共享单独的限制,即每分钟 120 次请求。它们不计入 Search API 的限制,Search API 的请求也不计入它们的限制。

当超出限制时,API 返回 429 Too Many Requests,并附带 Retry-After: 60 头以及响应体中的 {"error": "Rate limit exceeded"}。

如需为生产集成获得更高的速率限制,请联系我们了解 Enterprise 方案。

查询限制

每个请求都接受一个 limit 参数,用于控制返回的结果数量。最大值为 20,默认值为 5,最小值为 1。不支持分页。所有匹配结果都会在一个响应中返回。如需更多上下文,请尝试使用更具体的查询,而不是提高 limit。

没有匹配项的查询返回 HTTP 200 以及一个空结果数组:

{"query": "quantum entanglement", "results": [], "total": 0, "durationMs": 48}

按语言筛选

在多语言站点上,API 每次请求只按一种语言过滤结果。在请求体中传入 language,使用 BCP-47 代码(例如 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"}'
规则详情
默认值en(英语)。省略该字段,或传入 null,即使用默认值。
格式BCP-47(^[a-zA-Z]{2,3}([-_][a-zA-Z]{2,4})?$)。示例:en、es、fr、pt-BR、zh-Hans。
验证格式错误的值返回 400 以及 {"error": "Invalid language code"}。
三段式标签目前不支持。zh-Hant-HK 和 sr-Latn-RS 等代码返回 400。如需使用,请联系支持。
多语言项目过滤是严格的:只返回标记为所请求语言的分块。对于仅包含英语和法语的项目,请求 de 会返回空结果集,而不是 400。
单语言项目过滤被忽略。您始终会获得完整结果集。发送 language 不会导致错误。
在响应中回显每个成功的响应都包含一个 language 字段,其值为服务器解析后的结果(请求值,或默认的 en)。

当项目的 docs.json 中 navigation.languages 数组包含两个或更多条目时,该项目即为多语言项目。请在仪表板的 Settings → Languages 标签页或 docs.json 中检查您的站点是否为多语言。

即使项目没有英语版本,默认的 en 仍然适用。一个仅有法语和西班牙语的项目,如果调用时未传入 language 字段,则会过滤 en,并返回空结果集。对于没有英语内容的站点,请始终显式传入 language。

错误处理

所有错误响应都包含一个机器可读的 error 字段,您可以据此进行程序化分支处理。

状态码error 值含义处理方式
400Missing or empty "query" field请求体缺少 query 或其为空添加一个非空的 query 字符串
400Invalid language codelanguage 字段不是字符串或不符合 BCP-47 模式(null 可以;空字符串/仅含空白以及三段式标签则不行)使用有效的一段或两段代码,如 en、es、fr 或 pt-BR
401invalid_key_formatAuthorization 头缺失,或密钥不符合 jd_live_<32 个十六进制字符>检查头格式;必须为 Bearer jd_live_...
401invalid_key密钥无法识别或已被撤销在仪表板中生成新密钥
403wrong_project密钥有效,但它是为其他项目生成的使用与 URL 中的项目 slug 匹配的密钥
429Rate limit exceeded超过每分钟 60 次请求等待 Retry-After 头中指定的秒数
502Search temporarily unavailable向量搜索后端不可用短暂退避后重试
503lookup_failed 或 redis_unavailable无法连接密钥验证后端短暂退避后重试

401 和 403 是永久性失败。使用相同密钥重试无济于事。429、502 和 503 是暂时性的。请使用指数退避进行重试。

CORS

所有端点均已启用 CORS。基于浏览器的客户端(单页应用、浏览器扩展、静态站点)可以直接调用 /_api/search,无需后端代理。允许所有来源。

SDK

目前没有官方的语言 SDK。请通过 fetch、requests、curl 或任何 HTTP 客户端直接使用 REST API。下方的 Postman 集合提供了可直接分叉使用的示例。

版本控制

该 API 目前版本为 v1.0.0。破坏性变更(字段重命名、端点移除、身份验证方式变更)将通过 Jamdesk 博客公布,并在移除前至少 90 天通过响应头 X-Deprecation 发出弃用通知。

OpenAPI 规范

完整的 OpenAPI 3.1 规范以 YAML 格式提供。将其导入您的代码生成工具、API 客户端或契约测试流水线。

下载 OpenAPI YAML

docs-search-api.yaml(OpenAPI 3.1,始终与最新发布版本保持同步)。

在 GitHub 上浏览

阅读规范源文件、提交 issue 或关注变更。

Postman 集合

我们发布了官方 Postman 工作区,包含完整的 OpenAPI 规范和可直接分叉使用的集合。无需编写代码,即可在 Postman 界面中测试请求。

Jamdesk Docs API 工作区

分叉该集合并在 Postman 中运行请求。包含入门文件夹和可用示例。

所有 Jamdesk API

浏览所有公开的 Jamdesk API 工作区,并随新 API 的发布保持更新。

在分叉后的集合中更新两个集合变量。在您完成此操作之前,任何请求都无法正常工作:

  • baseUrl:设置为您自己的 Jamdesk 文档站点。通常为 https://your-project.jamdesk.app(将 your-project 替换为您的项目 slug)。若使用自定义域名,请使用您自己的主机。若文档位于子路径下,请包含完整路径(例如 https://example.com/docs)。
  • apiKey:将占位符替换为在 仪表板 → Project Settings → API Keys 中生成的真实密钥。

后续步骤

Search 端点

包含请求/响应模式和交互式 playground 的完整参考

集成指南

Intercom、Zendesk、Slack 机器人和自定义聊天机器人的分步指南