Pereira Ayuda Emergencia · Llamar 123

La API

Todo el directorio en archivos que se bajan sin pedir permiso, sin clave y sin registrarse: JSON, GeoJSON y CSV. Esta es la página para quien va a consumir los datos. Si lo que quiere es conectar un asistente, eso está en el servidor MCP.

Esto es información comunitaria, no un registro oficial La reporta y la confirma gente de la calle. Cada punto trae ultima_validacion y confirmaciones_24h: si usted la republica, muestre esas dos cosas. Un directorio copiado sin la fecha de cada dato es un directorio viejo, y en una emergencia un dato viejo manda a alguien a cruzar una ciudad rota para nada. Emergencias: 123.
Los datos

Archivos · sin clave, sin cuota, sin registro

Trece archivos, ninguna llave

No hay un servidor de API: hay archivos servidos por CDN. Un archivo no se cae, no cuesta, no se tumba con tráfico y responde igual de rápido desde un teléfono con mala señal. Es un contrato estable que sí podemos sostener.

Todo cuelga de https://pereiraayuda.com/api/. El Access-Control-Allow-Origin es *, así que su página puede leerlos desde el navegador sin proxy ni backend propio.

ArchivoQué traePuntosPeso
resumen.jsonCuántos hay por categoría y municipio, cuántos con ubicación, y la lista de endpoints. Lo que hay que pedir primero.2 KB
puntos.jsonEl directorio entero567651 KB
puntos.csvLo mismo, una fila por punto, para hoja de cálculo567301 KB
puntos.geojsonSolo los que tienen coordenadas verificadas155178 KB
necesita_ayuda.jsonPedidos y ofertas de ayuda366418 KB
colapso.jsonEstructuras colapsadas o en riesgo7088 KB
acopio.jsonCentros de acopio3947 KB
maquinaria.jsonMaquinaria y remoción de escombros3943 KB
mascota.jsonAnimales: refugio, alimento, búsqueda2023 KB
hospital.jsonSalud y puntos médicos1316 KB
albergue.jsonAlbergues habilitados912 KB
psicologica.jsonApoyo psicosocial79 KB
vivienda.jsonVivienda ofrecida o necesitada46 KB

Los conteos son del corte del 13 de agosto de 2026, 11:38 p. m., y cambian todo el día; el número vivo está siempre en resumen.json. Los archivos por categoría existen para que quien solo quiere albergues no tenga que bajar 651 KB: son el mismo esquema, filtrado. Un archivo de categoría aparece solo si esa categoría tiene al menos un punto, así que no dé por hecho que existe donacion.json — hoy no existe, porque no hay puntos de ese tipo.

Cada cuánto cambian

Se regeneran cada media hora, por una tarea programada que también trae lo nuevo de los tableros vecinos. La respuesta lleva Cache-Control: public, max-age=300: cinco minutos. No consulte más seguido que eso; no va a encontrar nada nuevo y sí va a gastar la banda de alguien más.

El campo actualizado, en la cabecera de cada archivo, dice cuándo se generó ese archivo. No confunda ese dato con la frescura de un punto: eso lo dice ultima_validacion, punto por punto.

El esquema

Contrato · campo por campo

Cómo es una ficha

Todos los archivos JSON tienen la misma forma: una cabecera con el sobre del proyecto y un arreglo puntos. Cada punto es este objeto y ninguno trae campos de más.

El sobre

{
 "proyecto": "Pereira Ayuda",
 "descripcion": "Directorio comunitario de emergencia de Pereira …",
 "sitio": "https://pereiraayuda.com",
 "actualizado": "2026-08-13T21:59:10.889916+00:00",
 "licencia": "Datos abiertos: úselos, cítelos como pereiraayuda.com. …",
 "aviso": "Información comunitaria, sin verificar salvo donde se indique. …",
 "datos_personales": "Esta descarga NO trae los celulares de personas naturales …",
 "contacto": "https://wa.me/573117627757",
 "total": 567,
 "puntos": [ … ]
}

