Qué es y para quién
En llano
Una API es una puerta para programas. En vez de abrir la web y leer una ficha, tu programa pide la misma información a una dirección de Internet y recibe JSON: texto ordenado en campos que cualquier lenguaje entiende (Python, JavaScript, una hoja de cálculo con Power Query…). Cada petición es una URL; cada respuesta, un documento con campos y valores.
La API de OpenMoney devuelve lo mismo que ves en la web, sin recortes: las fichas de empresa, órgano, municipio y administración, las licitaciones que admiten ofertas hoy, las convocatorias de subvenciones que admiten solicitudes hoy, las historias y los mapas. Sirve, sobre todo, para tres cosas:
Avisos y seguimiento
Cada mañana, las licitaciones nuevas que encajan con tu actividad y tu territorio, sin repetir lo que ya viste.
En tu programa o en tu plataforma
Fichas de empresas y órganos, antecedentes de un expediente o licitaciones en plazo en tu CRM o tu herramienta; dentro de un producto para terceros, con un acuerdo de plataforma.
Analizar
Descargar a Python, R o una hoja de cálculo lo que quieras cruzar: adjudicaciones por año, proveedores de un órgano, gasto por habitante.
Qué datos hay
| Dato | Ruta | Qué trae |
|---|---|---|
| Buscar | /search | Empresas, órganos, municipios y administraciones por nombre o identificador. Devuelve el id que aceptan las fichas. |
| Empresa | /empresa/{nif} | Adjudicado por año, órganos que le contratan, CPV, competidores, subvenciones y señales. |
| Novedades por empresa | /empresas/novedades | Para una lista de NIF, los contratos ganados y las subvenciones recibidas que las fuentes han publicado desde una marca: lo que hace falta para avisar «tu cliente ha resultado adjudicatario». |
| Órgano de contratación | /organo/{id} | Adjudicado por año, mayores proveedores, procedimientos, expedientes recientes y licitaciones en plazo. |
| Municipio | /municipio/{ine} | Padrón, liquidación del ayuntamiento por capítulo y por habitante, órganos y proveedores. |
| Administraciones | /administraciones | Estado, Seguridad Social y comunidades: liquidaciones, contratos y subvenciones. |
| Licitaciones en plazo | /licitaciones/… | Expedientes que admiten ofertas hoy, con filtros (también como={nif}: las que le encajan a una empresa, de más a menos y con el motivo, por su historial o, sin contratos, por su sector y dónde está; y sector= con provincia= o municipio= para un perfil sin NIF); la ficha de cada uno con antecedentes; y las novedades desde una marca. |
| Radar por lotes | POST /licitaciones/encaje | Para una cartera de hasta 500 clientes por llamada (50 con el plan Pro; por NIF o por sector, lugar y tamaño), las licitaciones en plazo que mejor le encajan a cada uno, con sus motivos: lo que una plataforma o una asesoría pide cada mañana en una sola llamada. |
| Subvenciones abiertas | /convocatorias/… | Convocatorias de la BDNS que admiten solicitudes hoy (por defecto las que se pueden pedir: concurrencia competitiva y concesión directa con bases; tipo para quedarse con una), con filtros por comunidad, sector, tipo de beneficiario y plazo; la ficha de cada una con sus bases, documentos, anuncios y las concesiones ya publicadas; y las novedades desde una marca, ampliaciones de plazo incluidas. |
| Categorías CPV | /cpv, /cpv/{codigo} | Qué se contrata en cada categoría del CPV: cuánto por año, quién compra, quién gana y qué está en plazo. El índice, con las 45 divisiones y las 317 categorías. |
| Historias, mapas y portada | /historias, /mapa, /portada | Las lecturas con cifras comprobables, los datos de los mapas y las cifras de la portada. |
Todo son importes adjudicados o concedidos, sin IVA, desde 2022, reconciliados y limpios a partir de las fuentes oficiales. Lo que no está en la web tampoco está en la API: lo cuenta la metodología.
Empezar en cinco minutos
Paso 1
Crea una cuenta
En openmoney.es/cuenta, con tu correo. Sin contraseña ni tarjeta: entras con el enlace que te enviamos.
Paso 2
Crea una clave y cópiala
En la misma página, «Nueva clave». Empieza por
om_y se enseña una sola vez. Guárdala donde guardes tus contraseñas.Paso 3
Haz tu primera llamada
Manda la clave en la cabecera
X-API-Keyde cada petición. Abajo tienes el ejemplo en tres lenguajes.
Tu primera llamada
Buscamos «indra» y la API contesta con las empresas y órganos que encajan. Sustituye om_… por tu clave.
curl -H "X-API-Key: om_…" "https://api.openmoney.es/search?q=indra"import httpx
r = httpx.get("https://api.openmoney.es/search",
params={"q": "indra"},
headers={"X-API-Key": "om_…"})
r.raise_for_status() # lanza un error si la respuesta no es 200
for x in r.json():
print(x["tipo"], x["id"], x["nombre"])const r = await fetch("https://api.openmoney.es/search?q=indra", {
headers: { "X-API-Key": "om_…" },
});
if (!r.ok) throw new Error(`la API respondió ${r.status}`);
for (const x of await r.json()) console.log(x.tipo, x.id, x.nombre);[
{"tipo": "empresa", "id": "A28599033", "nombre": "INDRA SISTEMAS SA", "peso": 1843201377.6, "score": 0.98},
{"tipo": "empresa", "id": "B84138296", "nombre": "INDRA BPO SLU", "peso": 3296999.98, "score": 0.77},
{"tipo": "organo", "id": "E04973401", "nombre": "Subdirección General de Adquisiciones de Armamento y Material", "peso": 912004112.3, "score": 0.41}
]Anatomía de la llamada
| Parte | Qué es |
|---|---|
https://api.openmoney.es | La base: todas las rutas cuelgan de aquí. Siempre por HTTPS. |
/search | La ruta: qué pides. Cada ruta está en la referencia. |
?q=indra | Los parámetros: cómo lo filtras. Van tras ?, separados por & (?cpv=45&dias=30). Las fichas llevan el identificador en la propia ruta (/empresa/A28599033). |
X-API-Key | La cabecera con tu clave. Viaja junto a la petición, no en la URL, así no queda en historiales ni en registros. |
| Respuesta | JSON en UTF-8, comprimido si mandas Accept-Encoding: gzip (httpx y fetch lo hacen solos; en curl, añade --compressed). Cada petición se basta por sí misma: no hay que «abrir sesión». |
Todas las rutas son GET: solo leen. Si prefieres una herramienta con botones, importa https://api.openmoney.es/openapi.json en Postman, Insomnia o Bruno: verás cada ruta con sus parámetros y podrás probarla pegando tu clave.
La clave
La clave es una contraseña larga para programas. Identifica tu cuenta en cada petición: con ella contamos la cuota de tu cuenta y te enseñamos tu uso. Se crea en tu cuenta con un plan con API (Pro, Despacho o un acuerdo de plataforma), se enseña una sola vez y viaja en la cabecera X-API-Key:
GET /empresa/A28599033 HTTP/1.1
Host: api.openmoney.es
X-API-Key: om_…Personal e intransferible
Una cuenta, una persona. No la compartas ni la publiques: quien la tenga gasta tu cuota y actúa en tu nombre.
Nunca en el navegador ni en un repositorio
Guárdala en una variable de entorno o en el gestor de secretos de tu plataforma. Si la llamas desde una web, hazlo desde tu servidor.
Hasta tres activas, con nombre
Una por integración («pruebas», «producción») para saber cuál usa qué y revocar una sin tocar las demás. Todas comparten la cuota de la cuenta.
Si la pierdes, revócala
Solo guardamos una huella (SHA-256) de la clave: no podemos enseñártela otra vez. Revocar deja de valer al instante (a lo sumo, en quince segundos).
Sin clave, o con una clave que no existe, la respuesta es 401 y un mensaje que lo explica. Solo tres rutas son libres: / (qué es esta API), /health (si está sana) y /openapi.json (esta referencia en formato OpenAPI 3).
Desde un asistente de IA (MCP)
Si en vez de un programa lo que tienes es Claude, ChatGPT o Claude Code, no hace falta clave: OpenMoney tiene un conector MCP (el estándar para que un asistente use un servicio como herramienta) en https://mcp.openmoney.es/mcp. Se añade como conector, se pulsa «Conectar», se entra con el correo y se da el permiso en una pantalla de openmoney.es; el asistente recibe un pase que solo vale para el conector y se refresca solo. Con una cuenta gratis son 15 consultas al día; con un plan con API, las de la API. La guía paso a paso, con preguntas de ejemplo, está en Conecta OpenMoney con Claude y ChatGPT.
Para un programa o una plataforma que ya tiene clave, el mismo conector acepta la clave en vez del pase: en la cabecera Authorization: Bearer om_… o en X-API-Key, que es lo que cada cliente MCP sabe mandar. Las consultas gastan la cuota de la cuenta como cualquier petición y en el panel salen con el prefijo mcp. Las once herramientas (buscar licitaciones, ver una por dentro, buscar una entidad, fichas de empresa y de órgano, novedades por NIF, lo que encaja con una empresa, con un perfil o con una cartera entera, el catálogo de filtros y la búsqueda de códigos CPV) devuelven lo mismo que estas rutas, recortado a lo que un asistente necesita, y cada dato lleva su enlace a la ficha.
Límites y cuota
Hay dos barreras. Las dos responden 429 con la cabecera Retry-After (cuántos segundos esperar) cuando se alcanzan.
| Barrera | Cuánto | Para qué |
|---|---|---|
| Por dirección IP | 60 peticiones seguidas y, a partir de ahí, 1 por segundo | Frenar a quien dispara sin clave o en bucle. Vale para toda la API. |
| Por cuenta | 200 peticiones al día con el plan Pro, 500 con el Despacho y las de su acuerdo con una plataforma, entre todas tus claves; se renueva a las 00:00 UTC | Repartir el uso con justicia. Es la cuota de tu cuenta, no de cada clave, y se ve en cada respuesta. |
| Por petición | 50 NIF o clientes con el plan Pro; 500 con el Despacho y con un acuerdo de plataforma | En /empresas/novedades y en el radar por lotes. El Pro es para tu propio uso; una cartera entera cabe en una llamada con el Despacho. Más, en varias llamadas. |
Cada respuesta con clave lleva tres cabeceras con el estado de tu cuota:
HTTP/1.1 200 OK
Content-Type: application/json
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 187
X-RateLimit-Reset: 1789084800| Cabecera | Qué dice |
|---|---|
X-RateLimit-Limit | La cuota diaria de tu cuenta. |
X-RateLimit-Remaining | Las peticiones que te quedan hoy, descontando las de todas tus claves. |
X-RateLimit-Reset | Cuándo se renueva, en segundos desde 1970 (la próxima medianoche UTC). |
Cómo llegar lejos con 200 al día
- Pide páginas grandes:
limite=100en las listas y hasta 500 en las novedades. Una página cuenta como una petición. - Guarda lo que ya tienes. Los datos cambian una vez al día: una ficha bajada por la mañana vale todo el día.
- Para seguir las licitaciones, usa las novedades desde una marca: solo te llega lo que cambió.
¿Necesitas más? El plan Despacho sube la cuota y los NIF por petición, y con un acuerdo de plataforma la cuota va a la medida de tu volumen: cuéntanos qué vas a hacer con los datos y cuántas peticiones necesitas.
Errores
Cuando algo falla, la respuesta es JSON con la clave detail y el motivo, en castellano:
{"detail": "hace falta una clave de la API en la cabecera X-API-Key; va incluida en los planes Pro y Despacho y en los acuerdos de plataforma (https://openmoney.es/precios) y se crea en https://openmoney.es/cuenta (documentación: https://openmoney.es/api)"}| Código | Qué ha pasado | Qué hacer |
|---|---|---|
401 | Sin clave, o clave con forma incorrecta o desconocida. | Revisa la cabecera X-API-Key y que la clave sea la que copiaste al crearla. |
403 | La clave está revocada, o el plan de tu cuenta ya no incluye la API (volvió al gratis o terminó la prueba del Pro). | Si está revocada, crea otra en tu cuenta. Las demás no se borran: vuelven a funcionar tal cual con un plan con API. |
404 | No existe: una empresa sin adjudicaciones ni concesiones desde 2022, un código INE que no es, una historia que no hay. | No reintentes. Busca el identificador con /search. |
422 | Un parámetro mal escrito o fuera de rango. detail es una frase («cpv: hasta 10 valores separados por comas…») o una lista con la ruta del campo (loc) y el mensaje. | Corrige el parámetro; la referencia dice qué admite cada uno. |
429 | Límite por IP o cuota diaria agotada. | Espera los segundos de Retry-After y repite. |
503 | La base de datos ha tardado demasiado o está saturada. Es raro y dura poco. | Espera lo que diga Retry-After y repite. |
Para un cliente robusto: reintenta los 429 y 503 respetando Retry-After; no reintentes los demás 4xx; y trata cualquier campo nuevo en una respuesta como algo que puedes ignorar (añadimos campos, pero no quitamos ni renombramos sin avisar en Cambios).
Importes, fechas, identificadores y códigos
Importes
En euros, sin IVA, y son importes adjudicados o concedidos, nunca pagos. Los acuerdos marco y los importes repetidos no se suman (se marcan como sospechoso donde aparecen). Las liquidaciones son obligaciones reconocidas netas. Nada anterior a 2022. Lo explica la metodología.
Fechas
En ISO 8601: los días como 2026-09-23; las marcas de tiempo con zona, en UTC (2026-09-09T05:00:00+00:00). Un parámetro de fecha y hora sin zona se toma como UTC.
Identificadores
Cada ficha se pide por su identificador oficial. /search devuelve el tipo y el id exactos que acepta cada una.
| Qué | Identificador | Ejemplo | De dónde sale |
|---|---|---|---|
| Empresa | NIF (con o sin separadores, mayúsculas o minúsculas). Las uniones temporales, por su id UTE-… tal cual. | A28599033 | Registro Mercantil; lo publica PLACSP en cada adjudicación. |
| Órgano de contratación | Código DIR3 o, si PLACSP no lo trae, la clave NIF:… o PLAT:… que devuelven las fichas. | L01280796 | Directorio Común de unidades del Estado (DIR3). |
| Municipio | Código INE de cinco cifras. | 28079 | Instituto Nacional de Estadística. |
| Administración | Su slug (nombre corto en la URL). | estado, seguridad-social, canarias | Los publica /administraciones. |
| Licitación | Su número en PLACSP. | 20379296 | Lo trae cada expediente de las listas (id). |
Códigos
| Código | Qué clasifica | Cómo se filtra |
|---|---|---|
| CPV | El objeto del contrato (nomenclatura europea, 8 dígitos). | Por prefijo: 45 son todas las obras, 45233 las de carreteras. Varios, separados por comas. |
| NUTS | El territorio (código europeo de regiones). | Por prefijo: ES51 Cataluña, ES511 Barcelona, ES toda España. |
| Tipo de contrato | Suministros, servicios, obras… (códigos de PLACSP). | 1 suministros, 2 servicios, 3 obras. Varios, separados por comas. |
| Procedimiento | Cómo se adjudica (códigos de PLACSP). | 1 abierto, 9 abierto simplificado… Varios, separados por comas. |
/licitaciones/resumen devuelve cada código con su nombre y cuántos expedientes tiene hoy: es la lista completa y viva de valores para los filtros. Y las respuestas llevan siempre el nombre junto al código (tipo_nombre, nuts_nombre…), así no necesitas tablas aparte.
Personas físicas y enlaces
- Personas físicas: nunca hay DNI ni NIE. Sus importes aparecen agregados como «personas físicas», y un DNI en una lista de NIF se ignora.
- Enlaces:
linkes la página del expediente en la plataforma de origen (PLACSP o la autonómica). Las fichas de la web están enhttps://openmoney.es/empresa/{nif},/organo/{id},/municipio/{ine}y/licitaciones.
Listas, páginas y novedades
Páginas
Las listas se piden por trozos con dos parámetros: desde (en qué posición empieza la página; la primera es 0) y limite (cuántos elementos trae). La respuesta incluye total, el número de elementos que cumplen el filtro, para que sepas cuántas páginas quedan. Una página más allá del final vuelve vacía, con el total real.
curl -H "X-API-Key: om_…" "https://api.openmoney.es/licitaciones/abiertas?cpv=45&limite=100&desde=0"
curl -H "X-API-Key: om_…" "https://api.openmoney.es/licitaciones/abiertas?cpv=45&limite=100&desde=100"Novedades desde una marca
/licitaciones/novedades sirve para mantenerte al día sin repetir descargas. La idea: guardas una marca (un instante) y cada vez pides «lo que ha cambiado desde la marca». La API te devuelve los expedientes nuevos o modificados desde entonces, los retirados, y la marca nueva para la próxima vez.
- La primera vez, pide con
desdeigual a una fecha reciente (2026-09-09T05:00:00Z). - Lee
expedientes(nuevos o modificados; cada uno dice si sigueabierta) ybajas(los que PLACSP retiró). - Si
masestrue, quedan páginas: repite con eldesdey eltrasque vienen ensiguiente. - Cuando
masesfalse, guardasiguiente: es la marca de tu próxima consulta.
{
"desde": "2026-09-09T05:00:00Z", "mas": true,
"siguiente": {"desde": "2026-09-09T10:05:07.693000Z", "tras": "https://contrataciondelestado.es/sindicacion/PlataformasAgregadasSinMenores/20371637"},
"expedientes": [
{"id": 20384205, "expediente": "201/2026", "titulo": "Adquisición de material de mantenimiento.", "organo": "L01342257", "organo_nombre": "Alcaldía del Ayuntamiento de Villamuriel de Cerrato",
"estado": "RES", "estado_nombre": "Resuelta", "abierta": false, "baja": null, "tipo": "1", "tipo_nombre": "Suministros", "procedimiento": "6", "procedimiento_nombre": "Contrato menor",
"presupuesto": 165.29, "presupuesto_origen": "sin_iva", "presupuesto_sin_iva": 165.29, "presupuesto_estimado": 165.29, "actualizado": "2026-09-09T05:41:32.468000Z", "…": "los demás campos de la lista"},
{"…": "hasta 500"}
],
"bajas": [{"id_num": 19922421, "id_url": "https://contrataciondelestado.es/sindicacion/datosAbiertosMenores/19922421", "expediente": "24675", "baja": "2026-09-09T06:00:03.874000Z"}],
"bajas_mas": false
}Novedades por empresa
POST /licitaciones/encaje es el radar de una cartera: le pasas hasta 500 clientes (50 con el plan Pro; por nif, o por sector con provincia, municipio o comunidad y tamano cuando no tienen contratos) y devuelve, para cada uno y en el mismo orden, sus limite licitaciones en plazo con más encaje y el porqué de cada una (encaje: nivel, motivos y avisos), más estado (historial, ayudas, declarado o sin_perfil con el motivo). Con nuevas_desde (ayer, en el radar de cada mañana) las anunciadas desde entonces llevan el aviso «nueva». Una empresa sin contratos encaja por su sector, traducido a grupos CPV con lo que ganan de verdad las empresas de ese sector (medido en 67.773 empresas), y nunca pasa de «medio». Cuenta como una petición; una cartera de 500 pymes tarda unos segundos. Hasta 50 clientes por llamada con el plan Pro (uso propio) y 500 con un acuerdo de plataforma.
/empresas/novedades sigue el mismo esquema para una lista de empresas: le pasas hasta 500 NIF (50 con el plan Pro; nif=A1,B2,…) y una marca, y devuelve los contratos que han ganado (adjudicaciones, según PLACSP) y las subvenciones que han recibido (concesiones, según la BDNS) desde entonces, cada fila con su nif. Nuevo es lo que la fuente publicó después de la marca, no lo firmado después: una adjudicación de hace meses que PLACSP publica hoy cuenta hoy, así no se te escapa aunque consultes cada semana. Los DNI y NIE de la lista se ignoran y se dicen en ignorados; las UTE van por su propio id («UTE-…»).
Las dos listas salen de una sola secuencia ordenada por instante (versión del expediente, o día de alta en la BDNS), y mas y siguiente funcionan igual que arriba. Dos cosas a tener en cuenta: un expediente que cambia de versión después de adjudicado (formalización, rectificación) vuelve a aparecer con su actualizado nuevo, y la marca que devuelve la respuesta puede repetir el último día de concesiones (la BDNS publica un día que cargamos en dos rondas). Antes repetir que perder: si vas a avisar a alguien, recuerda lo ya visto por id (concesión) o por id, lote y nif (adjudicación).
{
"desde": "2026-09-10T00:00:00Z", "nif": ["B15123177", "B16553232"],
"ignorados": [{"nif": "12345678Z", "motivo": "persona física (DNI o NIE): solo personas jurídicas"}],
"mas": false, "siguiente": {"desde": "2026-09-11T00:00:00Z", "tras": ""},
"adjudicaciones": [
{"nif": "B15123177", "adjudicatario": "ELECTRONICA NOROESTE SERVICIOS GENERALES, S.L.", "id": 20353340, "expediente": "PcPG/2026/828991",
"titulo": "RET-ME-2026-0175: Suministro, instalación y adecuación eléctrica del centro de telecomunicaciones de Santa Cecía…", "objeto": "…",
"organo": "A12009486", "organo_nombre": "RETEGAL S.A.", "lote": "0", "resultado": "9", "resultado_nombre": "Formalizado",
"fecha_adjudicacion": null, "contrato_fecha": "2026-09-10", "importe_sin_iva": 12826.0, "presupuesto_sin_iva": 15125.0, "n_licitadores": 3,
"es_menor": false, "sospechoso": null, "estado": "RES", "estado_nombre": "Resuelta", "n_versiones": null,
"link": "https://www.contratosdegalicia.gal/licitacion?N=828991", "actualizado": "2026-09-10T18:10:59.151000Z"}
],
"concesiones": [
{"nif": "B16553232", "beneficiario": "LAVANDERIAS MUVI, S.L.", "id": 156984283, "cod_concesion": "GR156984283",
"convocatoria": "Reafianzamiento CAIB avales concedidos por ISBA,SGR, en ejercicio 2026 sujetos a minimis", "id_convocatoria": 1096692, "numero_convocatoria": "895131",
"nivel1": "AUTONOMICA", "nivel2": "ILLES BALEARS", "nivel3": "DIRECCIÓN GENERAL DEL TESORO, POLÍTICA FINANCIERA Y PATRIMONIO", "instrumento": "GARANTÍA",
"importe": 11250.0, "ayuda_equivalente": 875.0, "fecha_concesion": "2026-08-12", "fecha_alta": "2026-09-11", "url_br": "https://www.caib.es/eboibfront/pdf/es/2023/163/1150418"}
]
}Cuándo consultar
Los datos se cargan una vez al día, poco después de las 03:00 UTC, con seis horas de solape sobre el feed de PLACSP (y las licitaciones, otra vez a las 21:00 UTC); las convocatorias de subvenciones, en la misma ronda de las 03:00 UTC (la BDNS publica de lunes a viernes). Consulta a partir de las 08:00 UTC y guarda siempre la marca que devuelve la respuesta, no tu hora local: así no pierdes ni repites expedientes aunque el feed llegue con retraso.
Recetas
Programas completos para copiar. En todos, sustituye om_… (o la variable OM_CLAVE) por tu clave.
Licitaciones que encajan conmigo, ordenadas por presupuesto
Obras en Cataluña que cierran en quince días o menos. Python con httpx (pip install httpx).
import httpx
api = httpx.Client(base_url="https://api.openmoney.es", headers={"X-API-Key": "om_…"}, timeout=30)
# obras (tipo 3) en Cataluña (ES51) que cierran en 15 días o menos, las de mayor presupuesto primero
r = api.get("/licitaciones/abiertas", params={"tipo": "3", "nuts": "ES51", "dias": 15, "orden": "presupuesto", "limite": 100})
r.raise_for_status()
print(r.headers["X-RateLimit-Remaining"], "peticiones restantes hoy")
for x in r.json()["resultados"]:
print(x["fin_plazo_ofertas"], x["organo_nombre"], x["presupuesto"], x["link"])Seguir las novedades cada mañana
Guarda la marca en un fichero y, en cada ejecución, procesa solo lo que cambió. Pensado para un cron a las 08:00 UTC.
import json, httpx
api = httpx.Client(base_url="https://api.openmoney.es", headers={"X-API-Key": "om_…"}, timeout=30)
# la marca de la última consulta se guarda en un fichero; la primera vez, una fecha reciente
try:
marca = json.load(open("marca.json"))
except FileNotFoundError:
marca = {"desde": "2026-09-09T05:00:00Z", "tras": ""}
while True:
n = api.get("/licitaciones/novedades", params={**marca, "limite": 500}).json()
for x in n["expedientes"]:
if x["abierta"]:
print("nuevo o modificado:", x["id"], x["titulo"])
for b in n["bajas"]:
print("retirado:", b["id"], b["expediente"])
marca = n["siguiente"] # siempre la marca que devuelve la API, no la hora local
if not n["mas"]:
break
json.dump(marca, open("marca.json", "w"))Vigilar una lista de empresas
Cada mañana, qué han ganado o recibido tus clientes. Guarda la marca en un fichero y, si vas a avisar a alguien, lo ya avisado: la marca puede repetir el último día de concesiones.
import json, httpx
api = httpx.Client(base_url="https://api.openmoney.es", headers={"X-API-Key": "om_…"}, timeout=60)
clientes = ["B15123177", "B16553232", "A28599033"] # hasta 50 por llamada con el Pro y 500 con el Despacho; más, en varias
# la marca y lo ya avisado se guardan juntos: la marca puede repetir un día de concesiones, y así no se avisa dos veces
try:
estado = json.load(open("empresas.json"))
except FileNotFoundError:
estado = {"marca": {"desde": "2026-09-10T00:00:00Z", "tras": ""}, "vistas": []}
vistas = set(estado["vistas"])
while True:
n = api.get("/empresas/novedades", params={"nif": ",".join(clientes), **estado["marca"], "limite": 500}).json()
for a in n["adjudicaciones"]:
clave = f"a:{a['id']}:{a['lote']}:{a['nif']}"
if clave not in vistas:
vistas.add(clave)
print(a["nif"], "ha ganado", a["expediente"], a["importe_sin_iva"], "€ de", a["organo_nombre"], a["link"])
for c in n["concesiones"]:
if f"c:{c['id']}" not in vistas:
vistas.add(f"c:{c['id']}")
print(c["nif"], "ha recibido", c["importe"], "€:", c["convocatoria"], c["url_br"])
for i in n["ignorados"]:
print("ignorado", i["nif"], "porque", i["motivo"])
estado["marca"] = n["siguiente"] # la marca que devuelve la API, no la hora local
if not n["mas"]:
break
estado["vistas"] = sorted(vistas)[-5000:] # con las últimas basta: la marca solo repite el último día
json.dump(estado, open("empresas.json", "w"))Subvenciones que puede pedir una empresa
Convocatorias en plazo para empresas de la industria en Cataluña. El plazo en texto se imprime tal cual: la API nunca lo convierte en fecha.
import httpx
api = httpx.Client(base_url="https://api.openmoney.es", headers={"X-API-Key": "om_…"}, timeout=30)
# ayudas para empresas (pymes o grandes) de la industria (sección C de la CNAE) en Cataluña que cierran en 30 días o menos;
# las de plazo solo en texto van al final, con la frase literal y el enlace a las bases
r = api.get("/convocatorias/abiertas", params={"beneficiario": "empresas", "sector": "C", "comunidad": "cataluna", "dias": 30, "limite": 100})
r.raise_for_status()
for x in r.json()["resultados"]:
plazo = x["fecha_fin"] or f"plazo en texto: {x['texto_fin']}"
print(plazo, x["organo"], x["presupuesto"], x["titulo"], x["bases_url"])Ficha de una empresa en JavaScript
Node 18 o superior (con fetch de serie). Trata el 404 como «no la conocemos» y el 429 como «espera».
const api = "https://api.openmoney.es";
const cabeceras = { "X-API-Key": process.env.OM_CLAVE }; // la clave, en una variable de entorno
async function ficha(nif) {
const r = await fetch(`${api}/empresa/${encodeURIComponent(nif)}`, { headers: cabeceras });
if (r.status === 404) return null; // sin adjudicaciones ni concesiones desde 2022
if (r.status === 429) throw new Error(`espera ${r.headers.get("Retry-After")} s`);
if (!r.ok) throw new Error(`la API respondió ${r.status}`);
return r.json();
}
const e = await ficha("A28599033");
const ultimo = e.por_anio.at(-1);
console.log(e.nombre_canonico, ultimo?.anio, ultimo?.importe, "€ adjudicados sin IVA");Descargar una lista entera desde la terminal
Con curl y jq, todas las licitaciones en plazo de obras a un fichero separado por tabuladores que abre cualquier hoja de cálculo.
# todas las licitaciones en plazo de obras (CPV 45), de 100 en 100, a un fichero de texto separado por tabuladores
for desde in 0 100 200 300 400; do
curl -s -H "X-API-Key: $OM_CLAVE" \
"https://api.openmoney.es/licitaciones/abiertas?cpv=45&desde=$desde&limite=100" \
| jq -r '.resultados[] | [.fin_plazo_ofertas, .presupuesto, .organo_nombre, .titulo, .link] | @tsv'
done > obras.tsvLas fichas de empresa, órgano y municipio son documentos grandes (20-40 KB comprimidos) con todo lo que enseña la web. Cambian una vez al día: guárdalas en vez de pedirlas en cada uso.
Preguntas frecuentes
¿Cuánto cuesta?
La cuenta, el buscador, las fichas y el panel son gratis. La clave de la API va incluida en los planes Pro (200 peticiones al día por cuenta) y Despacho (500), los dos para tu propio uso, y en los acuerdos de plataforma, con la cuota a la medida del volumen. El Pro se prueba 14 días gratis desde tu cuenta, sin tarjeta. La API va con el plan: si la cuenta vuelve al gratis (o termina la prueba), sus claves dejan de funcionar y vuelven a valer, las mismas, con un plan con API. Los planes de pago se piden desde la página de planes y se activan a mano.
¿Puedo llamar a la API desde una página web, con JavaScript en el navegador?
No debes: la clave quedaría a la vista de cualquiera que abra el código de la página. Llama desde tu servidor y sirve a tu web lo que necesite.
¿Cada cuánto cambian los datos?
Las licitaciones, dos veces al día (por la mañana y a última hora de la tarde); las subvenciones, una vez por la mañana. /health dice en version_datos el día de la última carga, en datos_al_dia si la actualización diaria va bien y en feeds_al_dia si la Plataforma de Contratación sigue publicando en sus feeds (cuando se para, la web enseña lo último recibido). No hace falta pedir lo mismo cada hora.
¿Qué pasa si pierdo la clave o la publico sin querer?
Entra en tu cuenta, revócala y crea otra. La revocada deja de funcionar al momento; el uso que hizo queda registrado en tu cuenta.
¿Por qué una empresa me da 404 si existe?
Porque no tiene adjudicaciones ni concesiones publicadas desde 2022 en las fuentes que cubrimos, o porque su NIF está escrito de otra forma. Búscala con /search: si no sale, no la tenemos.
¿Puedo pedir las ayudas que le encajan a un NIF?
Sí: /convocatorias/encaje?nif=B12345678 devuelve las convocatorias en plazo que le encajan a esa empresa, ordenadas de más a menos y cada una con el motivo en llano («de tu provincia», «para autónomos», «de tu sector»); el perfil se deduce de las ayudas que ha recibido y de su sede, y municipio lo afina. Sin NIF se pide a mano: una empresa (clase=empresa&municipio=38038§or=F), una asociación (clase=entidad) o una persona con lo que busca (clase=particular&municipio=28079&tema=estudios,vivienda). Quita las ayudas de otro ayuntamiento, de otra isla o provincia y las que ya tienen destinatario, y junta en una fila las líneas de una misma orden. Es un encaje automático, sin revisión humana, sobre la ficha de la BDNS: no lee los requisitos de las bases, así que sirve para ordenar y descartar, no para decidir que algo se puede pedir.
¿Tenéis las licitaciones de Cataluña, País Vasco o Navarra?
Sí: llegan a PLACSP por su feed de plataformas agregadas, igual que las de Madrid, Andalucía, Galicia y La Rioja, y salen en /licitaciones/abiertas con el enlace a su plataforma. Sus contratos menores no pasan por PLACSP: los de Cataluña, el País Vasco y Andalucía se leen de sus portales de datos abiertos y salen en las fichas de empresa y de órgano con dataset «cat», «eus» o «and» (nunca dos veces el mismo contrato: si ya estaba en PLACSP, se funde). El identificador del órgano de cada plataforma se traduce a su DIR3 o NIF cuando el portal lo publica; /licitaciones/cobertura mide cuántos cuentan ya en /organo y en las administraciones. Cuando el feed principal de PLACSP se para más de un día, /licitaciones/abiertas añade los anuncios del DOUE (TED) de esos días con origen «ted» y sin id; /licitaciones/resumen lo avisa en fuentes. Lo detalla la metodología.
¿Puedo importar la API en Postman o generar un cliente?
Sí: https://api.openmoney.es/openapi.json es la descripción OpenAPI 3 de todas las rutas. Vale para Postman, Insomnia, Bruno y para generadores de clientes en cualquier lenguaje.
Referencia de rutas
Generada del OpenAPI de la API (versión 1.0), así siempre coincide con lo que responde. Cada ruta pide la clave y consume una petición de la cuota, salvo las tres marcadas como libres. Los parámetros marcados con * son obligatorios; los demás pueden omitirse.
Búsqueda
Empresas, órganos, municipios y administraciones por nombre o identificador.
/searchcon clave#Buscar empresas, órganos, municipios y administraciones
Resultados ordenados por relevancia (score, de 0 a 1) y peso (importe adjudicado o población). Cada uno trae tipo (empresa, organo, municipio o administracion), id (NIF, DIR3, INE o slug) y nombre; el id es el que aceptan las fichas. Un NIF se busca sin separadores y en cualquier caja («a-28.599.033»). Un municipio se encuentra con el artículo delante o detrás («El Ejido» o «Ejido, El», que es como lo escribe el INE).
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
q *en la consulta | texto, 2-80 caracteres | — | texto libre: nombre, parte del nombre, NIF (con o sin separadores), código DIR3 o INE |
limiten la consulta | entero, de 1 a 25 | 10 | resultados como máximo |
tipoen la consulta | texto, uno de empresa, organo, municipio, administracion | — | solo resultados de ese tipo: empresa, organo, municipio o administracion |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/search?q=indra"[
{"tipo": "empresa", "id": "A28599033", "nombre": "INDRA SISTEMAS SA", "peso": 1843201377.6, "score": 0.98},
{"tipo": "empresa", "id": "B84138296", "nombre": "INDRA BPO SLU", "peso": 3296999.98, "score": 0.77},
{"tipo": "organo", "id": "E04973401", "nombre": "Subdirección General de Adquisiciones de Armamento y Material", "peso": 912004112.3, "score": 0.41}
]Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Empresas
Ficha de una empresa (contratos adjudicados por año, órganos, CPV, competidores, subvenciones y señales) y novedades para una lista de NIF desde una marca.
/empresa/{nif}con clave#Ficha de una empresa
Todo lo que OpenMoney sabe de una empresa por su NIF (con o sin separadores; las UTE, por su id «UTE-…»): nombre canónico y alias, importe adjudicado por año (por_anio, con menores y órganos distintos), subvenciones recibidas por año (subvenciones_por_anio, BDNS), órganos que más le adjudican (top_organos), reparto por nivel de administración (reparto_nivel), CPV más frecuentes (top_cpv), últimos expedientes con enlace a PLACSP (expedientes), últimas subvenciones concedidas (concesiones), competidores en los mismos órganos y CPV (competidores) y señales aritméticas con su regla (senales). Tiene ficha toda persona jurídica con alguna adjudicación o alguna concesión desde 2022 (origen: placsp o adjudicaciones si contrata, bdns si solo la conocemos por sus subvenciones; n_concesiones, importe_concesiones). 404 si no hay ninguna de las dos: el detail distingue el NIF bien formado del que no lo es.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
nif *en la ruta | texto, 1-64 caracteres | — |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/empresa/A28599033"{
"nif": "A28599033",
"nombre_canonico": "INDRA SISTEMAS SA",
"por_anio": [
{"anio": 2025, "n_adjudicaciones": 412, "n_menores": 37, "importe": 486120334.2, "importe_menores": 402118.5,
"n_organos": 168, "licitadores_medio": 3.4, "n_unico_licitador": 51, "n_abiertos": 290}
],
"subvenciones_por_anio": [{"anio": 2025, "n": 3, "importe": 1250000.0, "ayuda_equivalente": 1250000.0}],
"top_organos": [
{"organo": "E04973401", "nombre": "Subdirección General de Adquisiciones de Armamento y Material", "tipo": "…",
"importe": 312004112.3, "n": 21, "desde": 2022, "hasta": 2026, "cuota_max": 0.31}
],
"reparto_nivel": [{"nivel": "estatal", "importe": 1201033112.0, "n": 980}, {"nivel": "…", "importe": 0, "n": 0}],
"top_cpv": [{"cpv3": "722", "nombre": "Servicios de programación de software y de consultoría", "importe": 512003001.7, "n": 380}],
"expedientes": [
{"id_url": "…", "link": "https://contrataciondelestado.es/…", "expediente": "2025/0421", "objeto": "…",
"organo": "E04973401", "organo_nombre": "…", "fecha_adjudicacion": "2026-08-28", "importe_sin_iva": 1830000.0,
"presupuesto_sin_iva": 1900000.0, "n_licitadores": 3, "procedimiento": "1", "es_menor": false, "estado": "ADJ", "sospechoso": false}
],
"competidores": [{"nif": "…", "nombre_canonico": "…", "importe": 220310004.1}],
"senales": [{"…": "…"}]
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/empresas/novedadescon clave#Adjudicaciones y concesiones nuevas para una lista de empresas desde una marca
Para una lista de NIF, lo que las fuentes han publicado desde desde: adjudicaciones (contratos ganados según PLACSP: expediente id, lote, objeto, órgano, importe_sin_iva (con importe_estimado a true cuando la fuente solo publica el importe con IVA y el sin IVA es ese entre 1,21: contratos menores del País Vasco), fecha_adjudicacion, contrato_fecha, resultado, link y actualizado, la versión del expediente que trae la adjudicación) y concesiones (subvenciones según la BDNS: id, convocatoria, quién concede en nivel1 (ESTADO, AUTONOMICA, LOCAL u OTROS), nivel2 (ministerio, comunidad o entidad local) y nivel3 (órgano), importe, fecha_concesion, fecha_alta y url_br). Cada fila lleva su nif y el nombre con el que la fuente escribió a la empresa. Nuevo es lo que la fuente publicó después de la marca, no lo firmado después: una adjudicación de hace meses que PLACSP publica hoy cuenta hoy. Las dos listas salen de una sola secuencia ordenada por instante (versión del expediente o día de alta), así que una página puede traer de las dos; con mas a true repite con el desde y el tras de siguiente, y cuando mas es false guarda siguiente como marca de la próxima consulta. nif devuelve los identificadores aceptados tal como se han buscado e ignorados los que no (DNI, NIE, vacíos), con el motivo. Un expediente que cambia de versión después de adjudicado (formalización, rectificación) vuelve a aparecer, y la marca puede repetir el último día de concesiones: para no avisar dos veces, recuerda lo ya visto por id (concesión) o por id, lote y nif (adjudicación). Hasta 50 NIF por petición con el plan Pro y 500 con el Despacho o con un acuerdo de plataforma; más, en varias llamadas. Las UTE solo por su propio id, no por el NIF de sus miembros. Con solo=adjudicaciones o solo=concesiones (desde el 2026-10-06) la secuencia es de una sola lista: es lo que usa quien solo enseña contratos, para que una página no se le vaya en ayudas.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
nif *en la consulta | lista de texto | — | NIF de las empresas, separados por comas (o repitiendo el parámetro); hasta 500 distintos (50 con el plan Pro). Un DNI o NIE se ignora y se dice en `ignorados`; una UTE, por su id «UTE-…» |
desde *en la consulta | fecha y hora (ISO 8601) | — | marca de la última consulta (ISO 8601, UTC si no lleva zona): vuelven las adjudicaciones cuya versión del expediente es igual o posterior y las concesiones dadas de alta ese día o después |
trasen la consulta | texto, hasta 80 caracteres | — | cursor de la página anterior (`siguiente.tras`); vacío en la primera página de una marca |
limiteen la consulta | entero, de 1 a 500 | 200 | filas por página, entre adjudicaciones y concesiones |
soloen la consulta | texto, uno de adjudicaciones, concesiones | — | «adjudicaciones» o «concesiones»: solo esa lista (la página entera es de ella y la otra va vacía); sin él, las dos en una sola secuencia |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/empresas/novedades?nif=B15123177,B16553232,12345678Z&desde=2026-09-10T00:00:00Z"{
"desde": "2026-09-10T00:00:00Z", "nif": ["B15123177", "B16553232"],
"ignorados": [{"nif": "12345678Z", "motivo": "persona física (DNI o NIE): solo personas jurídicas"}],
"mas": false, "siguiente": {"desde": "2026-09-11T00:00:00Z", "tras": ""},
"adjudicaciones": [
{"nif": "B15123177", "adjudicatario": "ELECTRONICA NOROESTE SERVICIOS GENERALES, S.L.", "id": 20353340, "expediente": "PcPG/2026/828991",
"titulo": "RET-ME-2026-0175: Suministro, instalación y adecuación eléctrica del centro de telecomunicaciones de Santa Cecía…", "objeto": "…",
"organo": "A12009486", "organo_nombre": "RETEGAL S.A.", "lote": "0", "resultado": "9", "resultado_nombre": "Formalizado",
"fecha_adjudicacion": null, "contrato_fecha": "2026-09-10", "importe_sin_iva": 12826.0, "presupuesto_sin_iva": 15125.0, "n_licitadores": 3,
"es_menor": false, "sospechoso": null, "estado": "RES", "estado_nombre": "Resuelta", "n_versiones": null,
"link": "https://www.contratosdegalicia.gal/licitacion?N=828991", "actualizado": "2026-09-10T18:10:59.151000Z"}
],
"concesiones": [
{"nif": "B16553232", "beneficiario": "LAVANDERIAS MUVI, S.L.", "id": 156984283, "cod_concesion": "GR156984283",
"convocatoria": "Reafianzamiento CAIB avales concedidos por ISBA,SGR, en ejercicio 2026 sujetos a minimis", "id_convocatoria": 1096692, "numero_convocatoria": "895131",
"nivel1": "AUTONOMICA", "nivel2": "ILLES BALEARS", "nivel3": "DIRECCIÓN GENERAL DEL TESORO, POLÍTICA FINANCIERA Y PATRIMONIO", "instrumento": "GARANTÍA",
"importe": 11250.0, "ayuda_equivalente": 875.0, "fecha_concesion": "2026-08-12", "fecha_alta": "2026-09-11", "url_br": "https://www.caib.es/eboibfront/pdf/es/2023/163/1150418"}
]
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Órganos
Ficha de un órgano de contratación: adjudicado por año, proveedores, procedimientos y expedientes.
/organo/{organo}con clave#Ficha de un órgano de contratación
Un órgano por su clave: código DIR3 («L01280796») o, cuando PLACSP no lo trae, «NIF:S1911001D» o «PLAT:…». Trae nombre y padres, municipio si es local, adjudicado por año (por_anio), mayores proveedores por año con su cuota (top_proveedores), personas físicas agregadas, reparto por procedimiento, últimos expedientes y cuántas licitaciones tiene en plazo (n_abiertas).
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
organo *en la ruta | texto, 1-64 caracteres | — |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/organo/L01280796"{
"organo": "L01280796",
"nombre": "Ayuntamiento de Madrid",
"n_abiertas": 143,
"por_anio": [{"anio": 2025, "…": "…"}],
"top_proveedores": [{"anio": 2025, "puesto": 1, "nif": "…", "nombre_canonico": "…", "importe": 98120334.2, "n": 12, "cuota": 0.06}],
"por_procedimiento": [{"…": "…"}],
"personas_fisicas": {"…": "…"},
"expedientes": [{"…": "…"}]
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Municipios
Ficha de un municipio: liquidación del ayuntamiento por capítulo y por habitante, órganos y proveedores.
/municipio/{ine}con clave#Ficha de un municipio
Un municipio por su código INE de cinco cifras: padrón por año (poblacion), liquidación del ayuntamiento por capítulo de gasto e ingreso y por área de gasto (gasto_por_capitulo, ingresos_por_capitulo, areas_gasto, con obligaciones reconocidas y euros por habitante), órganos de contratación del ayuntamiento (organos), mayores proveedores y adjudicado por año.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
ine *en la ruta | texto, 1-64 caracteres | — |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/municipio/28079"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Administraciones
Estado, Seguridad Social y comunidades autónomas: liquidaciones, contratos y subvenciones.
/administracionescon clave#Estado, Seguridad Social y comunidades autónomas
Las 21 administraciones con ficha (administraciones, con su slug), las cuatro capas del gasto sin sumar entre sí (cuatro_capas), las comunidades para el mapa por habitante (ccaa_mapa), la evolución por año y los órganos que no se asignan a ninguna capa (sin_asignar).
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/administraciones"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/administracion/{slug}con clave#Ficha de una administración
Una administración por su slug (estado, seguridad-social, canarias, madrid…): liquidación por año, capítulo, política de gasto y programa; transferencias a otras capas; contratos adjudicados por año con sus mayores órganos y proveedores; subvenciones concedidas por año y mayores convocatorias. Las cifras son obligaciones reconocidas netas del último ejercicio liquidado.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
slug *en la ruta | texto, 2-40 caracteres | — |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/administracion/canarias"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Licitaciones
Expedientes de PLACSP en plazo de presentación de ofertas, con filtros, ficha con antecedentes y novedades desde una marca.
/licitaciones/resumencon clave#Cuántas licitaciones hay en plazo y cómo se reparten
Expedientes en plazo hoy (n), su presupuesto sin IVA, órganos distintos, cuántos cierran en siete días y cuántos se anunciaron esta semana, y el reparto por tipo de contrato, procedimiento, comunidad y provincia (código, nombre, n y presupuesto): los valores que admiten los filtros de /licitaciones/abiertas. Además top_organos (los diez con más abiertas: clave, nombre, n, presupuesto), cpv (las diez categorías de tres dígitos con más abiertas) y por_dataset (de qué feed de PLACSP vienen). Con nuts o administracion, todo acotado a ese territorio o administración (nuts y administracion en la respuesta dicen cuál); con administracion=estado, también por_ministerio. Cambia una vez al día.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
nutsen la consulta | texto, hasta 5 caracteres | — | prefijo NUTS del territorio: el lugar de ejecución o, si el expediente no lo concreta, el del órgano. ES70 (Canarias), ES709 (Tenerife) |
administracionen la consulta | texto, hasta 40 caracteres | — | slug de /administracion/{slug} («canarias») o «estado»: expedientes de los órganos de esa administración; «estado» añade los de ámbito estatal sin territorio |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/licitaciones/resumen"{
"n": 388, "presupuesto": 1234567890.5, "organos": 812,
"cierran_7_dias": 96, "nuevas_7_dias": 140, "sin_territorio": 12, "sin_presupuesto": 30,
"por_tipo": [{"codigo": "3", "nombre": "Obras", "n": 150, "presupuesto": 612300400.0}, {"codigo": "2", "nombre": "Servicios", "n": 140, "presupuesto": 402118500.5}],
"por_procedimiento": [{"codigo": "9", "nombre": "Abierto simplificado", "n": 120}, {"codigo": "1", "nombre": "Abierto", "n": 110}],
"por_comunidad": [{"codigo": "ES51", "nombre": "Cataluña", "n": 60}, {"codigo": "ES30", "nombre": "Comunidad de Madrid", "n": 55}],
"por_provincia": [{"codigo": "ES511", "nombre": "Barcelona", "n": 35}],
"version_datos": "2026-09-10"
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/licitaciones/abiertascon clave#Licitaciones en plazo, con filtros
Expedientes que admiten ofertas hoy, filtrados y paginados: total (sobre lo filtrado), desde, limite, orden y resultados. Cada expediente trae id (su número en PLACSP, el de /licitaciones/{id}), expediente, título, objeto, titulo_leido (desde el 5 de octubre de 2026: el título en llano que la IA escribe al leer el anuncio, en castellano aunque el anuncio vaya en catalán, gallego o euskera: qué se contrata y, si el anuncio lo dice, dónde o para qué, solo con lo que el anuncio dice; null mientras el anuncio no se ha leído y cuando no añade nada al enunciado), órgano (organo, la clave de /organo/{id}; organo_nombre, el órgano de contratación tal como lo publica PLACSP; y organo_entidad, el nombre de la clave, que es la entidad cuando un DIR3 agrupa varios órganos: «Cabildo Insular de Gran Canaria» para su Consejo Insular de Aguas), tipo y procedimiento con sus nombres, presupuesto sin IVA (o el valor estimado, según presupuesto_origen), cpv (códigos con nombre), lugar y nuts con nombre (lo que publica el anuncio), territorio con territorio_nombre (el territorio efectivo: el lugar de ejecución o, si no lo concreta, el del órgano; en Canarias e Illes Balears la isla del municipio o del cabildo del órgano cuando el anuncio se queda en la comunidad), fecha_anuncio, fin_plazo_ofertas, dias_restantes, n_lotes, link a la plataforma de origen y actualizado (última versión en PLACSP). Los filtros se combinan con Y; los de códigos admiten varios valores separados por comas. El territorio se puede decir por su código (nuts) o, desde el 2026-10-06, por su nombre (lugar: una comunidad, una provincia o una isla); la respuesta dice en lugar cómo se ha entendido (nombre y nuts: «Valencia» es la provincia; la comunidad, «Comunitat Valenciana»).
Con como=<nif> la lista son las licitaciones que le encajan a esa empresa, de más a menos (orden=encaje, el orden por defecto con como), y cada fila lleva encaje: puntos, nivel (alto, medio o bajo; se devuelven alto y medio salvo que nivel diga otra cosa), hasta tres motivos en llano y avisos. Es un encaje automático sobre su historial de adjudicaciones (todas, las recientes con más peso): la coincidencia más fina entre los CPV del expediente y los de sus contratos (categoría de cinco dígitos, clase de cuatro, grupo de tres) según lo habitual que sea esa línea en la empresa; el lugar (una provincia o comunidad donde ya ha ganado, o la de su sede; lo de otro sitio resta a quien solo ha ganado cerca de casa); que el órgano ya le haya adjudicado algo; y el presupuesto frente a lo que suele ganar. Sin ningún CPV en común no hay encaje, y el lugar, el órgano y el tamaño no levantan solos un expediente. como en la respuesta dice de quién es el perfil: la empresa, sus grupos CPV principales (cpv3), cuántos expedientes ha ganado (contratos), cuántas en plazo hay de cada nivel (por_nivel), si sus grupos CPV se dedujeron del texto de sus contratos porque ninguno lo lleva (cpv_deducido; entonces el encaje no pasa de «medio») y sus competidores en esos grupos, que hasta el 2026-09-21 ensanchaban el filtro y ya no entran en él. Un presupuesto de una entidad local que no se cree (más de 300 M€ por lote) lleva el aviso «presupuesto por comprobar», no cuenta en el tamaño y con orden=presupuesto va al final.
Sin historial (desde el 2026-09-28). Una empresa sin contratos también encaja: por su sector (sección CNAE) traducido a grupos CPV con un mapa medido en 67.773 empresas que tienen sector e historial (qué grupos gana cada sector más de lo normal), su lugar (municipio, provincia o comunidad) y su tamaño. como.origen dice de dónde sale el perfil: «historial», «declarado» (sector= con provincia=, municipio= o comunidad= y tamano=, que también valen sin como, o su alta a mano en tu cuenta) o «ayudas» (el sector deducido de sus ayudas en la BDNS y su sede, cuando nadie ha dicho el sector; completa el lugar y el tamaño que falten en lo declarado). Con historial, provincia=, municipio= o comunidad= solo completan la sede si sus contratos no la dicen. Ese encaje puntúa por grupo, no pasa de «medio», y sus motivos lo dicen («por tu actividad: construcción», «en tu isla»). Una empresa conocida sin contratos ni sector responde con la lista vacía y como.origen nulo: dale de alta en tu cuenta con su sector, o pásalo en sector=. como.falta dice qué le falta al perfil para encajar: «sector» (sin líneas CPV), «lugar» (un perfil sin historial que no dice dónde está no llega a «medio» con nada: di provincia=, municipio= o comunidad=) o «actividad» (desde el 2026-09-29).
El nombre y la actividad (desde el 2026-09-29). Una letra de sector junta oficios que no se parecen: «industria» es una panadería y una fábrica de tornillos. Desde ese día el mapa de sectores solo da por buena una línea cuando la tiene una de cada cuatro empresas del sector (o una de cada doce, si es muy suya); las demás se quedan en «bajo». Y de una empresa sin contratos se mira también su nombre, con un diccionario medido en 206.000 empresas que sí tienen contratos (qué ganan las que llevan cada palabra en el nombre: «autocares», «limpiezas», «forn»): cuando el nombre dice el oficio, como.origen es «nombre», como.actividad trae las palabras que lo dicen y el motivo de cada fila también («por tu actividad: panadería»). Lo mismo se puede decir a mano con actividad= («panadería y pastelería»), sola o con sector=. Cuando ni el sector ni el nombre dan una línea propia, como.falta dice «actividad» y la lista sale vacía en «alto» y «medio»: es preferible a recomendar lo que gana cualquiera. A igualdad de nivel y de puntos, lo que cierra en dos días o menos va detrás de lo demás.
La actividad manda sobre la letra (desde el 2026-09-30). Con actividad=, lo que solo trae la letra de sector= se queda en «bajo» (la letra es mucho más ancha que el oficio), y cuando el título del expediente dice una palabra de la actividad la fila suma puntos, va delante y lleva el motivo «lo dice el título». Las palabras que el diccionario de nombres no entiende se buscan en otro, medido en los títulos de 2,7 millones de expedientes («peluquería»): lo que sale de ahí solo llega a «medio» cuando el título dice esa palabra. Y una palabra concreta que no entiende ninguno («audiovisual») se busca tal cual en el título, dentro de las líneas de la letra de sector=. Si nada de eso da algo, como.actividad va vacía y como.falta dice «actividad»: prueba con otras palabras. Las letras de sector= son las de la CNAE 2025. Con municipio= en Canarias o en Illes Balears, lo de otra isla no cuenta como «tu comunidad»; y a un autónomo (tamano=autonomo) con provincia o municipio, lo de otra provincia tampoco. De una letra deducida de las ayudas solo cuentan las líneas que ganan cuatro de cada diez empresas del sector; el resto queda en «bajo» y como.falta pide la actividad. Con historial, un título que no comparte ninguna palabra con los de sus contratos se queda en «bajo» (si de la empresa se conocen diez palabras o más, el órgano no le ha adjudicado nunca y no es una comunidad donde se publica también en otra lengua). A los contratos sin código CPV se les deduce el grupo con el mismo diccionario de títulos (antes, solo con las palabras de lo abierto ese día).
origen (desde el 2026-09-14): «placsp» en todas las filas salvo durante una parada del feed principal de PLACSP (más de 30 horas sin publicar; fuentes.parada_desde en /licitaciones/resumen), cuando la lista añade los anuncios del Diario Oficial de la Unión Europea (TED) publicados desde entonces que PLACSP aún no ha publicado: origen «ted», id nulo (no tienen ficha), link al anuncio en TED y presupuesto_origen «estimado». En cuanto PLACSP publica el expediente, la fila provisional desaparece y sale la de PLACSP con su id. El parámetro origen filtra por fuente.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
cpven la consulta | texto, hasta 100 caracteres | — | prefijos CPV de 2 a 8 dígitos separados por comas: «45» o «45233,71» |
nutsen la consulta | texto, hasta 5 caracteres | — | prefijo NUTS del territorio (el lugar de ejecución o, si no lo concreta, el del órgano): ES51 (Cataluña), ES511 (Barcelona) |
lugaren la consulta | texto, 2-60 caracteres | — | el territorio por su nombre, cuando no se tiene el código NUTS: una comunidad, una provincia o una isla («Canarias», «Girona», «Tenerife», «Valencia/València»); filtra como `nuts`, que manda si llegan los dos. Los municipios no valen. 422 si no se reconoce |
administracionen la consulta | texto, hasta 40 caracteres | — | slug de /administracion/{slug} («canarias») o «estado»: solo los expedientes de los órganos de esa administración; «estado» añade los de ámbito estatal sin territorio |
tipoen la consulta | texto, hasta 40 caracteres | — | códigos de tipo de contrato separados por comas (1 suministros, 2 servicios, 3 obras…) |
procedimientoen la consulta | texto, hasta 40 caracteres | — | códigos de procedimiento separados por comas (1 abierto, 9 abierto simplificado…) |
presupuesto_minen la consulta | número, de 0 a 1000000000000 | — | |
presupuesto_maxen la consulta | número, de 0 a 1000000000000 | — | |
diasen la consulta | entero, de 0 a 730 | — | solo las que cierran en estos días o menos |
plazo_desdeen la consulta | fecha (AAAA-MM-DD) | — | |
plazo_hastaen la consulta | fecha (AAAA-MM-DD) | — | |
organoen la consulta | texto, hasta 64 caracteres | — | clave del órgano (la de /organo/{id}) |
comoen la consulta | texto, 1-64 caracteres | — | NIF de una empresa: solo las licitaciones que le encajan, cada una con su `encaje`: por su historial si tiene contratos (sus categorías CPV, dónde gana, el tamaño de sus contratos y los órganos que ya le han adjudicado); si no, por su actividad, su sector y su lugar (lo que digas en `actividad=`, `sector=`, `provincia=`…, lo de su alta a mano en tu cuenta y, para lo que falte, lo que dice su nombre y lo deducido de sus ayudas en la BDNS). 404 solo si no la conocemos y no dices su sector ni su actividad |
sectoren la consulta | texto, hasta 30 caracteres | — | perfil sin historial: el sector de la empresa en la CNAE 2025 (la que usa la BDNS: K es informática, N servicios profesionales, O servicios auxiliares, Q educación y R sanidad; no son las letras de la CNAE 2009): la letra de su sección («F») o, mejor, su código de dos, tres o cuatro cifras («43», «43.2», «4322»: el grupo dice el oficio y la letra no; un código de cuatro cifras vale como su grupo), separados por comas hasta cinco («F,N», «43.2»); con `como`, completa a una empresa sin contratos; sin `como`, el perfil es solo esto. Con `provincia`, `municipio` o `comunidad`: sin lugar nada llega a «medio» (`como.falta` lo dice) |
provinciaen la consulta | texto, hasta 2 caracteres | — | con `sector`: provincia INE de dos dígitos («38»); en una provincia con islas, todas sus islas |
municipioen la consulta | texto, hasta 5 caracteres | — | con `sector`: municipio INE de cinco dígitos («38038»); da su isla o su provincia y manda sobre `provincia` |
comunidaden la consulta | texto, hasta 40 caracteres | — | con `sector`: slug de comunidad («canarias») cuando no se sabe más |
tamanoen la consulta | texto, hasta 10 caracteres | — | con `sector`: «autonomo», «pymes» o «grandes»; solo resta cuando el presupuesto es desproporcionado |
actividaden la consulta | texto, 3-200 caracteres | — | perfil sin historial: a qué se dedica la empresa, con sus palabras («panadería y pastelería», «mantenimiento de ascensores»); se traduce a categorías CPV con un diccionario medido en las empresas que sí tienen contratos, y sus palabras se buscan en el título de cada expediente. Vale sola o con `sector` (con ella, lo que solo trae la letra se queda en «bajo»), y es lo que pide `como.falta` cuando dice «actividad» |
nivelen la consulta | texto, patrón ^(alto|medio|bajo)(,(alto|medio|bajo)){0,2}$ | — | solo con `como` o `sector`: niveles de encaje que se devuelven (por defecto «alto,medio») |
nuevas_desdeen la consulta | fecha (AAAA-MM-DD) | — | solo las anunciadas ese día o después (lo nuevo desde una fecha) |
qen la consulta | texto, 2-80 caracteres | — | texto libre sobre objeto, título, expediente y órgano. Busca de cinco maneras a la vez y ordena por lo que mejor casa (`orden=relevancia`, el orden por defecto con `q`): el texto completo (cada palabra por su raíz, sin tildes), las palabras tal como se escriben (cada una por el comienzo de una palabra, en singular o plural; una sigla vale por lo que significa y al revés, «PRL» y «riesgos laborales»; las palabras más frecuentes, por sus equivalentes en catalán, gallego y euskera, «limpieza» encuentra «neteja»; y el nombre del código CPV principal cuenta como texto), el oficio que pide cada anuncio, leído por la IA al publicarse («asfaltado» trae lo que pide «asfalto» o «pavimentación de calles» aunque no lo diga con esas palabras, también en catalán o gallego; `busqueda.oficios` en la respuesta dice con qué oficios casa lo escrito), lo parecido cuando nada de eso trae algo («mantenimento» encuentra «mantenimiento») y lo cercano en significado («ascensores» trae «aparatos elevadores»), que va detrás de todo lo demás; ni el oficio ni el significado se consultan con un número de expediente ni con un órgano por su nombre. Cada fila dice en `busqueda.por` qué la trajo. Las palabras vacías («de», «para») no se exigen. Un lugar escrito en la caja (una comunidad, una provincia o una isla: «limpieza colegios tenerife») filtra como `nuts=` y se busca el resto; `busqueda.lugar` en la respuesta lo dice. Con una palabra de órgano («cabildo de tenerife») el lugar se queda en el texto. El mismo expediente anunciado dos veces sale una vez |
significadoen la consulta | booleano | true | con `q`: 0 para no traer lo cercano en significado, solo lo que lleva las palabras (tal cual, por su raíz o con una errata); es lo que hace el correo diario con las búsquedas guardadas |
ordenen la consulta | texto, uno de encaje, plazo, presupuesto, reciente, relevancia | — | por defecto «plazo»; con `q`, «relevancia» (lo que mejor casa con el texto, y a igualdad el plazo), que solo vale con `q`; con `como`, `sector` o `actividad`, «encaje» (de más a menos encaje), que solo vale con ellos |
desdeen la consulta | entero, de 0 a 10000 | 0 | |
limiteen la consulta | entero, de 1 a 100 | 25 | expedientes por página |
origenen la consulta | texto, uno de todos, placsp, ted | todos | «placsp» solo lo publicado en PLACSP; «ted» solo los anuncios provisionales del DOUE (los hay solo mientras el feed 643 está parado); «todos», ambos |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/licitaciones/abiertas?cpv=45&nuts=ES51&dias=30&orden=presupuesto&limite=100"{
"total": 377, "desde": 0, "limite": 100, "orden": "presupuesto", "como": null,
"resultados": [
{
"id": 20194230,
"expediente": "OP. NG-02083",
"titulo": "Ejecución de las obras del proyecto constructivo. Variante de las Presas y de Ol…",
"objeto": "Ejecución de las obras del proyecto constructivo. Variante de las Presas y de Ol…",
"organo": null, "organo_nombre": "Infraestructures de la Generalitat de Catalunya, SAU",
"tipo": "3", "tipo_nombre": "Obras",
"procedimiento": "1", "procedimiento_nombre": "Abierto",
"presupuesto": 369605174.52, "presupuesto_origen": "sin_iva",
"cpv": [{"codigo": "45233120", "nombre": "Trabajos de construcción de carreteras."}],
"lugar": null, "nuts": "ES512", "nuts_nombre": "Girona",
"fecha_anuncio": "2026-07-31", "fin_plazo_ofertas": "2026-09-28", "dias_restantes": 18, "n_lotes": 5,
"link": "https://contractaciopublica.cat/ca/detall-publicacio/38380596-bf71-4ee…",
"actualizado": "2026-09-02T14:04:25.940000Z"
},
{"…": "los otros 99 de esta página"}
]
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/licitaciones/{id}con clave#Ficha de un expediente: lotes, pliegos, anuncios, condiciones, adjudicaciones y antecedentes
Todo el expediente: los campos de la lista más estado, abierta (si sigue en plazo), baja (si PLACSP lo retiró), padres del órgano y su municipio, subtipo con su nombre (la lista depende del tipo: obras, servicios, suministros o patrimonial), urgencia, sistema de contratación, sara, financiación, los tres presupuestos publicados, lugar, ciudad y código postal, número de resultados y versiones, y titulo_leido como en la lista (el título en llano escrito por la IA al leer el anuncio; null sin lectura). adjudicaciones lista los resultados publicados (lote, adjudicatario con NIF, importe, licitadores, ofertas). antecedentes resume lo que el mismo órgano adjudicó en los mismos CPV a tres dígitos en los últimos tres años (a quién, importe medio, baja media y las 20 adjudicaciones más recientes); es null sin órgano con clave o sin CPV.
Lo que el anuncio publica sobre cómo se licita (según PLACSP; los pliegos mandan): hora límite de ofertas (fin_plazo_ofertas_hora, fin_plazo_ofertas_nota), fin de solicitudes de participación y de obtención de documentación, subasta electrónica, presentación por lotes (presentacion_lotes con nombre, máximos de lotes por oferta y por adjudicatario), candidatos en restringidos, contrato mixto, prórroga, variantes, revisión de precios, recursos recibidos, todos los programas de financiación (financiacion_codigos), id del TED, legislación y declaraciones exigidas (códigos con nombre). Desde el 2026-09-20, la duración prevista del contrato (duracion, entera, en duracion_unidad: DAY, MON o ANN), su inicio y su fin previstos (plazo_inicio, plazo_fin; casi siempre viene o la duración o las fechas) y la forma de presentación de las ofertas (forma_presentacion con nombre: electrónica, manual o las dos); solo en los expedientes cargados desde ese día y en los que estaban en plazo, null en el resto y en los contratos menores, que no publican la forma. Y las listas: lotes (número, nombre, presupuestos y CPV), documentos (pliegos administrativo y técnico, anexos, documentos del expediente como actas y memorias, y los de los anuncios como la resolución de adjudicación: origen, tipo con nombre, nombre, URL, hash SHA-1 en base64 cuando lo hay), anuncios (tipo con nombre, medio, fecha y fecha de envío; varias fechas del mismo tipo y medio son rectificaciones), criterios de adjudicación (por lote, nulo = todo el expediente; tipo OBJ cuantificable o SUBJ juicio de valor, subtipo, descripción, peso en % cuando suman 100 y en puntos si no, nota), requisitos (por lote y clase: solvencia_economica, solvencia_tecnica, clasificacion, condicion_ejecucion, subcontratacion, situacion_personal, plantilla_minima, antiguedad_minima, otros; con código y nombre, descripción y umbral) y garantias (provisional, definitiva o complementaria, en % o en euros). Cobertura real: la mitad de las abiertas trae criterios y solvencia (las plataformas autonómicas agregadas solo mandan pliegos) y casi todas las del feed de perfiles traen pliego. Desde el 2026-09-21 cada fila de criterios, requisitos y garantias lleva origen: null si viene del anuncio de PLACSP y pscp si se leyó del anuncio oficial en la plataforma catalana (Plataforma de Serveis de Contractació Pública), que es de donde salen las condiciones de las licitaciones catalanas en plazo; esas filas van en la lengua en que se publicaron, casi siempre en catalán.
acceso (desde el 2026-09-14): cuenta con una clave de cuenta o con la sesión del visitante de la web, y entonces va todo; visitante con la clave de servicio de la web y sin sesión (la ficha pública /licitacion/{id} de openmoney.es). Desde el 2026-09-16 el visitante recibe también criterios, requisitos, garantias y declaraciones (decisión del usuario tras comparar con la competencia: las condiciones del anuncio se enseñan a todos y así Google las indexa); lo único que sigue con cuenta es antecedentes.filas, las adjudicaciones anteriores del órgano una a una (los agregados de antecedentes sí van).
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
id *en la ruta | entero, de 1 a 1000000000000 | — | número del expediente en PLACSP (`id` en la lista y en las novedades) |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/licitaciones/20379296"{
"id": 20379296, "expediente": "2026/ETSAE0327/00004180E", "titulo": "Adecuación de pistas de conducción en Cenad San Gregorio, Zaragoza.",
"estado": "RES", "estado_nombre": "Resuelta", "abierta": false, "baja": null, "acceso": "cuenta",
"organo": "EA0003109", "organo_nombre": "Jefatura de Intendencia de Asuntos Económicos Este",
"organo_padres": ["SAECO de la Jefatura de Intendencia de Asuntos Económicos del Este", "Ejército de Tierra", "…"],
"tipo": "3", "tipo_nombre": "Obras", "procedimiento": "1", "procedimiento_nombre": "Abierto",
"presupuesto": 8429.75, "presupuesto_origen": "sin_iva",
"presupuesto_sin_iva": 8429.75, "presupuesto_estimado": 8429.75, "presupuesto_total": 10200.0,
"cpv": [{"codigo": "45100000", "nombre": "Trabajos de preparación del terreno."}],
"lugar": "Zaragoza", "nuts": "ES243", "nuts_nombre": "Zaragoza", "lugar_ciudad": null, "lugar_cp": null,
"fecha_anuncio": null, "fin_plazo_ofertas": "2026-07-30", "dias_restantes": null,
"n_lotes": 0, "n_resultados": 1, "n_versiones": null, "link": "https://contrataciondelestado.es/…",
"fin_plazo_ofertas_hora": "14:00:00", "fin_plazo_ofertas_nota": null, "fin_solicitudes": null, "fin_documentacion": "2026-07-30",
"subasta_electronica": false, "presentacion_lotes": null, "presentacion_lotes_nombre": null, "max_lotes_oferta": null, "max_lotes_adjudicados": null,
"candidatos_min": null, "candidatos_max": null, "contrato_mixto": false, "prorroga": null, "prorroga_opciones": null, "variantes": false,
"revision_precios": "No procede", "recursos": 0, "financiacion_codigos": [{"codigo": "NO-EU", "nombre": "No hay financiación con fondos de la UE"}],
"ted_uuid": null, "legislacion": "3", "legislacion_nombre": "Ley 9/2017",
"declaraciones": [{"codigo": "1", "nombre": "Capacidad de obrar"}, {"codigo": "2", "nombre": "No prohibición para contratar"}],
"duracion": 3, "duracion_unidad": "MON", "plazo_inicio": null, "plazo_fin": null, "forma_presentacion": "1", "forma_presentacion_nombre": "Electrónica",
"lotes": [],
"documentos": [
{"origen": "pliego_administrativo", "tipo_codigo": null, "tipo_nombre": null, "nombre": "PCAP.pdf", "url": "https://contrataciondelestado.es/FileSystem/servlet/GetDocumentByIdServlet?…", "hash": "fAKr1ZUbmyjb29lUyFyB89x6q9M=", "anuncio_tipo": null, "anuncio_nombre": null, "orden": 1},
{"origen": "expediente", "tipo_codigo": "12", "tipo_nombre": "Acta del órgano de asistencia", "nombre": "Acta de la mesa", "url": "https://contrataciondelestado.es/wps/wcm/connect/…", "hash": null, "anuncio_tipo": null, "anuncio_nombre": null, "orden": 1},
{"origen": "anuncio", "tipo_codigo": "ACTA_ADJ", "tipo_nombre": "Documento de Acta de Adjudicación", "nombre": "Resolución de adjudicación.pdf", "url": "https://…", "hash": null, "anuncio_tipo": "DOC_CAN_ADJ", "anuncio_nombre": "Anuncio de adjudicación", "orden": 1}
],
"anuncios": [
{"tipo": "DOC_CN", "tipo_nombre": "Anuncio de licitación", "medio": "Perfil del contratante", "fecha": "2026-07-01", "envio_fecha": null},
{"tipo": "DOC_CN", "tipo_nombre": "Anuncio de licitación", "medio": "Perfil del contratante", "fecha": "2026-07-08", "envio_fecha": null},
{"tipo": "DOC_CAN_ADJ", "tipo_nombre": "Anuncio de adjudicación", "medio": "Perfil del contratante", "fecha": "2026-09-08", "envio_fecha": null}
],
"criterios": [
{"lote": null, "tipo": "OBJ", "tipo_nombre": "Cuantificables Automáticamente", "subtipo": "1", "subtipo_nombre": "Precio", "descripcion": "Precio", "peso": 70, "nota": "Fórmula lineal", "orden": 1},
{"lote": null, "tipo": "SUBJ", "tipo_nombre": "Juicio de Valor", "subtipo": "99", "subtipo_nombre": "Otros", "descripcion": "Memoria técnica", "peso": 30, "nota": null, "orden": 2}
],
"requisitos": [
{"lote": null, "clase": "solvencia_economica", "codigo": "5", "nombre": "Cifra anual de negocio", "descripcion": "Volumen anual de negocios de al menos 12.000 €", "umbral": 12000, "orden": 1},
{"lote": null, "clase": "solvencia_tecnica", "codigo": "OSR-COMPTASK", "nombre": "Trabajos realizados", "descripcion": "Relación de obras similares de los últimos cinco años", "umbral": null, "orden": 2},
{"lote": null, "clase": "condicion_ejecucion", "codigo": "1", "nombre": "Consideraciones de tipo ambiental", "descripcion": "Gestión de residuos de obra", "umbral": null, "orden": 3}
],
"garantias": [{"lote": null, "tipo": "2", "tipo_nombre": "Definitiva", "porcentaje": 5, "importe": null}],
"adjudicaciones": [
{"lote": null, "resultado": "9", "resultado_nombre": "Formalizado", "fecha_adjudicacion": "2026-09-08", "n_licitadores": 2,
"nif": "A50046408", "tipo_nif": "juridica", "adjudicatario": "ARAELECTRIC S.A.", "pyme": true, "importe_sin_iva": 4978.94, "importe_con_iva": 6024.52,
"oferta_minima": 0.0, "oferta_maxima": 0.0, "contrato_fecha": "2026-09-08", "es_menor": false, "sospechoso": null}
],
"antecedentes": {
"organo": "EA0003109", "cpv3": ["451"], "anios": 3, "n": 53, "adjudicatarios": 24, "importe_medio": 29958.147358490565, "baja_media": 0.14981140630088008,
"filas": [
{"id": 20377002, "objeto": "Derrumbe de los muros de la antigua galería de tiro ed.407 en el Acto.…", "procedimiento": "1", "lote": null, "nif": "B60393642", "adjudicatario": "MATERIALES Y CONSTRUCCIONES GAMA, SL",
"fecha_adjudicacion": "2026-09-07", "importe_sin_iva": 29702.58, "presupuesto_sin_iva": 32617.01, "n_licitadores": 1, "baja": 0.0893530706830577, "link": "https://contrataciondelestado.es/…"},
{"…": "hasta 20, las más recientes"}
]
},
"…": "…"
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/licitaciones/novedadescon clave#Expedientes nuevos o modificados desde una marca
Expedientes cuya última versión en PLACSP (updated) es posterior a desde, en orden de updated, con abierta según la vista; y aparte los retirados del feed desde entonces (bajas). Para seguir: siguiente trae el desde y el tras de la página siguiente (cuando mas es true) o, si no hay más, la marca para la próxima consulta. El incremental diario carga las entradas con seis horas de solape, así que conviene consultar tras el cron (08:00 UTC) y quedarse con la marca que devuelve la respuesta, no con la hora local.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
desde *en la consulta | fecha y hora (ISO 8601) | — | marca de la última consulta (ISO 8601); vuelven los expedientes con updated igual o posterior |
trasen la consulta | texto, hasta 300 caracteres | — | id_url del último expediente recibido con ese mismo updated, para seguir la página |
limiteen la consulta | entero, de 1 a 500 | 200 |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/licitaciones/novedades?desde=2026-09-09T05:00:00Z&limite=500"{
"desde": "2026-09-09T05:00:00Z", "mas": true,
"siguiente": {"desde": "2026-09-09T10:05:07.693000Z", "tras": "https://contrataciondelestado.es/sindicacion/PlataformasAgregadasSinMenores/20371637"},
"expedientes": [
{"id": 20384205, "expediente": "201/2026", "titulo": "Adquisición de material de mantenimiento.", "organo": "L01342257", "organo_nombre": "Alcaldía del Ayuntamiento de Villamuriel de Cerrato",
"estado": "RES", "estado_nombre": "Resuelta", "abierta": false, "baja": null, "tipo": "1", "tipo_nombre": "Suministros", "procedimiento": "6", "procedimiento_nombre": "Contrato menor",
"presupuesto": 165.29, "presupuesto_origen": "sin_iva", "presupuesto_sin_iva": 165.29, "presupuesto_estimado": 165.29, "actualizado": "2026-09-09T05:41:32.468000Z", "…": "los demás campos de la lista"},
{"…": "hasta 500"}
],
"bajas": [{"id_num": 19922421, "id_url": "https://contrataciondelestado.es/sindicacion/datosAbiertosMenores/19922421", "expediente": "24675", "baja": "2026-09-09T06:00:03.874000Z"}],
"bajas_mas": false
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/licitaciones/coberturacon clave#Cobertura por fuente, comunidad y año
Paso 4.º (4E): cuántos expedientes hay por fuente (dataset: 643, 1143 y 1044 de PLACSP; cat, eus y and, los menores de las plataformas catalana, vasca y andaluza), comunidad del lugar de ejecución (nuts2, nulo sin territorio) y año, y de ellos cuántos con clave de órgano (con_organo; con_organo_bueno excluye las claves de plataforma sin DIR3 ni NIF), con criterios de adjudicación, con adjudicatario identificado y con anuncio en el TED. Es lo que /metodologia enseña como cobertura. Sale de la vista cobertura_fuentes, refrescada cada noche; vacío hasta el primer refresco tras la migración 20260914000003.
Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/licitaciones/{id}/pliegocon clave#Lo leído por IA del pliego administrativo del expediente, con su frase y su página
Como el GET de las bases, para el pliego de cláusulas administrativas (solvencia, clasificación, habilitación, criterios, garantías, plazo, lotes, visita y subcontratación). Lo leído se enseña con cuenta (en la beta, solo a la lista); oculta dice por qué no va. Dato leído por IA, aparte y marcado: los pliegos mandan.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
id *en la ruta | entero, de 1 a 1000000000000 | — | número del expediente en PLACSP |
Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/licitaciones/{id}/pliegocon clave#Leer el pliego administrativo con IA (planes de pago)
Como el POST de las bases, sobre el pliego administrativo enlazado en el anuncio (nunca el técnico).
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
id *en la ruta | entero, de 1 a 1000000000000 | — | número del expediente en PLACSP |
forzaren la consulta | booleano | false | volver a leer aunque ya esté leído (beta y administradores) |
Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/licitaciones/encajecon clave#Radar por lotes: las licitaciones en plazo que le encajan a cada cliente de una cartera
Para una cartera de clientes, las limite licitaciones en plazo que mejor le encajan a cada uno, con sus motivos: lo que una plataforma o una asesoría pide cada mañana en una llamada en vez de una por NIF. Cada cliente va por nif (su historial de contratos si lo tiene; si no, lo que digas de él aquí o en su alta a mano en tu cuenta y, para lo que falte, el sector deducido de sus ayudas en la BDNS y su sede) o por perfil declarado (sector con provincia, municipio o comunidad, y tamano), como en /licitaciones/abiertas; con las dos cosas el historial manda. Hasta 500 clientes por petición con el plan Despacho o con un acuerdo de plataforma y 50 con el plan Pro (uso propio); más, en varias llamadas. POST porque el perfil por cliente no cabe en una URL.
La respuesta lleva clientes en el mismo orden: ref tal como llegó y nif normalizado («b-38.515.854» → B38515854; cruza por ref), estado («historial», «nombre», «ayudas», «declarado», o «sin_perfil» cuando no hay con qué encajar: NIF desconocido sin sector ni actividad, persona física, sección que no licita), motivo (con «sin_perfil» por qué; y también cuando el NIF no valía pero el cliente encaja por lo declarado, o cuando al perfil le falta el lugar o la actividad y por eso nada llega a «medio»), perfil (el mismo bloque que como en la lista, con falta), por_nivel y licitaciones (las de la lista, sin objeto, cada una con su encaje: puntos, nivel, motivos y avisos, con «nueva» si se anunció desde nuevas_desde). abiertas es cuántas había en plazo al calcular. Cuenta como una petición de la cuota diaria. Las abiertas se leen una vez por lote y los perfiles iguales se puntúan una vez: una cartera de 500 pymes tarda unos segundos.
Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
CPV
Qué se contrata en cada categoría del CPV (el código europeo que dice de qué va un contrato): cuánto, quién compra, quién gana y qué está en plazo.
/cpvcon clave#Las categorías CPV: qué se contrata, cuánto y cuántas licitaciones hay en plazo
Las 45 divisiones del CPV (divisiones, dos dígitos) y las categorías de tres dígitos con contratos desde 2022 (categorias, cada una con su division), ordenadas por importe adjudicado en el último año completo (anio_ref): n e importe de ese año, n_total e importe_total desde 2022 (desde-hasta), y n_abiertas y presupuesto_abiertas de las licitaciones en plazo hoy con algún código de la categoría. Arriba, los totales del índice y n_abiertas_sin_cpv (expedientes en plazo sin ningún código, que no caben en ninguna categoría). Un expediente con códigos de varias categorías cuenta en cada una; dentro de una categoría, una sola vez. Cambia una vez al día. 503 hasta que las vistas por CPV se hayan calculado en la base.
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/cpv"{
"anio_ref": 2025, "n_categorias": 317, "n_divisiones": 45, "importe": 48120334001.2, "n": 612040,
"n_abiertas": 5398, "n_abiertas_sin_cpv": 60,
"divisiones": [
{"codigo": "45", "nombre": "Trabajos de construcción", "n": 98120, "importe": 12403118500.5, "n_total": 401230,
"importe_total": 51230004112.3, "n_abiertas": 1812, "n_categorias": 8}
],
"categorias": [
{"cpv3": "452", "nombre": "Trabajos generales de construcción de inmuebles y obras de ingeniería civil", "division": "45",
"n": 61204, "importe": 9803118500.5, "n_total": 250110, "importe_total": 40120004112.3, "desde": 2022, "hasta": 2026,
"n_abiertas": 944, "presupuesto_abiertas": 6806043075.89}
],
"version_datos": "2026-09-11"
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/cpv/{codigo}con clave#Una categoría CPV: cuánto se contrata, quién compra, quién gana y qué está en plazo
Una categoría de tres dígitos: nombre y division de la nomenclatura, generico si es el código genérico de la división («450» es 45000000); por_anio (contratos adjudicados desde 2022: n, importe, menores, sin adjudicatario identificado, n_organos y n_empresas distintos, baja_media sobre el presupuesto en los expedientes sin lotes, licitadores_medio y n_unico_licitador en los procedimientos abiertos); por_procedimiento, top_organos (los veinte que más adjudican) y top_empresas (las veinte que más ganan) en la ventana de los últimos tres años, cada uno con su cuota sobre el importe de la categoría en esos años; abiertas (expedientes en plazo hoy con algún código de la categoría: n, presupuesto sin IVA, órganos, cuántos cierran en siete días y cuántos son nuevos; la lista con filtros es /licitaciones/abiertas?cpv=<código>); y relacionadas, las demás categorías de la división. Importes sin IVA, adjudicados, no pagos; cada adjudicación cuenta una vez por categoría. 404 si el código no existe en la nomenclatura o no tiene contratos ni licitaciones; 503 hasta que las vistas por CPV estén calculadas.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
codigo *en la ruta | texto, 1-8 caracteres | — | los tres primeros dígitos del CPV («452»); con un código completo de ocho dígitos («45233140») se toman los tres primeros |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/cpv/158"{
"cpv3": "158", "codigo": "15800000", "nombre": "Productos alimenticios diversos", "generico": false,
"division": {"codigo": "15", "nombre": "Alimentos, bebidas, tabaco y productos afines"},
"anio_ref": 2025, "ventana": {"desde": 2024, "anios": 3, "n": 8393, "importe": 282027444.06},
"por_anio": [
{"anio": 2025, "n": 3580, "importe": 114053069.1, "n_menores": 2610, "importe_menores": 18230114.2,
"n_sin_adjudicatario": 41, "importe_sin_adjudicatario": 302118.5, "baja_media": 0.039, "n_baja": 812,
"licitadores_medio": 2.2, "n_con_licitadores": 1030, "n_abiertos": 1061, "n_unico_licitador": 464,
"n_organos": 519, "n_empresas": 1127}
],
"por_procedimiento": [{"procedimiento": "1", "nombre": "Abierto", "n": 2002, "importe": 219433969.0}],
"top_organos": [{"organo": "A01004623", "nombre": "Servicio Andaluz de Salud", "importe": 42860643.1, "n": 36, "desde": 2024, "hasta": 2026, "cuota": 0.152}],
"top_empresas": [{"nif": "B91016238", "nombre_canonico": "PLATAFORMA FEMAR SL", "tipo": "juridica", "importe": 38067148.4, "n": 515, "desde": 2024, "hasta": 2026, "cuota": 0.135}],
"abiertas": {"n": 27, "presupuesto": 9492366.93, "organos": 16, "cierran_7_dias": 14, "nuevas_7_dias": 1},
"relacionadas": [{"cpv3": "151", "nombre": "Productos de origen animal, carne y productos cárnicos", "importe": 120330114.0, "n": 3012}],
"version_datos": "2026-09-11"
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Subvenciones
Convocatorias de subvenciones de la BDNS que admiten solicitudes hoy (concurrencia competitiva, concesión directa con bases y ayudas directas a particulares), con filtros, ficha con documentos, anuncios y concesiones ya publicadas, y novedades desde una marca.
/convocatorias/resumencon clave#Cuántas convocatorias de subvenciones hay en plazo y cómo se reparten
Convocatorias abiertas hoy, por defecto las que se pueden pedir: concurrencia competitiva y concesión directa con bases (tipo como en /convocatorias/abiertas): n con fecha de fin de solicitud hoy o posterior, plazo_texto con el plazo solo en texto (recibidas en los últimos ventana_texto_dias), total las dos, el presupuesto convocado de las que tienen fecha, órganos distintos, cuántas cierran en siete días y cuántas se recibieron esta semana, nacionales (ámbito toda España) y abren_mas_tarde (plazo que aún no ha empezado). Y el reparto por tipo de beneficiario (una convocatoria cuenta en cada tipo que admite), comunidad autónoma (slug de /administracion/{slug}; una convocatoria de varias comunidades cuenta en cada una, y sin_nacionales deja fuera las de ámbito nacional que además la nombran: sin_nacionales + nacionales es el total de comunidad=<slug>,estado), sección CNAE, nivel de administración y finalidad: los valores que admiten los filtros de /convocatorias/abiertas. Las fichas repetidas (la misma ayuda dada de alta una vez por beneficiario) cuentan una sola vez, como en la lista: total es el total de /convocatorias/abiertas sin filtros. Cambia una vez al día.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
comunidaden la consulta | texto, hasta 40 caracteres | — | slug de comunidad (el de /administracion/{slug}: «canarias») o «estado» (ámbito nacional) |
tipoen la consulta | texto, hasta 80 caracteres, patrón ^(competitiva|directa_canonica|directa_instrumental|instrumental_particulares|directa|todas)(,(competitiva|directa_canonica|directa_instrumental|instrumental_particulares|directa|todas))*$ | competitiva,directa_canonica,instrumental_particulares | competitiva (concurrencia competitiva), directa_canonica (concesión directa con bases: la pide quien cumple los requisitos, sin competir), directa_instrumental (nominativas y convenios, con destinatario), instrumental_particulares (la instrumental cuyo beneficiario declarado incluye a particulares: emergencia social, alquiler), directa (canónica e instrumental) o todas; varios separados por comas. Por defecto competitiva,directa_canonica,instrumental_particulares: todo lo que se puede pedir |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/convocatorias/resumen?comunidad=canarias"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/convocatorias/abiertascon clave#Convocatorias de subvenciones en plazo, con filtros
Convocatorias que admiten solicitudes hoy, filtradas y paginadas: total (sobre lo filtrado), desde, limite, orden y resultados. Cada una trae numero (el de la BDNS, el de /convocatorias/{numero} y del enlace link), titulo, órgano (organo, organo_padre, nivel con nombre), tipo con nombre, presupuesto convocado, mrr, fechas de recepción, inicio y fin de solicitud, fecha_fin_origen (bdns, o texto cuando la BDNS trae la fecha escrita en el campo de texto y nada más: «12/06/2026»), texto_inicio y texto_fin (el plazo literal cuando no hay fecha), estado (en_plazo o plazo_texto), dias_restantes, abierto (la marca de la BDNS, que no significa en plazo), beneficiarios (literales) y beneficiario_tipos (códigos con nombre), sectores (secciones CNAE con nombre) y sectores_detalle, regiones (NUTS con nombre) y regiones_detalle, comunidades (slugs), ambito, finalidad, instrumentos, fondos, bases_url, sede, n_documentos, n_anuncios, actualizado, cambio, repetidas y nombre_comun (el nombre por el que se conoce la ayuda, «Bono infantil», cuando sus bases se han leído con IA y el documento se lo da; nulo en las demás, que son casi todas; q también lo busca). Los filtros se combinan con Y; los de listas admiten varios valores separados por comas. El orden por defecto pone primero las que antes cierran y, al final, las que solo tienen el plazo en texto.
Fichas repetidas: cuando un órgano da de alta la misma ayuda una vez por beneficiario (54 «Becas comedor» el mismo día) la lista trae una sola fila, la más reciente, con repetidas: cuántas más hay como ella entre lo filtrado (0 en el resto). total y la paginación cuentan filas, no fichas. Solo se junta la concesión directa instrumental dirigida a particulares, con el mismo órgano y el mismo título salvo números; el presupuesto es el de la ficha que se enseña, no la suma. iguales_a=<numero> devuelve las de su grupo una a una y agrupar=false, la lista entera sin juntar nada.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
comunidaden la consulta | texto, hasta 200 caracteres | — | slugs de comunidad separados por comas («canarias,galicia»; los de /administracion/{slug}) o «estado» (ámbito nacional) |
ambitoen la consulta | texto, hasta 10 caracteres | — | nacional (toda España), comunidad (una), varias o exterior |
nutsen la consulta | texto, hasta 5 caracteres | — | prefijo NUTS de las regiones de la ficha: ES70 (Canarias), ES705 (Gran Canaria) |
sectoren la consulta | texto, hasta 50 caracteres | — | secciones de la CNAE 2025 separadas por comas (letras de la A a la V: «C,J») |
beneficiarioen la consulta | texto, hasta 100 caracteres | — | tipos separados por comas: empresas (pymes o grandes), pymes, grandes, entidades, particulares, otros |
nivelen la consulta | texto, hasta 60 caracteres | — | estado, autonomica, local u otros, separados por comas |
finalidaden la consulta | texto, 2-80 caracteres | — | finalidad tal como la da /convocatorias/resumen («Cultura») |
tipoen la consulta | texto, hasta 80 caracteres, patrón ^(competitiva|directa_canonica|directa_instrumental|instrumental_particulares|directa|todas)(,(competitiva|directa_canonica|directa_instrumental|instrumental_particulares|directa|todas))*$ | competitiva,directa_canonica,instrumental_particulares | competitiva (concurrencia competitiva), directa_canonica (concesión directa con bases: la pide quien cumple los requisitos, sin competir), directa_instrumental (nominativas y convenios, con destinatario), instrumental_particulares (la instrumental cuyo beneficiario declarado incluye a particulares: emergencia social, alquiler), directa (canónica e instrumental) o todas; varios separados por comas. Por defecto competitiva,directa_canonica,instrumental_particulares: todo lo que se puede pedir |
plazoen la consulta | texto, uno de fecha, texto | — | fecha: solo con fecha de fin; texto: solo con el plazo en texto |
presupuesto_minen la consulta | número, de 0 a 1000000000000 | — | |
presupuesto_maxen la consulta | número, de 0 a 1000000000000 | — | |
diasen la consulta | entero, de 0 a 730 | — | solo las que cierran en estos días o menos (con fecha) |
nuevas_desdeen la consulta | fecha (AAAA-MM-DD) | — | solo las publicadas en la BDNS ese día o después (lo nuevo desde una fecha) |
plazo_desdeen la consulta | fecha (AAAA-MM-DD) | — | |
plazo_hastaen la consulta | fecha (AAAA-MM-DD) | — | |
mrren la consulta | booleano | — | solo las financiadas por el Mecanismo de Recuperación y Resiliencia |
qen la consulta | texto, 2-80 caracteres | — | texto libre sobre título, órgano, finalidad, bases y el nombre por el que se conoce la ayuda («bono infantil»): todas las palabras tienen que estar, cada una por el comienzo de una palabra, sin tildes y en singular o plural; una sigla vale por lo que significa y al revés («PRL» y «riesgos laborales», «FP» y «formación profesional»), y las palabras más frecuentes, por sus equivalentes en catalán, gallego y euskera |
agruparen la consulta | booleano | true | junta en una fila las fichas repetidas (la misma ayuda dada de alta una vez por beneficiario); false: todas, una a una |
iguales_aen la consulta | texto, patrón ^\d{1,12}$ | — | número de una convocatoria: solo las fichas repetidas de su grupo, una a una |
ordenen la consulta | texto, uno de plazo, presupuesto, reciente | plazo | |
desdeen la consulta | entero, de 0 a 10000 | 0 | |
limiteen la consulta | entero, de 1 a 100 | 25 | convocatorias por página |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/convocatorias/abiertas?beneficiario=empresas&comunidad=cataluna§or=C&dias=30&limite=100"{
"total": 214, "desde": 0, "limite": 100, "orden": "plazo", "tipo": "competitiva,directa_canonica,instrumental_particulares",
"resultados": [
{"numero": "925512", "id": 1127073, "titulo": "Ayudas a la contratación de personas con discapacidad en empresas de Cataluña 2026",
"organo": "DEPARTAMENTO DE EMPRESA Y TRABAJO", "organo_padre": "CATALUÑA", "nivel": "autonomica", "nivel_nombre": "Comunidades autónomas",
"mrr": false, "tipo": "competitiva", "tipo_nombre": "Concurrencia competitiva", "presupuesto": 3000000.0, "abierto": false,
"fecha_recepcion": "2026-08-19", "fecha_inicio": "2026-08-20", "fecha_fin": "2026-09-15", "texto_inicio": null, "texto_fin": null,
"estado": "en_plazo", "dias_restantes": 4, "finalidad": "Fomento del Empleo",
"bases_url": "https://dogc.gencat.cat/…", "sede": "https://web.gencat.cat/…",
"beneficiarios": ["PYME Y PERSONAS FÍSICAS QUE DESARROLLAN ACTIVIDAD ECONÓMICA", "GRAN EMPRESA"],
"beneficiario_tipos": [{"codigo": "pymes", "nombre": "Pymes y autónomos"}, {"codigo": "grandes", "nombre": "Grandes empresas"}],
"sectores": [{"codigo": "C", "nombre": "Industria manufacturera"}], "sectores_detalle": ["C - INDUSTRIA MANUFACTURERA"],
"regiones": [{"codigo": "ES51", "nombre": "Cataluña"}], "regiones_detalle": ["ES51 - CATALUÑA"], "comunidades": ["cataluna"], "ambito": "comunidad",
"instrumentos": ["SUBVENCIÓN Y ENTREGA DINERARIA SIN CONTRAPRESTACIÓN"], "fondos": [], "n_documentos": 2, "n_anuncios": 1,
"actualizado": "2026-08-19T00:00:00Z", "cambio": "alta", "repetidas": 0, "nombre_comun": null, "link": "https://www.infosubvenciones.es/bdnstrans/GE/es/convocatorias/925512"},
{"numero": "925677", "titulo": "Ayudas a la digitalización del comercio local 2026", "organo": "CONSELLERIA DE INNOVACIÓN, INDUSTRIA, COMERCIO Y TURISMO",
"estado": "plazo_texto", "fecha_fin": null, "dias_restantes": null,
"texto_fin": "20 días hábiles a contar desde el día siguiente al de la publicación del extracto en el DOGV", "…": "…"}
]
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/convocatorias/encajecon clave#Ayudas que le encajan a una empresa, una entidad o una persona, ordenadas y con el motivo
Las convocatorias en plazo que le encajan a alguien, ordenadas de más a menos y cada una con el motivo por el que sale. Es un encaje automático, sin revisión humana, sobre los datos de la ficha de la BDNS (no lee los requisitos de las bases): sirve para ordenar y descartar, no para decidir que una ayuda se puede pedir. Solo con un plan con API (Pro, Despacho o plataforma).
Quién pide se dice con nif (una empresa o entidad con ficha: sector, comunidad y tamaño se deducen de las ayudas que ha recibido y de su sede, como en /empresa/{nif}; municipio, sector y tamano corrigen lo deducido) o a mano con clase y municipio (o comunidad), más forma, tamano y sector para una empresa o tema para un particular. Devuelve perfil (lo que el motor ha usado), total, nuevas, por_nivel (cuántas filas hay de encaje alto, medio y bajo), excluidas (cuántas convocatorias deja fuera cada regla), tema_sin_oferta (cierto cuando un particular pidió un tema, no hay nada de él en plazo y lo que va es lo demás de su zona, como si no lo hubiera dicho) y resultados: la fila de /convocatorias/abiertas más encaje (puntos, nivel, hasta tres motivos en llano y avisos), lineas y numeros (las líneas de una misma orden, con el mismo órgano y el mismo título salvo números, van en una fila) y dias_restantes_grupo (los de la línea que antes cierra).
Parte de las convocatorias de su comunidad y de ámbito nacional para su tipo de beneficiario, con el tipo por defecto de /convocatorias/abiertas. Deja fuera, solo con evidencia: las de otro ayuntamiento (otro_municipio), las de otra isla u otra provincia (otro_nuts3), las que ya tienen destinatario (nominativa: nominativas, convenios y concesiones directas con nombre propio), las que el órgano anuló (anulada) y la ayuda social a personas cuando pide una empresa o una entidad (social_a_empresa). Lo demás puntúa: el lugar (su ayuntamiento, su isla o provincia, su comunidad, el Estado), que solo admita a los de su clase y tamaño, que nombre a los autónomos, su sector (en la ficha, si no lleva casi todos, y en el título) y la finalidad, y los temas de un particular; resta que el título sea de otra actividad, de otra forma de empresa, para ayuntamientos o para un colectivo cerrado. alto desde 50 puntos, medio desde 25. El sector no filtra: la BDNS lo clasifica con poco cuidado.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
nifen la consulta | texto, 9-20 caracteres | — | NIF de una empresa o entidad con ficha (`/empresa/{nif}`): el perfil se deduce de sus ayudas y de su sede; `municipio`, `sector` y `tamano`, si llegan, corrigen lo deducido (`clase`, `forma` y `tema` no se usan: la clase la dice el NIF) |
municipioen la consulta | texto, hasta 5 caracteres | — | código INE del municipio (cinco dígitos: «38038»); da la isla o la provincia y la comunidad. Con `nif`, afina su lugar |
comunidaden la consulta | texto, hasta 40 caracteres | — | slug de comunidad («canarias») o «estado» (solo ámbito nacional), si no se da el municipio |
claseen la consulta | texto, uno de particular, empresa, entidad | — | quién pide: particular, empresa (también un autónomo) o entidad sin actividad económica. Obligatoria sin `nif` |
formaen la consulta | texto, uno de autonomo, sociedad | — | de una empresa: autonomo o sociedad |
tamanoen la consulta | texto, uno de pymes, grandes | — | de una empresa: pymes o grandes |
sectoren la consulta | texto, hasta 30 caracteres | — | secciones CNAE de la empresa o la entidad, separadas por comas («F» o «C,G»); dan puntos, no filtran |
temaen la consulta | texto, hasta 60 caracteres | — | lo que busca un particular, hasta 3: estudios, vivienda, familia, empleo, discapacidad, cultura |
nivelen la consulta | texto, hasta 20 caracteres | alto,medio | niveles de encaje que se devuelven: alto, medio y bajo, separados por comas |
nuevas_desdeen la consulta | fecha (AAAA-MM-DD) | — | marca como «nueva» (en `avisos`) lo publicado ese día o después, y lo cuenta en `nuevas` |
desdeen la consulta | entero, de 0 a 3000 | 0 | |
limiteen la consulta | entero, de 1 a 100 | 25 | filas por página |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/convocatorias/encaje?clase=empresa&forma=autonomo&tamano=pymes&municipio=38038§or=F"{
"perfil": {"clase": "empresa", "forma": "autonomo", "tamano": "pymes", "municipio": "38038", "nuts3": ["ES709"], "comunidades": ["canarias"],
"sectores": ["F"], "sectores_deducidos": false, "temas": [], "zona": false},
"total": 16, "nuevas": 2, "por_nivel": {"alto": 3, "medio": 13, "bajo": 21},
"excluidas": {"otro_municipio": 13, "otro_nuts3": 17},
"desde": 0, "limite": 25,
"resultados": [
{"numero": "889775", "titulo": "CONCESIÓN DE SUBVENCIONES DE CUOTA CERO AUTÓNOMOS (2026)", "organo": "CONSEJERÍA DE ECONOMÍA…", "organo_padre": "CANARIAS",
"presupuesto": 9000000.0, "fecha_fin": "2026-10-31", "estado": "en_plazo", "dias_restantes": 40, "municipio": null,
"encaje": {"puntos": 50, "nivel": "alto", "motivos": ["de tu comunidad", "para autónomos", "solo para empresas y autónomos"], "avisos": []},
"lineas": 2, "numeros": ["889775", "889445"], "dias_restantes_grupo": 40, "…": "…"},
{"numero": "897035", "titulo": "Convocatoria de ayudas económicas destinadas al fomento del empleo de 2026…", "organo_padre": "CÁMARA DE COMERCIO DE TENERIFE",
"encaje": {"puntos": 45, "nivel": "medio", "motivos": ["de tu isla", "solo para empresas y autónomos", "para pymes"], "avisos": ["nueva", "cierra en 6 días"]},
"lineas": 1, "numeros": ["897035"], "…": "…"}
]
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/convocatorias/{numero}con clave#Ficha de una convocatoria: plazo, bases, documentos, anuncios y concesiones ya publicadas
Toda la convocatoria por su número en la BDNS: los campos de la lista más abierta (si sigue en plazo según la vista), ficha_completa (false para las del catálogo cuya ficha aún no se ha pedido: solo título, órgano y fecha de recepción), nombre_comun (como en la lista), bases (descripción), diario_oficial, reglamento (minimis, exención por categorías), ayuda_estado (número SA) con su URL, objetivos, ficha_comprobada (último día en que se pidió a la BDNS); documentos (los ficheros de la ficha con url de descarga en la BDNS, tamaño y fechas de publicación y modificación); anuncios (extractos en diarios oficiales: título, diario, url, CVE y fecha); y concesiones, lo ya publicado con cargo a esta convocatoria: cuántas, importe, beneficiarios distintos, primera y última fecha, las personas_fisicas solo agregadas y los mayores beneficiarios (NIF con enlace a /empresa/{nif}, nombre, concesiones e importe).
acceso (desde el 2026-09-14): cuenta con una clave de cuenta o con la sesión del visitante de la web, y entonces va todo; visitante con la clave de servicio de la web y sin sesión (la ficha pública /subvencion/{numero} de openmoney.es), y entonces concesiones.mayores va vacía (las cifras de concesiones sí van).
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
numero *en la ruta | texto, 1-12 caracteres, patrón ^\d{1,12}$ | — | número de la convocatoria en la BDNS (`numero` en la lista y en las novedades) |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/convocatorias/925512"{
"numero": "925512", "titulo": "Ayudas a la contratación de personas con discapacidad en empresas de Cataluña 2026",
"abierta": true, "ficha_completa": true, "estado": "en_plazo", "dias_restantes": 4, "fecha_fin": "2026-09-15", "acceso": "cuenta",
"bases": "ORDEN EMT/…/2026 por la que se aprueban las bases reguladoras…", "bases_url": "https://dogc.gencat.cat/…",
"diario_oficial": true, "reglamento": "REG (UE) 651/2014, DE 17 DE JUNIO, de exención por categorías", "ayuda_estado": "SA.122469",
"ficha_comprobada": "2026-09-11", "cambio": "documentos",
"documentos": [{"id": 1507500, "descripcion": "Texto en castellano de la convocatoria", "nombre": "Resolucion_convocatoria_2026.pdf", "bytes": 517385,
"publicado": "2026-08-19", "modificado": "2026-09-02", "url": "https://www.infosubvenciones.es/bdnstrans/GE/es/convocatoria/925512/document/1507500"}],
"anuncios": [{"num_anuncio": 217283, "titulo": "Extracto de la Orden…", "diario": "DOGC", "url": "https://dogc.gencat.cat/…", "cve": "…", "publicado": "2026-08-21"}],
"concesiones": {"n": 0, "importe": null, "beneficiarios": 0, "primera": null, "ultima": null, "personas_fisicas": {"n": 0, "importe": null}, "mayores": []},
"…": "…"
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/convocatorias/novedadescon clave#Convocatorias nuevas o con cambios desde una marca
Convocatorias cuya ficha se dio de alta o cambió (cambio: alta, plazo, documentos, anuncios, presupuesto u otro) desde desde, en orden de actualizado, con abierta según la vista. La BDNS no avisa de cambios: el incremental vuelve a pedir la ficha de las competitivas, las directas con bases y las instrumentales para particulares en plazo (cada día las dos primeras semanas tras la recepción, cada semana después, hasta los 150 días) y compara plazo, documentos, anuncios y presupuesto; una ampliación de plazo llega así como cambio = plazo. Para seguir: siguiente trae el desde y el tras de la página siguiente (cuando mas es true) o la marca para la próxima consulta. En la carga inicial actualizado es la fecha de recepción de la convocatoria (o de la última modificación de sus documentos), no el día de la carga.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
desde *en la consulta | fecha y hora (ISO 8601) | — | marca de la última consulta (ISO 8601); vuelven las convocatorias con `actualizado` igual o posterior |
trasen la consulta | texto, hasta 20 caracteres | — | número de la última convocatoria recibida con ese mismo `actualizado`, para seguir la página |
tipoen la consulta | texto, hasta 80 caracteres, patrón ^(competitiva|directa_canonica|directa_instrumental|instrumental_particulares|directa|todas)(,(competitiva|directa_canonica|directa_instrumental|instrumental_particulares|directa|todas))*$ | competitiva,directa_canonica,instrumental_particulares | competitiva (concurrencia competitiva), directa_canonica (concesión directa con bases: la pide quien cumple los requisitos, sin competir), directa_instrumental (nominativas y convenios, con destinatario), instrumental_particulares (la instrumental cuyo beneficiario declarado incluye a particulares: emergencia social, alquiler), directa (canónica e instrumental) o todas; varios separados por comas. Por defecto competitiva,directa_canonica,instrumental_particulares: todo lo que se puede pedir |
limiteen la consulta | entero, de 1 a 500 | 200 |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/convocatorias/novedades?desde=2026-09-10T05:00:00Z&limite=500"{
"desde": "2026-09-10T05:00:00Z", "mas": false, "tipo": "competitiva,directa_canonica,instrumental_particulares",
"siguiente": {"desde": "2026-09-11T05:12:40.118Z", "tras": "929084"},
"convocatorias": [
{"numero": "919558", "titulo": "Convocatoria para el fomento del uso del servicio de transporte público ferroviario…", "abierta": true,
"estado": "plazo_texto", "cambio": "plazo", "actualizado": "2026-09-11T05:12:39.902Z", "…": "…"},
{"numero": "929084", "titulo": "Bases específicas para el otorgamiento de subvenciones para la adquisición de equipamiento para embarcaciones…",
"abierta": true, "estado": "en_plazo", "cambio": "alta", "actualizado": "2026-09-11T05:12:40.118Z", "…": "…"}
]
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/convocatorias/{numero}/basescon clave#Lo leído por IA de las bases de la convocatoria, con su frase y su página
Estado de la lectura de las bases (sin_leer, en_curso, leido, error, sin_texto, sin_documento), lectura (campo a campo: valor, cita literal, pagina, confianza, nota), contrastes con la ficha de la BDNS (cada uno con resultado: coincide, anade, contradice o incoherente, y las dos versiones, sin elegir), documento (el PDF que se lee) y puede_pedir con su motivo. Lo leído es público; pedir la lectura va con un plan de pago (POST). Dato leído por IA, aparte y marcado: las bases mandan.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
numero *en la ruta | texto, 1-12 caracteres, patrón ^\d{1,12}$ | — | número de la convocatoria en la BDNS |
Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/convocatorias/{numero}/basescon clave#Leer las bases de la convocatoria con IA (planes de pago)
Lanza la lectura del documento de la convocatoria y responde con el mismo cuerpo que el GET: 200 si terminó dentro de la espera, 202 si sigue en marcha (preguntar al GET cada pocos segundos). 403 sin un plan de pago (o fuera de la beta), 429 con la cuota diaria agotada, 503 apagado o con los topes de gasto alcanzados, 409 sin documento legible.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
numero *en la ruta | texto, 1-12 caracteres, patrón ^\d{1,12}$ | — | número de la convocatoria en la BDNS |
forzaren la consulta | booleano | false | volver a leer aunque ya esté leído (beta y administradores) |
Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Historias
Lecturas de los datos con cifras comprobables, las mismas que https://openmoney.es/historias.
/historiascon clave#Las historias, con titular y cifra
Titular y cifra de cada historia para la portada (todas las historias, cacheadas una hora).
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/historias"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/historias/{slug}con clave#Una historia con sus tablas y fuentes
Los datos de una historia por su slug (los de la lista): tablas con las cifras, enlaces a las fichas y a la fuente que sustenta cada una. Las historias son las de https://openmoney.es/historias.
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
slug *en la ruta | texto | — |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/historias/contratos-menores"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Mapas
Los datos de los mapas: municipios de España en la portada y burbujas de las fichas.
/mapacon clave#Mapa de la portada: los municipios de España
Para cada municipio (m, por código INE) cuatro cifras: gasto del ayuntamiento, contratos y subvenciones por habitante, y población; anios dice de qué año es cada una. Unos 300 KB (100 comprimidos); cambia una vez al día.
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/mapa"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/mapas/empresa/{nif}con clave#Dónde le adjudican a una empresa
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
nif *en la ruta | texto, 1-64 caracteres | — |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/mapas/empresa/A28599033"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/mapas/organo/{organo}con clave#De dónde son los proveedores de un órgano
Parámetros
| Nombre | Tipo | Por defecto | Qué es |
|---|---|---|---|
organo *en la ruta | texto, 1-64 caracteres | — |
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/mapas/organo/L01280796"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Portada
Cifras de la portada y las claves del sitemap.
/portadacon clave#Cifras de la portada
Adjudicado en los últimos 30 días, mayores empresas y órganos del año, cuántas empresas y municipios hay y la versión de los datos (version_datos, el día de la última carga).
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/portada"{
"anio": 2026,
"ultimos_30_dias": {"…": "…"},
"top_empresas": [{"nif": "A28599033", "nombre_canonico": "INDRA SISTEMAS SA", "importe": 486120334.2, "n": 412}],
"top_organos": [{"…": "…"}],
"n_empresas": 148213,
"municipios": {"…": "…"},
"organos": {"n": 24310, "con_municipio": 8102, "sin_dir3_ni_municipio": 1987, "importe_sin_dir3_ni_municipio": 10600000000.0},
"version_datos": "2026-09-10"
}Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/sitemapcon clave#Claves del sitemap
Los identificadores con ficha y la fecha del último cambio de cada una: las 1.000 mayores empresas, los municipios con datos (liquidación en CONPREL o adjudicaciones de sus órganos; los demás llevan noindex), los órganos con actividad (10 expedientes o más y adjudicaciones desde 2022, contratos a personas físicas o licitaciones en plazo; los demás llevan noindex), los slugs de las administraciones y las categorías CPV con contratos (cpv, tres dígitos). Es lo que la web publica en su sitemap. Cada entrada es {id, lastmod}: lastmod (AAAA-MM-DD) es el día del último dato de esa ficha (última adjudicación o concesión de la empresa; último expediente, adjudicación o licitación en plazo del órgano y, en el municipio, de sus órganos; último anuncio en plazo de la categoría CPV) y null cuando no hay dato (las administraciones siempre; desde el 2026-09-14, antes eran listas de ids).
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/sitemap"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
/sitemap/abiertascon clave#Claves del sitemap de las fichas en plazo
Las licitaciones en plazo (licitaciones: el id de /licitaciones/{id}) y las convocatorias de subvenciones en plazo que la web indexa (convocatorias: el numero de /convocatorias/{numero}; concurrencia competitiva y concesión directa con bases; la directa instrumental dirigida a particulares sale en las listas pero no aquí), cada una con lastmod, el día de su última versión en la fuente. Es lo que la web publica en sus sitemaps de fichas de expediente (/licitacion/<id>) y de convocatoria (/subvencion/<numero>); cambia con cada carga y se cachea una hora. Desde el 2026-09-14.
Ejemplo
curl -H "X-API-Key: om_…" "https://api.openmoney.es/sitemap/abiertas"Códigos de respuesta: 200 correcto · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada, o creada durante la prueba gratis del Pro y la prueba ha terminado · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la cuenta agotada; `Retry-After` dice cuánto esperar
Estado
Qué es esta API y si está sana.
/sin clave#Qué es esta API
Nombre, versión y dónde está la documentación. No necesita clave.
Ejemplo
curl "https://api.openmoney.es/"{"nombre": "OpenMoney API", "version": "1.0", "documentacion": "https://openmoney.es/api", "openapi": "https://api.openmoney.es/openapi.json", "web": "https://openmoney.es"}Códigos de respuesta: 200 correcto
/healthsin clave#Estado de la API
Sin clave. db dice si la base responde (503 si no); datos_al_dia si ninguna fuente del incremental lleva más de 30 horas sin una ronda buena (datos_horas); feeds_al_dia si PLACSP ha publicado algo en cada uno de sus tres feeds en las últimas 30 horas (feeds_horas: las horas desde la última entrada del feed más atrasado); ok es las tres cosas; version_datos es el día de la última carga; ip es la dirección con la que el límite por IP cuenta a quien llama; clave_servicio dice si la API tiene configurada la clave con la que la llama la web.
Ejemplo
curl "https://api.openmoney.es/health"{"ok": true, "db": "ok", "db_ms": 3, "version_datos": "2026-09-10", "datos_al_dia": true, "datos_horas": 6.5, "feeds_al_dia": true, "feeds_horas": 9.2, "cuentas": true, "clave_servicio": true, "enlaces_24h": 4, "ip": "203.0.113.7", "api": "1.0", "…": "…"}Códigos de respuesta: 200 correcto
Rutas que no están aquí: /cuenta/… son las rutas que usa la propia web con la sesión del navegador (entrar, salir, crear claves). No forman parte del contrato de la API y pueden cambiar sin aviso. Para crear o revocar claves está tu cuenta.
Condiciones de uso
Al crear una clave aceptas las condiciones de uso del aviso legal, en particular su apartado API. En corto:
- La API es la única vía autorizada para leer OpenMoney con un programa: nada de rastrear la web, sus datos estructurados ni sus enlaces.
- La clave es personal: no se comparte, no se cede, no se publica ni se usa desde un navegador ajeno. Una cuenta, una persona.
- Con los planes Pro y Despacho puedes usar los datos en tu propio programa o análisis, para ti, tu empresa o tu despacho y sus clientes, y citarlos. Meterlos en un producto o servicio que usan terceros (una plataforma, un programa de gestión, un boletín) necesita un acuerdo de plataforma, que es la única licencia para eso. En los dos casos, con la atribución «Datos: OpenMoney sobre PLACSP/BDNS» y un enlace a openmoney.es donde se muestren.
- No puedes extraer una parte sustancial de la base de datos, redistribuirla, revenderla ni montar con ella otro servicio o conjunto de datos, ni usar el contenido para entrenar modelos sin licencia escrita.
- Nada de lo que devuelve la API identifica a personas físicas, y así debe seguir: no intentes reidentificarlas.
- Ante un uso prohibido o un intento de saltarse los límites, la clave y la cuenta se revocan sin aviso.
Los datos de origen son públicos y siguen en sus fuentes (PLACSP, BDNS, Hacienda, INE); lo que aporta OpenMoney es la reconciliación, la limpieza y la estructura. Quien necesite un volcado completo debe obtenerlo de las fuentes oficiales.
Cambios
La versión va en / y en /health (api). Añadimos campos y rutas sin cambiar de versión; un cambio que quite o renombre algo se anuncia aquí con antelación y sube la versión.
- 5 de octubre de 2026. El título leído. Campo nuevo
titulo_leidoen/licitaciones/abiertas(también concomo), en la ficha/licitaciones/{id}y en las filas del radar/licitaciones/encaje: el título en llano que la IA escribe al leer cada anuncio en plazo, en castellano aunque el anuncio vaya en catalán, gallego o euskera («Muro de contención en la calle Orden de Calatrava, 2.ª fase» por «Contrato de obras del Proyecto de muro de contención en Calle Orden de Calatrava 2ª fase»). Solo dice lo que el anuncio dice: cada cifra y cada nombre propio del título tienen que estar en el enunciado, o no se sirve. Esnullmientras el anuncio no se ha leído (se leen una vez al publicarse) y cuando no añade nada al enunciado.tituloyobjetosiguen siendo los oficiales. - 29 de septiembre de 2026. La API por plan. La cuota diaria y los topes por petición salen del plan de la cuenta: 200 peticiones al día y 50 NIF o clientes por petición con el Pro (uso propio); 500 y 500 con el plan Despacho, nuevo; a medida con un acuerdo de plataforma. Antes eran 1.000 al día y 500 por petición para todas las cuentas. La API va con el plan: las claves de una cuenta que vuelve al gratis responden
403y vuelven a valer, las mismas, cuando recupera un plan con API. Una plataforma puede crear una clave por cada asesoría a la que sirve, con el uso medido por clave. Sin cambio de versión. - 29 de septiembre de 2026. Afinado del encaje sin historial.
sector=admite hasta cinco secciones (antes tres). Encomo(y enperfildel radar), campo nuevofalta:["sector"]cuando no hay ninguna línea CPV con la que encajar y["lugar"]cuando un perfil sin historial no dice dónde está (entonces ninguna licitación pasa de «bajo»: diprovincia=,municipio=ocomunidad=); vacío en los demás casos. Sin historial solo cuenta el código CPV principal del expediente (uno secundario ya no lo sube a «medio»). En el radar,nifvuelve normalizado («b-38.515.854» → B38515854; cruza porref), unnifcon comas y un campo que no existe son 422,motivose rellena también cuando el NIF no valía pero el cliente encaja por lo declarado o cuando el perfil no dice dónde está, y un lote de 500 clientes conrefy perfil cabe en la petición (antes, 413 por encima de 16 KB).como.cpv3sale por peso (el grupo principal primero), no en orden alfabético. Sin cambio de versión. - 28 de septiembre de 2026. Encaje sin historial y radar por lotes.
/licitaciones/abiertas?como={nif}ya no responde 404 a una empresa sin contratos: encaja por su sector (el que pases ensector=, el de su alta a mano en tu cuenta o, si nadie lo dice, el deducido de sus ayudas en la BDNS), su lugar (municipio=,provincia=ocomunidad=) y su tamaño (tamano=: autonomo, pymes o grandes); esos parámetros valen también sincomo, y con una empresa con historial solo completan la sede que sus contratos no digan. El sector se traduce a grupos CPV con un mapa medido en 67.773 empresas que tienen sector e historial; ese encaje puntúa por grupo, no pasa de «medio» y sus motivos lo dicen («por tu actividad: construcción», «en tu isla»). Encomo, campos nuevosorigen(historial,ayudas,declaradoo nulo),sectores,lugarytamano;nombre_canonicoynifpueden ser nulos con un perfil sin NIF;competidoresyaniossolo van con historial. En la ficha de empresa,abiertas_comollevaorigenysectoresy cuenta también para las empresas sin contratos. Ruta nuevaPOST /licitaciones/encaje: el radar de una cartera (hasta 500 clientes por llamada; 50 con el plan Pro). Sin cambio de versión: solo se añade. - 22 de septiembre de 2026. En
/licitaciones/abiertasconcomo: campo nuevocpv_deducidoencomo(y enabiertas_comode la ficha de empresa), cierto cuando ninguno de los contratos de la empresa lleva código CPV y sus grupos se han deducido del texto de cada uno; entonces el encaje no pasa de «medio» y cada fila lleva el aviso «tu actividad, deducida del texto de tus contratos». Loscompetidoressalen solo de sus grupos CPV habituales, no de cualquiera donde haya ganado algo. Un presupuesto de una entidad local que no se cree (más de 300 M€ por lote) lleva el aviso «presupuesto por comprobar», no cuenta en el tamaño y conorden=presupuestova al final. En/convocatorias/abiertasy en la ficha, una fecha de fin más de cinco años más allá de hoy (una errata de la BDNS) va comonull, condias_restantesnulo yestado«plazo_texto». Sin cambio de versión. - 21 de septiembre de 2026 (tarde). Cambia lo que devuelve
como={nif}en/licitaciones/abiertas. Hasta hoy filtraba por las categorías CPV de tres dígitos donde la empresa o sus diez competidores habían ganado en tres años; al medirlo con 48 empresas reales, a la mediana le salía el 89 % de todo lo que hay en plazo (los «competidores» de una pyme son siempre los grandes grupos multiservicio). Ahora devuelve las licitaciones que le encajan a esa empresa por su propio historial, de más a menos (orden=encaje, el orden por defecto concomo; los demás órdenes siguen valiendo), y cada fila llevaencaje:puntos,nivel(alto, medio o bajo; se devuelven alto y medio, o los que diga el parámetro nuevonivel), hasta tresmotivosen llano («de tu especialidad», «en una provincia donde ya has ganado», «este órgano ya te ha adjudicado», «de tu tamaño») yavisos. Cuenta la coincidencia más fina de CPV (categoría de cinco dígitos, clase de cuatro, grupo de tres) según lo habitual que sea esa línea en la empresa, dónde gana, el tamaño de sus contratos y los órganos que ya le han adjudicado; sin ningún CPV en común no hay encaje. Encomo,cpv3pasa a ser sus grupos CPV principales y se añadencontratosypor_nivel;competidoressigue, pero ya no entra en el filtro. En la ficha de empresa,abiertas_como.nes ese mismo recuento (alto y medio) y llevapor_nivel. En/convocatorias/encaje, campo nuevotema_sin_oferta: cierto cuando un particular pidió untema, no hay nada de él en plazo y lo que va es lo demás de su zona. Sin cambio de versión. - 21 de septiembre de 2026. Campo nuevo
nombre_comunen/convocatorias/abiertasy en la ficha/convocatorias/{numero}: el nombre por el que la gente conoce la ayuda («Bono infantil», que la BDNS titula «Subvenciones para la escolarización de alumnado en CPEI y EEI»). Sale de la lectura de las bases por IA, solo cuando el documento lo escribe tal cual, y esnullen las demás, que son casi todas: solo lo tienen las convocatorias cuyas bases ya se han leído. El filtroqde la lista lo busca también, junto al título, el órgano, la finalidad y las bases. - 20 de septiembre de 2026. Fichas repetidas: algunos órganos dan de alta en la BDNS una convocatoria por cada ayuda que conceden (54 «Becas comedor» el mismo día, o una serie que solo cambia en un número: «Beneficiario/a 1», «Beneficiario/a 2»).
/convocatorias/abiertaslas trae ahora en una sola fila, la más reciente, con el campo nuevorepetidas(cuántas más hay como ella; 0 en el resto), ytotaly la paginación cuentan filas. Solo se junta la concesión directa instrumental dirigida a particulares, con el mismo órgano y el mismo título salvo números; la concurrencia competitiva y la directa con bases no se tocan.iguales_a=<numero>devuelve las de un grupo una a una yagrupar=false, la lista como antes./convocatorias/resumencuenta igual que la lista, así que sus cifras bajan un poco, y el presupuesto total deja de sumar varias veces el mismo importe. - 19 de septiembre de 2026. En las convocatorias, cuando la BDNS trae el fin de plazo escrito como fecha en el campo de texto y nada más (
texto_fin= «12/06/2026», con la fecha vacía),fecha_fines esa fecha y el campo nuevofecha_fin_origenvaletexto(bdnscuando la fecha viene de la BDNS,nullsin fecha);estadoydias_restantessalen de ella ytexto_finsigue yendo tal cual. Dejan de salir como abiertas las que ya habían vencido y siguen abiertas hasta su fecha las que antes desaparecían a los 60 días de publicarse. Una frase («20 días hábiles desde…», «hasta el 30/10/2026 o agotar el crédito») sigue sin convertirse en fecha, y tampoco una fecha a más de 180 días antes o 366 después de la publicación (año mal tecleado, otra edición o la vigencia de un convenio). Sin cambio de versión: solo se añade. - 16 de septiembre de 2026. En
/convocatorias/abiertas,/convocatorias/resumeny/convocatorias/novedades, eltipopor defecto pasa acompetitiva,directa_canonica,instrumental_particulares: entran también las concesiones directas instrumentales cuyo beneficiario declarado incluye a particulares (ayudas de emergencia social de los ayuntamientos, al alquiler, las del volcán de La Palma), que la BDNS clasifica como instrumentales aunque se pueden pedir; las nominativas a entidades concretas y los convenios siguen fuera. Nuevo valortipo=instrumental_particularespara pedir solo esas. En/licitaciones/abiertas, cada fila traeterritorioyterritorio_nombre: el territorio efectivo (el lugar de ejecución o, si el anuncio no lo concreta, el del órgano), afinado a la isla en Canarias e Illes Balears cuando el órgano es un ayuntamiento o un cabildo conocidos. - 15 de septiembre de 2026. En
/convocatorias/abiertas,/convocatorias/resumeny/convocatorias/novedades, eltipopor defecto pasa decompetitivaacompetitiva,directa_canonica: todo lo que se puede pedir, también las ayudas de concesión directa con bases (emergencia social, planes de renovación). Para seguir recibiendo solo la concurrencia competitiva,tipo=competitiva. Yambito=nacional(el filtrocomunidad=estado) queda para los órganos del Estado que declaran toda España: la convocatoria de una comunidad autónoma, de una entidad local o de una universidad (y demás «otros entes»: cámaras, consorcios) que declara «ES» en la BDNS cuenta en su comunidad (ambito=comunidad, ovarias), porque es para su territorio. La de una universidad sale del lugar de su nombre o de la región que declara en sus demás convocatorias. En/licitaciones/abiertasy/licitaciones/resumen,nuts=filtra por el territorio del expediente: el lugar de ejecución o, si no lo concreta (NUTS «ES», de un dígito o extranjero), la provincia o la comunidad del órgano (un ayuntamiento, una diputación, una consejería, una universidad o una empresa pública);ES3yES7cuentan como Madrid y Canarias.administracion=estadoya no añade los expedientes sin territorio de entidades locales, comunidades, universidades o plataformas autonómicas, ysin_territorio,por_comunidadypor_provinciadel resumen siguen la misma regla. La salida (nuts) sigue siendo la de PLACSP. Sin cambio de versión. - 14 de septiembre de 2026.
/sitemapcambia de forma: cada lista trae objetos{id, lastmod}en vez de ids sueltos, conlastmodel día del último dato de esa ficha (última adjudicación o concesión de la empresa; último expediente, adjudicación o licitación en plazo del órgano; la de sus órganos en el municipio; último anuncio en plazo de la categoría CPV) onull. Nueva/sitemap/abiertas: las licitaciones y las convocatorias en plazo con la fecha de su última versión en la fuente, una hora de caché. Las fichas/licitaciones/{id}y/convocatorias/{numero}responden también sin cuenta con la clave de servicio de la web (las fichas públicasopenmoney.es/licitacion/{id}yopenmoney.es/subvencion/{numero}) y traenacceso:cuenta(todo, como hasta ahora con una clave de cuenta) ovisitante(sincriterios,requisitos,garantias,declaraciones,antecedentes.filasniconcesiones.mayores). Para las claves de cuenta no cambia nada salvo la forma de/sitemap. - 12 de septiembre de 2026 (tarde). En
/licitaciones/resumen,nuts=(prefijo NUTS del lugar de ejecución) yadministracion=(slug de/administracion/{slug}, oestado: los órganos de la Administración General del Estado y la Seguridad Social más los expedientes de ámbito estatal sin territorio) acotan las cifras a un territorio o una administración; el resumen trae ademástop_organosycpv(los diez con más abiertas),por_dataset(de qué feed de PLACSP vienen) y, conadministracion=estado,por_ministerio. En/licitaciones/abiertas, el filtroadministracion=./convocatorias/resumentraetop_organos(los diez que más convocan). La ficha de órgano llevaccaayprovinciaenmunicipio. Son los datos de las páginas por comunidad, provincia y Estado de la web (/licitaciones/canarias,/licitaciones/sevilla,/licitaciones/estado,/subvenciones/canarias). Sin cambio de versión: solo se añade. - 12 de septiembre de 2026. Nuevas
/convocatorias/resumen,/convocatorias/abiertas,/convocatorias/{numero}y/convocatorias/novedades: las convocatorias de subvenciones de la BDNS que admiten solicitudes hoy (solo concurrencia competitiva por defecto;tipo=directaotodaspara el resto), con filtros por comunidad, territorio NUTS, sector CNAE, tipo de beneficiario, nivel, finalidad, presupuesto y plazo; el plazo en texto se devuelve tal cual (texto_fin), nunca convertido en fecha. La ficha trae bases, documentos con enlace de descarga, anuncios en diarios oficiales y las concesiones ya publicadas con cargo a la convocatoria. Las novedades incluyen las ampliaciones de plazo y los documentos nuevos que el refresco detecta (cambio). Misma tarde:tipoadmite tambiéndirecta_canonica(concesión directa con bases, la que pide quien cumple los requisitos sin competir),directa_instrumental(nominativas y convenios) y varios separados por comas (competitiva,directa_canonica: todo lo que se puede pedir), en/convocatorias/abiertas,/convocatorias/novedadesy ahora también en/convocatorias/resumen, cuya respuesta llevatipo. Sin cambio de versión: solo se añade. - 11 de septiembre de 2026 (tarde). Nuevas
/cpvy/cpv/{codigo}: qué se contrata en cada categoría del CPV (por año, por procedimiento, quién compra, quién gana, qué está en plazo). En/licitaciones/abiertas, el filtrocomo={nif}(solo las categorías donde esa empresa o sus competidores han ganado en los últimos tres años; la respuesta trae el perfil aplicado encomo). La ficha de empresa llevaabiertas_comoy la del órganotop_cpv;/sitemap, la listacpv. En «Actividad por CPV» de la ficha de empresa cada adjudicación cuenta ahora una sola vez por categoría (antes, una por cada código de esa categoría que llevara el expediente). Sin cambio de versión: solo se añade. - 11 de septiembre de 2026. Nueva
/empresas/novedades: para una lista de hasta 500 NIF, las adjudicaciones y las concesiones que PLACSP y la BDNS han publicado desde una marca, con la misma paginación por marca y cursor que/licitaciones/novedades. La ficha del expediente ya trae lotes, pliegos y documentos, historial de anuncios, criterios de adjudicación, solvencia y garantías (según el anuncio de PLACSP; los pliegos mandan). Sin cambio de versión: solo se añade. - 1.0 · 10 de septiembre de 2026. Clave obligatoria en toda ruta de datos (
X-API-Key), portal de claves en la cuenta, cuota diaria por cuenta (la comparten sus claves) con cabecerasX-RateLimit-*, esta documentación y el OpenAPI público. Nuevas/licitaciones/resumen,/licitaciones/abiertas,/licitaciones/{id}y/licitaciones/novedades. Las rutas de fichas, búsqueda, administraciones, historias y mapas siguen igual que en la 0.1, ahora con clave.
Lo siguiente: fichas públicas de expediente y de convocatoria, y el gasto por área y política en las fichas de administración. Desde el 12 de septiembre la cuenta manda cada mañana por correo las novedades de las empresas vigiladas y lo nuevo de las búsquedas guardadas (es lo que enseña el panel; la API no cambia) y avisa al dueño de una clave al pasar del 80 % de su cuota diaria y al agotarla.