> ## Documentation Index
> Fetch the complete documentation index at: https://docs.quantoraresearch.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Macro indicators

> Inflation, growth, labour, rates, consumption and trade for 268 countries.

The largest dataset in the API: 258 indicators across 268 countries, drawn from central
banks, national statistical offices and international compilers.

Indicator IDs are stable across countries. `cpi_inflation_yoy` means the same thing in
Turkey as in Japan, which is what makes a cross-country query a single request rather
than a mapping exercise.

## Families

| Family           | Covers                                                |
| ---------------- | ----------------------------------------------------- |
| Inflation        | Headline and core CPI, PPI, year on year and monthly  |
| Growth           | GDP levels and growth, industrial production          |
| Labour           | Unemployment, payrolls, participation, claims, wages  |
| Interest rates   | Policy rates, sovereign yields, curve points          |
| Consumption      | Retail sales, household spending, consumer confidence |
| Trade            | Balances, exports, imports, current account           |
| Money and credit | Money supply, credit growth, reserves                 |
| Housing          | Prices, starts, permits                               |
| Sentiment        | PMIs, business and consumer surveys                   |

## A country panel

One call returns the current reading of every indicator held for a country. This is the
request behind a dashboard, and it replaces the per-metric fan-out that most people
reach for first.

<CodeGroup>
  ```bash cURL theme={"dark"}
  curl -H "x-api-key: $QUANTORA_API_KEY" \
    "https://api.financialdatapi.com/observations/latest?country=TUR"
  ```

  ```python Python theme={"dark"}
  panel = requests.get(
      "https://api.financialdatapi.com/observations/latest",
      params={"country": "TUR"},
      headers={"x-api-key": KEY},
  ).json()["data"]
  ```

  ```javascript Node theme={"dark"}
  const panel = await fetch(
    "https://api.financialdatapi.com/observations/latest?country=TUR",
    { headers: { "x-api-key": process.env.QUANTORA_API_KEY } }
  ).then((r) => r.json()).then((j) => j.data);
  ```
</CodeGroup>

<Note>
  One panel call is dramatically faster than one call per indicator, and it is what the
  endpoint is built for. From a browser it also avoids a CORS preflight per metric.
</Note>

## One series, with history

<CodeGroup>
  ```bash cURL theme={"dark"}
  curl -H "x-api-key: $QUANTORA_API_KEY" \
    "https://api.financialdatapi.com/observations?country=TUR&indicator_id=cpi_inflation_yoy&limit=120&sort=period&order=desc"
  ```

  ```python Python theme={"dark"}
  history = requests.get(
      "https://api.financialdatapi.com/observations",
      params={
          "country": "TUR",
          "indicator_id": "cpi_inflation_yoy",
          "limit": 120,
          "sort": "period",
          "order": "desc",
      },
      headers={"x-api-key": KEY},
  ).json()["data"]
  ```
</CodeGroup>

## One indicator, every country

Drop the country filter to get a cross-section: the same indicator for every country
that publishes it.

<CodeGroup>
  ```bash cURL theme={"dark"}
  curl -H "x-api-key: $QUANTORA_API_KEY" \
    "https://api.financialdatapi.com/observations/latest?indicator_id=unemployment_rate"
  ```

  ```python Python theme={"dark"}
  cross = requests.get(
      "https://api.financialdatapi.com/observations/latest",
      params={"indicator_id": "unemployment_rate"},
      headers={"x-api-key": KEY},
  ).json()["data"]
  ```
</CodeGroup>

## Things that will bite

**Units differ by country for the same indicator.** Payrolls arrive in `thousands` from
one office and `persons` from another. Read `unit` on every row and never pool across
units. See [Units and periods](/concepts/units-and-periods).

**Not every country has every indicator.** Ask rather than probe:
`/countries/{iso}/available-indicators` is authoritative, and an empty response is an
answer, not a failure.

**Some collections have ceased.** `collectionStatus: "ceased"` means the publisher
retired the series permanently. It will not resume, and carrying its last value forward
as current is the quiet way to get a wrong answer for years.

**Annual fallbacks are marked.** A country whose only coverage is `fallbackOnly` has no
live national source. The row is real World Bank data and the wrong thing to score.

<CardGroup cols={2}>
  <Card title="Trust metadata" icon="shield-check" href="/concepts/trust-metadata">
    The flags that decide whether a row belongs in a model.
  </Card>

  <Card title="Data availability" icon="table-list" href="/data/coverage">
    How deep coverage actually goes, per tier.
  </Card>
</CardGroup>
