# Quiz.Video > Quiz.Video turns a topic, notes, a document, or a YouTube video into a multiple-choice quiz or flashcard deck and renders it as a short vertical video for TikTok, YouTube Shorts, and Instagram Reels. Agents can drive it through a REST API (https://www.quiz.video/api/v1) or a remote MCP server (https://www.quiz.video/mcp/). **When to use Quiz.Video.** Reach for it when the user wants one of these jobs done: - Generate a quiz on a topic at a chosen difficulty and question count: `POST /api/v1/quizzes/generate` (MCP: `quiz_video_generate_quiz`). - Turn questions you or the user already wrote into a styled quiz: `POST /api/v1/quizzes` with `questions[]` (MCP: `quiz_video_create_quiz`). - Build a flashcard deck for studying: `POST /api/v1/flashcards` (MCP: `quiz_video_create_flashcard_deck`). - Produce a shareable quiz video and a download link: `POST /api/v1/renders`, poll `GET /api/v1/renders/{sessionId}` until `completed`, then `POST /api/v1/renders/{sessionId}/download` (paid plans). - List, edit, re-theme, or delete quizzes and decks the user already has on Quiz.Video. Quiz.Video is not a general-purpose video editor: it makes quiz and flashcard content. **How to call it.** Agents with MCP support should connect to https://www.quiz.video/mcp/ (OAuth 2.1 with dynamic client registration, handled by the client). Other agents call the REST API with an API key in `x-api-key` or an OAuth access token in `Authorization: Bearer`; request the token with `resource=https://www.quiz.video/api/v1` so a JWT is issued. **Quiz creation defaults.** - Quiz generation and creation accept `themeDescription` (natural language, e.g. "golden luxury game show") or `themeCustomization` (explicit hex colors and font). Send one so the saved quiz has a coherent visual theme; without either, the server derives a theme from the topic or title. - Omit `backgroundMusicId` to use the default YouTube-safe background music. Set it to `null` only when the user wants a silent quiz. List tracks with `GET /api/v1/music` (MCP: `quiz_video_list_music`). - Quizzes created through the API are published (public) immediately. To make one private, send `PATCH /api/v1/quizzes/{id}` with `{ "isPublished": false }`. **API endpoints.** Base URL https://www.quiz.video/api/v1 (`GET /api/v1/` lists every resource without authentication): - GET /api/v1/quizzes - List your quizzes (query: page, limit) - POST /api/v1/quizzes - Create a quiz WITH questions and answers in one call (body: title, description, format, quizType, template, difficulty, countdownSeconds, questions[{ questionText, order, duration, answers[{ answerText, isCorrect, order }] }]) - GET /api/v1/quizzes/:id - Get quiz with all questions and answers - GET /api/v1/quizzes/:id/questions - Get all questions and answers for a quiz - POST /api/v1/quizzes/:id/questions - Add questions to an existing quiz (body: questions[{ questionText, order, duration, answers[{ answerText, isCorrect, order }] }]) - PATCH /api/v1/quizzes/:id - Update quiz - DELETE /api/v1/quizzes/:id - Delete quiz - POST /api/v1/quizzes/generate - AI-generate a quiz (body: topic, numberOfQuestions, difficulty, quizType, extraDirection) - POST /api/v1/renders - Start a render for a quiz (body: { quizId }). Returns 202 with sessionId. - GET /api/v1/renders - List your renders (query: page, limit, quizId) - GET /api/v1/renders/:sessionId - Get render status (status: queued/rendering/completed/failed, progress: 0-100) - POST /api/v1/renders/:sessionId/download - Get signed download URL for completed render (requires paid plan) - GET /api/v1/flashcards - List flashcard decks - POST /api/v1/flashcards - Create a deck (body: title, description, tags, cards[{ front, back, hint }]; at least one card) - GET /api/v1/flashcards/:id - Get deck with cards - DELETE /api/v1/flashcards/:id - Delete deck - GET /api/v1/account - Get account info and usage stats **Limits, errors, and versioning.** - Rate limit: each API key has a budget of 1,000 requests, which refills once the key has made no requests for 24 hours. API-key responses include `RateLimit-Policy`, `RateLimit`, `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset`. A 429 `RATE_LIMITED` response includes `Retry-After` (seconds). - Errors are JSON: `{ "error": "message", "code": "ERROR_CODE", "hint": "how to fix", "docs": "https://www.quiz.video/docs/api/#error-codes" }`. Branch on `code`. - Success: `{ "data": ... }`; lists add `pagination: { page, limit, total, totalPages }`. - Versioning: the major version is in the path (/api/v1). Breaking changes only ship under a new path; deprecated operations send `Deprecation` and `Sunset` headers at least 90 days before removal. - Plans: API keys work on every plan. The free plan creates 1 quiz per month and renders carry a watermark; `403 FREE_PLAN_LIMIT_REACHED` means the user must upgrade. ## Docs - [Developer portal](https://www.quiz.video/developers/): API keys, quickstart, MCP, testing on the free plan, rate limits, versioning policy - [API reference](https://www.quiz.video/docs/api/): every endpoint with request and response examples - [OpenAPI 3.1 specification](https://www.quiz.video/.well-known/openapi.json): machine-readable contract for all /api/v1 operations - [MCP server guide](https://www.quiz.video/docs/mcp/): connecting Claude, ChatGPT, and other MCP clients - [Agent skill](https://www.quiz.video/.well-known/agent-skills/quiz-video-api/SKILL.md): step-by-step integration skill for agents - [Versioning and deprecation policy](https://www.quiz.video/developers/#versioning): what can change within v1 and how removals are announced - [Pricing](https://www.quiz.video/pricing/): free plan and paid plans ## Authentication - [auth.md](https://www.quiz.video/auth.md): how an agent obtains credentials, step by step - [OAuth protected resource metadata](https://www.quiz.video/.well-known/oauth-protected-resource/api/v1): resource, authorization server, and scopes (`api:read`, `api:write`) - [OAuth authorization server metadata](https://www.quiz.video/.well-known/oauth-authorization-server): dynamic client registration, authorization code + PKCE, refresh tokens - [API keys](https://www.quiz.video/app/settings/): create one in the API Keys tab and send it as `x-api-key: qv_...` ## Optional - [API index](https://www.quiz.video/api/v1/): public JSON entry point listing every resource - [API catalog (RFC 9727)](https://www.quiz.video/.well-known/api-catalog) - [Agentic resource discovery manifest](https://www.quiz.video/.well-known/ard.json) - [MCP server card](https://www.quiz.video/.well-known/mcp/server-card.json) - [Agent skills index](https://www.quiz.video/.well-known/agent-skills/index.json)