API · versión 1.0
API de OpenMoney
Los mismos datos que enseña esta web, en JSON: contratos adjudicados, licitaciones en plazo, subvenciones concedidas y presupuestos liquidados por empresa, órgano de contratación, municipio y administración. Con una clave gratuita que se crea en tu cuenta.
EmpezarReferencia de rutasOpenAPI (JSON)
Empezar en tres pasos
- Crea una cuenta en openmoney.es/cuenta con tu correo: sin contraseña ni tarjeta, entras con el enlace que te enviamos.
- Crea una clave en la misma página («Claves de la API»). Empieza por
om_y se enseña una sola vez: cópiala. Puedes tener hasta tres activas y revocarlas cuando quieras. - Llama a la API con la clave en la cabecera
X-API-Key:
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}
]La base es https://api.openmoney.es. Todo es GET, responde JSON en UTF-8 y va comprimido si mandas Accept-Encoding: gzip. No hay estado entre llamadas: cada petición se basta con su clave.
La clave
Toda ruta de datos pide la cabecera X-API-Key. Sin ella la respuesta es 401 con el motivo. Las únicas rutas libres son / (qué es esta API), /health (si está sana) y /openapi.json (esta misma referencia en formato OpenAPI 3, para importarla en Postman, Insomnia o un generador de clientes).
- La clave es personal e intransferible: identifica tu cuenta. No la pongas en el código de un navegador ni en un repositorio; guárdala en una variable de entorno o en el gestor de secretos de tu plataforma.
- Solo guardamos una huella (SHA-256) de la clave y su prefijo. Si la pierdes, revócala en tu cuenta y crea otra. Revocar deja de valer al instante (en algún caso, hasta quince segundos después).
- Cada clave tiene un nombre para reconocerla y su uso se ve en tu cuenta: peticiones de hoy y de los últimos treinta días, por día y por ruta.
Límites y cuota
Dos barreras, y las dos responden 429 con Retry-After (segundos) cuando se alcanzan:
- Por dirección IP: 60 peticiones en ráfaga y luego 1 por segundo, de forma continua. Vale para toda la API, con o sin clave. Es la que frena a quien dispara sin clave.
- Por clave: una cuota diaria de peticiones (por defecto, 1.000; se renueva a las 00:00 UTC). Se ve en cada respuesta:
Cabecera Qué dice X-RateLimit-Limitla cuota diaria de la clave X-RateLimit-Remaininglas peticiones que quedan hoy X-RateLimit-Resetcuándo se renueva, en segundos desde 1970 (la próxima medianoche UTC)
¿Necesitas más? La cuota se ajusta por clave para integraciones con volumen (socios, alertas diarias para muchas empresas): escríbenos desde la dirección del aviso legal contando qué vas a hacer con los datos. Mientras tanto, pide páginas grandes (limite=100 en las listas, hasta 500 en las novedades) y guarda lo que ya tienes: los datos cambian una vez al día.
Errores
Todo error devuelve JSON con la clave detail y el motivo en castellano:
{"detail": "hace falta una clave de la API en la cabecera X-API-Key; se crea gratis con una cuenta en https://openmoney.es/cuenta (documentación: https://openmoney.es/api)"}| Código | Cuándo |
|---|---|
401 | Sin clave, o clave con forma incorrecta o desconocida. En las rutas con cuenta (licitaciones en plazo), también si la sesión de la web no vale. |
403 | Clave revocada. |
404 | No existe: una empresa sin adjudicaciones ni concesiones desde 2022, un municipio con un código INE que no es, una historia que no hay. |
422 | Un parámetro mal: detail es una frase («cpv: hasta 10 valores separados por comas, cada uno de 2 a 8 dígitos») o, si lo rechaza la validación de tipos, una lista con la ruta del campo (loc) y el mensaje. |
429 | Límite por IP o cuota de la clave agotada; espera lo que diga Retry-After. |
503 | La base de datos ha tardado demasiado o está saturada; reintenta pasados los segundos de Retry-After. Es raro y dura poco. |
Para un cliente robusto: reintenta los 429 y 503 respetando Retry-After, no reintentes los 4xx restantes, y trata cualquier campo nuevo en una respuesta como algo que puedes ignorar (añadimos campos; no quitamos ni renombramos sin avisar en Cambios).
Convenciones: 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
sospechosodonde 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: la empresa por su NIF (con o sin separadores, en cualquier caja; las uniones temporales por su id
UTE-…tal cual), el órgano por su código DIR3 (L01280796) o, cuando PLACSP no lo trae, por la claveNIF:…oPLAT:…que devuelven las fichas; el municipio por su código INE de cinco cifras (28079); la administración por su slug (estado,seguridad-social,canarias…)./searchdevuelve eltipoy elidque acepta cada ficha. - 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.
- Códigos: los CPV son la nomenclatura europea (se filtra por prefijo:
45son las obras,45233las de carreteras); el territorio, por código NUTS español por prefijo (ES51Cataluña,ES511Barcelona;ESes toda España); el tipo de contrato y el procedimiento, por los códigos numéricos de PLACSP (tipo: 1 suministros, 2 servicios, 3 obras…; procedimiento: 1 abierto, 9 abierto simplificado…)./licitaciones/resumendevuelve cada código con su nombre y cuántos expedientes tiene: es la lista completa y viva de valores para los filtros, y las respuestas llevan siempre el nombre junto al código. - 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.
Paginación y novedades desde una marca
Las listas se paginan con desde (posición, empieza en 0) y limite, y devuelven total sobre lo filtrado. Una página más allá del final vuelve vacía con el total real.
/licitaciones/novedades es la ruta para mantenerte al día sin repetir descargas: pides los expedientes cuya última versión en PLACSP (actualizado) es igual o posterior a una marca, en orden, y la respuesta trae en siguiente la marca de la página siguiente (desde y tras, el último expediente de ese instante) mientras mas sea true; cuando ya no hay más, siguiente es la marca que debes guardar para la próxima consulta. Aparte vienen las bajas: expedientes que PLACSP retiró desde la marca. Cada expediente dice si sigue abierta.
{
"desde": "2026-09-09T05:00:00+00:00", "mas": true,
"siguiente": {"desde": "2026-09-09T11:42:10+00:00", "tras": "https://contrataciondelestado.es/…/idEvl=abc"},
"expedientes": [ { "id": 27414823, "estado": "PUB", "estado_nombre": "Publicada", "abierta": true, "baja": null, "…": "los campos de la lista y los tres presupuestos" } ],
"bajas": [ {"id": 27301111, "id_url": "https://…", "expediente": "2026/SER/0102", "baja": "2026-09-09T06:10:00+00:00"} ],
"bajas_mas": false
}Los datos se cargan una vez al día, poco después de las 05:00 UTC, con seis horas de solape sobre el feed de PLACSP. Consulta las novedades a partir de las 08:00 UTC y quédate con la marca que devuelve la respuesta, no con tu hora local: así no pierdes ni repites expedientes aunque el feed llegue con retraso.
Ejemplos
Licitaciones en plazo, con filtros
curl -H "X-API-Key: om_…" "https://api.openmoney.es/licitaciones/abiertas?cpv=45&nuts=ES51&dias=30&orden=presupuesto&limite=100"{
"total": 388, "desde": 0, "limite": 25, "orden": "plazo",
"resultados": [
{
"id": 27414823,
"expediente": "2026/OBR/0041",
"titulo": "Renovación de la red de abastecimiento en la calle Mayor",
"objeto": "Obras de renovación de la red de abastecimiento de agua…",
"organo": "L01280796", "organo_nombre": "Ayuntamiento de Madrid",
"tipo": "3", "tipo_nombre": "Obras",
"procedimiento": "9", "procedimiento_nombre": "Abierto simplificado",
"presupuesto": 412300.5, "presupuesto_origen": "sin_iva",
"cpv": [{"codigo": "45231300", "nombre": "Trabajos de construcción de tuberías para agua y aguas residuales"}],
"lugar": "Madrid", "nuts": "ES300", "nuts_nombre": "Madrid",
"fecha_anuncio": "2026-09-02", "fin_plazo_ofertas": "2026-09-23", "dias_restantes": 13, "n_lotes": 0,
"link": "https://contrataciondelestado.es/wps/poc?uri=deeplink:detalle_licitacion&idEvl=…",
"actualizado": "2026-09-02T10:14:52+00:00"
}
]
}Python (httpx)
import httpx
api = httpx.Client(base_url="https://api.openmoney.es", headers={"X-API-Key": "om_…"}, timeout=30)
# licitaciones de obras en Cataluña que cierran en 15 días, por presupuesto
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"])
# novedades desde la última marca (guárdala: la siguiente consulta empieza en `siguiente`)
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"]:
...
marca = n["siguiente"]
if not n["mas"]:
breakJavaScript (fetch)
const r = await fetch("https://api.openmoney.es/empresa/A28599033", { headers: { "X-API-Key": "om_…" } });
if (r.status === 429) throw new Error(`espera ${r.headers.get("Retry-After")} s`);
const empresa = await r.json();
console.log(empresa.nombre_canonico, empresa.por_anio.at(-1));Ficha de una empresa, de un órgano o de un municipio
curl -H "X-API-Key: om_…" "https://api.openmoney.es/empresa/A28599033"
curl -H "X-API-Key: om_…" "https://api.openmoney.es/organo/L01280796"
curl -H "X-API-Key: om_…" "https://api.openmoney.es/municipio/28079"Las fichas son documentos grandes (20-40 KB comprimidos) con todo lo que enseña la web: por año, mayores contrapartes, expedientes recientes, señales. Cambian una vez al día: cachéalas.
Referencia de rutas
Generada del OpenAPI de la API (versión 1.0). Salvo que se diga lo contrario, cada ruta pide la clave y consume una petición de la cuota.
Búsqueda
Empresas, órganos, municipios y administraciones por nombre o identificador.
GET/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»).
| Parámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| q * | consulta | texto, 2-80 caracteres | texto libre: nombre, parte del nombre, NIF (con o sin separadores), código DIR3 o INE | |
| limit | consulta | entero, de 1 a 25 | 10 | resultados como máximo |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
Empresas
Ficha de una empresa: contratos adjudicados por año, órganos, CPV, competidores, subvenciones y señales.
GET/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), competidores en los mismos órganos y CPV (competidores) y señales aritméticas con su regla (senales). 404 si no hay adjudicaciones ni concesiones desde 2022.
| Parámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| nif * | ruta | texto, 1-64 caracteres |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
Órganos
Ficha de un órgano de contratación: adjudicado por año, proveedores, procedimientos y expedientes.
GET/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ámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| organo * | ruta | texto, 1-64 caracteres |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave 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.
GET/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ámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| ine * | ruta | texto, 1-64 caracteres |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
Administraciones
Estado, Seguridad Social y comunidades autónomas: liquidaciones, contratos y subvenciones.
GET/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).
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/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ámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| slug * | ruta | texto, 2-40 caracteres |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave 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.
GET/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. Cambia una vez al día.
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/licitaciones/abiertascon clave· con cuenta
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, órgano (clave y nombre), 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, 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.
| Parámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| cpv | consulta | texto, hasta 100 caracteres | prefijos CPV de 2 a 8 dígitos separados por comas: «45» o «45233,71» | |
| nuts | consulta | texto, hasta 5 caracteres | prefijo NUTS: ES51 (Cataluña), ES511 (Barcelona) | |
| tipo | consulta | texto, hasta 40 caracteres | códigos de tipo de contrato separados por comas (1 suministros, 2 servicios, 3 obras…) | |
| procedimiento | consulta | texto, hasta 40 caracteres | códigos de procedimiento separados por comas (1 abierto, 9 abierto simplificado…) | |
| presupuesto_min | consulta | número, de 0 a 1000000000000 | ||
| presupuesto_max | consulta | número, de 0 a 1000000000000 | ||
| dias | consulta | entero, de 0 a 730 | solo las que cierran en estos días o menos | |
| plazo_desde | consulta | fecha (AAAA-MM-DD) | ||
| plazo_hasta | consulta | fecha (AAAA-MM-DD) | ||
| organo | consulta | texto, hasta 64 caracteres | clave del órgano (la de /organo/{id}) | |
| q | consulta | texto, 2-80 caracteres | texto libre sobre objeto, título, expediente y órgano | |
| orden | consulta | texto, patrón ^(plazo|presupuesto|reciente)$ | plazo | |
| desde | consulta | entero, de 0 a 10000 | 0 | |
| limite | consulta | entero, de 1 a 100 | 25 | expedientes por página |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/licitaciones/{id}con clave· con cuenta
Ficha de un expediente, con 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, urgencia, sistema de contratación, sara, financiación, los tres presupuestos publicados, lugar, ciudad y código postal, número de resultados y versiones. 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.
| Parámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| id * | ruta | entero, de 1 a 1000000000000 | número del expediente en PLACSP (`id` en la lista y en las novedades) |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/licitaciones/novedadescon clave· con cuenta
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ámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| desde * | consulta | fecha y hora (ISO 8601) | marca de la última consulta (ISO 8601); vuelven los expedientes con updated igual o posterior | |
| tras | consulta | texto, hasta 300 caracteres | id_url del último expediente recibido con ese mismo updated, para seguir la página | |
| limite | consulta | entero, de 1 a 500 | 200 |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
Historias
Lecturas de los datos con cifras comprobables, las mismas que https://openmoney.es/historias.
GET/historiascon clave
Las historias, con titular y cifra
Titular y cifra de cada historia para la portada (todas las historias, cacheadas una hora).
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/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ámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| slug * | ruta | texto |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave 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.
GET/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.
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/mapas/empresa/{nif}con clave
Dónde le adjudican a una empresa
| Parámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| nif * | ruta | texto, 1-64 caracteres |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/mapas/organo/{organo}con clave
De dónde son los proveedores de un órgano
| Parámetro | Dónde | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
| organo * | ruta | texto, 1-64 caracteres |
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 422 Validation Error · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
Portada
Cifras de la portada y las claves del sitemap.
GET/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).
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
GET/sitemapcon clave
Claves del sitemap
Los identificadores con ficha: las 1.000 mayores empresas, todos los municipios, los órganos con más expedientes y los slugs de las administraciones. Es lo que la web publica en su sitemap.
Respuestas: 200 · 401 Sin clave, o clave con forma incorrecta o desconocida · 403 Clave revocada · 429 Límite por IP (60 en ráfaga, 1 por segundo) o cuota diaria de la clave agotada; `Retry-After` dice cuánto esperar
Estado
Qué es esta API y si está sana.
GET/sin clave
Qué es esta API
Nombre, versión y dónde está la documentación. No necesita clave.
Respuestas: 200
GET/healthsin clave
Estado de la API
Sin clave. ok y db dicen si la base responde; 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. 503 si la base no responde.
Respuestas: 200
Rutas que no están aquí: /cuenta/* y /lista-espera/* son las que usa la propia web con la sesión del navegador (entrar, salir, crear claves, la lista de espera de «¿Dónde abro?»); no forman parte del contrato de la API y pueden cambiar sin aviso. Para crear o revocar claves está tu cuenta.
Condiciones de uso y atribución
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.
- Puedes integrar los datos en tu producto o en tu análisis, mostrarlos a tus usuarios y citarlos, 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.
- 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 con cabecerasX-RateLimit-*, esta documentación y el OpenAPI público. Nuevas/licitaciones/resumen,/licitaciones/abiertas,/licitaciones/{id}y/licitaciones/novedades(expedientes en plazo, ficha con antecedentes y novedades desde una marca). Las rutas de fichas, búsqueda, administraciones, historias y mapas siguen igual que en la 0.1, ahora con clave.
Lo siguiente, por orden: pliegos, historial de anuncios y lotes en la ficha del expediente; convocatorias de subvenciones abiertas con su plazo; novedades por empresa (adjudicaciones y concesiones nuevas para una lista de NIF desde una marca).