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.
| Archivo | Qué trae | Puntos | Peso |
resumen.json | Cuá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.json | El directorio entero | 567 | 651 KB |
puntos.csv | Lo mismo, una fila por punto, para hoja de cálculo | 567 | 301 KB |
puntos.geojson | Solo los que tienen coordenadas verificadas | 155 | 178 KB |
necesita_ayuda.json | Pedidos y ofertas de ayuda | 366 | 418 KB |
colapso.json | Estructuras colapsadas o en riesgo | 70 | 88 KB |
acopio.json | Centros de acopio | 39 | 47 KB |
maquinaria.json | Maquinaria y remoción de escombros | 39 | 43 KB |
mascota.json | Animales: refugio, alimento, búsqueda | 20 | 23 KB |
hospital.json | Salud y puntos médicos | 13 | 16 KB |
albergue.json | Albergues habilitados | 9 | 12 KB |
psicologica.json | Apoyo psicosocial | 7 | 9 KB |
vivienda.json | Vivienda ofrecida o necesitada | 4 | 6 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.
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"
}
| Campo | Tipo | Qué es |
id | texto | Identificador estable del punto. Úselo como clave: es el mismo entre corridas y es lo que pide el servidor MCP para actualizar algo. |
categoria | texto | Una 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. |
estado | texto | reportado → verificado → en_atencion → resuelto / cerrado. Nada entra directo como verificado: hacen falta dos confirmaciones y ninguna contradicción viva. |
nombre | texto | Título corto: qué es y dónde. Nunca nulo. |
descripcion | texto o nulo | El 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.direccion | texto o nulo | Dirección tal como la reportaron. |
ubicacion.barrio | texto o nulo | Barrio o vereda. |
ubicacion.municipio | texto | Pereira, Dosquebradas, La Virginia o Santa Rosa de Cabal. |
ubicacion.lat
ubicacion.lng | número o nulo | Grados 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.precision | texto o nulo | Qué 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.telefono | texto o nulo | Esta 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.nombre | texto o nulo | Quién contesta. Viaja solo si viaja el teléfono: sin número al lado no identifica a nadie, con número sí. |
contacto.whatsapp | booleano | Si ese número recibe WhatsApp. Un fijo va como tel: y nunca lleva botón de chat. |
contacto.en_ficha | booleano | true 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. |
horario | texto o nulo | Texto libre. Casi siempre nulo: en emergencia poca gente publica horario. |
etiquetas | arreglo de texto | Qué 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. |
atiende | texto o nulo | Quién se hizo cargo del pedido, para que dos grupos no manden lo mismo al mismo sitio. |
atiende_desde | fecha ISO o nulo | Desde cuándo. |
confirmaciones_24h | entero | Cuántas personas distintas dijeron «estuve ahí» en las últimas 24 horas. Cuenta personas y su última palabra, no filas. |
contradicciones_activas | entero | Cuá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_comunidad | texto o nulo | Nota fechada y sin verificar: «ya no reciben ropa», «cambió el horario». No reescribe el dato original, lo acompaña. |
ultima_validacion | fecha ISO o nulo | El 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_en | fecha ISO | Cuándo entró al directorio. |
advertencia | texto o nulo | Lo 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_grave | booleano | Si esa advertencia es de las que cambian la decisión de ir. Píntela distinto. |
fuente | texto o nulo | De dónde salió el dato: un tablero vecino, una alcaldía, este equipo. Al reusar, este crédito no se borra (ver la licencia). |
url | texto | Enlace 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.
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—.
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.