---
title: "Categories and data types a programme publishes"
method: GET
path: "/api/v1/census/indicators/{program}/codes"
tags: ["Statistical Agencies"]
---

# Categories and data types a programme publishes

`GET /api/v1/census/indicators/{program}/codes`

The categories (industries, construction types, tax types, ...) and data types (sales, inventories, new orders, percent changes, error measures, ...) of one programme, MEASURED from the latest published year, with the adjustments and geographies each category was published with. Labels are curated where the programme documentation is unambiguous; NAICS codes carry the official NAICS title; other codes are served unlabelled.

## Path parameters

- `program` string, required — Programme code from /census/indicators (marts, resconst, bfs, qtax, ...).

## Query parameters

- `geo` string — US (every programme); NE, MW, SO, WE for resconst, ressales and hv; a state postal code for qtax.

## Response `200`

Categories with their data types, and data types, of one programme.

- EnvelopeCensusIndicatorsProgramCodesData
  - `data` CensusIndicatorsProgramCodesData, required
    - `program` string, nullable — Programme code.
    - `title` string, nullable — Programme title.
    - `frequency` string, nullable — monthly or quarterly.
    - `geo` string, nullable — Geography the codes were measured at: US, a region or a state postal code.
    - `as_of` string, nullable — Latest published period of the year the codes were measured from.
    - `count` union — Number of items in this result set.
      - integer
      - number
    - `categories` CensusIndicatorsCategory[], nullable — Categories published in the measured year, in code order.
      - `code` string, nullable — Category code as the programme spells it (a NAICS code, a construction or tax type, an aggregate such as 44X72).
      - `data_types` string[], nullable — Data type codes this category was published with in the measured year, sorted.
      - `seasonally_adjusted` boolean[], nullable — The adjustments the category was published with: [true], [false] or both.
      - `geos` string[], nullable — Geographies the category was published at in the measured pull (the requested one).
      - `label` string, nullable — Curated label, or the official NAICS title for a NAICS code; null when the documentation names no label (never a guess).
    - `data_types` CensusIndicatorsDataType[], nullable — Data types published in the measured year, in code order.
      - `code` string, nullable — Data type code (SM sales, IM inventories, MPCSM month-over-month percent change, E_SM its error measure, ...).
      - `categories` union — How many categories publish this data type in the measured year.
        - integer
        - number
      - `error_measure` boolean, nullable — True when every row of this data type is an error measure (upstream error_data=yes); these carry the E_ prefix.
      - `label` string, nullable — Curated label; E_ and MPC prefixes and the qtax 4QE suffix derive from the base label; null when undocumented.
    - `dataset` string, nullable — Census dataset path the codes were measured from.
    - `source` string, nullable — Upstream data source identifier.
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `502` — The upstream source answered with an error or a malformed body. `detail` carries the source, the upstream status and a retry hint.
- `503` — Upstream unreachable (typed `detail` object with source and retry hint) or the legacy blanket unavailability (string `detail`).
- `504` — The upstream source did not answer within the client deadline.

## Changes

- **2026-08-29** `18b96293341c` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/sugra/apis/sugra-api/changes/api/v1/census/indicators/:program/codes/get.md)

---

[API](https://skmtc.dev/sugra/apis/sugra-api.md) · [All operations](https://skmtc.dev/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sugra/sugra-api/revisions/87582f2e0110/schema)
