US Inflation API — the official CPI, since 1913
What is US inflation right now? The official CPI-U from the Bureau of Labor Statistics as clean, versioned JSON — plus the famous average-price basket the press loves. Every number traces to a named BLS series.
500 req/mo · No credit card required
- Checking status…
- CPI-U since 1913
- 11 categories · 22 series
- 7 famous prices · gasoline since 1976
- Source: U.S. Bureau of Labor Statistics
- Updated on every CPI release
What you get
The full CPI report
- 11 categories: headline all-items, core, energy, food, housing, apparel, transportation, medical, recreation, education-communication, other
- Both NSA (the YoY convention the press quotes) and seasonally adjusted (the MoM convention)
- YoY / MoM rates computed from the index exactly like the BLS (1 decimal)
- Monthly headline history back to 1913, official annual averages included
Famous average prices
- Eggs (per dozen), gasoline (per gallon), milk, bread, ground beef, coffee, electricity
- US city average, in dollars, gasoline back to 1976
- Explicit unit on every data point
- Auto-refreshed on each monthly CPI release (8:30 AM ET)
Endpoints
All paths relative to your gateway base URL. Auth: X-Api-Key header. Every 200 ships ETag, Cache-Control and RateLimit-* headers.
| Method | Path | Summary |
|---|---|---|
| GET | /inflation/latest Free+ | Latest CPI of all 11 categories (the report table). ?adjusted=true for SA. |
| GET | /inflation/{category} Free+ | Latest CPI of a single category. |
| GET | /inflation/{category}/history Free+ | Monthly CPI history of a category (headline since 1913). Keyset pagination via meta.next_end. |
| GET | /inflation/{category}/annual Free+ | Official annual average CPI (headline since 1913; limit=150 = whole series in one call). |
| GET | /prices Free+ | The famous basket — latest US average price of each item. |
| GET | /prices/{item}/history Free+ | Monthly price history of one item (gasoline since 1976). |
Free+ = included from the free plan up. Every endpoint and the full history are on every plan — paid tiers raise your monthly volume (500 → 50,000 → 500,000 → 5,000,000 req/mo). Compare plans.
Endpoint reference
Parameters, response fields, and real sample responses — including the error shapes, so you can code the unhappy path without guessing. Straight from the OpenAPI spec.
GET /inflation/latest — latest CPI of all 11 categories
Query parameters
| Param | Type | Required | Description |
|---|---|---|---|
adjusted | enum true|false | no | false (default) = NSA, the YoY convention; true = seasonally adjusted, the MoM convention. |
Response fields (data[])
| Field | Type | Description |
|---|---|---|
category | string | One of the 11 category ids (all-items, core, energy, food, housing, apparel, transportation, medical, recreation, education-communication, other). |
adjusted | boolean | true = seasonally adjusted (SA), false = NSA. |
period | string | Month, YYYY-MM. |
index | number | CPI-U index level (1982-84=100 base for most series). |
yoy_pct | number · null | Year-over-year change, 1 decimal — null when the mirror month is missing (series starts; Oct 2025). |
mom_pct | number · null | Month-over-month change, 1 decimal, or null. |
source | "BLS" | Per-point attribution. |
Sample response — 200
{
"data": [
{ "category": "all-items", "adjusted": false, "period": "2026-06",
"index": 333.952, "yoy_pct": 3.5, "mom_pct": -0.3, "source": "BLS" },
{ "category": "core", "adjusted": false, "period": "2026-06",
"index": 336.882, "yoy_pct": 2.7, "mom_pct": 0, "source": "BLS" }
],
"meta": { "source": "U.S. Bureau of Labor Statistics", "area": "us" }
}
Sample response — 400 VALIDATION_ERROR
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid query parameters",
"details": [{ "param": "adjusted", "message": "Invalid option: expected one of \"true\"|\"false\"" }]
}
}
GET /inflation/{category} — latest CPI of one category
Parameters
| Param | In | Type | Description |
|---|---|---|---|
category | path | enum | Case-insensitive category id (see the 11 ids above). |
adjusted | query | enum true|false | Default false (NSA). |
Response
Same CpiPoint fields as above — data is a single object, not an array.
Sample response — 404 CATEGORY_NOT_FOUND
{
"error": {
"code": "CATEGORY_NOT_FOUND",
"message": "Unknown category. Available categories: all-items, core, energy, food, housing, apparel, transportation, medical, recreation, education-communication, other"
}
}
GET /inflation/{category}/history — monthly history, headline since 1913
Parameters
| Param | In | Type | Description |
|---|---|---|---|
category | path | enum | Category id. |
start | query | YYYY-MM | Inclusive start month. |
end | query | YYYY-MM | Inclusive end month — pass meta.next_end here to get the next page. |
limit | query | int 1–100 | Points per page (default 30). |
adjusted | query | enum | Default false. |
Pagination
Keyset: points come most recent first; meta.count is the page size and
meta.next_end is the end value for the next page — null on the last one.
October 2025 is absent: the BLS never published it (federal shutdown).
Sample response — 200 (paginated)
{
"data": [
{ "category": "all-items", "adjusted": false, "period": "2026-06",
"index": 333.952, "yoy_pct": 3.5, "mom_pct": -0.3, "source": "BLS" }
],
"meta": { "source": "U.S. Bureau of Labor Statistics", "area": "us",
"count": 1, "next_end": "2026-05" }
}
GET /inflation/{category}/annual — official annual averages (M13)
Parameters
| Param | In | Type | Description |
|---|---|---|---|
category | path | enum | Category id. Annual averages are published NSA only. |
start | query | YYYY | Inclusive start year. |
end | query | YYYY | Inclusive end year (keyset pagination via meta.next_end). |
limit | query | int 1–150 | Default 50. limit=150 = the whole headline series (1913+) in one call. |
Sample response — 200
{
"data": [
{ "category": "all-items", "period": "2025", "index": 321.348, "source": "BLS" },
{ "category": "all-items", "period": "2024", "index": 313.689, "source": "BLS" }
],
"meta": { "source": "U.S. Bureau of Labor Statistics", "area": "us",
"count": 2, "next_end": "2023" }
}
GET /prices — the famous basket, latest price of each item
Response fields (data[])
| Field | Type | Description |
|---|---|---|
item | string | eggs, gasoline, milk, bread, ground-beef, coffee, electricity. |
period | string | Month, YYYY-MM. |
price | number | US average price in dollars (3 decimals in the source). |
unit | string | Explicit market unit: USD per dozen, USD per gallon, USD per lb, USD per kWh. |
source | "BLS" | Per-point attribution. |
Sample response — 200
{
"data": [
{ "item": "eggs", "period": "2026-06", "price": 2.141,
"unit": "USD per dozen", "source": "BLS" },
{ "item": "gasoline", "period": "2026-06", "price": 3.111,
"unit": "USD per gallon", "source": "BLS" }
],
"meta": { "source": "U.S. Bureau of Labor Statistics", "area": "us" }
}
GET /prices/{item}/history — monthly price history of one item
Parameters
| Param | In | Type | Description |
|---|---|---|---|
item | path | enum | Case-insensitive item id (the 7 above). |
start / end | query | YYYY-MM | Inclusive range; keyset pagination via meta.next_end. |
limit | query | int 1–100 | Default 30. |
Series depth
Gasoline 1976+ · electricity 1978-11+ · eggs / bread / coffee 1980+ · ground-beef 1984+ · milk 1995-07+. Some months are absent in the official source (collection gaps; October 2025 for all items except gasoline).
Sample response — 404 ITEM_NOT_FOUND
{
"error": {
"code": "ITEM_NOT_FOUND",
"message": "Unknown item. Available items: eggs, gasoline, milk, bread, ground-beef, coffee, electricity"
}
}
Errors, auth & limits
One uniform error contract everywhere:
{ "error": { "code", "message", "details?" } } with stable,
machine-readable codes.
| Status | Code | When |
|---|---|---|
| 401 | UNAUTHORIZED | Missing X-Api-Key header, or invalid/revoked key. |
| 400 | VALIDATION_ERROR | Bad query/path parameters — details[] lists each offending param. |
| 404 | CATEGORY_NOT_FOUND · ITEM_NOT_FOUND · NOT_FOUND | Unknown category/item, or unknown route. |
| 429 | RATE_LIMITED | Per-minute limit of your plan exceeded — check Retry-After. |
| 429 | QUOTA_EXCEEDED | Monthly cap reached. Nothing is billed on top — resets on the 1st (UTC). |
| 502 | UPSTREAM_ERROR | The origin API was unreachable — retry shortly. |
| 500 | INTERNAL_ERROR | Unexpected error on our side. |
Sample — 401
{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing X-Api-Key header. Get a free key at https://synergicapis.com/signup.html"
}
}
Sample — 429 QUOTA_EXCEEDED
{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "Monthly quota exhausted (500 requests on the free plan). Resets on the 1st (UTC) — or upgrade at https://synergicapis.com/#pricing"
}
}
Every 200 (and monthly 429) carries RateLimit-Limit /
RateLimit-Remaining / RateLimit-Reset describing your
monthly quota; a per-minute 429 describes the minute window and adds
Retry-After. Successful responses also ship ETag —
send If-None-Match and a 304 costs you nothing new.
Bulk data (CSV)
Want the whole series as a file? Download it — free, attribution appreciated. For live, always-fresh data use the API.
License: underlying data is U.S. government public domain (BLS); these CSV compilations are free to use with attribution to their official source. Files are regenerated on CPI releases — the API is always the freshest.
Data provenance
Every number traces to a named official series — never scraped, never estimated.
CPI categories come from the BLS Consumer Price Index for All Urban
Consumers (CPI-U), U.S. city average index family: headline
CUUR0000SA0
(NSA) and CUSR0000SA0 (seasonally adjusted), core
CUUR0000SA0L1E, plus the energy, food, housing, apparel,
transportation, medical, recreation, education & communication and other series —
22 series in total, each response labeled with its category and adjustment.
Famous prices are the BLS Average Price series: eggs
APU0000708111,
gasoline APU000074714, plus milk, bread, ground beef, coffee and
electricity — with the exact unit stated on every data point.
U.S. government data is public domain; every API response cites its source in
meta. Months the BLS never published are served as
null — never estimated. This product is not affiliated with or
endorsed by the Bureau of Labor Statistics.
Example
# Latest headline + core + 9 more categories, one call curl -H "X-Api-Key: sk_live_YOUR_KEY" \ https://api.synergicapis.com/inflation/latest
import requests
r = requests.get(
"https://api.synergicapis.com/inflation/latest",
headers={"X-Api-Key": "sk_live_YOUR_KEY"},
)
r.raise_for_status()
for point in r.json()["data"]:
print(point["category"], point["period"], point["yoy_pct"])
const res = await fetch("https://api.synergicapis.com/inflation/latest", { headers: { "X-Api-Key": "sk_live_YOUR_KEY" }, }); const { data } = await res.json(); console.log(data.find((p) => p.category === "all-items").yoy_pct);
// claude_desktop_config.json / ~/.cursor/mcp.json { "mcpServers": { "synergic-apis": { "command": "npx", "args": ["-y", "@synergic-apis/mcp"], "env": { "SYNERGIC_API_KEY": "YOUR_API_KEY" } } } }
Then just ask your agent “What is US inflation right now?” — setup guide on the MCP page.
{
"data": [
{
"category": "all-items",
"adjusted": false,
"period": "2026-06",
"index": 333.952,
"yoy_pct": 3.5,
"mom_pct": -0.3,
"source": "BLS"
},
{
"category": "core",
"adjusted": false,
"period": "2026-06",
"index": 336.882,
"yoy_pct": 2.7,
"mom_pct": 0,
"source": "BLS"
}
],
"meta": { "source": "U.S. Bureau of Labor Statistics", "area": "us" }
}
Live demo
Real request against the production API — no key needed here (demo endpoint, 5 requests/minute).
Press the button to fetch the latest official CPI figures.