> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usecroma.com/llms.txt
> Use this file to discover all available pages before exploring further.

# TransMilenio

> La red de transporte público de Bogotá (TransMilenio, alimentadores, buses zonales del SITP y TransMiCable): cada paradero y ruta, las salidas programadas en cualquier paradero, y en vivo la posición de los buses, las llegadas y las novedades del servicio.

TransMilenio S.A. opera el sistema integrado de transporte público de Bogotá:
las troncales de TransMilenio, sus rutas alimentadoras, los buses zonales del
SITP y TransMiCable. Publica todo el horario cada mañana y la posición de cada
vehículo cada pocos segundos. Unos 8.300 paraderos y estaciones, 1.080 rutas y
9,4 millones de paradas programadas a la semana.

Encuentra un paradero por nombre o cerca de un punto, mira qué rutas paran ahí y
cuándo salen las próximas, sigue una ruta parada por parada en el mapa, y mira
dónde van los buses en este momento. Los endpoints de horario responden con datos
actualizados a diario; los endpoints en vivo leen la red mientras opera, cada
unos 20 segundos.

## Buscar paraderos

`POST /co/transmilenio/stops-search/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Encuentra paraderos y estaciones por nombre, por ruta o alrededor de un punto.
Empieza aquí para obtener el `stop_id` que usan los demás endpoints.

| Campo | Tipo | Notas |
| - | - | - |
| `query` | string | Opcional. Palabras del nombre, o el código, p. ej. `Portal Norte`, `Calle 72`. |
| `route` | string | Opcional. Un `route_id`, o el código que lleva el bus (`B10`, `C25`, `T25`); un código cubre todos los sentidos de la ruta. |
| `kind` | enum | Opcional. `station` o `stop` (un vagón o un paradero zonal). Ambos por defecto. |
| `latitude` | number,null | Opcional. Latitud de un punto, p. ej. `4.6486`. Con `longitude`, solo lo que está a menos de `radius_m`, lo más cercano primero. Por defecto `null`. |
| `longitude` | number,null | Opcional. Longitud del punto, p. ej. `-74.0633`. Por defecto `null`. |
| `radius_m` | integer | Opcional. Metros alrededor del punto, 50-5000. Por defecto `500`. |
| `page` | integer | Opcional. Página, empieza en 1. Por defecto `1`. |
| `per_page` | integer | Opcional. Resultados por página, 1-100. Por defecto `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/stops-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "Portal Norte" }'
```

Devuelve `as_of`, `total`, `total_is_exact`, `page`, `per_page`, `total_pages`, `count` y `stops[]`; cada paradero trae `distance_m` cuando se busca alrededor de un punto.

Cada paradero es `{ stop_id, code, name, kind, parent_station, latitude, longitude, wheelchair_boarding, zone_id, route_ids[], route_codes[], routes[], systems[], platforms[] }`.

* `kind`: `station` (una estación de TransMilenio o TransMiCable, que tiene vagones) o `stop` (un vagón dentro de una estación, o un paradero zonal del SITP).
* `routes[]`: cada ruta que para ahí, `{ route_id, short_name, long_name, system }`. Una estación reúne las rutas de todos sus vagones.
* `platforms[]`: para una estación, el `stop_id` de cada vagón.
* `systems[]`: `troncal`, `alimentador`, `dual`, `zonal_urbano`, `zonal_complementario`, `zonal_especial`, `transmicable`.

## Un paradero

`POST /co/transmilenio/stop/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Devuelve un paradero o una estación por su id.

| Campo | Tipo | Notas |
| - | - | - |
| `stop_id` | string | **Obligatorio.** El `stop_id` de la búsqueda de paraderos, p. ej. `10000`. Una estación cubre todos sus vagones. |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/stop/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "stop_id": "10000" }'
```

Devuelve `as_of`, `found`, `stop` y, para un vagón, `station`. Un id desconocido responde `found: false`.

## Salidas de un paradero

`POST /co/transmilenio/stop-departures/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

