---
title: "Aggregate dataset stats"
method: GET
path: "/api/v1/stats"
tags: ["Discovery"]
---

# Aggregate dataset stats

`GET /api/v1/stats`

## Request

- Base URL: `https://quizbase.runriva.com`
- URL: `https://quizbase.runriva.com/api/v1/stats`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Total questions, per-language, per-source, per-category counters. Cached.

## Query parameters

- `lang` 'en' | 'pl': Display language for category names + slug labels (subcategories/tags)

## Response `200`

Stats snapshot.

- StatsResponse
  - `total` integer, required
  - `byLanguage` object, required
  - `bySource` object, required: Counts per source slug. Pre-launch may be empty (`{}`) — snapshot pipeline gap.
  - `byCategory` StatsCategoryEntry[], required
    - `slug` string, required
    - `name` string, required
    - `count` integer, required
  - `byDifficulty` StatsByDifficulty, required: Difficulty distribution across 5 LLM-calibrated levels plus `unrated` for records not yet LLM-rated.
    - `trivial` integer, required
    - `easy` integer, required
    - `medium` integer, required
    - `hard` integer, required
    - `expert` integer, required
    - `unrated` integer, required
  - `byTopic` StatsTopicEntry[], required
    - `slug` string, required
    - `label` string, required
    - `count` integer, required
  - `byTag` StatsTagEntry[], required
    - `slug` string, required
    - `label` string, required
    - `count` integer, required
  - `topRegions` object[], required: Top regions by cultural affinity. Code = ISO 3166-1 alpha-2 or cultural identifier; not a geographic filter — indicates "person from this region has higher statistical chance to answer correctly".
    - `code` string, required
    - `label` string, required
    - `count` integer, required
  - `byQualityHigh` StatsByQualityHigh, required: Counts of records eligible for the `?quality=high` filter per language.
    - `en` integer, required
    - `pl` integer, required
  - `meta` MetaStats, required
    - `generatedAt` string, required
    - `language` string, required: Language of the response content.
    - `requestId` string, uuid, required: Unique request identifier (also in `X-Request-Id` response header).

## Other responses

- `401`: Missing, malformed, invalid, or revoked API key.
- `403`: IP not allowed (per-key allowlist).
- `429`: Rate limit exceeded. See `Retry-After` header.
- `500`: Server error.

---

[API](https://skmtc.dev/runriva/apis/quizbase-api.md) · [All operations](https://skmtc.dev/runriva/apis/quizbase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/runriva/apis/quizbase-api/revisions/4c2f9be78ec9?raw)
