---
title: "SIATA River Levels"
method: POST
path: "/co/siata-geoportal/river-levels/v1"
tags: ["Colombia", "SIATA"]
---

# SIATA River Levels

`POST /co/siata-geoportal/river-levels/v1`

## Request

- Base URL: `https://api.croma.run`
- URL: `https://api.croma.run/co/siata-geoportal/river-levels/v1`
- Auth: HTTP bearer

Current river, stream and storm-sewer water levels for the Aburrá Valley (Medellín metropolitan area) from SIATA: per-station level in metres against the station's flood thresholds (with a derived status), the highest and mean level over the last three hours, the source's alert colour and level, six trailing windows, basin morphology and land cover. `include_series` adds a per-minute 3-hour series. All inputs optional: an empty body returns every station; pass `latitude` + `longitude` (with optional `radius_km`, default 10) for nearby stations nearest first, or `municipality` / `station_code` to narrow. Coverage is the Medellín metro area only.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `latitude` number: Optional latitude. With `longitude`, returns only stations near that point.
  - `longitude` number: Optional longitude. With `latitude`, returns only stations near that point.
  - `radius_km` number: Radius in km around `latitude`/`longitude` to include stations. Defaults to 10.
  - `municipality` string: Optional municipality filter, e.g. `Medellín` or `Itagüí`. Accents and case are ignored.
  - `station_code` string: Optional station code, e.g. `520`. Returns only that station.
  - `include_series` boolean: When true, each station also carries `series_3h`, one level reading per minute for the last three hours.

## Response `200`

Successful response

- SiataGeoportalRiverLevelsResponse
  - `data` SiataGeoportalRiverLevelsData, required
    - `stations` object[], required
      - `station_code` string, nullable, required
      - `station` string, required
      - `municipality` string, nullable, required
      - `latitude` number, nullable, required
      - `longitude` number, nullable, required
      - `updated_at` string, nullable, required: ISO timestamp of the station's last update at the source.
      - `distance_km` number, nullable, required: Great-circle distance in km from the query point; null when no location filter was applied.
      - `kind` 'river' | 'sewer', required: `river` for a river or stream gauge, `sewer` for a storm-sewer sensor.
      - `sub_basin` string, nullable, required
      - `comuna` string, nullable, required
      - `neighborhood` string, nullable, required
      - `level_m` number, nullable, required: Latest water level, in metres.
      - `measured_at` string, nullable, required: ISO timestamp of the latest reading.
      - `status` 'normal' | 'elevated' | 'caution' | 'minor_flood' | 'major_flood', nullable, required: Where the latest level sits against the station's thresholds; null when either is missing.
      - `thresholds` object, nullable, required: The station's flood thresholds, in metres; null for sewer sensors.
        - `safe_m` number, nullable, required
        - `caution_m` number, nullable, required
        - `minor_flood_m` number, nullable, required
        - `major_flood_m` number, nullable, required
      - `max_level_3h_m` number, nullable, required
      - `mean_level_3h_m` number, nullable, required
      - `series_3h` object[], nullable, required: One reading per minute over the last three hours, oldest first; only with `include_series`.
        - `at` string, required
        - `level_m` number, nullable, required
      - `alert_color` 'green' | 'yellow' | 'orange' | 'red', nullable, required: The source's alert colour for the reading; null when the station has no reading.
      - `alert_level` integer, nullable, required: The source's alert level for the station, 0 (normal) to 3; null when not assessed.
      - `windows` object, nullable, required
        - `last_30m` object, required
          - `level_m` number, nullable, required: Representative water level over the window, in metres.
          - `measured_at` string, nullable, required: ISO timestamp of that reading.
          - `alert_color` 'green' | 'yellow' | 'orange' | 'red', nullable, required: The source's alert colour for the reading; null when the station has no reading.
        - `last_1h` object, required
          - `level_m` number, nullable, required: Representative water level over the window, in metres.
          - `measured_at` string, nullable, required: ISO timestamp of that reading.
          - `alert_color` 'green' | 'yellow' | 'orange' | 'red', nullable, required: The source's alert colour for the reading; null when the station has no reading.
        - `last_3h` object, required
          - `level_m` number, nullable, required: Representative water level over the window, in metres.
          - `measured_at` string, nullable, required: ISO timestamp of that reading.
          - `alert_color` 'green' | 'yellow' | 'orange' | 'red', nullable, required: The source's alert colour for the reading; null when the station has no reading.
        - `last_24h` object, required
          - `level_m` number, nullable, required: Representative water level over the window, in metres.
          - `measured_at` string, nullable, required: ISO timestamp of that reading.
          - `alert_color` 'green' | 'yellow' | 'orange' | 'red', nullable, required: The source's alert colour for the reading; null when the station has no reading.
        - `last_72h` object, required
          - `level_m` number, nullable, required: Representative water level over the window, in metres.
          - `measured_at` string, nullable, required: ISO timestamp of that reading.
          - `alert_color` 'green' | 'yellow' | 'orange' | 'red', nullable, required: The source's alert colour for the reading; null when the station has no reading.
        - `last_30d` object, required
          - `level_m` number, nullable, required: Representative water level over the window, in metres.
          - `measured_at` string, nullable, required: ISO timestamp of that reading.
          - `alert_color` 'green' | 'yellow' | 'orange' | 'red', nullable, required: The source's alert colour for the reading; null when the station has no reading.
      - `basin` object, nullable, required: Morphology of the drained basin; null when the source has none for the station.
        - `area_km2` number, nullable, required
        - `perimeter_km` number, nullable, required
        - `channel_length_km` number, nullable, required
        - `max_elevation_m` number, nullable, required
        - `min_elevation_m` number, nullable, required
        - `relief_m` number, nullable, required
        - `channel_slope_pct` number, nullable, required
        - `mean_slope_pct` number, nullable, required
        - `drainage_density_km_per_km2` number, nullable, required
        - `concentration_time_min` number, nullable, required: Mean time of concentration, in minutes.
        - `concentration_time_median_min` number, nullable, required
        - `urbanized_pct` number, nullable, required
      - `land_cover_pct` object, nullable, required: Land cover of the drained basin, in percent.
        - `forest` number, nullable, required
        - `grass` number, nullable, required
        - `water` number, nullable, required
        - `bare_soil` number, nullable, required
        - `urban` number, nullable, required
        - `crops` number, nullable, required
    - `advisories` string[], required: Operational notices the source is currently showing for these layers.

## Other responses

- `400`: Invalid request body
- `401`: Missing or invalid API key
- `429`: Rate limit exceeded
- `500`: Internal error
- `502`: Upstream source returned an error

---

[API](https://skmtc.dev/usecroma/apis/croma-marketplace-api.md) · [All operations](https://skmtc.dev/usecroma/apis/croma-marketplace-api/llms.txt) · [OpenAPI document](https://skmtc.dev/usecroma/apis/croma-marketplace-api/revisions/df016cdb29d7?raw)
