Una petición GET, sin clave y sin registro. Devuelve los grados franceses del agua de un municipio, con la fuente y la fecha del análisis para que se pueda comprobar.
Un solo endpoint, GET /api/dureza, y exactamente un parámetro: ine o cp. Sin cabeceras, sin autenticación y sin cuerpo.
Petición
curl "https://elmapadelagua.com/api/dureza?ine=28079"Respuesta
{
"ok": true,
"data": {
"estado": "encontrado",
"ine": "28079",
"cp": "28001",
"registro": {
"municipioIne": "28079",
"municipioNombre": "Madrid",
"provincia": "Madrid",
"fh": 3.5,
"fuente": "SINAC — Ministerio de Sanidad (volcado anual)",
"urlFuente": "https://www.sanidad.gob.es/areas/sanidadAmbiental/calidadAguas/aguasConsumoHumano/publicaciones/home.htm",
"fechaDato": "2024-12-18",
"confianza": "medido-operadora"
}
}
}Las respuestas de esta página son literales: salieron de esas mismas peticiones contra este servidor. Si alguna no cuadra con lo que te devuelve a ti, es un fallo nuestro y conviene avisarnos.
Se manda uno de los dos, nunca los dos a la vez. Mandarlos juntos responde 400 a propósito: si apuntaran a municipios distintos, elegir uno en silencio publicaría la dureza de otro sitio.
| Parámetro | Qué es |
|---|---|
ine | Código INE del municipio: cinco dígitos, dos de provincia y tres de municipio. Los ceros a la izquierda cuentan (Abades es 40001, no 4001). Es el acceso preciso: identifica un municipio y solo uno. |
cp | Código postal de cinco dígitos. Es lo que tiene a mano una persona, pero no siempre resuelve: un código postal puede cubrir varios municipios con aguas distintas, y en ese caso la respuesta lo dice en vez de elegir uno. |
Por código postal
curl "https://elmapadelagua.com/api/dureza?cp=46001"Respuesta
{
"ok": true,
"data": {
"estado": "encontrado",
"cp": "46001",
"registro": {
"municipioIne": "46250",
"municipioNombre": "València",
"provincia": "Valencia/València",
"fh": 50,
"fuente": "SINAC — Ministerio de Sanidad (volcado anual)",
"urlFuente": "https://www.sanidad.gob.es/areas/sanidadAmbiental/calidadAguas/aguasConsumoHumano/publicaciones/home.htm",
"fechaDato": "2024-06-06",
"confianza": "agregado-zona"
}
}
}La API se sirve con Access-Control-Allow-Origin: * en todas sus respuestas, incluidas las de error, así que este código funciona desde cualquier dominio sin proxy de por medio.
const r = await fetch(
"https://elmapadelagua.com/api/dureza?cp=46001"
);
const { ok, data, error } = await r.json();
if (!ok) throw new Error(error.message);
if (data.estado === "encontrado") {
console.log(data.registro.fh); // 50
console.log(data.registro.fechaDato); // "2024-06-06"
} else {
// Hueco declarado: NO es un error, y no se rellena con una estimación.
console.log("sin dato:", data.motivo); // "sin-analitica-publica", …
}Siempre un sobre con ok. Con ok: true viene data, y data.estado vale encontrado o sin-dato. Con ok: false viene error, con su code y su message.
| Campo | Qué es |
|---|---|
municipioIne | Código INE del municipio al que corresponde el análisis. |
municipioNombre | Nombre oficial del callejero del INE, tal cual, incluidas las formas bilingües (València, Araba/Álava). |
provincia | Nombre oficial de la provincia según el INE. |
fh | La dureza, en grados franceses (°fH). Es la unidad del SINAC. 1 °fH = 10 mg/L de CaCO3 = 10 ppm; para grados alemanes, °dH = °fH × 0,56. |
fuente | De dónde sale ese registro concreto, ya redactado para citarlo. |
urlFuente | Dónde comprobarlo en el origen. Nunca viene vacío. |
fechaDato | Fecha del análisis, AAAA-MM-DD. Varía mucho de un municipio a otro y es la que hay que citar, no la de la consulta. |
confianza | medido-municipio, medido-operadora o agregado-zona. No existe un nivel «estimado»: un hueco se declara hueco. |
Consultando por ine llega además un cp representativo del municipio, que puede ser null. Nunca se rellena con el código INE.
De los 8.132 municipios de España, muchos no tienen analítica publicada que se pueda citar. Eso no se responde con un 404 ni con un fh: null: se responde con un 200, ok: true y estado: "sin-dato", con el motivo escrito.
La distinción es el producto entero. Un hueco declarado es información. Una cifra estimada a partir de la media provincial, presentada como si estuviera medida, no lo es, y por eso aquí no existe: nunca vas a recibir un valor interpolado.
curl "https://elmapadelagua.com/api/dureza?ine=40001"
{
"ok": true,
"data": {
"estado": "sin-dato",
"ine": "40001",
"municipioNombre": "Abades",
"provincia": "Segovia",
"motivo": "sin-analitica-publica"
}
}| motivo | Cuándo sale | Con |
|---|---|---|
sin-analitica-publica | El municipio existe y no tenemos analítica publicada que se pueda citar. | ine y cp |
ine-desconocido | Ese código INE no está en el callejero. Suele ser un municipio fusionado, un código inventado o un dígito de más. | ine |
cp-desconocido | Ese código postal no aparece en CartoCiudad y no sabemos a qué municipio pertenece. | cp |
cp-multimunicipio | El código postal cubre varios municipios. Devolver el de uno de ellos sería publicar la dureza de otro sitio, así que no se elige: hay que preguntar por ine. | cp |
encontrado o sin-dato: los dos son resultados válidos.bad_request — el parámetro no vale (no son cinco dígitos) o se mandaron los dos a la vez. El mensaje dice cuál de las dos cosas.internal — no hemos podido consultar. Es una avería nuestra y se responde como tal: una avería nunca se degrada a sin-dato, porque eso convertiría un problema nuestro en una afirmación sobre el agua de quien pregunta. Si te llega un 500, reintenta.OPTIONS de preflight.curl "https://elmapadelagua.com/api/dureza?ine=2807"
{
"ok": false,
"error": {
"code": "bad_request",
"message": "Codigo INE no valido (5 digitos)."
}
}No hay límite de peticiones. Ni por clave, ni por IP, ni por minuto. Lo decimos porque es la verdad hoy, no porque sea una promesa: si un día hace falta ponerlo, se pondrá generoso y se escribirá aquí antes.
No hay SLA ni soporte comprometido. Esto es un servicio gratuito de un proyecto pequeño. Funciona bien y nos interesa que siga funcionando, pero si tu producto no puede permitirse que se caiga una tarde, descarga el dataset y sírvelo tú.
Si vas a consultar miles de municipios, no uses esto. Recorrer 8.132 códigos INE de uno en uno son 8.132 peticiones para obtener lo mismo que trae un solo fichero JSON, que además viene con la licencia y la descripción de los campos dentro. La API es para consultas sueltas dentro de un producto, no para copiar la base.
Las respuestas con dato se cachean una hora (s-maxage=3600). El dato se refresca de madrugada, así que no vas a ver nada más viejo que eso. Los errores no se cachean.
La forma de la respuesta puede crecer, no encoger. Podemos añadir campos; quitarlos o renombrarlos rompería a quien ya la usa. Escribe tu código ignorando los campos que no conozcas.
Lo que devuelve esta API es dato público reutilizable, también comercialmente. No es gratis del todo: quien lo consume lo está redistribuyendo, y le aplican las mismas condiciones que a cualquier otra copia del dataset. En la práctica son cuatro palabras en un pie de página.
| Fuente | Qué aporta | Cómo se cita |
|---|---|---|
| SINAC — Sistema de Información Nacional de Agua de Consumo | La dureza del agua de cada municipio, con su fecha de análisis. | Origen de los datos: Ministerio de Sanidad, Consumo y Bienestar Social (condiciones) |
| CartoCiudad — Instituto Geográfico Nacional | La correspondencia entre códigos postales y municipios. | CC BY 4.0 scne.es (condiciones) |
| INE — Instituto Nacional de Estadística | El nombre oficial, el código y la población de los municipios. | Elaboración propia con datos extraídos del sitio web del INE: www.ine.es (condiciones) |
Ni el Ministerio de Sanidad ni el INE participan, patrocinan ni apoyan esta reutilización. El texto completo viaja en licencia.txt, y cada respuesta lo anuncia además en la cabecera Link con rel="license", para que un cliente automático lo encuentre sin leer esta página.
Cómo citar
Estos datos son públicos y se pueden reutilizar, también con fines comerciales. La condición es citar la fuente y la fecha. Aquí está la cita ya escrita, con la fecha del análisis, que es lo que permite comprobarla en el origen.
<p><a href="https://elmapadelagua.com/api-dureza-agua">API de la dureza del agua por municipio en España</a> (El mapa del agua): 6.266 municipios consultables por código INE o código postal, análisis más reciente de 2026-09-24. Origen de los datos: Ministerio de Sanidad, Consumo y Bienestar Social. CC BY 4.0 scne.es. Elaboración propia con datos extraídos del sitio web del INE: www.ine.es.</p>API de la dureza del agua por municipio en España (El mapa del agua): 6.266 municipios consultables por código INE o código postal, análisis más reciente de 2026-09-24. Origen de los datos: Ministerio de Sanidad, Consumo y Bienestar Social. CC BY 4.0 scne.es. Elaboración propia con datos extraídos del sitio web del INE: www.ine.es. Disponible en: https://elmapadelagua.com/api-dureza-agua
Ni el Ministerio de Sanidad ni el INE participan, patrocinan ni apoyan esta reutilización. Las condiciones completas y el conjunto de datos entero.