En los archivos por categoría se suma categoria. En puntos.geojson el sobre va en properties, al lado de features. En resumen.json no hay puntos: hay conteos y la lista de endpoints.

Un punto

{
 "id": "albergue-campestre-b",
 "categoria": "albergue",
 "estado": "verificado",
 "nombre": "Polideportivo Campestre B",
 "descripcion": "Albergue habilitado por la Alcaldía de Dosquebradas. …",
 "ubicacion": {
  "direccion": "Polideportivo del Campestre B, detrás de la iglesia",
  "barrio": "Campestre B",
  "municipio": "Dosquebradas",
  "lat": 4.833199,
  "lng": -75.688847,
  "precision": "barrio"
 },
 "contacto": { "telefono": null, "nombre": null, "whatsapp": false, "en_ficha": false },
 "horario": null,
 "etiquetas": ["alimentos"],
 "atiende": null,
 "atiende_desde": null,
 "confirmaciones_24h": 2,
 "contradicciones_activas": 0,
 "aviso_comunidad": null,
 "ultima_validacion": "2026-08-14T04:06:46.31961+00:00",
 "publicado_en": "2026-08-13T16:11:25.128821+00:00",
 "fuente": "Alcaldía de Dosquebradas, 12–13 ago",
 "advertencia": "No llegue directo: primero caracterización en el CAM …",
 "advertencia_grave": true,
 "url": "https://pereiraayuda.com/?p=albergue-campestre-b"
}
CampoTipoQué es
idtextoIdentificador estable del punto. Úselo como clave: es el mismo entre corridas y es lo que pide el servidor MCP para actualizar algo.
categoriatextoUna de nueve, y no se inventan: acopio, albergue, colapso, hospital, maquinaria, mascota, necesita_ayuda, psicologica, vivienda. El esquema reserva además donacion, hoy sin puntos.
estadotextoreportadoverificadoen_atencionresuelto / cerrado. Nada entra directo como verificado: hacen falta dos confirmaciones y ninguna contradicción viva.
nombretextoTítulo corto: qué es y dónde. Nunca nulo.
descripciontexto o nuloEl detalle en prosa. Es donde vive el matiz que ninguna columna captura. Los celulares escritos dentro del texto salen reemplazados por [número en la ficha], acá y en nombre: en la ficha se leen en su contexto, en una descarga masiva son una lista para quien raspa.
ubicacion.direcciontexto o nuloDirección tal como la reportaron.
ubicacion.barriotexto o nuloBarrio o vereda.
ubicacion.municipiotextoPereira, Dosquebradas, La Virginia o Santa Rosa de Cabal.
ubicacion.lat
ubicacion.lng
número o nuloGrados decimales, WGS 84. Nulo cuando no se ha verificado la ubicación, y eso es a propósito: no rellenamos coordenadas con lo que devuelva un geocodificador. Al 13 de agosto, 412 de 567 puntos van sin pin. Si su mapa necesita todos los puntos con coordenada, no invente: muestre la lista.
ubicacion.precisiontexto o nuloQué tan fino es el pin: puerta, barrio o municipio. Píntelo: un pin de municipio y uno de puerta se ven igual en un mapa y mandan a lugares muy distintos.
contacto.telefonotexto o nuloEsta descarga no trae celulares de personas naturales: solo conmutadores de entidades y los números cuyo titular autorizó publicarlos (Ley 1581 de 2012). Si es nulo, no lo busque por otro lado para completarlo.
contacto.nombretexto o nuloQuién contesta. Viaja solo si viaja el teléfono: sin número al lado no identifica a nadie, con número sí.
contacto.whatsappbooleanoSi ese número recibe WhatsApp. Un fijo va como tel: y nunca lleva botón de chat.
contacto.en_fichabooleanotrue cuando el punto sí tiene contacto pero no viaja en la descarga: está en su url. Sirve para no mostrar «sin contacto» donde sí lo hay.
horariotexto o nuloTexto libre. Casi siempre nulo: en emergencia poca gente publica horario.
etiquetasarreglo de textoQué se necesita o se ofrece ahí. Vocabulario cerrado de quince y nunca otra cosa: agua, alimentos, medicamentos, ropa, aseo, colchonetas, mascotas, voluntarios, rescate, maquinaria, transporte, psicosocial, estructural, duchas, energia. Puede venir vacío.
atiendetexto o nuloQuién se hizo cargo del pedido, para que dos grupos no manden lo mismo al mismo sitio.
atiende_desdefecha ISO o nuloDesde cuándo.
confirmaciones_24henteroCuántas personas distintas dijeron «estuve ahí» en las últimas 24 horas. Cuenta personas y su última palabra, no filas.
contradicciones_activasenteroCuántas dijeron «fui y no estaba». Si es mayor que cero, adviértalo en su interfaz. Es el dato más valioso de todos: evita nueve viajes en vano. No oculte el punto — la contradicción también puede estar equivocada.
aviso_comunidadtexto o nuloNota fechada y sin verificar: «ya no reciben ropa», «cambió el horario». No reescribe el dato original, lo acompaña.
ultima_validacionfecha ISO o nuloEl campo más importante del archivo. Cuándo alguien confirmó por última vez que esto era cierto. Nulo quiere decir que nadie lo ha confirmado nunca. Muéstrelo en grande, no en letra chica.
publicado_enfecha ISOCuándo entró al directorio.
advertenciatexto o nuloLo que hay que saber antes de ir a ese sitio: que ahí no reciben donaciones, que primero hay que pasar por otro lado, que dos fuentes no coinciden. Publique el punto con su advertencia o no lo publique: sin ella es media verdad, y la mitad que falta es la que manda a alguien en vano.
advertencia_gravebooleanoSi esa advertencia es de las que cambian la decisión de ir. Píntela distinto.
fuentetexto o nuloDe dónde salió el dato: un tablero vecino, una alcaldía, este equipo. Al reusar, este crédito no se borra (ver la licencia).
urltextoEnlace directo a la ficha en el sitio, para citar o para «ver el original».

