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

# IGAC

> Colombia's national cadastre, kept by IGAC: every property, parcel, building, block and zone it administers, the land values appraisals are built from, who runs each municipality's cadastre, and the current appraisal of any IGAC property.

The Instituto Geográfico Agustín Codazzi (IGAC) is Colombia's national cadastral authority and the gestor catastral of 842 of its 1,122 municipalities. Its cadastre is the register the property tax (impuesto predial) is charged on: every property with its 30-digit número predial, address, areas, destination and buildings, the parcel and building polygons, the blocks, veredas and sectors they sit in, and the homogeneous zones with the land values each appraisal is computed from.

This source keeps that whole cadastre, about 6.8 million properties, 5.1 million parcels and 3.8 million buildings, refreshed from IGAC's monthly publication, plus IGAC's statistics for every municipality in the country and the map of who administers each one. One thing the open register does not carry is the appraisal itself: the property lookup asks IGAC's cadastre for it, keeps the answer, and serves it from Croma's copy afterwards.

IGAC administers 842 of Colombia's 1,122 municipalities. Bogotá, Medellín, Cali, Barranquilla, the department of Antioquia and some thirty other municipalities keep their own cadastre and are not in this source; `igac_cadastral_managers` says who administers each one.

Search properties by municipality, block or address; read one property's appraisal by its number or by a point on the map; then pull the parcel, its buildings, its address plates and the zones around it.

## Search properties

`POST /co/igac/properties-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

One search over every property in IGAC's cadastre, scoped to a municipality, a block or a previous number, then narrowed by address, destination or zone.

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | Optional five-digit DANE code, e.g. `17013` (Aguadas). One of `municipality_code`, `block_code` or `previous_cadastral_number` is required. |
| `query` | string | Optional words matched against the address or farm name, e.g. `calle 10`. |
| `block_code` | string | Optional 17-digit manzana or vereda code, the first 17 digits of any cadastral number in it, e.g. `17013000100000001`. |
| `economic_destination` | string | Optional destination code as IGAC assigns it: `A` Habitacional, `B` Industrial, `C` Comercial, `D` Agropecuario, `I` Institucional, `L` Agrícola, `M` Pecuario, `S` Lote urbanizado no construido, among others. |
| `zone` | enum | Optional: `urban` or `rural`. |
| `previous_cadastral_number` | string | Optional 20-digit number the property had before the national numbering. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-100). Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/properties-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "municipality_code": "17013",
        "economic_destination": "C",
        "zone": "urban"
      }'
```

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Every property carries `cadastral_number` (30 digits), `previous_cadastral_number` (the earlier 20-digit one), `department_code`, `municipality_code`, `zone` (`urban` or `rural`), `zone_code`, `sector_code`, `block_code` (the manzana or vereda, the first 17 digits), `condition_code`, `address`, `economic_destination_code` and `economic_destination` (e.g. `A` Habitacional, `C` Comercial, `D` Agropecuario), `land_area_m2`, `built_area_m2`, `land_zones[]` (`physical_zone_code`, `economic_zone_code`, `area_m2`), `buildings[]` (`rooms`, `bathrooms`, `shops`, `floors`, `typology_code`, `use_code`, `use`, `score`, `built_area_m2`) and `building_count`. Owners, appraisals and registry folios are not in IGAC's open register; the appraisal comes from the property lookup.

<Note>
  IGAC administers 842 of Colombia's 1,122 municipalities. Bogotá, Medellín, Cali, Barranquilla, the department of Antioquia and some thirty other municipalities keep their own cadastre and are not in this source; `igac_cadastral_managers` says who administers each one.
</Note>

## One property, with its appraisal

`POST /co/igac/property/v1` <a className="dataset-pill" href="/datasets#lookups">Lookup</a>

The property as IGAC's cadastre holds it today, avalúo catastral included: the one figure the open register leaves out.

<Note>
  Answers from Croma's copy when it holds a recent answer for the key, otherwise reads the source and keeps the answer. Every response says when the source was last asked (`checked_at`) and where the answer came from (`served_from`).
</Note>

| Field | Type | Notes |
| - | - | - |
| `cadastral_number` | string | **Required.** The property's 30-digit número predial nacional, e.g. `170130001000000010001000000000`. Spaces, dots and hyphens are ignored. |

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

