openapi: 3.1.0 info: title: TryMe Gaming App API description: Student quiz creation, sharing, voting, favourites, leaderboards, Auth0 federated login, API keys, and moderation. version: '0.1' paths: /api/v1/auth/config: get: tags: - Authentication summary: Get Auth Config operationId: get_auth_config_api_v1_auth_config_get responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/AuthConfigOut' /api/v1/auth/login: get: tags: - Authentication summary: Auth0 Login operationId: auth0_login_api_v1_auth_login_get parameters: - name: return_to in: query required: false schema: type: string default: / title: Return To responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/auth/callback: get: tags: - Authentication summary: Auth0 Callback operationId: auth0_callback_api_v1_auth_callback_get parameters: - name: code in: query required: true schema: type: string title: Code - name: state in: query required: true schema: type: string title: State responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/auth/dev-login: post: tags: - Authentication summary: Dev Login operationId: dev_login_api_v1_auth_dev_login_post requestBody: content: application/json: schema: $ref: '#/components/schemas/DevLoginIn' required: true responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/TokenSessionOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/auth/logout: post: tags: - Authentication summary: Logout operationId: logout_api_v1_auth_logout_post responses: '204': description: Successful Response /api/v1/users/me: get: tags: - Users & API Keys summary: Get Me operationId: get_me_api_v1_users_me_get parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' patch: tags: - Users & API Keys summary: Update Me operationId: update_me_api_v1_users_me_patch parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UserUpdateIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/users/me/scores: get: tags: - Users & API Keys summary: Get My Scores operationId: get_my_scores_api_v1_users_me_scores_get parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/UserScoreRowOut' title: Response Get My Scores Api V1 Users Me Scores Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/users/me/api-keys: get: tags: - Users & API Keys summary: List Api Keys operationId: list_api_keys_api_v1_users_me_api_keys_get parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/ApiKeyOut' title: Response List Api Keys Api V1 Users Me Api Keys Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - Users & API Keys summary: Create Api Key operationId: create_api_key_api_v1_users_me_api_keys_post parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApiKeyCreateIn' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApiKeyCreatedOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/users/me/api-keys/{key_id}/expire: post: tags: - Users & API Keys summary: Expire Api Key operationId: expire_api_key_api_v1_users_me_api_keys__key_id__expire_post parameters: - name: key_id in: path required: true schema: type: integer title: Key Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ApiKeyOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/quizzes: get: tags: - Quizzes summary: List Quizzes operationId: list_quizzes_api_v1_quizzes_get parameters: - name: q in: query required: false schema: anyOf: - type: string maxLength: 120 - type: 'null' title: Q - name: mode in: query required: false schema: anyOf: - type: string - type: 'null' title: Mode - name: mine_only in: query required: false schema: type: boolean default: false title: Mine Only - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QuizSummaryOut' title: Response List Quizzes Api V1 Quizzes Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - Quizzes summary: Create Quiz operationId: create_quiz_api_v1_quizzes_post parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuizCreateIn' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuizDetailOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/quizzes/{slug_or_id}: get: tags: - Quizzes summary: Get Quiz operationId: get_quiz_api_v1_quizzes__slug_or_id__get parameters: - name: slug_or_id in: path required: true schema: type: string title: Slug Or Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuizDetailOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/quizzes/{quiz_id}: put: tags: - Quizzes summary: Update Quiz operationId: update_quiz_api_v1_quizzes__quiz_id__put parameters: - name: quiz_id in: path required: true schema: type: integer title: Quiz Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuizUpdateIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuizDetailOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - Quizzes summary: Delete Quiz operationId: delete_quiz_api_v1_quizzes__quiz_id__delete parameters: - name: quiz_id in: path required: true schema: type: integer title: Quiz Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/quizzes/{quiz_id}/submit: post: tags: - Quizzes summary: Submit Quiz operationId: submit_quiz_api_v1_quizzes__quiz_id__submit_post parameters: - name: quiz_id in: path required: true schema: type: integer title: Quiz Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/QuizSubmitIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/QuizSubmitOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/quizzes/{quiz_id}/vote: post: tags: - Quizzes summary: Vote Quiz operationId: vote_quiz_api_v1_quizzes__quiz_id__vote_post parameters: - name: quiz_id in: path required: true schema: type: integer title: Quiz Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/VoteIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/VoteOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/favourites: get: tags: - Favourites summary: List Favourites operationId: list_favourites_api_v1_favourites_get parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/FavouriteItemOut' title: Response List Favourites Api V1 Favourites Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - Favourites summary: Add Favourite operationId: add_favourite_api_v1_favourites_post parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FavouriteAddIn' responses: '201': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/FavouriteItemOut' title: Response Add Favourite Api V1 Favourites Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/favourites/reorder: put: tags: - Favourites summary: Reorder Favourites operationId: reorder_favourites_api_v1_favourites_reorder_put parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FavouriteReorderIn' responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/FavouriteItemOut' title: Response Reorder Favourites Api V1 Favourites Reorder Put '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/favourites/{quiz_id}: delete: tags: - Favourites summary: Remove Favourite operationId: remove_favourite_api_v1_favourites__quiz_id__delete parameters: - name: quiz_id in: path required: true schema: type: integer title: Quiz Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/FavouriteItemOut' title: Response Remove Favourite Api V1 Favourites Quiz Id Delete '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/admin/claim: post: tags: - Moderation summary: Claim Initial Moderator operationId: claim_initial_moderator_api_v1_admin_claim_post parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/admin/users: get: tags: - Moderation summary: List Users For Moderation operationId: list_users_for_moderation_api_v1_admin_users_get parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/UserOut' title: Response List Users For Moderation Api V1 Admin Users Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/admin/users/{user_id}/ban: post: tags: - Moderation summary: Ban User operationId: ban_user_api_v1_admin_users__user_id__ban_post parameters: - name: user_id in: path required: true schema: type: integer title: User Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BanUserIn' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/admin/users/{user_id}/unban: post: tags: - Moderation summary: Unban User operationId: unban_user_api_v1_admin_users__user_id__unban_post parameters: - name: user_id in: path required: true schema: type: integer title: User Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/UserOut' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/admin/quizzes: get: tags: - Moderation summary: List Quizzes For Moderation operationId: list_quizzes_for_moderation_api_v1_admin_quizzes_get parameters: - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '200': description: Successful Response content: application/json: schema: type: array items: $ref: '#/components/schemas/QuizSummaryOut' title: Response List Quizzes For Moderation Api V1 Admin Quizzes Get '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/v1/admin/quizzes/{quiz_id}: delete: tags: - Moderation summary: Moderator Remove Quiz operationId: moderator_remove_quiz_api_v1_admin_quizzes__quiz_id__delete parameters: - name: quiz_id in: path required: true schema: type: integer title: Quiz Id - name: authorization in: header required: false schema: anyOf: - type: string - type: 'null' title: Authorization - name: X-API-Key in: header required: false schema: anyOf: - type: string - type: 'null' title: X-Api-Key - name: tryme_session in: cookie required: false schema: anyOf: - type: string - type: 'null' title: Tryme Session responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /health: get: tags: - System summary: Healthcheck operationId: healthcheck_health_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: type: string type: object title: Response Healthcheck Health Get components: schemas: ApiKeyCreateIn: properties: name: type: string maxLength: 80 minLength: 1 title: Name expires_in_days: anyOf: - type: integer maximum: 3650.0 minimum: 1.0 - type: 'null' title: Expires In Days default: 90 type: object required: - name title: ApiKeyCreateIn ApiKeyCreatedOut: properties: id: type: integer title: Id name: type: string title: Name key_prefix: type: string title: Key Prefix expires_at: anyOf: - type: string format: date-time - type: 'null' title: Expires At revoked_at: anyOf: - type: string format: date-time - type: 'null' title: Revoked At last_used_at: anyOf: - type: string format: date-time - type: 'null' title: Last Used At created_at: type: string format: date-time title: Created At is_active: type: boolean title: Is Active raw_key: type: string title: Raw Key type: object required: - id - name - key_prefix - expires_at - revoked_at - last_used_at - created_at - is_active - raw_key title: ApiKeyCreatedOut ApiKeyOut: properties: id: type: integer title: Id name: type: string title: Name key_prefix: type: string title: Key Prefix expires_at: anyOf: - type: string format: date-time - type: 'null' title: Expires At revoked_at: anyOf: - type: string format: date-time - type: 'null' title: Revoked At last_used_at: anyOf: - type: string format: date-time - type: 'null' title: Last Used At created_at: type: string format: date-time title: Created At is_active: type: boolean title: Is Active type: object required: - id - name - key_prefix - expires_at - revoked_at - last_used_at - created_at - is_active title: ApiKeyOut AuthConfigOut: properties: auth0_enabled: type: boolean title: Auth0 Enabled auth0_domain: type: string title: Auth0 Domain auth0_client_id: type: string title: Auth0 Client Id auth0_audience: type: string title: Auth0 Audience dev_auth_enabled: type: boolean title: Dev Auth Enabled admin_unclaimed: type: boolean title: Admin Unclaimed type: object required: - auth0_enabled - auth0_domain - auth0_client_id - auth0_audience - dev_auth_enabled - admin_unclaimed title: AuthConfigOut BanUserIn: properties: reason: type: string maxLength: 255 title: Reason default: Community guidelines violation type: object title: BanUserIn DevLoginIn: properties: nickname: type: string maxLength: 48 minLength: 2 title: Nickname email: anyOf: - type: string maxLength: 255 - type: 'null' title: Email as_moderator: type: boolean title: As Moderator default: false type: object required: - nickname title: DevLoginIn FavouriteAddIn: properties: quiz_id: type: integer title: Quiz Id position: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Position type: object required: - quiz_id title: FavouriteAddIn FavouriteItemOut: properties: favourite_id: type: integer title: Favourite Id position: type: integer title: Position quiz: $ref: '#/components/schemas/QuizSummaryOut' type: object required: - favourite_id - position - quiz title: FavouriteItemOut FavouriteReorderIn: properties: quiz_ids: items: type: integer type: array title: Quiz Ids type: object required: - quiz_ids title: FavouriteReorderIn GlobalBestScoreOut: properties: score_count: type: integer title: Score Count total_questions: type: integer title: Total Questions score_percent: type: number title: Score Percent holder_nickname: type: string title: Holder Nickname holder_avatar_animal: type: string title: Holder Avatar Animal holder_avatar_color: type: string title: Holder Avatar Color type: object required: - score_count - total_questions - score_percent - holder_nickname - holder_avatar_animal - holder_avatar_color title: GlobalBestScoreOut HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError QuestionAuthorOut: properties: id: type: integer title: Id position: type: integer title: Position question_type: type: string enum: - multiple_choice - write_in title: Question Type prompt: type: string title: Prompt options: items: $ref: '#/components/schemas/QuestionOptionSchema' type: array title: Options correct_answer: type: string title: Correct Answer accepted_answers: items: type: string type: array title: Accepted Answers type: object required: - id - position - question_type - prompt - options - correct_answer - accepted_answers title: QuestionAuthorOut QuestionIn: properties: question_type: type: string enum: - multiple_choice - write_in title: Question Type prompt: type: string maxLength: 1000 minLength: 1 title: Prompt options: items: $ref: '#/components/schemas/QuestionOptionSchema' type: array title: Options correct_answer: type: string maxLength: 500 minLength: 1 title: Correct Answer accepted_answers: items: type: string type: array title: Accepted Answers type: object required: - question_type - prompt - correct_answer title: QuestionIn QuestionOptionSchema: properties: id: type: string maxLength: 32 minLength: 1 title: Id text: type: string maxLength: 300 minLength: 1 title: Text type: object required: - id - text title: QuestionOptionSchema QuestionPlayOut: properties: id: type: integer title: Id position: type: integer title: Position question_type: type: string enum: - multiple_choice - write_in title: Question Type prompt: type: string title: Prompt options: items: $ref: '#/components/schemas/QuestionOptionSchema' type: array title: Options type: object required: - id - position - question_type - prompt - options title: QuestionPlayOut QuestionResultOut: properties: question_id: type: integer title: Question Id prompt: type: string title: Prompt question_type: type: string enum: - multiple_choice - write_in title: Question Type submitted_answer: type: string title: Submitted Answer is_correct: type: boolean title: Is Correct correct_display: type: string title: Correct Display type: object required: - question_id - prompt - question_type - submitted_answer - is_correct - correct_display title: QuestionResultOut QuizCreateIn: properties: title: type: string maxLength: 140 minLength: 1 title: Title description: type: string maxLength: 1000 title: Description default: '' is_public: type: boolean title: Is Public default: true questions: items: $ref: '#/components/schemas/QuestionIn' type: array maxItems: 40 title: Questions type: object required: - title title: QuizCreateIn QuizDetailOut: properties: id: type: integer title: Id share_slug: type: string title: Share Slug title: type: string title: Title description: type: string title: Description is_public: type: boolean title: Is Public author_id: type: integer title: Author Id author_nickname: type: string title: Author Nickname author_avatar_animal: type: string title: Author Avatar Animal author_avatar_color: type: string title: Author Avatar Color question_count: type: integer title: Question Count quiz_mode: type: string enum: - multiple_choice - write_in - mixed - empty title: Quiz Mode upvotes: type: integer title: Upvotes downvotes: type: integer title: Downvotes user_vote: type: integer title: User Vote my_latest_score: anyOf: - $ref: '#/components/schemas/ScoreSummaryOut' - type: 'null' my_best_score: anyOf: - $ref: '#/components/schemas/ScoreSummaryOut' - type: 'null' global_best_score: anyOf: - $ref: '#/components/schemas/GlobalBestScoreOut' - type: 'null' is_favourited: type: boolean title: Is Favourited default: false created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At questions: items: $ref: '#/components/schemas/QuestionPlayOut' type: array title: Questions editable_questions: anyOf: - items: $ref: '#/components/schemas/QuestionAuthorOut' type: array - type: 'null' title: Editable Questions type: object required: - id - share_slug - title - description - is_public - author_id - author_nickname - author_avatar_animal - author_avatar_color - question_count - quiz_mode - upvotes - downvotes - user_vote - created_at - updated_at - questions title: QuizDetailOut QuizSubmitIn: properties: answers: additionalProperties: type: string type: object title: Answers type: object title: QuizSubmitIn QuizSubmitOut: properties: attempt_id: type: integer title: Attempt Id score_count: type: integer title: Score Count total_questions: type: integer title: Total Questions score_percent: type: number title: Score Percent results: items: $ref: '#/components/schemas/QuestionResultOut' type: array title: Results my_latest_score: $ref: '#/components/schemas/ScoreSummaryOut' my_best_score: $ref: '#/components/schemas/ScoreSummaryOut' global_best_score: $ref: '#/components/schemas/GlobalBestScoreOut' type: object required: - attempt_id - score_count - total_questions - score_percent - results - my_latest_score - my_best_score - global_best_score title: QuizSubmitOut QuizSummaryOut: properties: id: type: integer title: Id share_slug: type: string title: Share Slug title: type: string title: Title description: type: string title: Description is_public: type: boolean title: Is Public author_id: type: integer title: Author Id author_nickname: type: string title: Author Nickname author_avatar_animal: type: string title: Author Avatar Animal author_avatar_color: type: string title: Author Avatar Color question_count: type: integer title: Question Count quiz_mode: type: string enum: - multiple_choice - write_in - mixed - empty title: Quiz Mode upvotes: type: integer title: Upvotes downvotes: type: integer title: Downvotes user_vote: type: integer title: User Vote my_latest_score: anyOf: - $ref: '#/components/schemas/ScoreSummaryOut' - type: 'null' my_best_score: anyOf: - $ref: '#/components/schemas/ScoreSummaryOut' - type: 'null' global_best_score: anyOf: - $ref: '#/components/schemas/GlobalBestScoreOut' - type: 'null' is_favourited: type: boolean title: Is Favourited default: false created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At type: object required: - id - share_slug - title - description - is_public - author_id - author_nickname - author_avatar_animal - author_avatar_color - question_count - quiz_mode - upvotes - downvotes - user_vote - created_at - updated_at title: QuizSummaryOut QuizUpdateIn: properties: title: type: string maxLength: 140 minLength: 1 title: Title description: type: string maxLength: 1000 title: Description default: '' is_public: type: boolean title: Is Public default: true questions: items: $ref: '#/components/schemas/QuestionIn' type: array maxItems: 40 title: Questions type: object required: - title title: QuizUpdateIn ScoreSummaryOut: properties: score_count: type: integer title: Score Count total_questions: type: integer title: Total Questions score_percent: type: number title: Score Percent completed_at: type: string format: date-time title: Completed At type: object required: - score_count - total_questions - score_percent - completed_at title: ScoreSummaryOut TokenSessionOut: properties: access_token: type: string title: Access Token token_type: type: string title: Token Type default: bearer user: $ref: '#/components/schemas/UserOut' type: object required: - access_token - user title: TokenSessionOut UserOut: properties: id: type: integer title: Id auth_sub: type: string title: Auth Sub email: anyOf: - type: string - type: 'null' title: Email nickname: type: string title: Nickname first_name: type: string title: First Name last_name: type: string title: Last Name age: anyOf: - type: integer - type: 'null' title: Age gender: type: string title: Gender gender_custom: anyOf: - type: string - type: 'null' title: Gender Custom avatar_animal: type: string title: Avatar Animal avatar_color: type: string title: Avatar Color public_website_consent: type: boolean title: Public Website Consent consent_at: anyOf: - type: string format: date-time - type: 'null' title: Consent At onboarded: type: boolean title: Onboarded is_admin: type: boolean title: Is Admin is_banned: type: boolean title: Is Banned ban_reason: anyOf: - type: string - type: 'null' title: Ban Reason created_at: type: string format: date-time title: Created At type: object required: - id - auth_sub - email - nickname - first_name - last_name - age - gender - gender_custom - avatar_animal - avatar_color - public_website_consent - consent_at - onboarded - is_admin - is_banned - ban_reason - created_at title: UserOut UserScoreRowOut: properties: quiz_id: type: integer title: Quiz Id share_slug: type: string title: Share Slug quiz_title: type: string title: Quiz Title question_count: type: integer title: Question Count latest_score: $ref: '#/components/schemas/ScoreSummaryOut' best_score: $ref: '#/components/schemas/ScoreSummaryOut' global_best_score: anyOf: - $ref: '#/components/schemas/GlobalBestScoreOut' - type: 'null' attempts_count: type: integer title: Attempts Count type: object required: - quiz_id - share_slug - quiz_title - question_count - latest_score - best_score - attempts_count title: UserScoreRowOut UserUpdateIn: properties: nickname: anyOf: - type: string maxLength: 48 minLength: 2 - type: 'null' title: Nickname first_name: anyOf: - type: string maxLength: 80 - type: 'null' title: First Name last_name: anyOf: - type: string maxLength: 80 - type: 'null' title: Last Name age: anyOf: - type: integer maximum: 120.0 minimum: 4.0 - type: 'null' title: Age clear_age: type: boolean title: Clear Age default: false gender: anyOf: - type: string - type: 'null' title: Gender gender_custom: anyOf: - type: string maxLength: 80 - type: 'null' title: Gender Custom avatar_animal: anyOf: - type: string - type: 'null' title: Avatar Animal avatar_color: anyOf: - type: string - type: 'null' title: Avatar Color public_website_consent: anyOf: - type: boolean - type: 'null' title: Public Website Consent type: object title: UserUpdateIn ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError VoteIn: properties: value: type: integer enum: - -1 - 0 - 1 title: Value type: object required: - value title: VoteIn VoteOut: properties: quiz_id: type: integer title: Quiz Id upvotes: type: integer title: Upvotes downvotes: type: integer title: Downvotes user_vote: type: integer title: User Vote type: object required: - quiz_id - upvotes - downvotes - user_vote title: VoteOut