Referencia · versión 1
Todo el dinero público español, en JSON
Una API REST sobre las 28 fuentes oficiales que vigila Boletín Claro: subvenciones, licitaciones y boletines del Estado, las comunidades autónomas y Europa. Se busca en lenguaje natural, no por palabras clave.
https://boletinclaro.es/v1
JSON · UTF-8
Sin login para probar
OpenAPI 3.1
Referencia interactiva
Empieza aquí
No hace falta clave para probarla. Pega esto en tu terminal:
curl "https://boletinclaro.es/v1/oportunidades?consulta=digitalizaci%C3%B3n%20para%20una%20pyme%20industrial&limite=3"
Y esto es lo que responde, sin recortar nada salvo la lista:
{
"consulta": "digitalización para una pyme industrial",
"total": 3,
"resultados": [
{
"titulo": "(CHD) Cheque Digitalización 2026",
"fuente": "BDNS",
"identificador": "857234",
"tipo": "subvencion",
"fecha_publicacion": "2026-09-01",
"fecha_fin": "2026-10-15",
"importe": 2000000,
"moneda": "EUR",
"ambito": "local",
"ubicacion": ["Aranda de Duero, Burgos, Castilla y León"],
"codigos_ubicacion": ["09018", "0947", "09"],
"enlace": "https://www.infosubvenciones.es/bdnstrans/GE/es/convocatoria/857234",
"ficha": "https://boletinclaro.es/subvencion/857234"
}
]
}
Si prefieres no leer nada más, la API se describe a sí misma: /v1/openapi.json es su especificación OpenAPI 3.1, con todos los parámetros, todas las respuestas y ejemplos reales. Impórtala en Postman o en Insomnia y ya puedes llamar.
Y si lo que quieres es hojearla: /v1/referencia es esa misma especificación dibujada, con los esquemas desplegables endpoint por endpoint. Esta página cuenta el porqué de las cosas; aquella enseña la forma exacta de cada respuesta.
Los seis endpoints
- /oportunidades — el dinero abierto
- /boletines — las gacetas oficiales
- /licitaciones — abiertas por CPV
- /empresas — buscar por nombre
- /empresas/{nif} — perfil de dinero público
- /codigos — CPV, CNAE e IAE
GET/v1/oportunidades
Subvenciones y licitaciones abiertas que encajan con una descripción en lenguaje natural. Describe la empresa o lo que busca, no pongas palabras clave sueltas: la búsqueda es semántica y funciona mejor con una frase entera.
Lo que ya no se puede solicitar queda fuera automáticamente: plazo vencido, concesión directa sin proceso, o una licitación que la fuente ya ha adjudicado.
| Parámetro | Qué hace | |
|---|---|---|
consulta | obligatorio | 2 a 2000 caracteres. Más largo se recorta, no se rechaza. |
tipo | subvenciones, licitaciones o ambos. Por defecto ambos. | |
zona | Comunidad, provincia o municipio (Andalucía, Bizkaia, Getxo). Incluye lo de ámbito nacional. | |
limite | 1 a 50. Por defecto 10. | |
incluir_cerradas | true para estudio de mercado o histórico. Por defecto false. |
curl "https://boletinclaro.es/v1/oportunidades?consulta=obra%20p%C3%BAblica%20de%20alumbrado&tipo=licitaciones&limite=5"
GET/v1/boletines
Todo lo que no es dinero: normativa, oposiciones, nombramientos, edictos, anuncios. Busca en las 25 gacetas oficiales a la vez — el BOE, el BORME, el DOUE y los diarios de las 17 comunidades, las provincias forales vascas y las ciudades autónomas.
| Parámetro | Qué hace | |
|---|---|---|
consulta | obligatorio | 2 a 2000 caracteres. |
fuentes | Códigos separados por comas (BOE,BOJA,DOGC). Vacío = todas. | |
zona | Comunidad, provincia o municipio. Incluye lo de ámbito nacional. | |
limite | 1 a 50. Por defecto 10. |
curl "https://boletinclaro.es/v1/boletines?consulta=oposiciones%20de%20auxiliar%20administrativo&zona=Bizkaia"
Códigos de fuente admitidos:
BOE BORME DOUE BOJA BOA BOPA BOIB BOC BOCAN BOCYL DOCM DOGC DOCV DOE DOG BOCM BORM BON BOPV BOR BOTHA BOG BOB BOCCE BOME
BOC es Cantabria y BOCAN Canarias, no al revés. Para subvenciones y licitaciones usa /oportunidades: sus fuentes (BDNS, PLACSP, TED, EUFUNDING) no están aquí.
0 resultados siempre: la ingesta del BORME está apagada, y del BOCCE (Ceuta) todavía no ingerimos nada. Los dejamos admitidos porque el día que se enciendan funcionarán sin que cambies tu código — pero preferimos decírtelo a que pases una tarde depurando una consulta que está bien.GET/v1/licitaciones
Licitaciones abiertas bajo uno o varios códigos CPV, con jerarquía: pedir 72000000 devuelve también todo lo que cuelga de él.
| Parámetro | Qué hace | |
|---|---|---|
cpv | obligatorio | Uno o varios códigos de 6 a 8 dígitos, separados por comas. |
limite | 1 a 50. Por defecto 10. |
curl "https://boletinclaro.es/v1/licitaciones?cpv=72000000,48000000&limite=20"
GET/v1/empresas
Resuelve un nombre de empresa a su NIF, con cuánto dinero público lleva recibido. El paso previo a pedir su perfil.
| Parámetro | Qué hace | |
|---|---|---|
consulta | obligatorio | 3 a 60 caracteres. Busca por coincidencia parcial. |
curl "https://boletinclaro.es/v1/empresas?consulta=telefonica"
GET/v1/empresas/{nif}
El perfil de dinero público de una empresa: subvenciones y contratos, con totales, rango de fechas, organismos y sectores principales, y el reparto por año.
curl "https://boletinclaro.es/v1/empresas/A78053147"
{
"nif": "A78053147",
"nombre": "TELEFONICA SOLUCIONES DE INFORMATICA Y COMUNICACIONES",
"dinero_publico_total": 3282678796.43,
"subvenciones": { "numero": 2, "importe": 106587.48,
"primera": "2022-01-01", "ultima": "2023-01-01" },
"contratos": { "numero": 4806, "importe": 3282572208.95 },
"organismos_principales": [ { "organismo": "…", "numero": 12, "importe": 4200000 } ],
"importes_por_anio": [ { "anio": 2025, "numero": 340, "importe": 219000000 } ],
"ficha": "https://boletinclaro.es/empresa/A78053147"
}
El NIF se acepta con guiones o puntos. Un NIF sin registros devuelve 404, no una respuesta vacía.
Lo que no incluye todavía: el detalle línea a línea de cada subvención y cada contrato, los proyectos europeos (CORDIS) y los datos mercantiles del BORME. Los dos primeros están en la ficha web de la empresa; el tercero lo dejamos fuera a propósito, porque la ingesta de BORME está apagada y el dato puede llevar meses sin actualizarse — preferimos no dártelo a dártelo caducado sin avisar. Si necesitas alguno en la API, dínoslo y lo añadimos: añadir campos no rompe a nadie.
GET/v1/codigos
De lenguaje natural a código de clasificación: CPV para contratación pública, CNAE para actividad económica, IAE para el impuesto de actividades. Es la búsqueda que hace utilizables todos los demás filtros.
| Parámetro | Qué hace | |
|---|---|---|
consulta | obligatorio | Describe la actividad. 2 a 2000 caracteres. |
tipos | cpv, cnae, iae o varios. Por defecto los tres. | |
limite | 1 a 50 por catálogo. Por defecto 10, así que pedir los tres devuelve hasta 30 filas. |
curl "https://boletinclaro.es/v1/codigos?consulta=limpieza%20de%20edificios&tipos=cpv&limite=5"
Cada fila lleva su tipo. No vienen mezcladas por relevancia entre catálogos, porque sus puntuaciones no son comparables entre sí.
Autenticación
La clave no abre ninguna puerta: sube los límites. Todo lo que hay aquí responde también sin clave, con un tope compartido por IP.
curl -H "Authorization: Bearer bc_live_…" \
"https://boletinclaro.es/v1/oportunidades?consulta=…"
| Sin clave | Con clave (plan Mega) | |
|---|---|---|
| Peticiones | 20 por minuto y por IP, compartido | 60 por minuto, tuyas |
| Cuota mensual | — | 10.000 consultas |
Esa misma pantalla lleva la cuenta del consumo del mes de cada clave contra su cuota, así que no tienes que deducirlo de las cabeceras. Aun así viajan en cada respuesta autenticada, para que tu código pueda ir a su ritmo sin consultar nada:
X-RateLimit-Limit: 10000
X-RateLimit-Remaining: 9873
X-RateLimit-Reset: 2026-10-01T00:00:00Z
Y no hace falta nada de esto para empezar: todos los endpoints responden igual sin clave, con el límite anónimo compartido por IP. Puedes evaluar la API entera antes de pagar por nada.
Errores
Todos los errores siguen el estándar RFC 9457, con Content-Type: application/problem+json. El campo que debes mirar en tu código es type: es estable y no cambiará aunque reescribamos el texto.
{
"type": "https://boletinclaro.es/v1/errores/consulta-invalida",
"title": "Consulta no válida",
"status": 400,
"detail": "El parámetro «consulta» debe tener entre 2 y 2000 caracteres."
}
| type | Código | Cuándo |
|---|---|---|
…/consulta-invalida | 400 | La consulta es más corta de 2 caracteres. |
…/parametro-invalido | 400 | Un parámetro no vale: tipo, fuente, CPV, NIF o límite. |
…/clave-no-valida | 401 | La clave no existe o está revocada. |
…/sin-acceso-api | 403 | El plan del espacio de trabajo no incluye API. |
…/no-encontrado | 404 | No hay registros para ese NIF. |
…/ruta-no-encontrada | 404 | Esa ruta no existe. Revisa la lista de arriba. |
…/limite-por-ip | 429 | 20 por minuto sin clave. Usa una clave. |
…/limite-por-minuto | 429 | Has pasado el ritmo de tu clave. |
…/cuota-agotada | 429 | Cuota mensual agotada. Se renueva el día 1. |
…/servicio-no-disponible | 503 | Algo nuestro está caído. Reintenta. |
…/error-interno | 500 | Fallo nuestro. Escríbenos si se repite. |
Cada type es una URL que se puede abrir: dice qué significa el error, si merece la pena reintentarlo y cuándo. El catálogo entero está en /v1/errores, y responde también en JSON con Accept: application/json.
Los errores que se pueden reintentar traen la cabecera Retry-After con los segundos que hay que esperar. Es la única forma de distinguir los dos 429 sin leer el type: el de la IP se despeja en menos de un minuto y la cuota mensual, el día 1.
Cómo identificar una entrada
Guarda los tres campos juntos: fuente + fecha_publicacion + identificador. Esa tripleta es la clave.
El identificador es la referencia que le da la fuente oficial —el número de anuncio del BOE, el expediente de la PLACSP, el de publicación de TED—, así que es estable en el único sitio que no controlamos nosotros. Pero su calidad depende del boletín:
BOE BOE-B-2026-23881 único a nivel global
BOJA boja-2026-113-64 lleva año y número
BOCM BOCM-20260706-74 lleva la fecha
BON 2026.154.46 lleva año y número
BOB II-3954_cas.pdf nombre de fichero, secuencia anual
BOPV 1459 un número pelado
BORM BORM-2827 una secuencia
fuente + identificador acabará fusionando dos entradas distintas de años distintos. fecha_publicacion viene en todas las entradas y lo cierra.ficha. Ese es la clave de nuestra página, no de la entrada: si volvemos a ingerir un día y la fuente devuelve un número distinto de entradas, puede pasar a apuntar a otra.Sobre los datos
Importes
importe viene en la moneda de moneda, casi siempre euros, como número. Cuando la fuente no publica importe el campo no aparece, en vez de venir a cero: así una suma tuya no se queda corta en silencio. Un cero que sí viene es un cero de verdad.
Fechas
Siempre AAAA-MM-DD. fecha_publicacion es cuándo salió en el boletín, fecha_fin el cierre del plazo — y es lo que usamos para decidir si algo sigue abierto. Solo una parte de las convocatorias publica plazo: si no viene, no es que no lo tenga, es que la fuente no lo da.
Geografía
ambito vale nacional o local. Cuando es local vienen las dos formas, para dos usos distintos: ubicacion trae el nombre completo del lugar («Aranda de Duero, Burgos, Castilla y León») para leerlo, y codigos_ubicacion la jerarquía del INE de lo más concreto a lo más general —municipio, provincia, comunidad— para cruzarla con tus datos.
En ubicacion hay una entrada por lugar, no una por nivel: si una convocatoria cubre dos municipios verás dos, y si cubre uno verás uno, no tres repitiendo la misma jerarquía.
Para filtrar, zona acepta el nombre de una comunidad, una provincia o un municipio, y aplica la jerarquía: pedir Andalucía incluye Sevilla y sus municipios. Lo de ámbito nacional entra siempre, porque también aplica a esa zona.
Cuántos resultados
total es cuántas filas trae esta respuesta, no cuántas hay en total. No hay paginación: una búsqueda semántica ordena por parecido, y la fila 400 de un ranking así no significa nada. El techo son 50. Para abarcar más, acota mejor: por tipo, por fuentes o por CPV.
Preguntas que nos hacen
¿Puedo crear alertas o escribir por la API?
Todavía no: la v1 es de solo lectura. Para que a alguien le lleguen avisos por correo de lo nuevo, la alerta se crea en la web o por el conector MCP.
¿Cada cuánto se actualizan los datos?
Cada boletín se ingiere el día que publica. Las subvenciones y licitaciones entran el mismo día que aparecen en la BDNS o en la PLACSP.
¿Puedo llamarla desde el navegador?
Sí, desde cualquier dominio: CORS está abierto en /v1. Las cabeceras de cuota se exponen, así que tu código puede leerlas.
Un aviso: una clave en JavaScript de navegador es una clave pública, la ve cualquiera que abra las herramientas de desarrollo. Para lo que lleve clave, llama desde tu servidor. Sin clave puedes tirar desde el navegador sin problema, con el límite compartido por IP.
¿Y si cambiáis la respuesta?
Añadir campos sí; quitarlos o renombrarlos, no. Si algo tiene que cambiar de forma, será una /v2 y la v1 seguirá viva.
¿Necesito una API si ya uso el MCP?
El conector MCP es para que una IA consulte estos mismos datos conversando. Esta API es para que lo haga tu programa. Mismo motor por debajo, dos formas de llegar.
Empezar
Pruébala sin clave ahora mismo. Cuando quieras la tuya, te la creas en dos clics.