---
title: "Single question by id"
method: GET
path: "/api/v1/questions/{id}"
tags: ["Questions"]
---

# Single question by id

`GET /api/v1/questions/{id}`

## Request

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

Deep link / shareable URL / moderation review.

## Path parameters

- `id` string, uuid, required: UUID v7 of the question.

## Query parameters

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

## Response `200`

Question.

- QuestionByIdResponse
  - `data` Question, required
    - `id` string, uuid, required
    - `text` string, required
    - `correctAnswer` string, required
    - `incorrectAnswers` string[], required
    - `type` 'multiple' | 'boolean' | 'text_input', required
    - `difficulty` 'trivial' | 'easy' | 'medium' | 'hard' | 'expert' | 'null', nullable, required
    - `language` string, required
    - `category` CategoryRef, required
      - `id` integer, required
      - `slug` string, required
      - `name` string, required
    - `subcategories` SlugLabel[], required: Localized `{slug, label}` per `?lang=`.
      - `slug` string, required
      - `label` string, required
    - `tags` SlugLabel[], required: Localized `{slug, label}` per `?lang=`.
      - `slug` string, required
      - `label` string, required
    - `regions` string[], required: Cultural affinity codes — residents/members of these countries or cultural groups are statistically more likely to know the answer. Lowercase ISO 3166-1 alpha-2 (`us`, `pl`, `gb`) + cultural codes (`jewish`, `christian-catholic`, `islam`). Empty array = universally accessible. Discover the full catalog via `GET /api/v1/regions`.
    - `attribution` Attribution, required
      - `author` string, nullable, required: Upstream contributor or community.
      - `source` string, required: Source slug.
      - `license` string, required: Effective applied license (SPDX).
      - `licenseVersion` string, nullable, required: Original upstream license version.
      - `licenseUrl` string, nullable, required
      - `sourceId` string, required: Original upstream id.
      - `url` string, nullable, required: Link to upstream record.
      - `modifications` string[], required: Our modifications per BY-SA § 3(a)(1)(B). e.g. `translated_pl`, `refined_text`, `quizified`.
      - `lastModified` string, required: ISO timestamp of our last modification.
    - `quality` 'high' | 'needs_review': Quality flag. Present only when the client requested non-default content via `?quality=all` (REST) or `quality: "all"` (MCP) — and always on `/api/v1/questions/{id}` deep-link responses. For default `?quality=high` all returned questions are by definition `high`, so the field is omitted to avoid redundancy. `needs_review` = flagged for moderation review (low-quality distractors, trivial answer-in-question patterns).
    - `translationOf` string, uuid, nullable, required: Direct parent (usually English source) when this is a translation.
    - `rootQuestionId` string, uuid, nullable, required: Canonical source across translation chains.
    - `translator` 'machine' | 'human' | 'native' | 'null', nullable, required: Translation provenance. `null` for original-language records.
    - `explanation` string, nullable, required: Optional explanation of the correct answer.
    - `extensions` object, required: Forward-compatible container for stable per-source extras. Today exposes `subcategories: string[]` (also surfaced as the typed top-level `subcategories` field). Future stable fields land here additively.
    - `createdAt` string, required
    - `updatedAt` string, required
  - `meta` MetaBasic, 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).
- `404`: Question not found, moderated, de-duplicated, or removed upstream.
- `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)