Returns `found`, `cadastral_number`, `checked_at` (when IGAC was last asked), `served_from` (`copy`, `upstream` or `stale`) and `property`. `property` carries `cadastral_number`, `previous_cadastral_number`, `department_code`, `municipality_code`, `municipality`, `address`, `land_area_m2`, `built_area_m2`, `economic_destination_code`, `economic_destination`, `appraisal` (the current avalúo catastral in Colombian pesos), `buildings[]` (`area_m2`, `use_code`, `use`, `score`, `floors`, `rooms`, `shops`, `bathrooms`), `latitude`, `longitude`, `geometry` (the parcel as GeoJSON in WGS84) and `checked_at`. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

<Note>
  A number IGAC's cadastre has no property under returns `found: false` with HTTP 200, not an error. IGAC administers 842 of Colombia's 1,122 municipalities. Bogotá, Medellín, Cali, Barranquilla, the department of Antioquia and some thirty other municipalities keep their own cadastre and are not in this source; `igac_cadastral_managers` says who administers each one.
</Note>

## The property at a point

`POST /co/igac/property-by-point/v1` <a className="dataset-pill" href="/datasets#lookups">Lookup</a>

A coordinate in, the IGAC property drawn there out, with everything the property lookup answers.

<Note>
  Answers from Croma's copy when it holds a recent answer for the key, otherwise reads the source and keeps the answer. Every response says when the source was last asked (`checked_at`) and where the answer came from (`served_from`).
</Note>

| Field | Type | Notes |
| - | - | - |
| `latitude` | number | **Required.** Latitude in decimal degrees (WGS84). |
| `longitude` | number | **Required.** Longitude in decimal degrees (WGS84), negative in Colombia. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/property-by-point/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "latitude": 5.6096, "longitude": -75.4557 }'
```

Returns `found`, `latitude`, `longitude`, `cadastral_number` (the parcel under the point), `checked_at`, `served_from` and `property`. `property` carries `cadastral_number`, `previous_cadastral_number`, `department_code`, `municipality_code`, `municipality`, `address`, `land_area_m2`, `built_area_m2`, `economic_destination_code`, `economic_destination`, `appraisal` (the current avalúo catastral in Colombian pesos), `buildings[]` (`area_m2`, `use_code`, `use`, `score`, `floors`, `rooms`, `shops`, `bathrooms`), `latitude`, `longitude`, `geometry` (the parcel as GeoJSON in WGS84) and `checked_at`.

## One parcel

`POST /co/igac/parcel/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `cadastral_number` | string | **Required.** The property's 30-digit número predial nacional, e.g. `170130001000000010001000000000`. Spaces, dots and hyphens are ignored. |

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

Returns `as_of`, `found`, `cadastral_number` and `parcel` (`zone`, `department_code`, `municipality_code`, `block_code`, `previous_cadastral_number`, `basement_count`, `part_count`, `latitude`, `longitude`, `geometry`). `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Parcels in a municipality or block

`POST /co/igac/parcels-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of the municipality, e.g. `17013` (Aguadas, Caldas). |
| `block_code` | string | Optional 17-digit manzana or vereda code. |
| `zone` | enum | Optional: `urban` or `rural`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50); every result carries its geometry. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/parcels-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "municipality_code": "17013", "block_code": "17013000100000001" }'
```

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Each result is a parcel as the parcel lookup returns it. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Buildings on a property

`POST /co/igac/buildings-by-property/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `cadastral_number` | string | **Required.** The property's 30-digit número predial nacional, e.g. `170130001000000010001000000000`. Spaces, dots and hyphens are ignored. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/buildings-by-property/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "cadastral_number": "170130001000000010001000000000" }'
```

Returns `as_of`, `cadastral_number`, `count` and `buildings[]` (`id`, `parcel_code`, `identifier`, `construction_type`, `ownership_type`, `floors`, `basements`, `mezzanines`, `semi_basements`, `label`, `building_code`, `previous_code`, `zone`, `municipality_code`, `part_count`, `geometry`). `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Blocks of a municipality

`POST /co/igac/blocks-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of the municipality, e.g. `17013` (Aguadas, Caldas). |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50); every result carries its geometry. Default `20`. |

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

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Each result carries `code`, `neighborhood_code`, `previous_code`, `municipality_code`, `part_count`, `latitude`, `longitude` and `geometry`. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Veredas of a municipality

`POST /co/igac/rural-districts-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of the municipality, e.g. `17013` (Aguadas, Caldas). |
| `query` | string | Optional words of the vereda's name. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50); every result carries its geometry. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/rural-districts-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "municipality_code": "17013" }'
```

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Each result carries `code`, `name`, `names[]`, `sector_code`, `previous_code`, `municipality_code`, `part_count`, `latitude`, `longitude` and `geometry`. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Sectors and urban perimeters

`POST /co/igac/sectors-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of the municipality, e.g. `17013` (Aguadas, Caldas). |
| `zone` | enum | Optional: `urban` or `rural`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50); every result carries its geometry. Default `20`. |

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