Las fechas van en ISO 8601 con zona, en UTC. La ciudad vive en America/Bogota (UTC−5): si va a mostrar «hace 3 horas», convierta.

Ejemplos

Copiar y pegar · funcionan tal cual

Ejemplos que sirven

Todos corren contra el sitio en vivo. Ninguno necesita clave.

Qué hay en el directorio ahora mismo

curl -s https://pereiraayuda.com/api/resumen.json

Los albergues, con la fecha en que se confirmó cada uno

curl -s https://pereiraayuda.com/api/albergue.json \
  | jq -r '.puntos[] | "\(.nombre) — \(.ubicacion.municipio) — confirmado: \(.ultima_validacion // "nunca")"'

Quién está pidiendo agua

curl -s https://pereiraayuda.com/api/puntos.json \
  | jq -r '.puntos[] | select(.etiquetas | index("agua")) | "\(.nombre) [\(.categoria)]"'

Lo que nadie ha tomado todavía, en Dosquebradas

curl -s https://pereiraayuda.com/api/necesita_ayuda.json \
  | jq -r '.puntos[]
           | select(.ubicacion.municipio == "Dosquebradas" and .atiende == null)
           | "\(.nombre) — \(.url)"'

Lo que alguien fue a buscar y no encontró

Los puntos con una contradicción viva son los que hay que verificar primero. Si su tablero solo muestra una cosa de esta API, que sea esta.

curl -s https://pereiraayuda.com/api/puntos.json \
  | jq -r '.puntos[] | select(.contradicciones_activas > 0) | .nombre'

