> ## 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.

# Metro de Bogotá

> The Bogotá metro as data: the 27 stations of Lines 1 and 2, the alignment and works of each line, how close any point is to them, the parcels required for Line 1, the monthly works progress, the utility network relocations and the tree inventory.

Empresa Metro de Bogotá S.A. is building the city's first metro line, an elevated
viaduct of 16 stations from the southwest to Calle 72, and has Line 2, 11 stations, most of
them underground, toward Suba and Engativá, in design. It publishes where all of it goes: the
stations, the axis of each line, the viaduct, the limit of the works and the buildings
through which each station is entered.

Find the stations nearest a point with the distance to each, look one up with its
access buildings, get the line itself as GeoJSON, and take the official shapefiles.
Use it to measure how far a property, a branch or a customer is from a future station.

It also publishes which parcels the first line requires, how the works advance each
month against the plan, and what happens to every tree along the corridor. All of it
is here: check a property by CHIP or by point, follow the progress series since 2020,
and search the tree inventory by species, treatment or place.

> [!NOTE]
>
> The whole source, organized and ready to query: every endpoint on this page answers in milliseconds. Every response carries `as_of`: how current the data is. [How datasets work](https://docs.usecroma.com/datasets.md).

## Search stations

`POST /co/metro-bogota/stations-search/v1` [Dataset](https://docs.usecroma.com/datasets.md)

Finds stations by name, by line, or nearest to a point. Start here to get the
`id` the station lookup takes.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional. Words in the name or the working name, e.g. `Kennedy`, `Calle 72`. |
| `line` | integer | Optional. `1` (Line 1, under construction) or `2` (Line 2, in design). `0`, the default, returns every line. Default `0`. |
| `latitude` | number,null | Optional. Latitude of a point, e.g. `4.6486`. With `longitude`, stations come back nearest first with `distance_m`. Default `null`. |
| `longitude` | number,null | Optional. Longitude of the point, e.g. `-74.0633`. Default `null`. |
| `radius_m` | integer | Optional. Metres around the point, up to 50000. `0`, the default, keeps every station whatever its distance. Default `0`. |
| `page` | integer | Optional. 1-based page. Default `1`. |
| `per_page` | integer | Optional. Results per page, 1-100. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/stations-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "latitude": 4.6486, "longitude": -74.0633 }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `stations[]`; each station carries `distance_m`, metres in a straight line to its centre, when you searched from a point.

Each station is `{ id, line, number, name, common_name, station_type, status, note, latitude, longitude, area_m2, geometry }`.

* `id`: the line and the station's number, e.g. `l1-13`.
* `name`: the name Metro de Bogotá publishes, e.g. `Estación 13- Central`. Line 2 stations are still numbered placeholders (`ESTACIÓN 4`).
* `common_name`: the working name of the project, usually the street the station stands on, e.g. `Calle 26-13`.
* `status`: the stage as published, in Spanish: `Construcción` (Line 1) or `Diseño` (Line 2).
* `latitude`, `longitude`: the centre of the station.
* `geometry`: the station's footprint, a GeoJSON polygon in WGS84.

## One station

`POST /co/metro-bogota/station/v1` [Dataset](https://docs.usecroma.com/datasets.md)

Returns one station by its id, with the buildings through which it is entered.

| Field | Type | Notes |
| - | - | - |
| `station_id` | string | **Required.** The station's `id` from the search, e.g. `l1-13`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/station/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "station_id": "l1-13" }'
```

Returns `as_of`, `found`, `station_id`, `station` (null when not found) and `access_buildings[]`, each with its polygon.

Each station is `{ id, line, number, name, common_name, station_type, status, note, latitude, longitude, area_m2, geometry }`.

* `id`: the line and the station's number, e.g. `l1-13`.
* `name`: the name Metro de Bogotá publishes, e.g. `Estación 13- Central`. Line 2 stations are still numbered placeholders (`ESTACIÓN 4`).
* `common_name`: the working name of the project, usually the street the station stands on, e.g. `Calle 26-13`.
* `status`: the stage as published, in Spanish: `Construcción` (Line 1) or `Diseño` (Line 2).
* `latitude`, `longitude`: the centre of the station.
* `geometry`: the station's footprint, a GeoJSON polygon in WGS84.

## A point against the metro

`POST /co/metro-bogota/proximity/v1` [Dataset](https://docs.usecroma.com/datasets.md)

A coordinate in, how close it is to the metro out: stations, lines and works.

| Field | Type | Notes |
| - | - | - |
| `latitude` | number | **Required.** Latitude in decimal degrees (WGS84), e.g. `4.6486`. |
| `longitude` | number | **Required.** Longitude in decimal degrees (WGS84), negative in Bogotá, e.g. `-74.0633`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/proximity/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "latitude": 4.594147, "longitude": -74.097327 }'
```

Returns `as_of`, `latitude`, `longitude` and:

* `nearest_station`: the nearest station of any line, with `distance_m` to its centre.
* `stations_within_1km`: how many stations have their centre within 1,000 metres.
* `inside_intervention_limit`: whether the point is inside the area of works of Line 1.
* `intervention_limit_distance_m`: metres to the edge of that area; `0` inside it.
* `parcel`: the parcel required for Line 1 that contains the point, with its CHIP, address and polygon; null when none does.
* `parcels_within_100m`: how many such parcels have their centre within 100 metres.
* `lines[]`: per line, `{ line, alignment_distance_m, nearest_station }`: the distance to the line's axis and the line's nearest station.

Distances are straight lines measured on the published shapes, good to about a metre. They are not walking distances.

## Parcels required for Line 1

`POST /co/metro-bogota/parcels-search/v1` [Dataset](https://docs.usecroma.com/datasets.md)

Is this property among the ones the metro needs? Ask by CHIP, by address or by point.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional. Words of the address as Bogotá writes it, e.g. `KR 24B 2 10 SUR`. |
| `chip` | string | Optional. The parcel's CHIP, exact, e.g. `AAA0011RDTO`. |
| `latitude` | number,null | Optional. Latitude of a point, e.g. `4.5967`. With `longitude`, only what lies within `radius_m`, nearest first, with `distance_m`. Default `null`. |
| `longitude` | number,null | Optional. Longitude of the point, e.g. `-74.0995`. Default `null`. |
| `radius_m` | integer | Optional. Metres around the point, 10-5000. Default `200`. |
| `page` | integer | Optional. 1-based page. Default `1`. |
| `per_page` | integer | Optional. Results per page, 1-100. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/parcels-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "chip": "AAA0011RDTO" }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `parcels[]`; each parcel carries `distance_m` when you searched from a point (`0` when the point is on it). An empty list means the property is not in the consultation.

Each parcel is `{ id, chip, address, line, latitude, longitude, area_m2, geometry }`.

* `chip`: Bogotá's cadastral identifier of the parcel, e.g. `AAA0011RDTO`. Use it to join with the city's cadastre.
* `address`: the address as published, e.g. `CL 1 24 09`.
* `area_m2`: the area measured on the polygon.
* `geometry`: the parcel, a GeoJSON polygon in WGS84.

> [!NOTE]
>
> These are the parcels Metro de Bogotá lists in its public Line 1 parcel consultation. The list says a property is required for the line, not what stage its acquisition is in, and it carries no owner or occupant. Confirm the current status of a property with Metro de Bogotá.

## Works progress

`POST /co/metro-bogota/progress/v1` [Dataset](https://docs.usecroma.com/datasets.md)

The percentage built against the percentage planned, month by month, and where the project stands today.

| Field | Type | Notes |
| - | - | - |
| `from_month` | string | Optional. First month of the series, `yyyy-mm`, e.g. `2026-01`. |
| `to_month` | string | Optional. Last month of the series, `yyyy-mm`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/progress/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "from_month": "2026-01" }'
```

Returns `as_of`, `line`, the range asked for, `count` and:

* `latest`: the most recent month with physical progress reported.
* `months[]`: `{ month, line, planned_pct, executed_pct, planned_month_pct, executed_month_pct, schedule_baseline, budget_planned_cop, budget_planned_cumulative_cop, budget_executed_cop, budget_executed_cumulative_cop, budget_executed_month_pct, budget_executed_cumulative_pct, budget_baseline }`. `planned_pct` and `executed_pct` are cumulative physical progress in percent; the `_month_` fields are the month alone.
* `project`: the project's value in pesos (`value_cop`), the start of the concession (`start_date`) and the planned start of operation (`end_date`).
* `stages[]`: each stage with its dates.
* `activities[]`: what is under way, with `status` and the report's cut-off date (`reported_on`).
* `milestones[]`: what was achieved in the latest reported period, with the date (`end_date`).

Names, states and notes are in Spanish, as published.

## Network relocation

`POST /co/metro-bogota/network-relocation-search/v1` [Dataset](https://docs.usecroma.com/datasets.md)

The water, power, gas and telecom lines the metro has to move, and how each one is going.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional. Words in the interference code or the utility, e.g. `COD-00`, `EAAB`. |
| `utility` | string | Optional. A utility (ESP): `CODENSA`, `VANTI`, `EAAB`, `ETB`, `TELEFÓNICA`. |
| `status` | enum | Optional. `por_iniciar`, `en_ejecucion`, `ejecutada` or `eliminada`. |
| `page` | integer | Optional. 1-based page. Default `1`. |
| `per_page` | integer | Optional. Results per page, 1-100. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/network-relocation-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "utility": "EAAB" }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `interferences[]`. Each is `{ id, line, utility, interference, segment, contract_group, agreement, status, planned_pct, executed_pct, compliance_index, compliance_status, deadline_status, planned_start, planned_end, deadline, slack_days, reported_on }`. The parties are utility companies; there is no personal data. The report was last published in 2022.

## Tree inventory

`POST /co/metro-bogota/trees-search/v1` [Dataset](https://docs.usecroma.com/datasets.md)

Every tree the works touch: what was authorized for it, whether it was done and when.

| Field | Type | Notes |
| - | - | - |
| `query` | string | Optional. Words in the common name, the species or the location, e.g. `Caucho sabanero`, `Ficus`. |
| `treatment` | enum | Optional. `tala`, `traslado`, `tratamiento_integral`, `conservacion` or `poda`. |
| `status` | enum | Optional. `ejecutado`, `no_ejecutado` or `sin_reporte`. |
| `locality` | string | Optional. A localidad of Bogotá, e.g. `KENNEDY`, `BOSA`, `CHAPINERO`. |
| `latitude` | number,null | Optional. Latitude of a point, e.g. `4.5967`. With `longitude`, only what lies within `radius_m`, nearest first, with `distance_m`. Default `null`. |
| `longitude` | number,null | Optional. Longitude of the point, e.g. `-74.0995`. Default `null`. |
| `radius_m` | integer | Optional. Metres around the point, 10-5000. Default `200`. |
| `page` | integer | Optional. 1-based page. Default `1`. |
| `per_page` | integer | Optional. Results per page, 1-100. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/trees-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "treatment": "traslado", "locality": "KENNEDY" }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `trees[]`; each tree carries `distance_m` when you searched from a point.

Each tree is `{ id, tree_number, line, common_name, scientific_name, sigau_code, treatment, status, executed_on, scheduled_from, scheduled_to, permit, work_front, work_front_group, chainage, locality, locality_code, upz, location, relocation_site, height_m, trunk_perimeter_m, trunk_diameter_cm, height_category, stump_category, botanical_garden_record, latitude, longitude, coordinates_approximate, relocation_location, relocation_latitude, relocation_longitude, note }`.

* `treatment`: what the environmental permit authorizes: `tala` (felling), `traslado` (relocation), `tratamiento_integral`, `conservacion` or `poda` (pruning).
* `status`: `ejecutado`, `no_ejecutado` or `sin_reporte`; `executed_on` is the date it was carried out.
* `permit`: the administrative act behind the treatment.
* `relocation_site`: for a relocated tree, where it was taken.
* `coordinates_approximate`: true when the inventory flags the tree as having no coordinates of its own.

## Alignment and works

`POST /co/metro-bogota/infrastructure-search/v1` [Dataset](https://docs.usecroma.com/datasets.md)

The line itself and what is being built around it, as shapes to draw on a map
or to measure against.

| Field | Type | Notes |
| - | - | - |
| `kind` | enum | Optional. `alignment`, `viaduct`, `intervention_limit`, `access_building` or `depot`. Every kind by default. |
| `line` | integer | Optional. `1` (Line 1, under construction) or `2` (Line 2, in design). `0`, the default, returns every line. Default `0`. |
| `page` | integer | Optional. 1-based page. Default `1`. |
| `per_page` | integer | Optional. Results per page, 1-100. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/metro-bogota/infrastructure-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "kind": "alignment" }'
```

Returns `as_of`, the applied filters, `total`, `page`, `per_page`, `total_pages`, `count` and `results[]`.

Each result is `{ id, kind, line, name, station_id, note, latitude, longitude, length_m, area_m2, geometry, geometry_url }`.

* `kind`: `alignment` (the axis of the line), `viaduct` (the elevated structure the trains of Line 1 run on), `intervention_limit` (the whole area of design, construction and operation of Line 1), `access_building` (a building through which a station is entered) or `depot` (the Patio Taller, the yard and workshops of Line 1).
* `station_id`: for an access building, the station it belongs to.
* `length_m`, `area_m2`: the length of an alignment in metres; the perimeter and area of a polygon.
* `geometry`: the shape as GeoJSON in WGS84. The most detailed shapes (the viaduct, the axis of Line 1, the intervention limit) come simplified to within about a metre, with every published point at `geometry_url`.

## Layers and shapefiles

`POST /co/metro-bogota/layers/v1` [Dataset](https://docs.usecroma.com/datasets.md)

The published layers, each with the official file to open in a GIS.

| Field | Type | Notes |
| - | - | - |
| `line` | integer | Optional. `1` (Line 1, under construction) or `2` (Line 2, in design). `0`, the default, returns every line. Default `0`. |

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

Returns `as_of`, `line`, `count` and `layers[]`.

Each layer is `{ id, line, kind, title, description, geometry_type, feature_count, file_name, bytes, modified_at, source_document_url, document_url, document_versions[] }`.

* `document_url`: the layer's zipped shapefile, exactly as Metro de Bogotá published it. `source_document_url` is the same file at Metro de Bogotá.
* `document_versions[]`: every version of the file, oldest first, `{ document_url, modified_at, bytes }`. A new one appears when Metro de Bogotá replaces the file.
* The access buildings of Line 1 are published without a file: their `file_name` and document fields are null.

> [card] [Full reference](https://docs.usecroma.com/api-reference/overview.md)
>
> Schemas, all response fields, and an interactive playground.


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