---
title: "UPRA Rural Land Prices Search"
method: POST
path: "/co/upra/land-prices-search/v1"
tags: ["Colombia", "UPRA Rural Land Prices"]
---

# UPRA Rural Land Prices Search

`POST /co/upra/land-prices-search/v1`

## Request

- Base URL: `https://api.croma.run`
- URL: `https://api.croma.run/co/upra/land-prices-search/v1`
- Auth: HTTP bearer

Search UPRA's map of commercial prices of rural agricultural land in Colombia: about 179,000 zones in 18 departments, each with its price range in pesos per hectare (`min_price_cop_per_ha`, `max_price_cop_per_ha`), the year of the study (2015-2023), its market category, area and polygon. Requires `municipality_code` (DANE, 5 digits) or `department_code` (2 digits); narrow by `min_price_per_hectare` (ranges starting at or above) and `max_price_per_hectare` (ranges ending at or below). Most expensive first. Not an appraisal of any one property. Find the zone under a coordinate with `upra_land_price_by_point`. Served by Croma (`as_of` says how current the data is).

**Dataset endpoint**: answers from the whole source in milliseconds and carries `as_of`.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `municipality_code` string: Optional five-digit DANE code of the municipality, e.g. `17013` for Aguadas.
  - `department_code` string: Optional two-digit DANE code of the department, e.g. `73` for Tolima or `50` for Meta.
  - `min_price_per_hectare` number: Optional: only zones whose price range starts at or above this price per hectare, in Colombian pesos, e.g. `20000000`. 0 means no bound.
  - `max_price_per_hectare` number: Optional: only zones whose price range ends at or below this price per hectare, in Colombian pesos. 0 means no bound.
  - `page` integer: 1-based page number for paginated results.
  - `per_page` integer: Results per page (1-50); every result carries its geometry.

## Response `200`

Successful response

- UpraLandPricesSearchResponse
  - `data` UpraLandPricesSearchData, required
    - `as_of` string, nullable, required: How current the data in this response is.
    - `municipality_code` string, nullable, required
    - `department_code` string, nullable, required
    - `min_price_per_hectare` number, nullable, required
    - `max_price_per_hectare` number, nullable, required
    - `total` number, required: Matches, counted up to 1000.
    - `total_is_exact` boolean, required: False when more than 1000 match: `total` is then 1000, and the pages go on.
    - `page` number, required
    - `per_page` number, required
    - `total_pages` number, required: Pages over `total`; there are more when `total_is_exact` is false.
    - `count` number, required
    - `results` object[], required
      - `id` string, required: `<department_code>-<valuation_year>-<number>`, e.g. `73-2017-1520`.
      - `department_code` string, required: Two-digit DANE code of the department.
      - `department` string, nullable, required
      - `municipality_code` string, nullable, required: Five-digit DANE code of the municipality.
      - `municipality` string, nullable, required
      - `valuation_year` number, nullable, required: The year UPRA's price study for the department refers to (vigencia).
      - `price_status` 'priced' | 'excluded' | 'no_information', required: `priced` when the zone carries a price range; `excluded` when the land is outside the agricultural land market (`exclusion` says why); `no_information` when UPRA has no price for it.
      - `price_range` string, nullable, required: The range as UPRA labels it, in millions of pesos per hectare, e.g. `Mayor que 5 - hasta 8`; null unless priced.
      - `exclusion` string, nullable, required: Why the zone is outside the land market, as UPRA names it, e.g. `Zonas urbanas`, `Resguardos indígenas constituidos`, `Parques Nacionales Naturales`; null unless excluded.
      - `price_code` string, nullable, required: UPRA's code for the range or the exclusion, e.g. `2.2.1`, `E-3`, `SI`.
      - `min_price_cop_per_ha` number, nullable, required: The range's lower bound in pesos per hectare (0 for `Menor a 1`); null without a range.
      - `max_price_cop_per_ha` number, nullable, required: The range's upper bound in pesos per hectare; null for the open top range or without a range.
      - `market_category` string, nullable, required: The zone's standing in UPRA's land-market frontier: `Incluida` or `Condicionada`.
      - `area_ha` number, nullable, required: The zone's area in hectares.
      - `latitude` number, nullable, required: Centre of the zone's bounding box.
      - `longitude` number, nullable, required
      - `geometry` object, nullable, required: The zone as GeoJSON in WGS84, as UPRA draws it at 1:100,000.
        - `type` string, required: `Polygon` or `MultiPolygon`.
        - `coordinates` unknown, required
      - `geometry_url` string, nullable, required: Set when the geometry is too large to carry inline: the same GeoJSON geometry, kept by us, and `geometry` is null.

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