--- name: update-apis description: Makes updates to any of our /v3/api/ routes. --- Read `docs/architecture.md` → "The public API (`/v3`)" first: it holds the naming contract (camelCase parameters, snake_case output everywhere except Shapefile), the DTO layout in `app/models/api/`, and the `StreamingApiType` serialization shape. `.claude/rules/api.md` is the short version. The set of updates that are likely to be involved: 1. Updating the database queries to incorporate the new/updated data (in the `app/models/` files). The DTO definitions themselves belong in `app/models/api/*ApiModels.scala`, not in the `*Table.scala` that produces them. 2. Making sure the API is updated for every output file type it serves (JSON, CSV, GeoJSON, Shapefile, GeoPackage), with the serialization on the DTO (`toJson` / `toCsvRow`, `csvHeader` in the companion). 3. Updating the relevant documentation in the `app/views/apiDocs/` files and the matching `frontend/js/api-docs/*Preview.js`. 4. Updating or adding the functional spec in `test/controllers/api/`. A few things to keep in mind: * Combine common code where it makes sense to do so; reuse `ApiModelUtils` rather than re-rolling CSV/GeoJSON logic. * Run the queries both before and after your updates to check for any regressions. * v3 is a preview surface: breaking changes are made in place rather than minting a new version.