> ## 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.

# Quickstart

> From a first request to a country panel.

<Steps>
  <Step title="Authenticate">
    <CodeGroup>
      ```bash cURL theme={"dark"}
      curl -H "x-api-key: $QUANTORA_API_KEY" \
        "https://api.financialdatapi.com/coverage"
      ```

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

    See [Authentication](/authentication) for keys and errors.
  </Step>

  <Step title="See what exists">
    `/coverage` is the authoritative list of countries and indicators. For one country:

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

      ```python Python theme={"dark"}
      indicators = requests.get(
          "https://api.financialdatapi.com/countries/TUR/available-indicators",
          headers={"x-api-key": KEY},
      ).json()["data"]
      ```
    </CodeGroup>
  </Step>

  <Step title="Fetch a country panel">
    One call returns the latest reading of every indicator held for a country.

    <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"]
      ```
    </CodeGroup>

    This is the call behind a country dashboard: one request rather than one per metric.
  </Step>

  <Step title="Fetch 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,
          },
          headers={"x-api-key": KEY},
      ).json()["data"]
      ```
    </CodeGroup>
  </Step>

  <Step title="Check before you model">
    Three fields decide whether a row belongs in a live model.

    ```python theme={"dark"}
    usable = [
        row for row in response["data"]
        if row["scoringEligible"]            # official, fresh, right unit, not ceased
        and row["preferredForFactor"]        # the one row for this country and factor
        and row["collectionStatus"] is None  # the publisher has not retired it
    ]
    ```

    Skipping this is the most common way to get a wrong answer from correct data. See
    [Trust metadata](/concepts/trust-metadata).
  </Step>
</Steps>

## A worked example

```json theme={"dark"}
{
  "indicatorId": "cpi_inflation_yoy",
  "country": "TUR",
  "actual": 32.1,
  "previous": 32.6,
  "unit": "percent",
  "periodEnd": "2026-06-30",
  "attribution": "Bank for International Settlements",
  "freshnessStatus": "fresh",
  "scoringEligible": true,
  "preferredForFactor": true,
  "collectionStatus": null
}
```

## Pagination

Loop until `has_more` is false.

```python theme={"dark"}
cursor, rows = None, []
while True:
    r = requests.get(url, params={**params, "cursor": cursor}, headers=headers).json()
    rows += r["data"]
    page = r["meta"]["pagination"]
    if not page["has_more"]:
        break
    cursor = page["next_cursor"]
```

<Warning>
  Do not stop on a short page. Content filters are applied after the page is fetched, so
  a page can return fewer rows than `limit` while more remain.
</Warning>

<CardGroup cols={2}>
  <Card title="Trust metadata" icon="flag" href="/concepts/trust-metadata">
    What the eligibility flags mean.
  </Card>

  <Card title="API reference" icon="code" href="/api-reference/observations-latest">
    Every endpoint, with parameters and a playground.
  </Card>
</CardGroup>
