# BLS — Zapi reference > US Bureau of Labor Statistics: CPI, PPI, employment and the published timeseries catalogue. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ content, message, errors }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/finance/bls - Endpoint catalog: https://zpi.web.id/category/finance - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## BLS **Category:** finance · **Slug:** `bls` **Detail page:** https://zpi.web.id/api/finance/bls US Bureau of Labor Statistics: CPI, PPI, employment and the published timeseries catalogue. **Tags:** bls, inflation, cpi, employment, macro, united-states ### Latest The newest published print for a set of BLS series, one row each. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bls/latest` - **Cache TTL:** 21600s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `series` | string | query | no | BLS series ids, comma-separated, up to 25. Unregistered use is shared and the API publishes its limits as "Daily query limit 25", "Series per query limit 25" and "Years per query limit 10". Default LNS14000000 (unemployment rate). | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bls/latest?series=LNS14000000%2CCUUR0000SA0%2CCES0000000001" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bls/latest?series=LNS14000000%2CCUUR0000SA0%2CCES0000000001", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bls/latest?series=LNS14000000%2CCUUR0000SA0%2CCES0000000001", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 1, "items": [ { "date": "2026-07-01", "value": 4.1, "period": "M07", "isLatest": true, "seriesId": "LNS14000000", "footnotes": [], "periodName": "July" } ], "series": [ "LNS14000000" ], "dataset": "latest", "missing": [], "provider": "bls", "resolved": [ "LNS14000000" ] } ``` --- ### Popular Series The BLS series people ask for most, overall or within one survey. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bls/popular-series` - **Cache TTL:** 86400s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `survey` | string | query | no | Two-letter survey code from the `surveys` endpoint, e.g. CU for the Consumer Price Index. Unregistered use is shared and the API publishes its limits as "Daily query limit 25" — this listing spends one of them. Default all surveys. | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bls/popular-series?survey=CU" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bls/popular-series?survey=CU", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bls/popular-series?survey=CU", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 25, "items": [ { "seriesId": "CUUR0000SA0" }, { "seriesId": "LNS14000000" }, { "seriesId": "CES0000000001" }, { "seriesId": "CUUR0000SA0L1E" }, { "seriesId": "WPUFD49104" }, { "seriesId": "CUSR0000SA0" } ], "survey": null, "dataset": "popular-series", "provider": "bls" } ``` --- ### Surveys Every BLS survey programme and its two-letter code. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bls/surveys` - **Cache TTL:** 86400s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `query` | string | query | no | Case-insensitive substring match on the survey name or code. Unregistered use is shared and the API publishes its limits as "Daily query limit 25" — this listing spends one of them. | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bls/surveys?query=consumer%20price" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bls/surveys?query=consumer%20price", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bls/surveys?query=consumer%20price", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 70, "items": [ { "code": "AP", "name": "Consumer Price Index - Average Price Data" }, { "code": "BD", "name": "Business Employment Dynamics" }, { "code": "BG", "name": "Collective Bargaining Agreements-State and Local Government" }, { "code": "BP", "name": "Collective Bargaining Agreements-Private Sector" }, { "code": "CA", "name": "Biennial Nonfatal Case and Demographic numbers and rates: selected characteristics" }, { "code": "CB", "name": "Biennial Nonfatal Case and Demographic numbers and rates: selected characteristics" } ], "query": null, "total": 70, "dataset": "surveys", "provider": "bls" } ``` --- ### Timeseries Data Bureau of Labor Statistics observations — CPI, unemployment, payrolls, by series id. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bls/timeseries-data` - **Cache TTL:** 86400s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `series` | string | query | no | BLS series ids, comma-separated, up to 25. Unregistered use is shared and the API publishes its limits as "Daily query limit 25", "Series per query limit 25" and "Years per query limit 10". Default LNS14000000 (unemployment rate). | | `from` | number | query | no | First year. Defaults to nine years before `to`. | | `to` | number | query | no | Last year. Defaults to the current year. | | `annualAverage` | enum(true|false) | query | no | Include the annual average row (period M13) alongside the monthly prints. Default false. | | `length` | number | query | no | Observations per series, newest first (default 60, max 500) | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bls/timeseries-data?series=LNS14000000%2CCUUR0000SA0&from=2020&to=2026&annualAverage=true&length=24" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bls/timeseries-data?series=LNS14000000%2CCUUR0000SA0&from=2020&to=2026&annualAverage=true&length=24", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bls/timeseries-data?series=LNS14000000%2CCUUR0000SA0&from=2020&to=2026&annualAverage=true&length=24", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "to": 2026, "from": 2020, "count": 1, "items": [ { "count": 24, "total": 85, "seriesId": "CUUR0000SA0", "observations": [ { "date": "2026-07-01", "value": 333.918, "period": "M07", "aspects": [ { "name": "Historical reference to 12 month % change", "value": "S-Mar. 2026" }, { "name": "Relative Importance", "value": "100.000" }, { "name": "Relative Importance for previous year", "value": "100.000" }, { "name": "Median Standard Error 12 Month Change", "value": "0.09" }, { "name": "12 month % change prior to the current month", "value": "3.3" } ], "isLatest": true, "footnotes": [], "periodName": "July" }, { "date": "2026-06-01", "value": 333.952, "period": "M06", "aspects": [ { "name": "Historical reference to 12 month % change", "value": "S-Mar. 2026" }, { "name": "Relative Importance", "value": "100.000" }, { "name": "Relative Importance for previous year", "value": "100.000" }, { "name": "Median Standard Error 12 Month Change", "value": "0.09" }, { "name": "12 month % change prior to the current month", "value": "3.3" } ], "isLatest": false, "footnotes": [], "periodName": "June" }, { "date": "2026-05-01", "value": 335.123, "period": "M05", "aspects": [ { "name": "Historical reference to 12 month % change", "value": "L-Apr. 2023" }, { "name": "Relative Importance", "value": "100.000" }, { "name": "Relative Importance for previous year", "value": "100.000" }, { "name": "Median Standard Error 12 Month Change", "value": "0.09" }, { "name": "12 month % change prior to the current month", "value": "4.9" } ], "isLatest": false, "footnotes": [], "periodName": "May" }, { "date": "2026-04-01", "value": 333.02, "period": "M04", "aspects": [ { "name": "Historical reference to 12 month % change", "value": "L-May 2023" }, { "name": "Relative Importance", "value": "100.000" }, { "name": "Relative Importance for previous year", "value": "100.000" }, { "name": "Median Standard Error 12 Month Change", "value": "0.09" }, { "name": "12 month % change prior to the current month", "value": "4.0" } ], "isLatest": false, "footnotes": [], "periodName": "April" }, { "date": "2026-03-01", "value": 330.213, "period": "M03", "aspects": [ { "name": "Historical reference to 12 month % change", "value": "L-May 2024" }, { "name": "Relative Importance", "value": "100.000" }, { "name": "Relative Importance for previous year", "value": "100.000" }, { "name": "Median Standard Error 12 Month Change", "value": "0.09" }, { "name": "12 month % change prior to the current month", "value": "3.3" } ], "isLatest": false, "footnotes": [], "periodName": "March" }, { "date": "2026-02-01", "value": 326.785, "period": "M02", "aspects": [ { "name": "Historical reference to 12 month % change", "value": "-" }, { "name": "Relative Importance", "value": "100.000" }, { "name": "Relative Importance for previous year", "value": "100.000" }, { "name": "Median Standard Error 12 Month Change", "value": "0.09" }, { "name": "12 month % change prior to the current month", "value": "-" } ], "isLatest": false, "footnotes": [], "periodName": "February" } ] } ], "series": [ "CUUR0000SA0" ], "dataset": "timeseries-data", "missing": [], "provider": "bls", "resolved": [ "CUUR0000SA0" ], "annualAverage": true } ``` --- _Generated: 2026-08-20T22:22:06.495Z_