Referencia de la API v1 · solo lectura
Acceso programático a reportes normalizados tras el terremoto M7.4 del 10 de agosto de 2026 en Colombia —daños estructurales, puntos de ayuda y necesidades— cada uno con su procedencia. Pública, sin autenticación, libre para usar y citar bajo CC-BY-4.0.
1 · Resumen
Esta API expone, de forma programática y de solo lectura, el conjunto de datos de crisiscolombia.org. Hay siete categorías; solo las tres primeras se renderizan como marcadores:
- daño — un reporte de daño o colapso estructural (un edificio, una estructura).
- acopio — un punto o centro de recolección de ayuda.
- necesidad — una solicitud de un recurso (agua, medicinas, rescate…).
- información — contexto general relevante, nunca daño rojo.
- evaluación_pendiente — evaluación declarada por una fuente y aún no completada.
- evaluación_habitable — la fuente reporta ocupación sin restricciones; puede coexistir con daño leve o moderado y no es una verificación independiente.
- evaluación_inconsistente — campos fuente contradictorios, en revisión.
Fuera de alcance: conteos de fallecidos/heridos, listas de víctimas y búsquedas de personas desaparecidas. Se conservan únicamente referencias a personas afectadas cuando forman parte de un punto accionable de ayuda, necesidad o rescate.
¿Para quién? Periodistas, ONG, desarrolladores de mapas/dashboards, y —especialmente— los equipos de los propios sitios que originan los datos, que pueden consumir la API sin reingestar su propia información gracias a la procedencia por registro (ver excluir_fuente).
URL base:
https://crisiscolombia.org/api/v1/facts
Sin autenticación · CORS abierto (Access-Control-Allow-Origin: *) · respuestas cacheadas en CDN · especificación legible por máquina en /api/v1/openapi.json (OpenAPI 3.1). Licencia de los datos: CC-BY-4.0.
Los nombres de parámetros y de campos están en español; se mantienen en inglés solo los términos técnicos universales: bbox, offset y los valores de formato (json | geojson | csv).
2 · Inicio rápido
Una sola petición que devuelve datos de inmediato (los 1000 hechos más recientes, JSON):
curl https://crisiscolombia.org/api/v1/factsLa respuesta es un sobre con metadatos y un arreglo datos:
{
"meta": {
"cantidad": 1000,
"total": 1342,
"generado": "2026-08-10T18:00:00.000Z",
"licencia": "CC-BY-4.0",
"atribucion": "crisiscolombia.org + fuentes originales",
"consulta": { "limite": 1000, "offset": 0, "formato": "json" }
},
"datos": [
{
"id": "cv-219c7ab54981438cbe05e2fb",
"categoria": "daño",
"nivel": "colapso_total",
"conflicto_nivel": false,
"estructura": "Catedral Basílica de Manizales",
"municipio": "Manizales",
"estado": "Caldas",
"zona": "Centro histórico",
"lat": 5.0703, "lon": -75.5138,
"coord_origen": "geocodificada",
"descripcion": "Colapso parcial reportado de una torre de la Catedral Basílica de Manizales.",
"tipo_necesidad": null,
"atrapados": false,
"n_fuentes": 2,
"fuentes": [
{ "fuente": "medio colombiano", "url": "https://www.eltiempo.com/...", "post_id": "rss:...", "observado_en": "2026-08-10T14:02:00Z", "entity_support": "explicit_name", "media_entity_support": "single_entity" },
{ "fuente": "cuenta oficial", "url": "https://x.com/.../status/...", "post_id": "x:...", "observado_en": "2026-08-10T13:58:00Z", "entity_support": "explicit_name", "media_entity_support": "single_entity" }
],
"fecha": "2026-08-10T14:02:00Z",
"primera_vez": "2026-08-10T13:58:00Z"
}
]
}3 · Modelo de datos
Cada elemento de datos (y cada properties en GeoJSON, y cada fila en CSV) es un hecho con estos campos:
| Campo | Tipo | Significado, valores y advertencias |
|---|---|---|
id | string | Identificador determinista con prefijo cv-, derivado de categoría, entidad y evidencia fuente; único dentro de la versión publicada. |
categoria | string | Una de siete categorías. información, evaluación_pendiente, evaluación_habitable y evaluación_inconsistente son neutrales y no se renderizan como daño. |
nivel | string · null | Solo para daño: colapso_total, severo, parcial o dano (genérico). Se infiere del texto con reglas. null en acopio/necesidad. |
conflicto_nivel | boolean | true cuando la evidencia agrupada contiene niveles de daño incompatibles. En ese caso nivel="dano" y descripcion muestra un aviso neutral hasta revisión humana. |
estructura | string · null | Nombre específico del edificio/estructura cuando se identificó (p. ej. Edificio San Judas Tadeo). null si el reporte es a nivel de zona y no nombra una estructura. |
municipio | string | Municipio (nombre legible). Puede venir vacío en hechos sin municipio asignado. |
estado | string | Departamento colombiano. Se conserva el nombre de campo legado estado; si el hecho no lo trae, se completa con el departamento del municipio según el gazetteer. |
zona | string | Zona, sector o referencia local (barrio, urbanización, avenida). Texto libre; puede estar vacío. |
lat, lon | number · null | Coordenadas WGS84. null si el hecho no está geolocalizado. La precisión depende de coord_origen (ver §6). |
coord_origen | string | Procedencia de lat/lon: explicita (suministrada por la fuente; precisión no verificada), geocodificada (aproximada) o "" (desconocida/sin coords). Detalle en §6. |
descripcion | string | El hecho resumido en una frase, normalizado por IA a partir del o los posts originales. |
tipo_necesidad | string · null | Solo para necesidad: recurso solicitado — agua, comida, medicinas, insumos, voluntarios, sangre, rescate, refugio, ropa, otro. null en otras categorías. |
atrapados | boolean | true si el texto menciona personas atrapadas / bajo escombros. Indicio, no confirmación oficial — verifícalo antes de actuar. |
n_fuentes | integer | Número de registros de fuente distintos que respaldan el hecho (deduplicados por URL; si no hay URL, por autor). Un valor mayor significa más registros de apoyo, no necesariamente orígenes independientes. Igual a la longitud de fuentes. |
fuentes | array | Procedencia canónica con post_id, observado_en, entity_support y media_entity_support. Una foto solo aparece cuando su fuente respalda sin ambigüedad la entidad mostrada. |
confianza | object | Modelo de confianza fail-closed: 3 ejes + insignia Verificado / Reportado / Sin verificar. distinct_named_sources cuenta nombres canónicos; independent_origins solo cuenta linajes origin_id explícitos; checks.status indica si se completó la revisión de procedencia / fuente / fecha / ubicación. Sin linaje y verificaciones completadas, el registro no es Verificado. Metodología: /docs/trust. |
fecha | string ISO 8601 | Última fecha entre las fuentes canónicas que respaldan la entidad. Un post cercano no relacionado no refresca el edificio. |
primera_vez | string ISO 8601 | Primera vez que se detectó el hecho. |
4 · Cómo se construyen los datos
Transparencia sobre la naturaleza y los límites del dato. El pipeline tiene cuatro etapas:
- Agregación de fuentes públicas. Leemos noticias, publicaciones de X y canales oficiales. Cada ítem conserva su URL de origen.
- Triaje fail-closed. Cada registro requiere un veredicto exitoso. Un fallo o respuesta parcial bloquea la publicación; información general y evaluaciones neutrales conservan categorías separadas.
- Geolocalización. Si el reporte trae coordenadas (o la fuente las publica en su catálogo) se usan directamente (
coord_origen=explicita). Si no, la IA extrae un nombre de lugar y un geocodificador OSM / Nominatim lo resuelve a un punto (coord_origen=geocodificada, aproximado). - Entidad y procedencia. Solo se fusionan estructuras nombradas de forma compatible. Fechas y fotos provienen exclusivamente de las fuentes que respaldan esa entidad; medios multi-entidad ambiguos se omiten.
5 · Fuentes (de dónde vienen los datos)
El conjunto agrega fuentes públicas de tres tipos —X, noticias y canales oficiales— y agrupa reportes que parecen describir el mismo hecho. Esta es la vista general: cada registro lleva su procedencia exacta en fuentes. Agrupar nombres o publicaciones no presume que sus orígenes sean independientes.
Puedes filtrar por fuente con fuente y excluir_fuente, y exigir varios registros con min_fuentes. Ese filtro mide volumen de apoyo, no independencia confirmada. El desglose exacto cambia con cada exportación.
| Tipo de fuente | Fuente | Registros | Detalle |
|---|---|---|---|
| Redes sociales | X (x.com) | — | Búsquedas periódicas y cuentas públicas relevantes para el evento. |
| Prensa / noticias | Google News RSS y medios directos | — | Noticias de medios colombianos e internacionales con enlace al artículo original. |
| Canales oficiales | Organismos científicos y de gestión del riesgo | — | Comunicados y datos públicos de autoridades y organismos científicos. |
fuentes de cada hecho. No se presume ninguna alianza con las fuentes citadas.6 · Procedencia de coordenadas (coord_origen)
No todas las coordenadas son iguales. El campo coord_origen te dice de dónde salieron lat/lon, para que sepas cuánto confiar en su precisión y puedas filtrar:
- explicita
- Las coordenadas vinieron con el dato: del catálogo de la fuente original (p. ej.
eltiempo.comosgc.gov.co) o indicadas explícitamente en el post. Su precisión no está verificada de forma independiente; una fuente puede publicar un punto aproximado o de relleno. - geocodificada
- No venían con el dato: el pipeline las derivó. La IA extrajo un nombre de lugar (barrio, urbanización, municipio) y un geocodificador OSM / Nominatim lo resolvió a un punto. Son aproximadas: pueden caer en el centroide del área o estar desplazadas algunos cientos de metros. Corregimos manualmente los errores conocidos cuando los detectamos.
- "" (vacío)
- Sin procedencia conocida o sin coordenadas (
lat/lonennull).
coord_origen para distinguir puntos suministrados por la fuente de puntos geocodificados, pero valida cualquiera de los dos antes de uso operativo o despacho de ayuda. Ningún valor garantiza una dirección exacta.# Solo hechos con coordenadas suministradas por la fuente, en GeoJSON
curl "https://crisiscolombia.org/api/v1/facts?coord_origen=explicita&formato=geojson"7 · Filtros
Todos los parámetros son opcionales y combinables (se aplican en conjunto, tipo AND). Las listas van separadas por comas. Un valor inválido en categoria, bbox, desde, formato o en los enteros devuelve 400 con {"error": "…"}; los parámetros desconocidos se ignoran. Recuerda codificar la URL (espacios → %20, ñ → %C3%B1).
| Parámetro | Tipo | Valores / descripción | Ejemplo |
|---|---|---|---|
categoria | lista | Siete valores: daño, acopio, necesidad, información, evaluación_pendiente, evaluación_habitable, evaluación_inconsistente. | ?categoria=acopio,necesidad |
estado | lista | Departamento colombiano (campo legado: estado). Sin distinción de mayúsculas; coincidencia exacta. | ?estado=Chocó |
municipio | lista | Municipio. Sin distinción de mayúsculas; coincidencia exacta. | ?municipio=San%20José%20del%20Palmar |
nivel | lista | Solo daño: colapso_total · severo · parcial · dano. | ?nivel=colapso_total,severo |
tipo_necesidad | lista | Solo necesidad: agua, comida, medicinas, insumos, voluntarios, sangre, rescate, refugio, ropa, otro. | ?tipo_necesidad=agua,medicinas |
coord_origen | lista | explicita (suministradas por la fuente; precisión no verificada) · geocodificada (aproximadas). Ver §6. | ?coord_origen=explicita |
fuente | lista | Conserva solo registros con al menos una fuente coincidente. Coincide por nombre y por subcadena del dominio (p. ej. eltiempo.com). | ?fuente=eltiempo.com |
excluir_fuente | lista | Anti-circular. Descarta registros cuyas fuentes estén todas en la lista; el registro sigue apareciendo si además tiene otra fuente. Ver nota abajo. | ?excluir_fuente=eltiempo.com |
bbox | 4 números | Caja geográfica minLon,minLat,maxLon,maxLat. Solo registros con coordenadas dentro. Inválido → 400. | ?bbox=-77.5,4.0,-75.0,6.5 |
desde | ISO 8601 | Solo registros con fecha ≥ este instante. Inválido → 400. Ideal para sondeo incremental. | ?desde=2026-08-10T00:00:00Z |
min_fuentes | entero | Número mínimo de registros de fuente distintos (n_fuentes). Filtra por volumen de apoyo; no demuestra independencia de origen. | ?min_fuentes=2 |
limite | entero | Máximo de registros. Por defecto 1000; tope 5000 (se recorta). | ?limite=100 |
offset | entero | Registros a saltar (paginación). Por defecto 0. | ?limite=100&offset=100 |
formato | texto | json (por defecto) · geojson · csv. Ver §8. | ?formato=geojson |
anti-circular excluir_fuente en detalle
Si mantienes uno de los sitios fuente, excluye tus propios datos para no reingestar lo tuyo y evitar bucles de retroalimentación. La regla es deliberada: un hecho solo se descarta si todas sus fuentes están en la lista de exclusión; si otra fuente no excluida también lo reporta, el hecho permanece y conserva esa procedencia externa.
# "Soy eltiempo.com: dame todo MENOS lo que solo provengo yo"
curl "https://crisiscolombia.org/api/v1/facts?excluir_fuente=eltiempo.com"Más ejemplos
filtros Acopios en Chocó, máximo 50:
curl "https://crisiscolombia.org/api/v1/facts?categoria=acopio&estado=Choc%C3%B3&limite=50"necesidades Solicitudes de agua o medicinas respaldadas por ≥2 registros de fuente, desde una fecha:
curl "https://crisiscolombia.org/api/v1/facts?categoria=necesidad&tipo_necesidad=agua,medicinas&min_fuentes=2&desde=2026-08-10T00:00:00Z"8 · Formatos de salida
Elige con formato:
- json (por defecto)
- Sobre
{ "meta": {…}, "datos": [ Hecho, … ] }.metaincluyecantidad(en esta página),total(tras filtros, antes de paginar),generado,licencia,atribucionyconsulta(eco de los parámetros aplicados). Content-Type:application/json. - geojson
FeatureCollection(RFC 7946) con solo los registros geolocalizados. Cada feature tienegeometry.coordinates = [lon, lat]y el hecho completo (sinlat/lon) enproperties.metava como miembro extranjero informativo. Content-Type:application/geo+json. Ideal para Leaflet, Mapbox, QGIS, etc.- csv
- Tabla con cabecera; una fila por hecho. Las fuentes se aplanan a una columna
fuentescon el formatonombre(url);nombre(url). Incluye BOM UTF-8 para abrir limpio en Excel. Content-Type:text/csv.
# GeoJSON de una zona, listo para pintar en un mapa
curl "https://crisiscolombia.org/api/v1/facts?formato=geojson&bbox=-77.5,4.0,-75.0,6.5"
# CSV de daños desde una fecha (da%C3%B1o = "daño" codificado para URL)
curl "https://crisiscolombia.org/api/v1/facts?categoria=da%C3%B1o&desde=2026-08-10T00:00:00Z&formato=csv"9 · Procedencia y atribución
Cada hecho conserva en fuentes[] todas sus fuentes distintas (nombre + URL). Esto cumple dos funciones:
- Deduplicar contra tus datos. Antes de ingerir un hecho, revisa sus
fuentes/url: si ya lo tienes (o es tuyo), omítelo. Combínalo conexcluir_fuentepara filtrarlo del lado del servidor. - Dar crédito. Al reutilizar, cita la fuente original cuando corresponda, además de crisiscolombia.org.
10 · Límites y uso justo
- Caché. Cada respuesta trae
Cache-Control: public, max-age=60, s-maxage=120; el CDN absorbe consultas repetidas. Las exportaciones se regeneran periódicamente y cada respuesta indica su hora de generación. - Paginación.
limitetope 5000 por petición; usaoffsetpara recorrer, odesdepara traer solo lo nuevo. - Descargas masivas → usa los volcados estáticos. No martilles el endpoint de consulta. Para el conjunto completo o cargas frecuentes, sirve el CDN directamente:
- /facts.json — el conjunto completo (los mismos registros que esta API).
- /colapsos.json · /colapsos.csv — solo estructuras colapsadas/dañadas con nombre.
- Solo lectura. La API únicamente sirve
GET(yOPTIONSpara CORS). Otros métodos devuelven405.
11 · Versionado
La ruta lleva la versión mayor: /api/v1/…. Política de estabilidad de v1:
- Cambios aditivos no rompen. Podemos agregar campos nuevos a los registros o nuevos parámetros opcionales sin cambiar de versión; tu cliente debe ignorar lo que no conozca.
- Cambios incompatibles → nueva versión. Renombrar/eliminar campos o cambiar el significado de uno existente se publicaría como
/api/v2;v1seguiría disponible durante una transición. - Contrato legible por máquina: /api/v1/openapi.json (OpenAPI 3.1) — genera clientes o valida contra él.