---
title: "Series For Geography"
method: GET
path: "/api/v1/geographies/{geography_id}/series"
tags: ["geographies"]
---

# Series For Geography

`GET /api/v1/geographies/{geography_id}/series`

## Request

- Base URL: `https://statsmapped.com`
- URL: `https://statsmapped.com/api/v1/geographies/{geography_id}/series`
- Auth: none declared

Every series that can say something about this area, split by whether it can
honestly be attributed to it.

`stat_key`: restrict to one stat (e.g. 'crime', 'sale_price'); omit for every
dataset this area has. See /api/v1/stats for valid keys. Plain default (not
`Query(...)`) deliberately -- this function is also called directly as a plain
Python function (county_page()), and a `Query(...)` object survives unresolved
as the literal default in that path, not as `None` -- confirmed live: it broke
county_page() with `psycopg2.ProgrammingError: can't adapt type 'Query'` the
first time this was written the other way. FastAPI still exposes a bare
`str | None = None` non-path parameter as an optional query param on its own.

`partial` values go in a SEPARATE ARRAY, not merely flagged. A frontend cannot
accidentally render them by ignoring a boolean — the separation is structural.
See architecture-design.md 4.8.

api-product-consultant, 2026-08-30: an unfiltered call for one populous county
(Dublin, every dataset it has any series for) measured ~230,000 characters --
an unreasonable payload for a caller that wants one dataset, human or AI agent
alike. `stat_key` is additive and optional -- omitted, behaviour is byte-for-
byte what it always was (confirmed: this function's own internal caller,
county_page(), calls it positionally with no stat_key and is unaffected).
Filters in SQL, not in Python after the fact -- the point is to never fetch the
other stats' rows at all, not just to hide them from the response.

## Path parameters

- `geography_id` string, required

## Query parameters

- `stat_key` string, nullable

## Response `200`

Successful Response

- SeriesForGeographyResponse
  - `country` string
  - `geography` GeographyRef, required
    - `country` string
    - `id` string, required
    - `level` string, required
    - `name` string, required
    - `identifiers` object, nullable
  - `available` SeriesForGeographyEntry[], required
    - `country` string
    - `series_key` string, required
    - `display_name` string, required
    - `stat_key` string, nullable
    - `unit` string, nullable
    - `periodicity` string, nullable
    - `publisher` string, nullable
    - `license` string, nullable
    - `licence_class` string, nullable
    - `licence_restrictions` string[]
    - `attribution` string, nullable
    - `geo_match` string, required
    - `geo_level` string, nullable
    - `geo_name` string, nullable
    - `relation_note` string, nullable
    - `latest_period` string, nullable
    - `latest_value` number, nullable
    - `year_on_year_pct` number, nullable
    - `data_refreshed_at` string, nullable
    - `caveats` Caveat[]
      - `country` string
      - `kind` string, required
      - `severity` string, required
      - `label` string, required
      - `body` string, required
      - `source_url` string, nullable
      - `origin` string, required
      - `interpretive` boolean
      - `stats` CaveatStats
        - `country` string
        - `median` number, required
        - `n` integer, required
        - `modified_z` number, required
        - `peer_basis` string, required
    - `group_name` string, nullable
    - `facets` SeriesFacet[], nullable
      - `country` string
      - `series_key` string, nullable
      - `label` string, nullable
      - `latest_value` number, nullable
      - `year_on_year_pct` number, nullable
      - `unit` string, nullable
    - `summary` string, nullable
    - `total_series_key` string, nullable
  - `not_county_comparable` SeriesForGeographyEntry[], required
    - `country` string
    - `series_key` string, required
    - `display_name` string, required
    - `stat_key` string, nullable
    - `unit` string, nullable
    - `periodicity` string, nullable
    - `publisher` string, nullable
    - `license` string, nullable
    - `licence_class` string, nullable
    - `licence_restrictions` string[]
    - `attribution` string, nullable
    - `geo_match` string, required
    - `geo_level` string, nullable
    - `geo_name` string, nullable
    - `relation_note` string, nullable
    - `latest_period` string, nullable
    - `latest_value` number, nullable
    - `year_on_year_pct` number, nullable
    - `data_refreshed_at` string, nullable
    - `caveats` Caveat[]
      - `country` string
      - `kind` string, required
      - `severity` string, required
      - `label` string, required
      - `body` string, required
      - `source_url` string, nullable
      - `origin` string, required
      - `interpretive` boolean
      - `stats` CaveatStats
        - `country` string
        - `median` number, required
        - `n` integer, required
        - `modified_z` number, required
        - `peer_basis` string, required
    - `group_name` string, nullable
    - `facets` SeriesFacet[], nullable
      - `country` string
      - `series_key` string, nullable
      - `label` string, nullable
      - `latest_value` number, nullable
      - `year_on_year_pct` number, nullable
      - `unit` string, nullable
    - `summary` string, nullable
    - `total_series_key` string, nullable
  - `national` SeriesForGeographyEntry[], required
    - `country` string
    - `series_key` string, required
    - `display_name` string, required
    - `stat_key` string, nullable
    - `unit` string, nullable
    - `periodicity` string, nullable
    - `publisher` string, nullable
    - `license` string, nullable
    - `licence_class` string, nullable
    - `licence_restrictions` string[]
    - `attribution` string, nullable
    - `geo_match` string, required
    - `geo_level` string, nullable
    - `geo_name` string, nullable
    - `relation_note` string, nullable
    - `latest_period` string, nullable
    - `latest_value` number, nullable
    - `year_on_year_pct` number, nullable
    - `data_refreshed_at` string, nullable
    - `caveats` Caveat[]
      - `country` string
      - `kind` string, required
      - `severity` string, required
      - `label` string, required
      - `body` string, required
      - `source_url` string, nullable
      - `origin` string, required
      - `interpretive` boolean
      - `stats` CaveatStats
        - `country` string
        - `median` number, required
        - `n` integer, required
        - `modified_z` number, required
        - `peer_basis` string, required
    - `group_name` string, nullable
    - `facets` SeriesFacet[], nullable
      - `country` string
      - `series_key` string, nullable
      - `label` string, nullable
      - `latest_value` number, nullable
      - `year_on_year_pct` number, nullable
      - `unit` string, nullable
    - `summary` string, nullable
    - `total_series_key` string, nullable

## Other responses

- `400`: Bad request
- `401`: Missing or invalid credentials
- `403`: Not authorized for this request
- `404`: Not found
- `422`: Validation error
- `429`: Rate limited

---

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