El horario de un paradero: las próximas salidas desde ahora, o desde cualquier
hora de cualquier día.

| Campo | Tipo | Notas |
| - | - | - |
| `stop_id` | string | **Obligatorio.** El `stop_id` de la búsqueda de paraderos, p. ej. `10000`. Una estación cubre todos sus vagones. |
| `date` | string | Opcional. `yyyy-mm-dd` en Bogotá. Hoy por defecto. |
| `from_time` | string | Opcional. `HH:MM`, 24 horas. Ahora por defecto (el inicio del día para otra fecha). |
| `route` | string | Opcional. Un `route_id`, o el código que lleva el bus (`B10`, `C25`, `T25`); un código cubre todos los sentidos de la ruta. |
| `limit` | integer | Opcional. Cuántos devolver, 1-200. Por defecto `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/stop-departures/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "stop_id": "10000" }'
```

Devuelve `as_of`, `found`, `stop_name`, `date`, `from_time`, `services` (los horarios vigentes ese día), `count` y `departures[]`: `{ time, at, minutes_from_now, route_id, route_code, route_name, system, stop_id }`. `at` es ISO 8601 en hora de Bogotá (`-05:00`); `stop_id` es el vagón del que sale el bus. Las rutas que terminan en el paradero no se incluyen: llegan, no salen.

## Buscar rutas

`POST /co/transmilenio/routes-search/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Encuentra rutas por código, destino, sistema o un paradero en el que paran.

| Campo | Tipo | Notas |
| - | - | - |
| `query` | string | Opcional. El código de la ruta o palabras de su destino, p. ej. `B10`, `Portal Suba`. |
| `system` | enum | Opcional. `troncal`, `alimentador`, `dual`, `zonal_urbano`, `zonal_complementario`, `zonal_especial` o `transmicable`. |
| `stop_id` | string | Opcional. Solo las rutas que paran en este `stop_id` (en una estación, en cualquiera de sus vagones). |
| `page` | integer | Opcional. Página, empieza en 1. Por defecto `1`. |
| `per_page` | integer | Opcional. Resultados por página, 1-100. Por defecto `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/routes-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "query": "B10" }'
```

Devuelve `as_of`, `total`, `total_is_exact`, `page`, `per_page`, `total_pages`, `count` y `routes[]`.

Cada ruta es `{ route_id, short_name, long_name, system, system_name, mode, color, text_color, stops_count, trips_per_week, first_departure, last_departure, services[], headways[] }`.

* `route_id`: cada sentido de una ruta tiene el suyo; `long_name` suele ser su destino.
* `services[]`: cada horario que opera la ruta, `{ service_id, days[], trips, first_departure, last_departure }`. Las horas son `HH:MM:SS` del día de servicio; después de `24:00:00` es pasada la medianoche.
* `headways[]`: franjas en que la ruta opera por frecuencia y no con horario fijo (TransMiCable).

## Una ruta

`POST /co/transmilenio/route/v1` [Dataset](https://docs.usecroma.com/es/datasets.md)

Devuelve una ruta con sus paradas en orden y, si se pide, su trazado.

| Campo | Tipo | Notas |
| - | - | - |
| `route_id` | string | **Obligatorio.** El `route_id` de la búsqueda de rutas, p. ej. `10075`. |
| `include_geometry` | boolean | Opcional. `true` agrega el trazado de cada recorrido como GeoJSON `LineString`. Por defecto `false`. |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/route/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "route_id": "10075" }'
```

Devuelve `as_of`, `found` y `route`: los campos de la ruta más `patterns[]`, cada secuencia de paradas distinta que opera, la más frecuente primero: `{ shape_id, trips_per_week, length_m, geometry, stops[] }`. Cada parada es `{ sequence, stop_id, name, code, latitude, longitude, offset_seconds }`, donde `offset_seconds` es el tiempo programado desde la primera parada.

## Vehículos en vivo