Sin jq, con Python y nada más

import json, urllib.request

url = "https://pereiraayuda.com/api/puntos.json"
d = json.load(urllib.request.urlopen(url))

print(d["total"], "puntos · generado", d["actualizado"])
for p in d["puntos"]:
    if p["categoria"] == "albergue":
        print(p["nombre"], "·", p["ubicacion"]["municipio"])

En un mapa, sin escribir un parser

puntos.geojson es un FeatureCollection corriente: se arrastra tal cual a QGIS, a uMap o a geojson.io. En Leaflet son dos líneas, y funciona desde su propio dominio porque el CORS está abierto:

fetch("https://pereiraayuda.com/api/puntos.geojson")
  .then(r => r.json())
  .then(g => L.geoJSON(g).addTo(mapa));

Trae solo los 155 puntos con coordenada verificada. Los otros 412 existen y son igual de reales: están en puntos.json y en el CSV.

Para hoja de cálculo

curl -s -o pereira-ayuda.csv https://pereiraayuda.com/api/puntos.csv

Una fila por punto, veintisiete columnas con encabezados en español, separador coma y UTF-8 con marca de orden de bytes: abre de doble clic en Excel sin que se rompan las tildes. ubicacion y contacto van aplanados a columnas, las etiquetas separadas por punto y coma, y los datos que faltan van como celda vacía —nunca como cero, que en una coordenada sería un punto en el golfo de Guinea—.

Los límites

Antes de construir encima · lo que no hay

Lo que esta API no hace

Mejor saberlo ahora que a mitad de camino. Nada de esto es un pendiente disimulado: son decisiones.

  • No hay endpoint de escritura por HTTP. Lo que se publica entra por el formulario del sitio o por el servidor MCP. Un endpoint abierto de escritura en una emergencia con fraude activo es un imán, no una función.
  • No hay filtros por parámetros ni paginación. Son archivos: se bajan enteros y se filtran del lado suyo. El más grande pesa 651 KB. Si necesita un corte que no existe, pida el archivo de la categoría y filtre.
  • No hay histórico ni «qué cambió desde». Cada archivo es la foto del momento. Si le hace falta la serie, guárdela usted; el campo actualizado le sirve de marca.
  • No hay personas desaparecidas ni listado de fallecidos, y no los va a haber. Para desaparecidos ya existe colombiatebusca.com con tráfico nacional, y una segunda base parte el registro: eso hace daño. Los otros dos canales son Fiscalía 122 y Cruz Roja Pereira 316 478 1821. La identificación de fallecidos es función legal exclusiva de Medicina Legal.
  • No hay conteo de víctimas. Las fuentes oficiales no coinciden y cualquier cifra estaría equivocada en horas.
  • No hay coordenadas para todo, y no las va a haber por invento. Ver ubicacion.precision.
  • Un archivo que no existe no devuelve 404. El alojamiento contesta 200 con el HTML de la portada. Es una trampa conocida y le va a pasar el día que pida una categoría vacía: revise que el content-type sea application/json antes de parsear, o su código va a intentar leer una página web como si fuera un objeto.
  • No hay contrato de nivel de servicio. Esto lo sostiene gente de Pereira en su tiempo. Si va a montar algo encima que importe, guarde una copia y avísenos.

Y una cosa más que sí hay: un servidor MCP que además de leer mantiene el directorio —confirma un punto, marca quién se hizo cargo, cierra lo resuelto—. Está en la página del servidor MCP. Los permisos de uso, tanto del código como de los datos, están en la licencia.

Los conteos y los pesos de esta página son del corte del 13 de agosto de 2026 y quedan viejos rápido: el número vivo está en resumen.json. Los nombres de campo y los valores posibles salen del código que genera la API (scripts/generar_api.py), no de una especificación escrita aparte: si cambian ahí, cambian acá. Esta página no es un canal oficial de la Alcaldía ni de la Gobernación.