Quickstart#
From signup to your first response in five steps. Total time: about 5 minutes.
1. Sign up#
Create a free account — no credit card required. The Free tier gives you the full API: every endpoint, all 50k+ questions, all 20+ languages, 500 requests/day, 10 burst/10s.
2. Generate your API key#
In the dashboard, open API keys and click Create key. Pick qb_pk_* for browser/mobile code (CORS-enabled) or qb_sk_* for server-side. Both share the same per-user quota.

3. Make your first request#
Pick your language. The key placeholder below is auto-filled once you sign in.
curl -H "X-API-Key: qb_pk_YOUR_KEY_HERE" \
"https://quizbase.runriva.com/api/v1/questions/random?amount=1&lang=pl"
4. Inspect the response#
{
"data": [
{
"id": "0193f8b5-7e5c-7c24-9f7a-3d1e1c2a5f10",
"text": "Jaka jest stolica Polski?",
"correctAnswer": "Warszawa",
"incorrectAnswers": ["Kraków", "Gdańsk", "Wrocław"],
"type": "multiple",
"difficulty": "easy",
"language": "pl",
"category": { "id": 14, "slug": "geography", "name": "Geografia" },
"subcategories": [
{ "slug": "european-capitals", "label": "Stolice europejskie" }
],
"tags": [
{ "slug": "capitals", "label": "Stolice" },
{ "slug": "europe", "label": "Europa" }
],
"regions": ["pl"],
"attribution": {
"author": "community",
"source": "opentriviaqa",
"license": "CC-BY-SA-4.0",
"licenseVersion": "4.0",
"licenseUrl": "https://creativecommons.org/licenses/by-sa/4.0/",
"sourceId": "otq:12345",
"url": "https://opentriviaqa.example/q/12345",
"modifications": ["translated_pl"],
"lastModified": "2026-04-24T10:00:00Z"
},
"translationOf": "0193f8b5-7e5c-7c24-9f7a-000000000001",
"rootQuestionId": "0193f8b5-7e5c-7c24-9f7a-000000000001",
"translator": "machine",
"explanation": null,
"extensions": {
"subcategories": ["european-capitals"]
},
"createdAt": "2026-04-24T10:00:00Z",
"updatedAt": "2026-04-24T10:00:00Z"
}
],
"meta": { "count": 1, "language": "pl", "requestId": "req_01HZABC..." }
}Every question ships with attribution — license, author, source. Keep these in your cache layer; the CC-BY-SA chain requires them.
Use the TypeScript SDK#
If you’re on Node, Deno, Bun, or in a browser — skip the raw fetch and install the official typed client:
pnpm add @quizbase/client import { createClient } from '@quizbase/client';
const client = createClient({ apiKey: process.env.QUIZBASE_API_KEY! });
const random = await client.questions.random({ amount: 5, lang: 'pl' });
console.log(random.data); Typed responses, automatic retry on 429 / 5xx, RFC 9457 typed errors, and an onRequest telemetry hook out of the box. Full reference: /docs/sdks/typescript.
What to expect — performance#
The catalog is 1.4M+ approved questions, served from Postgres + Redis behind Cloudflare. Discovery endpoints respond in ~30ms (warm); /v1/questions and /v1/questions/:id around 100ms; /v1/questions/random around 160ms. Verified at 50 sustained RPS and 200 RPS burst with no degradation. SLO: p95 < 500ms, error rate < 1%.
Full numbers, methodology, and quarterly drift mechanism: /docs/performance. Each /docs/api/* page also lists a per-endpoint Performance section.
5. Next steps#
- Authentication — how keys work,
qb_pk_*(browser-safe) vsqb_sk_*(backend-only), rotation, CORS - Errors and retries — RFC 9457,
Retry-After, backoff strategy - GET /v1/questions/random — all parameters for this endpoint
- Languages & translations — English and Polish at launch,
translationOffield, strict-language mode - Migrating from OpenTDB — field-by-field mapping