`POST /co/transmilenio/vehicles/v1` [Live](https://docs.usecroma.com/es/live-lookups.md)

Dónde van los vehículos ahora, en una ruta o alrededor de un punto.

| Campo | Tipo | Notas |
| - | - | - |
| `route` | string | Opcional. Un `route_id`, o el código que lleva el bus (`B10`, `C25`, `T25`); un código cubre todos los sentidos de la ruta. |
| `latitude` | number,null | Opcional. Latitud de un punto, p. ej. `4.6486`. Con `longitude`, solo lo que está a menos de `radius_m`, lo más cercano primero. Por defecto `null`. |
| `longitude` | number,null | Opcional. Longitud del punto, p. ej. `-74.0633`. Por defecto `null`. |
| `radius_m` | integer | Opcional. Metros alrededor del punto, 50-5000. Por defecto `500`. |
| `page` | integer | Opcional. Página, empieza en 1. Por defecto `1`. |
| `per_page` | integer | Opcional. Vehículos por página, 1-500. Por defecto `100`. |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/vehicles/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "route": "B10" }'
```

Devuelve `as_of` (cuándo reportaron los vehículos por última vez), `total`, `page`, `per_page`, `total_pages`, `count` y `vehicles[]`: `{ vehicle_id, label, license_plate, latitude, longitude, bearing, speed_kmh, route_id, route_code, route_name, system, trip_id, trip_start_time, stop_id, stop_name, stop_status, reported_at, distance_m }`. `stop_status` es `incoming_at`, `stopped_at` o `in_transit_to` respecto a la parada indicada.

## Llegadas en vivo a un paradero

`POST /co/transmilenio/stop-arrivals/v1` [Live](https://docs.usecroma.com/es/live-lookups.md)

Los vehículos que van hacia un paradero ahora, el más próximo primero.

| Campo | Tipo | Notas |
| - | - | - |
| `stop_id` | string | **Obligatorio.** El `stop_id` de la búsqueda de paraderos, p. ej. `10000`. Una estación cubre todos sus vagones. |
| `route` | string | Opcional. Un `route_id`, o el código que lleva el bus (`B10`, `C25`, `T25`); un código cubre todos los sentidos de la ruta. |
| `limit` | integer | Opcional. Cuántos devolver, 1-200. Por defecto `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/stop-arrivals/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "stop_id": "10000" }'
```

Devuelve `as_of`, `found`, `stop_name`, `count` y `arrivals[]`: `{ predicted_at, minutes_away, delay_seconds, stop_id, route_id, route_code, route_name, system, trip_id, vehicle_id, vehicle_label, license_plate }`. `delay_seconds` es positivo cuando el vehículo va retrasado frente a su horario. Cada vehículo se estima en su próxima parada, así que la lista trae los vehículos cuya próxima parada es esta.

## Novedades del servicio

`POST /co/transmilenio/alerts/v1` [Live](https://docs.usecroma.com/es/live-lookups.md)

Las novedades vigentes ahora, para toda la red, una ruta o un paradero.

| Campo | Tipo | Notas |
| - | - | - |
| `route` | string | Opcional. Un `route_id`, o el código que lleva el bus (`B10`, `C25`, `T25`); un código cubre todos los sentidos de la ruta. |
| `stop_id` | string | Opcional. Solo las novedades que afectan este `stop_id` (en una estación, cualquiera de sus vagones). |

```bash theme={"dark"}
curl https://api.croma.run/co/transmilenio/alerts/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

Devuelve `as_of`, `count` y `alerts[]`: `{ alert_id, cause, effect, header, description, url, active_periods[], routes[], stops[] }`. `effect` es `detour`, `no_service`, `reduced_service`, `significant_delays`, `stop_moved`, ...; los textos quedan como los escribe el sistema.

> [card] [Referencia completa](https://docs.usecroma.com/es/api-reference/overview.md)
>
> Esquemas, todos los campos de respuesta y un playground interactivo.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.