---
title: "Blocks within a polygon or radius"
method: POST
path: "/v1/blocks/query"
tags: ["areal"]
---

# Blocks within a polygon or radius

`POST /v1/blocks/query`

## Request

- Base URL: `https://api.close.city`
- URL: `https://api.close.city/v1/blocks/query`
- Auth: HTTP bearer

Per-block travel times for every block intersecting a GeoJSON polygon, or
a radius around a point. One row per (block, category, mode).

## Request body

- BlocksQuery
  - `center` Center
    - `lat` number, required
    - `lon` number, required
  - `cursor` string, nullable
  - `include_population` boolean
  - `limit` integer, nullable
  - `mode` string[], nullable
  - `polygon` object, nullable: GeoJSON Polygon or MultiPolygon geometry
  - `radius_m` number, nullable
  - `type` integer[], nullable

## Response `200`

Successful Response

- ArealBlocksResponse: POST /v1/blocks/query and GET /v1/places/{geoid}/blocks (routers.spatial._paged)
  - `next_cursor` string, nullable
  - `results` ArealBlockResult[], required
    - `dest_type_id` integer, required
    - `geoid` string, required
    - `mode_id` integer, required: Numeric mode id (see /v1/meta/modes)
    - `population` integer, nullable: Present only when include_population=true
    - `travel_time` number, required: Minutes, 1 decimal

## Other responses

- `400`: Invalid request (e.g. invalid-parameters, invalid-cursor, invalid-bbox, missing-location, missing-area, invalid-geometry, polygon-too-complex, missing-origins, too-many-origins)
- `401`: Missing or invalid API key (missing-key, invalid-key)
- `403`: Key disabled (account-disabled)
- `429`: Rate limited or token balance exhausted (rate-limited, tokens-exhausted); sets Retry-After
- `503`: Backend temporarily unavailable (debit-unavailable, store-unavailable); may set Retry-After

---

[API](https://skmtc.dev/close-city/apis/close-api.md) · [All operations](https://skmtc.dev/close-city/apis/close-api/llms.txt) · [OpenAPI document](https://skmtc.dev/close-city/apis/close-api/revisions/a70e7c778d65?raw)
