API de búsqueda de documentación
Busca tu documentación de Jamdesk mediante programación. Impulsa chatbots, bots de Slack, búsqueda personalizada y agentes de IA con respuestas actualizadas.
La API de búsqueda de documentación te da acceso programático al contenido de tu documentación mediante búsqueda semántica. Un endpoint (POST /_api/search) recibe una consulta en lenguaje natural y devuelve los pasajes más relevantes de tu documentación, ordenados por relevancia.
Casos de uso
Inicio rápido
Ve a Project Settings → API Keys en el dashboard de Jamdesk. Haz clic en Generate Key, asígnale un nombre y copia la clave. Empieza con jd_live_ seguido de 32 caracteres hexadecimales (40 caracteres en total) y solo se muestra una vez.
Envía una solicitud POST a /_api/search en tu subdominio de documentación:
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"}'La respuesta devuelve un array de pasajes coincidentes con puntuaciones de relevancia y metadatos de página:
{
"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
}Autenticación
Todas las solicitudes requieren un token Bearer en el encabezado Authorization.
Authorization: Bearer jd_live_c83003a54ae0a83123454c3f7ec82f0a
Generar claves de API
En el dashboard de Jamdesk, navega a tu proyecto y haz clic en Settings.
Selecciona la pestaña API Keys.
Haz clic en Generate Key, ingresa un nombre descriptivo (p. ej. "Intercom chatbot") y haz clic en Create.
Copia la clave de inmediato. Empieza con jd_live_ seguido de 32 caracteres hexadecimales y se muestra solo una vez. Guárdala en tu gestor de secretos o en variables de entorno.
Gestión de claves
Las claves de API están limitadas a un solo proyecto. Una clave para acme.jamdesk.app no puede consultar la documentación de otro proyecto.
| Regla | Detalle |
|---|---|
| Formato | jd_live_<32 caracteres hex> (40 caracteres en total, nunca caduca) |
| Alcance | Una clave por proyecto (no puede acceder a otros proyectos) |
| Rotación | Revoca y regenera en cualquier momento desde Project Settings |
| Almacenamiento | Guárdala en variables de entorno o en un gestor de secretos; nunca la incluyas en el control de versiones |
Revocar claves
Para revocar una clave, ve a Project Settings → API Keys, busca la clave por nombre y haz clic en Revoke. Las claves revocadas dejan de funcionar de inmediato. Genera una clave nueva para reemplazarla.
Límites de tasa
Las solicitudes tienen un límite de frecuencia por clave de API.
| Plan | Límite |
|---|---|
| Pro | 60 solicitudes / minuto |
| Enterprise | Personalizado; contacta a soporte |
Cuando superas el límite, la API devuelve 429 Too Many Requests con un encabezado Retry-After: 60 y {"error": "Rate limit exceeded"} en el cuerpo.
Si necesitas límites de frecuencia más altos para una integración de producción, contáctanos para hablar sobre las opciones Enterprise.
Límites de consulta
Cada solicitud acepta un parámetro limit que controla cuántos resultados devolver. El máximo es 20, el valor predeterminado es 5 y el mínimo es 1. No hay paginación; todos los resultados coincidentes llegan en una sola respuesta. Si necesitas más contexto, prueba con una consulta más específica en lugar de aumentar el límite.
Una consulta sin coincidencias devuelve HTTP 200 con un array de resultados vacío:
{"query": "quantum entanglement", "results": [], "total": 0, "durationMs": 48}
Filtrado por idioma
Si tu sitio de documentación admite varios idiomas, la API filtra los resultados a un solo idioma por solicitud. Pasa language en el cuerpo de la solicitud con un código BCP-47 (p. ej. 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"}'
| Regla | Detalle |
|---|---|
| Predeterminado | en (inglés). Omite el campo, o pasa null, para usar el valor predeterminado. |
| Formato | BCP-47 (^[a-zA-Z]{2,3}([-_][a-zA-Z]{2,4})?$). Ejemplos: en, es, fr, pt-BR, zh-Hans. |
| Validación | Los valores con formato incorrecto devuelven 400 con {"error": "Invalid language code"}. |
| Etiquetas de 3 segmentos | No compatibles actualmente. Códigos como zh-Hant-HK y sr-Latn-RS devuelven 400. Contacta a soporte si los necesitas. |
| Proyectos multiidioma | El filtro es estricto: solo se devuelven los fragmentos etiquetados con el idioma solicitado. Una solicitud para de en un proyecto que solo tiene inglés y francés devuelve un conjunto de resultados vacío, no un 400. |
| Proyectos de un solo idioma | El filtro se ignora; siempre obtienes el conjunto completo de resultados. Enviar language es inofensivo, no un error. |
| Reflejado en la respuesta | Toda respuesta exitosa incluye un campo language con el valor que resolvió el servidor (valor de la solicitud, o el predeterminado en). |
Un proyecto es multiidioma cuando su docs.json tiene un array navigation.languages con dos o más entradas. Para comprobar si tu sitio es multiidioma, abre la pestaña Settings → Languages en el dashboard, o abre docs.json directamente.
El valor predeterminado en aplica incluso en proyectos que no tienen versión en inglés. Si tu proyecto multiidioma es, por ejemplo, solo francés y español, llamar al endpoint sin un campo language filtrará por en y devolverá un conjunto de resultados vacío. Pasa siempre un language explícito en sitios que no sean exclusivamente en inglés.
Manejo de errores
Todas las respuestas de error incluyen un campo error legible por máquina sobre el que puedes ramificar la lógica de tu programa.
| Estado | Valor de error | Significado | Acción |
|---|---|---|---|
| 400 | Missing or empty "query" field | El cuerpo de la solicitud falta o no tiene query | Añade una cadena query no vacía |
| 400 | Invalid language code | El campo language no es una cadena o no coincide con el patrón BCP-47 (null es válido; las cadenas vacías/en blanco y las etiquetas de 3 segmentos no lo son) | Usa un código válido de 1 o 2 segmentos como en, es, fr o pt-BR |
| 401 | invalid_key_format | Falta el encabezado Authorization o la clave no coincide con jd_live_<32 hex> | Verifica el formato del encabezado; debe ser Bearer jd_live_... |
| 401 | invalid_key | La clave no se reconoce o ha sido revocada | Genera una clave nueva en el dashboard |
| 403 | wrong_project | La clave es válida pero se generó para un proyecto diferente | Usa una clave que coincida con el slug del proyecto en la URL |
| 429 | Rate limit exceeded | Se superaron las 60 solicitudes por minuto | Espera la cantidad de segundos indicada en el encabezado Retry-After |
| 502 | Search temporarily unavailable | El backend de búsqueda vectorial está caído | Reintenta tras una breve espera |
| 503 | lookup_failed o redis_unavailable | El backend de verificación de claves no está disponible | Reintenta tras una breve espera |
401 y 403 son fallos permanentes. Reintentar con la misma clave no ayudará. 429, 502 y 503 son transitorios, así que reintenta con espera exponencial.
CORS
CORS está habilitado en todos los endpoints. Los clientes basados en navegador (aplicaciones de una sola página, extensiones de navegador, sitios estáticos) pueden llamar a /_api/search directamente sin un proxy backend. Se permiten todos los orígenes.
SDKs
No hay SDKs oficiales de lenguaje por el momento. Usa la API REST directamente mediante fetch, requests, curl o cualquier cliente HTTP. La colección de Postman a continuación ofrece ejemplos listos para bifurcar.
Versionado
La API está actualmente en la versión v1.0.0. Los cambios incompatibles (renombrado de campos, endpoints eliminados, cambios de autenticación) se anunciarán en el blog de Jamdesk y mediante un aviso de obsolescencia en el encabezado de respuesta X-Deprecation al menos 90 días antes de su eliminación.
Especificación OpenAPI
La especificación OpenAPI 3.1 completa está disponible en YAML. Impórtala en tu herramienta de generación de código, cliente de API o pipeline de pruebas de contrato.
Colección de Postman
Publicamos un workspace oficial de Postman con la especificación OpenAPI completa y una colección lista para bifurcar para que puedas probar solicitudes en la interfaz de Postman sin escribir código.
Después de bifurcar la colección, debes actualizar dos variables de la colección antes de que cualquier solicitud funcione:
baseUrl: configúrala con tu propio sitio de documentación de Jamdesk. Para la mayoría de los clientes eshttps://your-project.jamdesk.app(reemplazayour-projectcon el slug de tu proyecto). Los clientes con dominio personalizado usan su propio host. Los clientes que sirven documentación bajo una subruta deben incluir la ruta completa (p. ej.https://example.com/docs).apiKey: reemplaza el marcador de posición con una clave real generada en Dashboard → Project Settings → API Keys.
