MCPConecta tu IA a 63M de contratos→

API Reference

Elicita API

Accede programáticamente al dataset de contratación pública española más completo: 63M+ registros agregados de PLACSP, TED, BOE, BORME y los boletines oficiales de las principales comunidades autónomas.

63M+
registros indexados
16
fuentes oficiales
<200ms
latencia media p95

Autenticación

Los endpoints de la API v1 utilizan autenticación Bearer. Incluye tu API key en el headerAuthorization. Las API keys se generan y gestionan desde/cuenta.

Authorization: Bearer elicita_live_<id>_<secreto>

También puedes usar /api/v1/search autenticado con tu sesión de Clerk (cookie __session) mientras navegas por la aplicación.

Rate Limits

Límites mensuales con token-bucket rate limiting por minuto.

PlanConsultas/mesRate limitNotas
Free3/día (web)—Sin acceso API
Pro1.000100 req/minIncluye API + MCP

Endpoints

POST/api/v1/keysAuth

Crear API key

Crea una nueva API key. El secreto completo solo se muestra una vez. Requiere plan Pro.

GET/api/v1/keysAuth

Listar API keys

Devuelve metadatos de las API keys activas (sin mostrar el secreto).

DELETE/api/v1/keys/:idAuth

Revocar API key

Marca una API key como revocada. Las claves revocadas dejan de funcionar inmediatamente.

GET/api/v1/org/:nifAuth

Perfil de organización

Ficha de proveedor: contratos, agregados y enriquecimiento BORME. Los agregados (volumen_total y los de la ficha pública) usan el importe corregido de errores de fuente verificados (issue #22 upstream); volumen_total_publicado conserva la suma publicada y cada contrato informa importe_corregido y correccion. Campos y motivos de corrección documentados en la sección «Perfil de organización». Requiere plan Pro.

POST/mcpPúblico

MCP server

Servidor MCP Streamable HTTP. Expone las cuatro tools estables, de solo lectura.

cURL — búsqueda pública

cURL — búsqueda autenticada

cURL — crear API key

JavaScript (fetch)

JavaScript (API key)

Python (requests)

Parámetros de búsqueda

ParámetroTipoRequeridoDescripción
qstringSí*Término de búsqueda. Se busca en título, organismo y adjudicatario. *Obligatorio si no se usa otro filtro.
cpvstringNoCódigo CPV o prefijo (p. ej. 45230000). Filtra por CPV cuando la fuente lo publica.
importeMinnumberNoImporte mínimo de adjudicación (€).
importeMaxnumberNoImporte máximo de adjudicación (€).
estadostringNoEstado del contrato: Anuncio, Adjudicada, Formalizado, etc.
fuentestringNoFuente: PLACE, TED, Galicia, Andalucía, Euskadi, Madrid, Catalunya.
nifstringNoNIF/CIF del adjudicatario.
desdestring (YYYY)NoAño de inicio del rango de publicación.
hastastring (YYYY)NoAño de fin del rango de publicación.
limitnumberNoMáximo de resultados. Público: ≤20, v1: ≤100. Default: 10/20.
offsetnumberNoDesplazamiento para paginación.
sortstringNoColumna de ordenación: titulo, organismo, adjudicatario, importe, fuente, fecha.
dirstringNoDirección: asc o desc. Default: desc.

Ejemplo de respuesta

Respuesta típica de /api/public/search y /api/v1/search:

Perfil de organización

GET /api/v1/org/:nif devuelve la ficha del proveedor con dos contables: el importe publicado (tal cual figura en la fuente) y el corregido, que corrige errores de fuente verificados (issue #22 upstream de licitaciones-espana). Los publicados se enseñan tal cual — que se publicara mal también es dato para la auditoría — y los agregados usan el corregido: sin adjudicación fiable, el contrato no suma.

CampoTipoDescripción
volumen_totalnumberSuma de adjudicaciones con los errores de fuente corregidos (issue #22 upstream). Es el agregado canónico de la ficha: sin adjudicación fiable, el contrato no suma.
volumen_total_publicadonumberSuma de los importes tal cual los publicó la fuente. Difiere de volumen_total cuando hay correcciones aplicadas.
total_all_timenumberNº de contratos tras deduplicar por expediente|organismo entre la ventana viva y el histórico PLACSP 2012-2026.
contratos[].importenumberAdjudicación publicada, sin corregir. Los filtros y la ordenación por importe de /api/v1/search operan sobre este valor.
contratos[].importe_corregidonumber | nullAdjudicación corregida con el mismo criterio que la ficha pública. Igual a importe cuando no hay corrección; null cuando no hay adjudicación publicada o el valor no es fiable y no existe corrección aplicable (motivo inverosimil).
contratos[].correccionstring | nullMotivo de la corrección aplicada (tabla siguiente). null si no se aplicó ninguna.

Motivos de corrección — contratos[].correccion

MotivoSignificado
registroError verificado a mano con evidencia en el upstream (errores_fuente.csv, issue #22): el publicado se sustituye por el valor probable documentado. Manda sobre la escala.
escala_x100Coma decimal perdida en origen: adjudicación de ≥100× el presupuesto que dividida entre 100 recupera su orden (mismas cifras que el presupuesto, o entre el 50 % y el 105 % de él).
escala_x1000Ídem, dividida entre 1.000.
inverosimilSalto ≥100× sin corrección fiable: el importe publicado no suma en los agregados (importe_corregido: null).
no_comparablePresupuesto < 1.000 € con salto ≥100× (precio unitario o simbólico, a menudo 1 €): el publicado se mantiene y el contrato queda marcado.
nullSin salto detectado ni registro aplicable: el importe se usa tal cual.

Ejemplo con el caso real del issue #22: la rehabilitación de c/ Kanpandegi 2 (Donostia) se publicó con 2.357.531.666 € adjudicados a CONSTRUCCIONES URDINBERRI, S.L.; el valor probable documentado es 2.357.531,67 €. Valores del dataset a 2026-09-29:

MCP

Elicita expone un servidor Model Context Protocol (MCP) en /mcp con transporte Streamable HTTP y protocolo 2025-06-18. Permite que agentes de IA como Claude o Cursor busquen licitaciones, consulten estadísticas, cobertura y códigos CPV con un contrato público estable.

POST https://elicita.es/mcp

Esta versión no ofrece OAuth público. Consulta el onboarding y las limitaciones del contrato antes de conectar un cliente. Documentación completa del MCP →

Tools estables (4, todas read-only):

ToolDescripción
search_licitacionesBusca licitaciones y contratos por texto, CPV, importe, estado, fuente, NIF y año.
get_statsConsulta el tamaño histórico del dataset y su última actualización global.
get_coberturaComprueba fuentes activas, periodicidad y frescura antes de investigar.
search_cpvEncuentra códigos CPV en español para convertir una necesidad en una búsqueda reproducible.

Errores

CódigoNombreDescripción
400Bad RequestFaltan parámetros obligatorios (p. ej. q) o son inválidos.
401UnauthorizedFalta API key, es inválida o la sesión de Clerk no está activa.
403ForbiddenEl plan actual no tiene acceso a la API o al MCP.
429Too Many RequestsSe ha alcanzado el límite diario de consultas o de rate limit.
500Internal Server ErrorError inesperado. Reintentar o contactar soporte.