Boletín Claro Boletín Claro
API de Boletín Claro

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.

Base: 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

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ámetroQué hace
consultaobligatorio2 a 2000 caracteres. Más largo se recorta, no se rechaza.
tiposubvenciones, licitaciones o ambos. Por defecto ambos.
zonaComunidad, provincia o municipio (Andalucía, Bizkaia, Getxo). Incluye lo de ámbito nacional.
limite1 a 50. Por defecto 10.
incluir_cerradastrue 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ámetroQué hace
consultaobligatorio2 a 2000 caracteres.
fuentesCódigos separados por comas (BOE,BOJA,DOGC). Vacío = todas.
zonaComunidad, provincia o municipio. Incluye lo de ámbito nacional.
limite1 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í.

Dos de esos códigos no tienen contenido hoy. Se admiten y no dan error, pero devuelven 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ámetroQué hace
cpvobligatorioUno o varios códigos de 6 a 8 dígitos, separados por comas.
limite1 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ámetroQué hace
consultaobligatorio3 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ámetroQué hace
consultaobligatorioDescribe la actividad. 2 a 2000 caracteres.
tiposcpv, cnae, iae o varios. Por defecto los tres.
limite1 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 claveCon clave (plan Mega)
Peticiones20 por minuto y por IP, compartido60 por minuto, tuyas
Cuota mensual10.000 consultas
La clave te la creas tú. En Ajustes → API, si eres administrador de un espacio de trabajo con un plan que incluya la API. La clave en claro se enseña una sola vez, al crearla: cópiala en ese momento, porque después solo verás sus últimos caracteres. Desde ahí también se revocan.

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."
}
typeCódigoCuándo
…/consulta-invalida400La consulta es más corta de 2 caracteres.
…/parametro-invalido400Un parámetro no vale: tipo, fuente, CPV, NIF o límite.
…/clave-no-valida401La clave no existe o está revocada.
…/sin-acceso-api403El plan del espacio de trabajo no incluye API.
…/no-encontrado404No hay registros para ese NIF.
…/ruta-no-encontrada404Esa ruta no existe. Revisa la lista de arriba.
…/limite-por-ip42920 por minuto sin clave. Usa una clave.
…/limite-por-minuto429Has pasado el ritmo de tu clave.
…/cuota-agotada429Cuota mensual agotada. Se renueva el día 1.
…/servicio-no-disponible503Algo nuestro está caído. Reintenta.
…/error-interno500Fallo 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
Por eso la fecha va en la clave. En los tres últimos el identificador es una secuencia que se reinicia cada año: quien use solo fuente + identificador acabará fusionando dos entradas distintas de años distintos. fecha_publicacion viene en todas las entradas y lo cierra.
No guardes el identificador que aparece dentro de una URL de 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.

Si en algún momento no pudiéramos resolver la zona que pides, la respuesta es un 503, no un listado sin filtrar. Nunca vas a recibir resultados de toda España creyendo que has filtrado por una provincia.

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.

Crear mi clave Ver planes