Federal Reserve (FRED) economic data — search series, historical observations, latest values, and the release calendar. Series ids are the standard FRED codes — for example `CPIAUCSL` (CPI), `UNRATE` (unemployment), or `FEDFUNDS`.

## /v1/fred/series

Search the tracked FRED series. An exact series id or verified standard alias such as `fed funds rate`, `jobless claims`, `payrolls`, `yield curve`, or `core CPI` wins. Otherwise every punctuation-independent query word must match somewhere across the id, title, or category before a sparse any-word fallback. Results are sorted by category then series id. Each row carries the series' seasonal-adjustment basis (`SA` / `NSA` — SA and NSA values of the same indicator differ materially) and `lastUpdated`, the exact UTC time Equibles last synced it. That timestamp measures pipeline freshness, not the latest observation's economic period; an empty result means only that the tracked set has no match.

**Parameters:** `query` (required) — series id, standard alias, or search words (e.g. `FEDFUNDS`, `fed funds rate`, `jobless claims`, `inflation`); `limit` (optional, default 20, max 500).

```bash
curl "https://api.equibles.com/v1/fred/series?query=CPI&limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
import requests
r = requests.get(
    "https://api.equibles.com/v1/fred/series?query=CPI&limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
```

```javascript
const res = await fetch("https://api.equibles.com/v1/fred/series?query=CPI&limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
```

```json
{
  "data": [
    {
      "seriesId": "CPIAUCSL",
      "title": "Consumer Price Index for All Urban Consumers: All Items in U.S. City Average",
      "category": "Inflation",
      "frequency": "M",
      "units": "Index 1982-1984=100",
      "seasonalAdjustment": "SA",
      "lastUpdated": "2026-07-17T19:03:23.822849Z"
    },
    {
      "seriesId": "CPILFESL",
      "title": "Consumer Price Index for All Urban Consumers: All Items Less Food and Energy in U.S. City Average",
      "category": "Inflation",
      "frequency": "M",
      "units": "Index 1982-1984=100",
      "seasonalAdjustment": "SA",
      "lastUpdated": "2026-07-17T19:03:24.224269Z"
    }
  ]
}
```

## /v1/fred/series/{seriesId}/observations

Returns the historical observations for a single FRED series, newest first, with the series metadata embedded in the response.

**Parameters:** `{seriesId}` (path, required) — FRED series id such as `CPIAUCSL`, `UNRATE`, or `GDP`; `limit` and `offset` (paging, default 100, max 500); `startDate` / `endDate` (optional, `YYYY-MM-DD` — default the last year).

```bash
curl "https://api.equibles.com/v1/fred/series/CPIAUCSL/observations?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
import requests
r = requests.get(
    "https://api.equibles.com/v1/fred/series/CPIAUCSL/observations?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
```

```javascript
const res = await fetch("https://api.equibles.com/v1/fred/series/CPIAUCSL/observations?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
```

```json
{
  "series": {
    "id": "CPIAUCSL",
    "title": "Consumer Price Index for All Urban Consumers: All Items in U.S. City Average",
    "units": "Index 1982-1984=100",
    "frequency": "M",
    "seasonalAdjustment": "SA",
    "lastUpdated": "2026-07-17T19:03:23.822849Z"
  },
  "data": [
    { "date": "2026-05-01", "value": 333.979 },
    { "date": "2026-04-01", "value": 332.407 }
  ],
  "meta": { "limit": 2, "offset": 0, "count": 2, "hasMore": true }
}
```

## /v1/fred/latest

Returns the latest observation for every tracked economic indicator series, sorted by category then series id, and optionally filtered to one category (`date` and `value` are `null` for any series without a stored value yet). `previous` and `change` carry the move from the prior observation — the direction the snapshot exists to show — and are absent for a series with only one stored observation.

**Parameters:** `category` (optional) — one of `InterestRates`, `YieldSpreads`, `CorporateBondSpreads`, `Inflation`, `Employment`, `GdpAndOutput`, `MoneySupply`, `Sentiment`, `Housing`, `ExchangeRates`, `Market`; omit to return every tracked series.

```bash
curl "https://api.equibles.com/v1/fred/latest?category=Inflation" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
import requests
r = requests.get(
    "https://api.equibles.com/v1/fred/latest?category=Inflation",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
```

```javascript
const res = await fetch("https://api.equibles.com/v1/fred/latest?category=Inflation", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
```

```json
{
  "data": [
    {
      "seriesId": "CPIAUCSL",
      "title": "Consumer Price Index for All Urban Consumers: All Items in U.S. City Average",
      "category": "Inflation",
      "units": "Index 1982-1984=100",
      "date": "2026-05-01",
      "value": 333.979,
      "previous": 332.407,
      "change": 1.572
    },
    {
      "seriesId": "CPILFESL",
      "title": "Consumer Price Index for All Urban Consumers: All Items Less Food and Energy in U.S. City Average",
      "category": "Inflation",
      "units": "Index 1982-1984=100",
      "date": "2026-05-01",
      "value": 336.121,
      "previous": 335.423,
      "change": 0.698
    }
  ]
}
```

## /v1/fred/calendar

Lists the economic release calendar — upcoming and recent US macro release dates in chronological order — with the FRED series each release updates and an importance tier per release (`High` = tier-1 scheduled market movers such as CPI, PPI, jobs, GDP, PCE, and retail sales; `Medium` = other scheduled prints; `Low` = daily rate/market levels). FOMC meetings are NOT included — FRED's release feed has no real FOMC meeting dates; use the Federal Reserve's published meeting calendar for those. The low tier emits several daily-rate rows per business day, so the default page can clip the window — check `meta.hasMore`, raise `limit`, or pass `minImportance=medium`/`high`.

**Parameters:** `startDate` / `endDate` (optional, `YYYY-MM-DD` — default today through 30 days out); `minImportance` (optional — `low`, `medium`, or `high`, default `low`); `limit` (optional, default 100, max 500).

```bash
curl "https://api.equibles.com/v1/fred/calendar?limit=2" \
  -H "Authorization: Bearer eq_your_api_key"
```

```python
import requests
r = requests.get(
    "https://api.equibles.com/v1/fred/calendar?limit=2",
    headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())
```

```javascript
const res = await fetch("https://api.equibles.com/v1/fred/calendar?limit=2", {
  headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());
```

```json
{
  "data": [
    {
      "date": "2026-07-14",
      "release": "Consumer Price Index",
      "importance": "High",
      "series": ["CPIAUCSL", "CPILFESL"]
    },
    {
      "date": "2026-07-14",
      "release": "CBOE Market Statistics",
      "importance": "Low",
      "series": ["VIXCLS"]
    }
  ],
  "meta": { "limit": 2, "offset": 0, "count": 2, "hasMore": true }
}
```