---
title: "Per-category travel times at many points"
method: POST
path: "/v1/point/summary"
tags: ["batch"]
---

# Per-category travel times at many points

`POST /v1/point/summary`

## Request

- Base URL: `https://api.close.city`
- URL: `https://api.close.city/v1/point/summary`
- Auth: HTTP bearer

Fastest travel time to each destination category by mode, from the census
block containing each of many lat/lon points. This is the batch form of
`GET /v1/point/summary`, a POST on the same path. Each row carries its
`origin_lat` and `origin_lon`, and `origins` maps each point to its resolved
block with population and land area.

## Request body

- PointSummaryBatch
  - `mode` string[], nullable
  - `origins` PointOrigin[], required: Origin lat/lon points (1-250)
    - `lat` number, required
    - `lon` number, required
  - `type` integer[], nullable

## Response `200`

Successful Response

- BatchPointSummaryResponse: POST /v1/point/summary (routers.batch.point_summary_batch)
  - `errors` OriginError[], required
    - `detail` string, required
    - `type` string, required: Error slug: block-not-found, no-block-data, point-not-covered, or poi-not-found
  - `origins` PointSummaryMeta[], required
    - `land_area_m2` number, nullable
    - `origin_lat` number, required
    - `origin_lon` number, required
    - `population` integer, nullable
    - `resolved_block` string, required: GEOID of the block containing the point
  - `results` BatchPointCategoryTime[], required
    - `dest_type_id` integer, required
    - `mode` string, required: Travel mode label, e.g. 'walk'
    - `origin_lat` number, required
    - `origin_lon` number, required
    - `travel_time` number, required: Minutes, capped at 30, 1 decimal
  - `truncated` PointOriginKey[], required
    - `origin_lat` number, required
    - `origin_lon` number, required
  - `truncated_reason` string, nullable: 'insufficient-balance' or 'row-budget'; null if nothing was truncated

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