---
title: "Catalog of countries, year range, and variable dictionary"
method: GET
path: "/api/v1/research/pwt/catalog"
tags: ["Research"]
---

# Catalog of countries, year range, and variable dictionary

`GET /api/v1/research/pwt/catalog`

Discovery endpoint for the Penn World Table main country-year matrix. Lists every country present in the selected release (185 countries for PWT 11.0; 183 for PWT 10.01) with its first and last observation year, the panel year range, and the full list of variable names accepted by the other endpoints. Use this before calling `/country/{iso3}`, `/country/{iso3}/{variable}`, `/top`, or `/compare` to confirm the exact ISO3 codes and variable spelling. Published under CC BY 4.0 with attribution to Penn World Table (Feenstra, Inklaar & Timmer, University of Groningen).

## Query parameters

- `version` string, nullable — Release selector. `pwt1100` (default, current PWT 11.0) or `pwt1001` (legacy PWT 10.01).

## Response `200`

Catalog payload with country list, year range, variable list, and release metadata.

- EnvelopePwtCatalogPayload
  - `data` PwtCatalogPayload, required — Catalog of countries, year range, and variable dictionary.
    - `version` string, required — Selected Penn World Table release. `pwt1100` (current, default) or `pwt1001` (legacy).
    - `label` string, nullable — Human-readable release label.
    - `base_year` string, nullable — Real-GDP base year used by the release. PWT 11.0 uses 2021US$; PWT 10.01 uses 2017US$.
    - `doi` string, nullable — DataverseNL Digital Object Identifier for the release.
    - `release_time` string, nullable — DataverseNL publication timestamp of the release (ISO 8601 UTC).
    - `country_count` integer, required — Number of countries present in the panel.
    - `year_range` object, required — Minimum and maximum observation year in the panel as `{min, max}`.
    - `variable_count` integer, required — Number of data variables in the panel (excludes identifier columns countrycode, country, currency_unit, year).
    - `variables` string[], required — Whitelist of variable names accepted by the other endpoints.
    - `countries` PwtCountryEntry[], required — One entry per country with year coverage and observation count.
      - `countrycode` string, required — ISO 3166-1 alpha-3 country code as published in the Penn World Table.
      - `country` string, nullable — Country name as published in the Penn World Table.
      - `currency_unit` string, nullable — National currency unit used for national-accounts series in the panel.
      - `first_year` integer, nullable — Earliest year for which this country appears in the panel.
      - `last_year` integer, nullable — Most recent year for which this country appears in the panel.
      - `observations` integer, required — Number of country-year observations for this country in the panel.
    - `attribution` string, required — CC BY 4.0 attribution to Penn World Table (Feenstra, Inklaar & Timmer, University of Groningen).
  - `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.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

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