Open Trivia DB

Free JSON trivia question API supporting categories, difficulties, question types, encodings, and optional session tokens to avoid duplicate questions across requests.

OpenAPI Specification

open-trivia-db-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Open Trivia DB API
  description: >-
    Free JSON API providing trivia questions across multiple categories,
    difficulties, and types. No API key is required. Supports session tokens to
    avoid duplicate questions across requests, multiple response encodings, and
    rate limiting of one request per IP every 5 seconds.
  version: '1.0'
  contact:
    name: Open Trivia DB
    url: https://opentdb.com
  license:
    name: Creative Commons Attribution-ShareAlike 4.0 International
    url: https://creativecommons.org/licenses/by-sa/4.0/
externalDocs:
  description: Open Trivia DB API Documentation
  url: https://opentdb.com/api_config.php
servers:
  - url: https://opentdb.com
    description: Open Trivia DB Production
tags:
  - name: Questions
    description: Retrieve trivia questions.
  - name: Categories
    description: Retrieve available trivia categories.
  - name: Tokens
    description: Manage session tokens to track served questions.
paths:
  /api.php:
    get:
      tags:
        - Questions
      summary: Retrieve trivia questions
      description: >-
        Returns a list of trivia questions filtered by amount, category,
        difficulty, type, and encoding. Up to 50 questions per request.
      operationId: getQuestions
      parameters:
        - name: amount
          in: query
          required: true
          description: Number of questions to return (1-50).
          schema:
            type: integer
            minimum: 1
            maximum: 50
        - name: category
          in: query
          description: Category ID to filter by. Omit for any category.
          schema:
            type: integer
        - name: difficulty
          in: query
          description: Question difficulty.
          schema:
            type: string
            enum: [easy, medium, hard]
        - name: type
          in: query
          description: Question type.
          schema:
            type: string
            enum: [multiple, boolean]
        - name: encode
          in: query
          description: Response encoding format.
          schema:
            type: string
            enum: [url3986, base64]
        - name: token
          in: query
          description: Session token to avoid duplicate questions.
          schema:
            type: string
      responses:
        '200':
          description: Trivia questions response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuestionsResponse'
  /api_category.php:
    get:
      tags:
        - Categories
      summary: List trivia categories
      description: Returns all available trivia categories with IDs and names.
      operationId: getCategories
      responses:
        '200':
          description: List of categories.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CategoriesResponse'
  /api_count.php:
    get:
      tags:
        - Categories
      summary: Question count for category
      description: Returns the total and remaining question counts for a category.
      operationId: getCategoryCount
      parameters:
        - name: category
          in: query
          required: true
          description: Category ID.
          schema:
            type: integer
      responses:
        '200':
          description: Category question count.
  /api_count_global.php:
    get:
      tags:
        - Categories
      summary: Global question counts
      description: Returns global question counts across all categories.
      operationId: getGlobalCount
      responses:
        '200':
          description: Global counts response.
  /api_token.php:
    get:
      tags:
        - Tokens
      summary: Manage session tokens
      description: >-
        Request a new session token, reset an existing one, or check token
        status. Tokens prevent duplicate questions across requests for 6 hours
        of inactivity.
      operationId: manageToken
      parameters:
        - name: command
          in: query
          required: true
          description: Token operation.
          schema:
            type: string
            enum: [request, reset]
        - name: token
          in: query
          description: Existing token (required when command is reset).
          schema:
            type: string
      responses:
        '200':
          description: Token response.
components:
  schemas:
    QuestionsResponse:
      type: object
      properties:
        response_code:
          type: integer
          description: 0 = Success, 1 = No Results, 2 = Invalid Parameter, 3 = Token Not Found, 4 = Token Empty, 5 = Rate Limit.
        results:
          type: array
          items:
            $ref: '#/components/schemas/Question'
    Question:
      type: object
      properties:
        category:
          type: string
        type:
          type: string
          enum: [multiple, boolean]
        difficulty:
          type: string
          enum: [easy, medium, hard]
        question:
          type: string
        correct_answer:
          type: string
        incorrect_answers:
          type: array
          items:
            type: string
    CategoriesResponse:
      type: object
      properties:
        trivia_categories:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string