Developers
API REST y servidor MCP para busqueda en el corpus juridico mexicano.
Busqueda hibrida BM25 + vectorial sobre 242 fuentes oficiales. Un solo endpoint (POST /search) con tres modos de operacion: palabra clave, hibrido con filtros, y router inteligente con Gemini.
REST API
curl -X POST https://despacho.ai/api/v1/search \
-H "Content-Type: application/json" \
-d '[object Object]'MCP (Claude Code)
claude mcp add despacho-legal \
--transport streamable-http \
https://mcp.despacho.ai/mcpModos de busqueda
Un solo endpoint, tres comportamientos. POST /search se adapta automaticamente segun los parametros enviados.
Solo indice invertido BM25 (pg_textsearch). Sin embeddings, sin router. El texto de la consulta se procesa con la configuracion legal_spanish (unaccent + spanish_stem).
Ideal para: autocompletado, coincidencias exactas, respuestas en <100ms.
curl -X POST https://despacho.ai/api/v1/search \
-H "Content-Type: application/json" \
-d '[object Object]'Respuesta meta
{
"total_ms": 82.3,
"result_count": 5,
"reranked": true,
"cache": null
}skip_vector: true desactiva la generacion de embeddings y el indice vectorial. Solo se consulta el indice BM25 con to_bm25query().
Genera un embedding con gemini-embedding-001 (768 dimensiones, normalizado L2) y combina resultados BM25 + HNSW vectorial mediante Reciprocal Rank Fusion (RRF, k=60). El router se omite porque la intencion es explicita.
Ideal para: consultas dirigidas donde conoces la fuente, jurisdiccion o tipo de documento.
curl -X POST https://despacho.ai/api/v1/search \
-H "Content-Type: application/json" \
-d '[object Object]'Respuesta meta
{
"total_ms": 356.2,
"result_count": 10,
"reranked": true,
"cache": null
}Cualquier filtro (source_key, jurisdiction, document_type, legal_matter, authority_min, date_from/to) activa el modo hibrido de una sola consulta. El router se omite automaticamente.
Un LLM (gemini-3.1-flash-lite) analiza la consulta y la descompone en 2-4 sub-busquedas paralelas, cada una con filtros y pesos especificos. Los resultados se fusionan con RRF ponderado (k=60). El router identifica la intencion (legislacion, jurisprudencia, disposicion, comparativa, administrativa, general) y selecciona las fuentes mas relevantes del catalogo.
Ideal para: consultas amplias o ambiguas. El sistema decide que fuentes consultar y como ponderar los resultados.
curl -X POST https://despacho.ai/api/v1/search \
-H "Content-Type: application/json" \
-d '[object Object]'Respuesta meta (tokens internos)
{
"total_ms": 890.1,
"result_count": 10,
"reranked": true,
"cache": null,
"embedding": {
"latency_ms": 182.3,
"model": "gemini-embedding-001",
"dimensions": 768
},
"router": {
"intent": "provision",
"sub_queries": 3,
"succeeded": 3
}
}Se activa automaticamente cuando: no hay filtros explicitos + skip_vector: false (default). Las sub-consultas del router se ejecutan en paralelo y sus resultados se fusionan.
Nota: Los campos meta.router, meta.embedding, meta.db_ms y meta.rerank_ms solo son visibles con tokens internos. Los tiers publicos (Free, MCP, Pro) reciben meta simplificado con total_ms, result_count, reranked y cache. El comportamiento del routing es identico — solo cambia la visibilidad de los metadatos.
Endpoints
Base URL: https://despacho.ai/api/v1. Todas las respuestas usan Content-Type: application/json con serializacion orjson. Compresion GZip automatica para respuestas mayores a 1 KB.
POST /api/v1/search
Busqueda hibrida BM25 + vectorial con routing inteligente. Consulta la seccion para ver el comportamiento segun parametros.
Parametros (body JSON)
| Parametro | Tipo | Default | Descripcion |
|---|---|---|---|
query * | string | — | Consulta en lenguaje natural (2–2,000 caracteres) |
limit | int | 20 | Resultados a devolver (1–100, limitado por tier) |
source_key | string | — | Filtrar por fuente (scjn, dof, sjf, etc.). Desactiva el router. |
jurisdiction | string | — | Jurisdiccion (federal, cdmx, jalisco, etc.). Desactiva el router. |
document_type | string | — | Tipo de documento (tesis, ley, decreto, reglamento). Desactiva el router. |
legal_matter | string | — | Materia juridica (civil, penal, fiscal, laboral, administrativa). Desactiva el router. |
authority_min | int | — | Nivel minimo de autoridad (1–10). 10=Constitucion, 8=Leyes federales, 5=Jurisprudencia. Desactiva el router. |
date_from | string | — | Fecha minima de publicacion (YYYY-MM-DD). Desactiva el router. |
date_to | string | — | Fecha maxima de publicacion (YYYY-MM-DD). Desactiva el router. |
skip_vector | bool | false | Modo BM25 puro. Desactiva embeddings y router. |
max_text_length | int | — | Truncar chunk_text (50–10,000 caracteres, limitado por tier) |
Respuesta (200 OK)
{
"results": [
{
"chunk_id": 12345,
"doc_key": "scjn_tesis_2024_001",
"source_key": "scjn",
"title": "AMPARO DIRECTO. PROCEDENCIA...",
"chunk_text": "El amparo directo procede contra sentencias definitivas...",
"url": "https://sjf.scjn.gob.mx/...",
"page_number": 1,
"authority_level": 9,
"category": "jurisprudencia",
"final_score": 0.8234
}
],
"meta": {
"total_ms": 356.2,
"result_count": 10,
"reranked": true,
"cache": null
}
}Cuando la respuesta viene de cache L2, meta.cache devuelve "L2_search" y la latencia cae a ~1-3ms.
Terminos de uso
- Para integraciones legitimas. No se permite scraping masivo ni redistribucion como servicio.
- Los textos legales provienen de fuentes publicas oficiales. despacho no garantiza vigencia ni completitud.
- Nos reservamos el derecho de revocar claves API que violen estos terminos.
- Aplican los Terminos y Condiciones generales.
Contacto
Claves API, soporte tecnico o integraciones enterprise: [email protected]
Para soluciones enterprise completas, visita ple.ad.