Saltar al contenido

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 https://despacho.ai/api/v1
MCP https://mcp.despacho.ai/mcp

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/mcp

Modos de busqueda

Un solo endpoint, tres comportamientos. POST /search se adapta automaticamente segun los parametros enviados.

BM25 Busqueda por palabra clave

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().

Hibrido BM25 + vectorial con filtros

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.

Router Multi-consulta con Gemini

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)

ParametroTipoDefaultDescripcion
query *stringConsulta en lenguaje natural (2–2,000 caracteres)
limitint20Resultados a devolver (1–100, limitado por tier)
source_keystringFiltrar por fuente (scjn, dof, sjf, etc.). Desactiva el router.
jurisdictionstringJurisdiccion (federal, cdmx, jalisco, etc.). Desactiva el router.
document_typestringTipo de documento (tesis, ley, decreto, reglamento). Desactiva el router.
legal_matterstringMateria juridica (civil, penal, fiscal, laboral, administrativa). Desactiva el router.
authority_minintNivel minimo de autoridad (1–10). 10=Constitucion, 8=Leyes federales, 5=Jurisprudencia. Desactiva el router.
date_fromstringFecha minima de publicacion (YYYY-MM-DD). Desactiva el router.
date_tostringFecha maxima de publicacion (YYYY-MM-DD). Desactiva el router.
skip_vectorboolfalseModo BM25 puro. Desactiva embeddings y router.
max_text_lengthintTruncar 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.