Returns `as_of`, the filters, the paging fields, `sectors[]` (`id`, `code`, `zone`, `municipality_code`, `part_count`, `geometry`) and `urban_perimeters[]` (`id`, `name`, `name_code`, `appraisal_type`, `part_count`, `geometry`), the perimeters on the first page only. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Geoeconomic zones and their land values

`POST /co/igac/economic-zones-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of the municipality, e.g. `17013` (Aguadas, Caldas). |
| `zone` | enum | Optional: `urban` or `rural`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50); every result carries its geometry. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/economic-zones-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "municipality_code": "17013", "zone": "urban" }'
```

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Each result carries `id`, `zone_code`, `zone`, `municipality_code`, `value_per_m2`, `value_per_hectare`, `physical_subzones[]`, `valid_from`, `part_count` and `geometry`. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Physical zones

`POST /co/igac/physical-zones-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of the municipality, e.g. `17013` (Aguadas, Caldas). |
| `zone` | enum | Optional: `urban` or `rural`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50); every result carries its geometry. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/physical-zones-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "municipality_code": "17013", "zone": "urban" }'
```

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Each result carries `id`, `zone_code`, `zone`, `municipality_code`, `topography`, `road_influence`, `public_services`, `land_use`, `land_use_norm`, `construction_typology`, `land_class`, `water_availability`, `valid_from`, `part_count` and `geometry`. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Statistics of a municipality

`POST /co/igac/municipal-statistics/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of any municipality in the country, e.g. `11001` (Bogotá) or `17013` (Aguadas). |
| `year` | integer | Optional reporting year, e.g. `2025`. Default `0`. |
| `zone` | enum | Optional: `urban` or `rural`. |

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

Returns `as_of`, the filters, `count` and `results[]`, newest year first: `id`, `municipality_code`, `municipality`, `department`, `cadastral_manager`, `year`, `zone`, `appraisal_total`, `property_count`, `built_area_m2`, `land_area_m2`, `land_area_ha`, `geographic_area_ha`, `rural_update_year`, `urban_update_year`, `rural_status` and `urban_status`.

## Who administers each municipality's cadastre

`POST /co/igac/cadastral-managers/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | Optional five-digit DANE code. |
| `query` | string | Optional words of the manager's or the municipality's name. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-100). Default `20`. |

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

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Each result carries `municipality_code`, `municipality`, `department_code`, `department`, `manager`, `manager_id`, `office`, `nit`, `contact_email` and `is_igac`.

## Address plates of a parcel

`POST /co/igac/address-plates-by-property/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `cadastral_number` | string | **Required.** The property's 30-digit número predial nacional, e.g. `170130001000000010001000000000`. Spaces, dots and hyphens are ignored. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/address-plates-by-property/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "cadastral_number": "170130001000000010001000000000" }'
```

Returns `as_of`, `cadastral_number`, `count` and `plates[]` (`id`, `text`, `parcel_code`, `zone`, `municipality_code`, `part_count`, `geometry`). `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

## Street names of a municipality

`POST /co/igac/street-names-search/v1` <a className="dataset-pill" href="/datasets">Dataset</a>

| Field | Type | Notes |
| - | - | - |
| `municipality_code` | string | **Required.** Five-digit DANE code of the municipality, e.g. `17013` (Aguadas, Caldas). |
| `query` | string | Optional words of the street's name, e.g. `calle 10`. |
| `page` | integer | 1-based page number. Default `1`. |
| `per_page` | integer | Results per page (1-50); every result carries its geometry. Default `20`. |

```bash theme={"dark"}
curl https://api.croma.run/co/igac/street-names-search/v1 \
  -H "Authorization: Bearer $CROMA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "municipality_code": "17013" }'
```

Returns `as_of`, the applied filters, `total` and `total_is_exact`, `page`, `per_page`, `total_pages`, `count` and `results[]`. Each result carries `id`, `text`, `zone`, `municipality_code`, `part_count` and `geometry`. `geometry` is GeoJSON in WGS84 (EPSG:4326), longitude first, exactly as IGAC draws it: referential in location and dimensions, it does not certify boundaries.

<Card title="Full reference" icon="code" href="/api-reference/overview">
  Schemas, all response fields, and an interactive playground.
</Card>


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