---
title: "GET /metrocuadrado/locations"
method: GET
path: "/metrocuadrado/locations"
tags: ["Metrocuadrado"]
---

# GET /metrocuadrado/locations

`GET /metrocuadrado/locations`

## Request

- Base URL: `https://scrappa.co/api`
- URL: `https://scrappa.co/api/metrocuadrado/locations`
- Auth: API key in header `X-API-KEY`

## Query parameters

- `q` string, required
- `mode` 'autocomplete' | 'fanout' | 'null', nullable
- `level` 'zones' | 'cities' | 'neighborhoods' | 'null', nullable

## Response `200`

- union
  - string
  - object
    - `success` boolean, required
    - `count` integer, required
    - `values` string[], required
    - `error` object, required
      - `code` string, required
      - `message` 'The source answered this query with a web page instead of data, which means the term was not accepted. Try a shorter place name.' | 'Metrocuadrado is temporarily unavailable. Please retry.', required
    - `meta` object, required
      - `endpoint_family` 'locations', required
      - `billable` boolean, required
      - `retryable` boolean, required
      - `attempts` integer, required
      - `last_status` integer, nullable, required
  - object
    - `success` boolean, required
    - `mode` 'fanout', required
    - `query` string, required
    - `level` string, required
    - `count` integer, required
    - `values` unknown, required
    - `is_complete_enumeration` boolean, required: This vocabulary is autocomplete, not an enumeration: it is capped and the slice returned is alphabetical, not scoped to the term. Saying so is the whole point — a client that treated it as a complete partition would enumerate a fraction of a city and read the short list as the whole, which is the failure mode the search endpoint's exceeds_offset_ceiling exists to prevent.
    - `available_levels` unknown[], required
      - unknown
    - `did_you_mean` unknown, required
    - `meta` object, required
      - `endpoint_family` 'locations', required
      - `fanout_axes` unknown[], required: The four-axis contract stands: every one of these is a real filter on /search. What this endpoint cannot do is enumerate them, so each axis carries where it is actually supplied.
        - unknown
      - `fanout_axis_sources` object, required
        - `business_type` 'client-side value; list them at /api/metrocuadrado/types?type=deal', required
        - `property_type` 'client-side value; list them at /api/metrocuadrado/types?type=property', required
        - `city` 'token from this endpoint (level=cities)', required
        - `neighborhood` 'a working filter on /search by bare slug, but its partition is NOT available from this endpoint - enumerate with the radius grid instead', required
      - `note` 'Use the token in `location` for the city and neighborhood parameters of /search. URL fragments are a different vocabulary and are not accepted there.', required
      - `partition_method` 'To split a large city, subdivide by radius instead: pass latitude, longitude and distance to /search. Inside a radius every returned listing is geo-referenced (measured 100% at 2, 3, 5 and 8 km), so a radius grid cannot silently drop rows it can see, which makes it far better than this vocabulary. Start the grid at 3 km or tighter: at 5 km a large cell already exceeds the row ceiling again. It is still not an exhaustive sweep: listings carrying no coordinates are unreachable by radius (roughly 2 percent of sale inventory and 6 percent of rent inventory carries none), so no partition here is provably complete. Do not build one from this vocabulary.', required
  - object
    - `success` boolean, required
    - `mode` 'autocomplete', required
    - `query` string, required
    - `count` number, required
    - `levels` string, required
    - `meta` object, required
      - `endpoint_family` 'locations', required
  - object
    - `success` boolean, required
    - `mode` 'autocomplete', required
    - `query` string, required
    - `count` integer, required
    - `values` string[], required
    - `error` object, required
      - `code` 'no_locations', required
      - `message` 'The source returned no location for this term.', required
    - `meta` object, required
      - `endpoint_family` 'locations', required
      - `billable` boolean, required
      - `retryable` boolean, required

## Other responses

- `401`: Unauthorized - API key is missing or invalid
- `404`: The source knows no location for this term. Not charged.
- `422`: The term is missing, is a URL fragment in fanout mode, or an unknown parameter was sent. Nothing is charged.
- `503`: The source was unreachable. Not charged, safe to retry.

---

[API](https://skmtc.dev/scrappa/apis/scrappa-api-documentation.md) · [All operations](https://skmtc.dev/scrappa/apis/scrappa-api-documentation/llms.txt) · [OpenAPI document](https://skmtc.dev/scrappa/apis/scrappa-api-documentation/revisions/1e1aa78ff103?raw)
