La atribución es obligatoria, en todos los planes
Prueba, Personal, Profesional o Empresa: cualquier app, web o producto que use esta API muestra de dónde salen los datos, con un enlace visible a traficoahora.co junto a ellos. El texto exigido es “Datos: Tráfico Ahora” enlazando a https://traficoahora.co. Copia esto:
Datos: <a href="https://traficoahora.co">Tráfico Ahora</a>
Mantén además el crédito de la fuente original de cada registro: los campos source y sourceName lo traen escrito. Para los cierres, “INVÍAS · Línea #767”; para las alertas, IDEAM; para los focos de calor, NASA FIRMS. Cada respuesta lleva la atribución en el campo attribution y en la cabecera X-Attribution.
Empezar
Crea una clave de prueba en el formulario de abajo y añádela a la petición. Abre esto en el navegador, con tu clave al final, y ya tienes datos:
https://traficoahora.co/api/v1/incidents?departamento=meta&key=tes_…
Devuelve GeoJSON, listo para un mapa. Para JSON simple, añade &format=json. En un programa, mejor la clave en la cabecera:
curl -H "X-API-Key: tes_…" "https://traficoahora.co/api/v1/incidents?departamento=meta&source=invias&format=json"
La clave
La API es de pago y cada petición lleva clave. La clave que se crea aquí es de prueba: funciona 5 días desde la primera petición, con 120 peticiones por hora, para comprobar si la API sirve para lo que estás construyendo. Para seguir después, escribe a [email protected] con el nombre del proyecto y el uso previsto, y te respondemos con el plan y la factura.
Pedimos nombre, correo y para qué la quieres por tres razones concretas: para avisarte cuando una fuente deje de publicar o cambie de formato; para saber qué le falta a la API a quien la usa en serio; y porque una clave que se puede revocar protege a todos de un bucle descontrolado.
La clave va en la cabecera X-API-Key, en Authorization: Bearer … o en el parámetro key. Sin clave, la API responde 401.
Eventos activos: /api/v1/incidents
Todo lo que publican ahora mismo las fuentes: cierres totales, pasos a un carril y restringidos, derrumbes y accidentes del #767; alertas del IDEAM por lluvias, deslizamientos y crecientes; y focos de calor detectados por satélite. Llegan a través de la API de Roadscore y se leen cada minuto.
GET https://traficoahora.co/api/v1/incidents
Parámetros
| Parámetro | Valores | Para qué |
|---|---|---|
departamento | meta, cundinamarca, bogota, valle-del-cauca… | Uno de los 32 departamentos o Bogotá, por slug o por nombre: el mismo slug que el de /departamento/meta. Una alerta del IDEAM que cubre varios departamentos sale en todos. También se acepta como provincia o district. Un departamento que no existe responde 400. |
type | closure, traffic, accident, weather, fire | Filtra por tipo; admite varios separados por comas. Sin esto, vienen todos. |
source | invias, wmo, firms | Filtra por fuente: invias (Línea #767), wmo (alertas del IDEAM), firms (focos de calor). Admite varias separadas por comas. |
format | geojson (por defecto), json | GeoJSON para mapas; JSON para listas. |
since | 2026-10-01 | Eventos empezados después de esa fecha, también los ya terminados que sigan en el archivo. El archivo no guarda el PR ni la lista de departamentos de las alertas. |
debug | 1 | El estado de cada fuente: cuántos registros trae, cuándo publicó por última vez y si está callada. |
key | tes_… | Tu clave, si no la mandas en la cabecera. |
Ejemplo de petición y respuesta en JSON
https://traficoahora.co/api/v1/incidents?departamento=meta&source=invias&format=json
{
"attribution": { "text": "Datos: Tráfico Ahora", "url": "https://traficoahora.co" },
"count": 1,
"incidents": [
{
"id": "invias-…",
"type": "closure",
"severity": "medium",
"status": "active",
"lat": 4.0712,
"lon": -73.4851,
"title": "Paso a un Carril · Villavicencio - Puerto López · PR 12+300",
"description": "Paso a un carril por obras en la vía Villavicencio - Puerto López.",
"source": "invias",
"sourceName": "INVÍAS · Línea #767",
"road": "Villavicencio - Puerto López",
"departamento": "Meta",
"departamentos": ["Meta"],
"cause": "roadworks",
"kmFrom": 12.3,
"kmTo": 12.8,
"prFrom": "PR 12+300",
"prTo": "PR 12+800",
"closure": "partial",
"startedAt": "2026-10-09T13:00:00.000Z",
"updatedAt": "2026-10-10T11:40:00.000Z",
"district": "Meta"
}
]
}En GeoJSON, una alerta del IDEAM
https://traficoahora.co/api/v1/incidents?departamento=meta&source=wmo
{
"attribution": { "text": "Datos: Tráfico Ahora", "url": "https://traficoahora.co" },
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"id": "wmo-…",
"geometry": { "type": "Point", "coordinates": [-73.69, 3.99] },
"properties": {
"id": "wmo-…",
"type": "weather",
"severity": "high",
"status": "active",
"title": "Alerta por deslizamientos · Meta, Cundinamarca",
"description": "Municipios en alerta. Meta: Acacías, Guamal. Cundinamarca: Guayabetal.",
"source": "wmo",
"sourceName": "IDEAM (vía OMM)",
"sourceUrl": "https://www.pronosticosyalertas.gov.co/",
"departamento": "Meta",
"departamentos": ["Meta", "Cundinamarca"],
"municipios": "Meta: Acacías, Guamal. Cundinamarca: Guayabetal",
"startedAt": "2026-10-10T05:00:00.000Z",
"updatedAt": "2026-10-10T05:00:00.000Z",
"district": "Meta"
}
}
]
}Ejemplos ilustrativos, con la forma exacta de la respuesta y recortados a un evento. En GeoJSON los campos van en properties y las coordenadas en el orden de GeoJSON: longitud, latitud.
Campos de cada evento
| Campo | Qué es |
|---|---|
id | Identificador estable, con el prefijo de la fuente. |
type | closure (cierres, pasos restringidos y obras), traffic, accident, weather (alertas del IDEAM) o fire (focos de calor). |
severity | info, low, medium, high o critical, según lo que publica la fuente. |
status | active mientras la fuente lo publica; scheduled si es un cierre programado. |
lat lon | Coordenadas WGS84 del punto. |
title | Título corto: qué pasa, en qué vía y en qué PR. |
description | Texto completo, tal como lo publica la fuente. |
source sourceName | invias, wmo o firms, y el crédito escrito ("INVÍAS · Línea #767"). Se mantiene al mostrar los datos. |
sourceUrl | La página de la fuente, cuando la hay. |
road | El tramo, como lo nombra el #767 ("Bogotá - Villavicencio"). Las alertas y los focos no lo llevan. |
departamento departamentos | El departamento principal y todos los que toca el evento. district repite el primero, por compatibilidad. |
municipios | Los municipios en alerta, en las alertas del IDEAM. |
kmFrom kmTo prFrom prTo | El PR inicial y final: en kilómetros (12.3) y escrito ("PR 12+300"). Sólo en el #767, cuando lo trae. |
closure direction heavyOnly | road (cerrada en los dos sentidos), carriageway (en un sentido) o partial (se pasa con restricción); el sentido; si sólo afecta a carga pesada. |
cause | La causa normalizada: landslide, roadworks, accident… |
startedAt updatedAt endsAt | Inicio, última actualización y reapertura estimada (si la fuente la da), en ISO 8601 (UTC). Para la hora de Bogotá, resta cinco horas. |
Diagnóstico: ?debug=1
https://traficoahora.co/api/v1/incidents?debug=1
{
"attribution": { "text": "Datos: Tráfico Ahora", "url": "https://traficoahora.co" },
"generatedAt": "2026-10-10T12:00:00.000Z",
"liveCount": 214,
"totalCount": 214,
"sources": [
{
"name": "invias",
"configured": true,
"ok": true,
"count": 151,
"newestAt": "2026-10-10T11:40:00.000Z",
"stale": false,
"byType": { "closure": 120, "traffic": 27, "accident": 4 }
}
]
}Útil cuando un número parece raro: dice qué fuente está callada. El ejemplo está recortado a una fuente.
Códigos de respuesta
| Código | Cuándo |
|---|---|
200 | Todo bien. Cabeceras útiles: X-API-Plan, X-API-Trial-Ends (fin de la prueba), X-RateLimit-Remaining, X-Attribution. |
400 | Un departamento que no existe o una fecha since que no se entiende. |
401 | Sin clave, o con una clave que no existe. |
402 | La prueba de 5 días terminó y la clave no tiene plan de pago. |
403 | Clave revocada. El cuerpo dice el motivo. |
429 | Límite del plan superado. La cabecera Retry-After dice cuántos segundos esperar. |
HTTP/1.1 401 Unauthorized
{
"error": "Clave necesaria",
"detail": "La API de Tráfico Ahora ya no responde sin clave. Crea una clave de prueba en https://traficoahora.co/api-publica (funciona 5 días) o pide un plan de pago a [email protected].",
"clave": "https://traficoahora.co/api-publica",
"contacto": "[email protected]",
"atribucion": "La atribución es obligatoria en todos los planes: ...",
"attribution": { "text": "Datos: Tráfico Ahora", "url": "https://traficoahora.co" }
}HTTP/1.1 402 Payment Required
{
"error": "Periodo de prueba terminado",
"detail": "Esta clave era de prueba y terminó el 15 de octubre de 2026. Para seguir usando la API, escribe a [email protected] ...",
"planes": "https://traficoahora.co/api-publica",
"contacto": "[email protected]",
"atribucion": "La atribución es obligatoria en todos los planes: ...",
"attribution": { "text": "Datos: Tráfico Ahora", "url": "https://traficoahora.co" }
}Límites
La prueba admite 120 peticiones por hora. Los planes de pago se cuentan por día: 10.000 peticiones en Personal y 100.000 en Profesional; Empresa, lo que se acuerde. Se cuenta por clave y no por IP, para que una app con muchos usuarios no se frene por uno de ellos. Si te pasas, recibes un 429 con el tiempo de espera en Retry-After.
Las fuentes se leen cada minuto y la respuesta tiene caché de 30 segundos, así que pedir más de dos veces por minuto no trae ni un dato nuevo. Quien choca con el límite es, casi siempre, un bucle olvidado.
El CORS está abierto: puedes llamar directamente desde el navegador, sin servidor en medio. Ten en cuenta que la clave queda entonces a la vista de quien abra la página.
Planes y precios
Prueba
Para todos
Gratis
- 5 días desde la primera petición
- 120 peticiones por hora
- Atribución obligatoria
Formulario de arriba, dos minutos.
Personal
Proyectos personales o pequeños, sin ingresos relevantes
$39.000 COP / mes
en pesos colombianos (COP), con factura
- Unas 10.000 peticiones al día
- Sólo Colombia
- Atribución obligatoria
Profesional
Apps comerciales, webs con publicidad, emisoras, uso dentro de una empresa
$199.000 COP / mes
en pesos colombianos (COP), con factura
- Unas 100.000 peticiones al día
- Atribución obligatoria
Empresa
Flotas, transportadoras, aseguradoras, medios, varios países, SLA
Hablemos
- Varios países, a través de Roadscore
- Volumen y disponibilidad acordados
- Atribución obligatoria
Por Roadscore y [email protected].
Qué se paga: el acceso al servicio, es decir, la API en sí, los límites del plan y el soporte. No los datos: los eventos son de las entidades que los publican (INVÍAS · Línea #767, IDEAM (vía OMM) y NASA FIRMS), no son nuestros y no los licenciamos. El INVÍAS no declara una licencia para el #767; lo citamos siempre y le hemos pedido que confirme la reutilización. Por eso cada registro conserva su fuente, y quien los muestra mantiene ese crédito.
Cómo se paga: por ahora, por correo y factura. Escribe a [email protected] con el nombre del proyecto, el uso previsto y el plan que te interesa, y te respondemos con la factura. Al pagar, tu clave de prueba pasa al plan y deja de vencerse. Precios por mes, en pesos colombianos (COP), con factura.
Condiciones y atribución
La atribución es obligatoria, en todos los planes
Prueba, Personal, Profesional o Empresa: cualquier app, web o producto que use esta API muestra de dónde salen los datos, con un enlace visible a traficoahora.co junto a ellos. El texto exigido es “Datos: Tráfico Ahora” enlazando a https://traficoahora.co. Copia esto:
Datos: <a href="https://traficoahora.co">Tráfico Ahora</a>
Mantén además el crédito de la fuente original de cada registro: los campos source y sourceName lo traen escrito. Para los cierres, “INVÍAS · Línea #767”; para las alertas, IDEAM; para los focos de calor, NASA FIRMS. Cada respuesta lleva la atribución en el campo attribution y en la cabecera X-Attribution.
- Construir un producto sobre la API sin plan de pago, una vez terminada la prueba, o sin atribución, no es un uso autorizado.
- La clave es personal del proyecto: no se comparte ni se publica. Si se filtra, escríbenos y emitimos otra.
- Una clave puede revocarse si se usa para algo distinto de lo declarado o sin atribución.
- Los datos son del INVÍAS (Línea #767, con la Policía de Tránsito), del IDEAM y de NASA FIRMS. Quien los lee tiene derecho a saber que un cierre lo registró una entidad y no un algoritmo.
- Más detalles en los términos y, sobre los datos de quien tiene clave, en la política de tratamiento de datos.
Honestidad sobre la cobertura
Esta API devuelve lo que publican las fuentes, no lo que está pasando en la vía. Una vía sin eventos en la respuesta no es una vía despejada: es una vía sobre la que nadie ha publicado nada. El #767 se centra en la red vial nacional; las vías departamentales y municipales tienen menos cobertura, y el tráfico urbano no está.
Si construyes avisos encima de esto, díselo a quien los recibe. Y no la uses para decisiones de emergencia: en una emergencia, 123.
El estado de cada fuente, en directo, está en ?debug=1; de dónde sale cada una, en Qué es Tráfico Ahora.
Contacto
Para planes de pago, volumen, facturas, una clave perdida o cualquier duda sobre la API: [email protected]. Respondemos nosotros, no un sistema de tickets. Si buscas datos de varios países o un acuerdo con SLA, mira Roadscore.