---
title: "Feature detail batch (lazy-loaded)"
method: POST
path: "/features/details/batch"
tags: ["features"]
---

# Feature detail batch (lazy-loaded)

`POST /features/details/batch`

Fan-out variant of `/features/{id}/details` for callers that need to
resolve many features at once. POST is used so the id list isn't
constrained by URL length.

Per-id caching is identical to the single endpoint (Redis-backed
keyed on the id), so a batch that's a superset of previously
requested ids costs nothing extra for the overlap. Partial success
is preserved: a single failed upstream fetch sets `cache: "error"`
with an `error` string on that entry without failing the whole
request — or `cache: "error-cached"` when a recent failure was replayed
from the negative cache instead of calling the source again. Missing
ids land in the response with `not_found: true`.

Bounded by the plan's `max_batch_size`.

## Request body

- object
  - `ids` string[], required

## Response `200`

Per-id detail results (one entry per requested id, in order)

## Other responses

- `400` — Invalid JSON body or empty ids array
- `403` — Batch exceeds plan's max_batch_size

---

[API](https://skmtc.net/road511/apis/road511-traffic-api.md) · [All operations](https://skmtc.net/road511/apis/road511-traffic-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/road511/road511-traffic-api/versions/39a088b9c155/schema)
