video.quiz/api
Registry code: f186e9c1632762b1
Use Quiz.Video when the user wants a multiple-choice quiz, trivia video, or flashcard deck built from a topic, notes, a document, or a YouTube video, or wants an existing Quiz.Video quiz edited, rendered, or downloaded. Typical flow: quiz_video_generate_quiz (or quiz_video_create_quiz with your own questions) -> quiz_video_create_render -> poll quiz_video_get_render until completed -> quiz_video_download_render. When people should take the quiz in a browser rather than watch a video, call quiz_video_share_quiz for a playUrl, then quiz_video_get_quiz_results to see how they did. To use the…
- endpoint
- https://www.quiz.video/mcp
- protocol
- streamable-http ·2025-06-18
- authentication
- none observed
- public key
- none — nobody has proven they own this listing · is it yours? claim it
- karma
- 0 · newcomer
- Is video.quiz/api live?
- Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
- Is video.quiz/api free to use?
- Partly — some of its tools are open, others need a key or payment.
- What tools does video.quiz/api have?
- 39 tools: quiz_video_create_quiz, quiz_video_generate_quiz, quiz_video_delete_quiz, quiz_video_add_quiz_questions, quiz_video_create_flashcard_deck, quiz_video_delete_flashcard_deck, quiz_video_share_quiz, quiz_video_create_media_upload, ….
- Is video.quiz/api safe to connect?
- The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
90 days 99.3%· all time 99.3%
last good check
of 39 tools
- degraded → live
- live → degraded· timeout after 20000ms
- degraded → live
- degraded → live
- live → degraded· timeout after 20000ms
- topic
- media generation video
- used for
- generate a quiz from a topic
- create a quiz video
- render a quiz video
- manage flashcard decks
- apply a video template
- takes → gives
- text → video, data
- tools
- 13 reads12 changes data
Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.
through this hub
successful
what callers paid
Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.
get_api_catalog reads open 5h ago
Return the Quiz.Video API catalog linkset for agent discovery.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesget_openapi_spec reads open 12h ago
Return the Quiz.Video OpenAPI 3.1 specification.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesget_api_index open 2h ago
Return the GET /api/v1 index: documentation and OpenAPI URLs, OAuth/API-key auth metadata, rate-limit and versioning policy, and every resource URL.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesget_llms_txt reads open 16h ago
Return a compact LLM-readable summary of the Quiz.Video API.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesquiz_video_get_render reads auth-required 5h ago
Fetch the status and progress of a render session. When status is "completed", the response also contains a signed `videoUrl` (and `filename`) so the agent can share the MP4 directly without a separate quiz_video_download_render call. In-progress polls return status + progress.
{ "type": "object", "required": [ "sessionId" ], "properties": { "sessionId": { "type": "string", "minLength": 1, "description": "Render session id returned when the render was started." } }, "additionalProperties": false }arguments 14 linesquiz_video_get_quiz reads auth-required 9h ago
Fetch a single quiz (including settings and metadata) by id.
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." } }, "additionalProperties": false }arguments 14 linesquiz_video_list_flashcard_decks reads auth-required 2h ago
List flashcard decks owned by the authenticated user with optional pagination.
{ "type": "object", "properties": { "page": { "type": "number", "minimum": 1, "description": "1-indexed page number." }, "limit": { "type": "number", "maximum": 100, "minimum": 1, "description": "Results per page (1–100, default 20)." } }, "additionalProperties": false }arguments 17 linesquiz_video_list_music reads auth-required 2h ago
List available background music tracks.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesquiz_video_list_templates reads auth-required 31h ago
List the caller's saved custom templates (and optionally public ones). Templates are reusable scene-based designs that can be applied to many quizzes.
{ "type": "object", "properties": { "page": { "type": "number", "minimum": 1 }, "limit": { "type": "number", "maximum": 100, "minimum": 1 }, "includePublic": { "type": "boolean", "description": "Include public templates in addition to your own. Default true." } }, "additionalProperties": false }arguments 19 linesquiz_video_get_template reads auth-required 39h ago
Fetch a single custom template (including the full scenes/layers payload) by id.
{ "type": "object", "required": [ "templateId" ], "properties": { "templateId": { "type": "string", "minLength": 1, "description": "Template id (tpl_...)." } }, "additionalProperties": false }arguments 14 linesquiz_video_get_flashcard_deck auth-required 5h ago
Fetch a flashcard deck (including all cards) by id.
{ "type": "object", "required": [ "deckId" ], "properties": { "deckId": { "type": "string", "minLength": 1, "description": "Flashcard deck ID." } }, "additionalProperties": false }arguments 14 linesquiz_video_get_quiz_results auth-required 12h ago
See how people did on a quiz you own: plays, completions, average score, and the hardest questions. Results are aggregated and hold no personal data. Scores are computed from answers submitted by the browser, so treat them as engagement data, not exam records.
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1 } }, "additionalProperties": false }arguments 13 linesquiz_video_list_quiz_questions reads auth-required 9h ago
List questions (and their answers) for a quiz.
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." } }, "additionalProperties": false }arguments 14 linesquiz_video_list_quiz_hooks auth-required 9h ago
List video hooks configured for a quiz.
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." } }, "additionalProperties": false }arguments 14 linesquiz_video_list_quizzes reads auth-required 31h ago
List quizzes owned by the authenticated user with optional pagination (page, limit).
{ "type": "object", "properties": { "page": { "type": "number", "minimum": 1, "description": "1-indexed page number." }, "limit": { "type": "number", "maximum": 100, "minimum": 1, "description": "Results per page (1–100, default 20)." } }, "additionalProperties": false }arguments 17 linesquiz_video_get_account reads auth-required 12h ago
Get the authenticated user's account info, plan, and usage limits.
{ "type": "object", "properties": {}, "additionalProperties": false }arguments 5 linesquiz_video_list_media auth-required 16h ago
List files you have uploaded, newest first, so a file can be re-used without uploading it again. URLs in the response are signed and expire within an hour.
{ "type": "object", "properties": { "kind": { "enum": [ "image", "video", "audio" ], "type": "string" }, "limit": { "type": "number", "maximum": 200, "minimum": 1 } }, "additionalProperties": false }arguments 19 linesquiz_video_get_quiz_media auth-required 16h ago
Read the media a quiz uses: background, intro and outro, sound effects, and each question and answer (their ids, images, clips and backgrounds).
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1 } }, "additionalProperties": false }arguments 13 linesquiz_video_create_quiz changes data unknown never probed
Create a quiz. Prefer sending themeDescription or themeCustomization so the saved quiz has a custom visual theme; if omitted, the server derives one from the title/description. Omit backgroundMusicId to use default YouTube-safe shared background music, or set null for silent. Required: title. Optional: description, format, quizType, template, countdownSeconds, difficulty, musicVolume, and questions[].
{ "type": "object", "required": [ "title" ], "properties": { "title": { "type": "string", "minLength": 1, "description": "Human-readable quiz title." }, "format": { "enum": [ "tiktok", "youtube" ], "type": "string", "description": "Output aspect ratio: \"tiktok\" (9:16 vertical) or \"youtube\" (16:9 horizontal)." }, "quizType": { "enum": [ "multiple_choice", "reveal_answer", "picture_guess" ], "type": "string", "description": "Quiz mechanic: multiple_choice, reveal_answer, or picture_guess." }, "template": { "type": "string", "description": "Visual template id (e.g. \"neon\", \"minimal\")." }, "questions": { "type": "array", "items": { "type": "object", "required": [ "questionText" ], "properties": { "order": { "type": "number", "description": "1-indexed display order of the question within the quiz." }, "images": { "type": "array", "items": { "type": "object", "required": [ "url" ], "properties": { "alt": { "type": "string", "description": "Alt text describing the image for accessibility." }, "url": { "type": "string", "description": "Absolute URL of the image asset." }, "width": { "type": "number", "description": "Image width in pixels." }, "height": { "type": "number", "description": "Image height in pixels." }, "source": { "type": "string", "description": "Image source label, e.g. \"upload\", \"unsplash\", \"generated\"." }, "sourceUrl": { "type": "string", "description": "Original attribution URL for the image, if any." } }, "additionalProperties": true }, "description": "Additional images attached to the question (in addition to imagePath)." }, "answers": { "type": "array", "items": { "type": "object", "required": [ "answerText", "isCorrect" ], "properties": { "order": { "type": "number", "description": "1-indexed display order of the answer within the question." }, "ttsText": { "type": "string", "description": "Optional exact narration line for the answer reveal." }, "isCorrect": { "type": "boolean", "description": "Whether this answer is the correct one for the question." }, "answerText": { "type": "string", "minLength": 1, "description": "Answer text shown to viewers." }, "additionalInfo": { "type": "string", "description": "Optional explanation or trivia shown after the answer is revealed." } }, "additionalProperties": false }, "description": "Answer options for this question; exactly one should be marked isCorrect=true." }, "ttsText": { "type": "string", "description": "Optional exact narration line for this question." }, "duration": { "type": "number", "minimum": 1, "description": "Seconds viewers have to answer this question (must be >= 1)." }, "imagePath": { "type": "string", "description": "Optional primary image URL shown with the question (used by picture_guess quizzes)." }, "questionText": { "type": "string", "minLength": 1, "description": "The question prompt shown to viewers." } }, "additionalProperties": true }, "description": "Optional initial questions with their answers and images." }, "difficulty": { "enum": [ "easy", "medium", "hard", "rising" ], "type": "string", "description": "Target difficulty level for the generated/created quiz." }, "description": { "type": "string", "description": "Optional longer description shown on the quiz page." }, "musicVolume": { "type": "number", "maximum": 1, "minimum": 0, "description": "Background music volume from 0 (silent) to 1 (full). Default 0.15." }, "videoLanguage": { "type": "string", "description": "Language the quiz is written in, e.g. \"es\" or \"ar\". Sets narration and the language and text direction of the play page. Defaults to en-US." }, "countdownSeconds": { "type": "number", "maximum": 15, "minimum": 3, "description": "Seconds of countdown shown before each question (3–15)." }, "themeDescription": { "type": "string", "description": "Natural-language custom visual theme prompt. Example: \"golden luxury game show\", \"ocean glass\", or \"cyber neon\". The server saves the generated themeCustomization and applies it automatically." }, "backgroundMusicId": { "type": [ "number", "null" ], "description": "Background music track id from /api/v1/music. Omit to use the default YouTube-safe shared track; set null for silent." }, "themeCustomization": { "type": "object", "properties": { "name": { "type": "string", "description": "Optional saved theme label, e.g. \"Golden Theme\"." }, "description": { "type": "string", "description": "Optional natural-language source description for the custom theme." }, "styleControls": { "type": "boolean", "description": "Set automatically by the API when an override is sent. Makes overrides reach every scene and custom templates, not just preset question and answer slides." }, "textColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Hex color of question and on-screen text." }, "fontFamilyOverride": { "enum": [ "Inter", "Poppins", "Roboto", "Montserrat", "Open Sans", "Lato", "Raleway", "Source Sans 3", "Space Grotesk", "Manrope", "Work Sans", "DM Sans", "Lexend", "Nunito", "Quicksand", "Outfit", "Sora", "Albert Sans", "Bricolage Grotesque", "Playfair Display", "Merriweather", "Cormorant Garamond", "Fraunces", "Crimson Pro", "Cinzel", "Oswald", "Bebas Neue", "Anton", "Archivo Black", "Big Shoulders", "Bungee", "Bangers", "Lilita One", "Fredoka", "Baloo 2", "Exo 2", "Orbitron", "Press Start 2P", "Caveat", "Dancing Script", "Pacifico", "Permanent Marker", "Noto Sans", "Noto Naskh Arabic", "Vazirmatn" ], "type": "string", "description": "Font for all video text. A font without letters for the quiz language falls back to that language's own font for those letters." }, "accentColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Primary accent hex color, e.g. \"#F6C945\"." }, "secondaryColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Secondary accent hex color." }, "answerTextColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Hex color of answer text." }, "backgroundColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Solid background hex color." } }, "description": "Explicit custom theme to save and apply to the quiz. Invalid colors/fonts are ignored by the API sanitizer.", "additionalProperties": false } }, "additionalProperties": true }arguments 278 linesquiz_video_generate_quiz changes data unknown never probed
AI-generate and save a quiz from a topic. Prefer providing themeDescription or themeCustomization; when omitted, the server derives and saves a topic-based custom theme. Omit backgroundMusicId to use default YouTube-safe shared background music, or set null for silent. The response `data` includes `visibility`, `playable` and `playUrl` (where people take the quiz in a browser) when the quiz is shareable, plus `watchUrl` when it is public. If `playable` is false, call quiz_video_share_quiz to get a link. When autoRender is true, `data.render` also contains the queued render session so the agent can poll quiz_video_get_render for the MP4.
{ "type": "object", "required": [ "topic" ], "properties": { "topic": { "type": "string", "maxLength": 20000, "minLength": 1, "description": "Subject the AI should build the quiz around. Can be a short topic or a detailed multi-paragraph brief (up to 20,000 characters)." }, "format": { "enum": [ "tiktok", "youtube" ], "type": "string", "description": "Output aspect ratio. Defaults to \"tiktok\"." }, "language": { "type": "string", "maxLength": 20, "description": "Language to write the quiz in, e.g. \"es\" or \"ar\". Optional: without it the quiz follows the language of the topic, or English if that is unclear." }, "quizType": { "enum": [ "multiple_choice", "reveal_answer", "picture_guess" ], "type": "string", "description": "Quiz mechanic to generate." }, "template": { "type": "string", "description": "Visual template id. If omitted, the saved custom theme can suggest a matching template." }, "autoRender": { "type": "boolean", "description": "If true, immediately queue a video render for the new quiz. The render session (sessionId, status) is returned under `data.render`; poll quiz_video_get_render with that sessionId for progress and the final videoUrl. Rendering typically takes 1-5 minutes. Quiz creation is not blocked by render-queue failures — the quiz is returned either way." }, "difficulty": { "enum": [ "easy", "medium", "hard", "rising" ], "type": "string", "description": "Target difficulty level." }, "musicVolume": { "type": "number", "maximum": 1, "minimum": 0, "description": "Background music volume from 0 (silent) to 1 (full). Default 0.15." }, "extraDirection": { "type": "string", "maxLength": 20000, "description": "Additional instructions to steer the AI (tone, focus areas, exclusions). Up to 20,000 characters." }, "countdownSeconds": { "type": "number", "maximum": 15, "minimum": 3, "description": "Seconds of countdown shown before each question (3-15)." }, "progressBarStyle": { "enum": [ "circle", "line" ], "type": "string", "description": "Countdown progress indicator style." }, "themeDescription": { "type": "string", "maxLength": 20000, "description": "Natural-language custom visual theme prompt. Example: \"golden luxury game show\", \"ocean glass\", or \"cyber neon\"." }, "answerOptionCount": { "enum": [ 3, 4 ], "type": "number", "description": "For multiple-choice quizzes, generate 3 or 4 answer options per question. Defaults to 4." }, "backgroundMusicId": { "type": [ "number", "null" ], "description": "Background music track id from /api/v1/music. Omit to use the default YouTube-safe shared track; set null for silent." }, "numberOfQuestions": { "type": "number", "maximum": 200, "minimum": 1, "description": "How many questions to generate (1–200)." }, "themeCustomization": { "type": "object", "properties": { "name": { "type": "string", "description": "Optional saved theme label, e.g. \"Golden Theme\"." }, "description": { "type": "string", "description": "Optional natural-language source description for the custom theme." }, "styleControls": { "type": "boolean", "description": "Set automatically by the API when an override is sent. Makes overrides reach every scene and custom templates, not just preset question and answer slides." }, "textColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Hex color of question and on-screen text." }, "fontFamilyOverride": { "enum": [ "Inter", "Poppins", "Roboto", "Montserrat", "Open Sans", "Lato", "Raleway", "Source Sans 3", "Space Grotesk", "Manrope", "Work Sans", "DM Sans", "Lexend", "Nunito", "Quicksand", "Outfit", "Sora", "Albert Sans", "Bricolage Grotesque", "Playfair Display", "Merriweather", "Cormorant Garamond", "Fraunces", "Crimson Pro", "Cinzel", "Oswald", "Bebas Neue", "Anton", "Archivo Black", "Big Shoulders", "Bungee", "Bangers", "Lilita One", "Fredoka", "Baloo 2", "Exo 2", "Orbitron", "Press Start 2P", "Caveat", "Dancing Script", "Pacifico", "Permanent Marker", "Noto Sans", "Noto Naskh Arabic", "Vazirmatn" ], "type": "string", "description": "Font for all video text. A font without letters for the quiz language falls back to that language's own font for those letters." }, "accentColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Primary accent hex color, e.g. \"#F6C945\"." }, "secondaryColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Secondary accent hex color." }, "answerTextColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Hex color of answer text." }, "backgroundColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Solid background hex color." } }, "description": "Explicit custom theme to save and apply to the generated quiz. Use themeDescription for prompt-style themes.", "additionalProperties": false } }, "additionalProperties": false }arguments 201 linesquiz_video_delete_quiz unknown never probed
Permanently delete a quiz and all of its questions, answers, and hooks.
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." } }, "additionalProperties": false }arguments 14 linesquiz_video_add_quiz_questions changes data unknown never probed
Append one or more questions (with their answers and optional images) to an existing quiz.
{ "type": "object", "required": [ "quizId", "questions" ], "properties": { "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." }, "questions": { "type": "array", "items": { "type": "object", "required": [ "questionText" ], "properties": { "order": { "type": "number", "description": "1-indexed display order of the question within the quiz." }, "images": { "type": "array", "items": { "type": "object", "required": [ "url" ], "properties": { "alt": { "type": "string", "description": "Alt text describing the image for accessibility." }, "url": { "type": "string", "description": "Absolute URL of the image asset." }, "width": { "type": "number", "description": "Image width in pixels." }, "height": { "type": "number", "description": "Image height in pixels." }, "source": { "type": "string", "description": "Image source label, e.g. \"upload\", \"unsplash\", \"generated\"." }, "sourceUrl": { "type": "string", "description": "Original attribution URL for the image, if any." } }, "additionalProperties": true }, "description": "Additional images attached to the question (in addition to imagePath)." }, "answers": { "type": "array", "items": { "type": "object", "required": [ "answerText", "isCorrect" ], "properties": { "order": { "type": "number", "description": "1-indexed display order of the answer within the question." }, "ttsText": { "type": "string", "description": "Optional exact narration line for the answer reveal." }, "isCorrect": { "type": "boolean", "description": "Whether this answer is the correct one for the question." }, "answerText": { "type": "string", "minLength": 1, "description": "Answer text shown to viewers." }, "additionalInfo": { "type": "string", "description": "Optional explanation or trivia shown after the answer is revealed." } }, "additionalProperties": false }, "description": "Answer options for this question; exactly one should be marked isCorrect=true." }, "ttsText": { "type": "string", "description": "Optional exact narration line for this question." }, "duration": { "type": "number", "minimum": 1, "description": "Seconds viewers have to answer this question (must be >= 1)." }, "imagePath": { "type": "string", "description": "Optional primary image URL shown with the question (used by picture_guess quizzes)." }, "questionText": { "type": "string", "minLength": 1, "description": "The question prompt shown to viewers." } }, "additionalProperties": true }, "minItems": 1, "description": "One or more questions to append to the quiz." } }, "additionalProperties": false }arguments 123 linesquiz_video_create_flashcard_deck unknown never probed
Create a flashcard deck. Required: title (3-120 chars) and cards[] (min 1). Optional: description (≤1200 chars), tags (≤50 each).
{ "type": "object", "required": [ "title", "cards" ], "properties": { "tags": { "type": "array", "items": { "type": "string", "maxLength": 50 }, "description": "Optional tags to categorize the deck (≤50 characters each)." }, "cards": { "type": "array", "items": { "type": "object", "required": [ "front", "back" ], "properties": { "back": { "type": "string", "minLength": 1, "description": "Text shown on the back of the flashcard (the answer)." }, "hint": { "type": "string", "description": "Optional hint shown before revealing the back of the card." }, "front": { "type": "string", "minLength": 1, "description": "Text shown on the front of the flashcard (the prompt)." }, "order": { "type": "number", "description": "1-indexed display order of the card within the deck." } }, "additionalProperties": false }, "minItems": 1, "description": "Flashcards in the deck; at least one card is required." }, "title": { "type": "string", "maxLength": 120, "minLength": 3, "description": "Deck title (3–120 characters)." }, "description": { "type": "string", "maxLength": 1200, "description": "Optional deck description (≤1200 characters)." } }, "additionalProperties": false }arguments 62 linesquiz_video_delete_flashcard_deck changes data unknown never probed
Permanently delete a flashcard deck and all of its cards.
{ "type": "object", "required": [ "deckId" ], "properties": { "deckId": { "type": "string", "minLength": 1, "description": "Flashcard deck ID." } }, "additionalProperties": false }arguments 14 linesquiz_video_share_quiz unknown never probed
Get a URL where people take a quiz in their browser with no sign-in, and set who can open it. `unlisted` (the default) works for anyone with the link and is never listed or indexed; `public` also lists it in the quiz library and search engines; `private` turns the link off. Returns visibility, playUrl, quizUrl (public quizzes only) and embedHtml. Fails if the quiz has no questions with answers yet.
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1 }, "visibility": { "enum": [ "private", "unlisted", "public" ], "type": "string", "default": "unlisted", "description": "Who can open the quiz." } }, "additionalProperties": false }arguments 23 linesquiz_video_create_media_upload unknown never probed
Get a presigned URL to upload your own image, video or audio file. PUT the file bytes to uploadUrl with the returned headers (Content-Type must match and the body must be exactly `size` bytes), then call quiz_video_complete_media_upload. Files go to Quiz.Video storage; quizzes can only use uploaded files, never outside URLs. Limits: images 15 MB, videos 250 MB and 5 minutes, audio 50 MB. Use purpose "music" to add a background track, which returns a musicId to set as backgroundMusicId.
{ "type": "object", "required": [ "filename", "size" ], "properties": { "kind": { "enum": [ "image", "video", "audio" ], "type": "string" }, "size": { "type": "number", "minimum": 1, "description": "Exact file size in bytes." }, "purpose": { "enum": [ "library", "music" ], "type": "string", "default": "library" }, "filename": { "type": "string", "maxLength": 255, "minLength": 1, "description": "File name including extension, e.g. \"clip.mp4\"." }, "contentType": { "type": "string", "description": "MIME type, e.g. \"video/mp4\"." } }, "additionalProperties": false }arguments 41 linesquiz_video_delete_media unknown never probed
Permanently delete a file from your library. Refused with a 409 while a quiz still uses it.
{ "type": "object", "required": [ "assetId" ], "properties": { "assetId": { "type": "string", "minLength": 1 } }, "additionalProperties": false }arguments 13 linesquiz_video_apply_template changes data unknown never probed
Apply a snapshot of a custom template to one or more quizzes you own. Sets each quiz's template field to "custom" and writes the snapshot into themeCustomization.customTemplate. Future edits to the source template do not auto-propagate.
{ "type": "object", "required": [ "templateId", "quizIds" ], "properties": { "quizIds": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1, "description": "Quiz ids to apply the template to." }, "templateId": { "type": "string", "minLength": 1 } }, "additionalProperties": false }arguments 23 linesquiz_video_complete_media_upload unknown never probed
Call after the PUT succeeds. The server reads the stored file and checks it really is what it claims. A damaged or wrong file is deleted and the response explains why. Returns the asset; use asset.id in quiz_video_update_quiz_media.
{ "type": "object", "required": [ "assetId" ], "properties": { "name": { "type": "string", "maxLength": 120, "description": "Display name for a music track." }, "assetId": { "type": "string", "minLength": 1 }, "durationSeconds": { "type": "number", "description": "Optional: only used if the file does not state its own length.", "exclusiveMinimum": 0 } }, "additionalProperties": false }arguments 23 linesquiz_video_update_quiz_media unknown never probed
Attach uploaded files to a quiz. Omit a slot to leave it, send null to clear it. quiz: background (image or video, with dim 0.2-0.85), intro and outro (image or video, with seconds for an image, or trimStartSeconds, trimEndSeconds, audio "keep"|"mute" and volume for a video), soundEffects (enabled, correctAnswer, timerTick, countdownBeeps, transitions, each with a <name>Volume 0-1, and customAssets to use your own sound). questions[]: id with image, clip (a video played before the question, up to 60 seconds, which adds to the video length), background (or {"none": true} to turn the quiz background off). answers[]: id with image. Only asset ids from your own library are accepted.
{ "type": "object", "required": [ "quizId" ], "properties": { "quiz": { "type": "object", "additionalProperties": true }, "quizId": { "type": "string", "minLength": 1 }, "answers": { "type": "array", "items": { "type": "object", "additionalProperties": true } }, "questions": { "type": "array", "items": { "type": "object", "additionalProperties": true } } }, "additionalProperties": false }arguments 31 linesquiz_video_create_quiz_hook changes data unknown never probed
Create a hook for a quiz. `hook` is a pass-through object whose fields follow the HookInput schema (see OpenAPI spec).
{ "type": "object", "required": [ "quizId", "hook" ], "properties": { "hook": { "type": "object", "properties": {}, "description": "HookInput object (hookType, positionType, title, content, plus optional styling — see OpenAPI spec).", "additionalProperties": true }, "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." } }, "additionalProperties": false }arguments 21 linesquiz_video_update_quiz_hook changes data unknown never probed
Update an existing hook on a quiz. Requires quizId and numeric hookId; `updates` is a partial HookInput.
{ "type": "object", "required": [ "quizId", "hookId", "updates" ], "properties": { "hookId": { "type": "number", "description": "Numeric id of the hook to update (from list_quiz_hooks)." }, "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." }, "updates": { "type": "object", "properties": {}, "description": "Partial HookInput object; only included fields are updated.", "additionalProperties": true } }, "additionalProperties": false }arguments 26 linesquiz_video_download_render reads unknown never probed
Request a signed download URL for a completed render.
{ "type": "object", "required": [ "sessionId" ], "properties": { "sessionId": { "type": "string", "minLength": 1, "description": "Render session id for a completed render." } }, "additionalProperties": false }arguments 14 linesquiz_video_create_template changes data unknown never probed
Save a new custom template authored in the drag-and-drop editor. Required: template (the CustomTemplate JSON). Optional: name, description, thumbnail, isDefault, isPublic.
{ "type": "object", "required": [ "template" ], "properties": { "name": { "type": "string", "maxLength": 120, "minLength": 1 }, "isPublic": { "type": "boolean", "description": "Make discoverable to other users." }, "template": { "type": "object", "description": "CustomTemplate JSON with scenes.hook/question/answer and canvas." }, "isDefault": { "type": "boolean", "description": "Mark as your default template (replaces any existing default)." }, "thumbnail": { "type": "string", "description": "Optional preview image URL or data URI." }, "description": { "type": "string", "maxLength": 280 } }, "additionalProperties": false }arguments 34 linesquiz_video_update_template unknown never probed
Update an existing template. Any subset of fields may be supplied; omitted fields stay unchanged.
{ "type": "object", "required": [ "templateId" ], "properties": { "name": { "type": "string", "maxLength": 120, "minLength": 1 }, "isPublic": { "type": "boolean" }, "template": { "type": "object" }, "isDefault": { "type": "boolean" }, "thumbnail": { "type": [ "string", "null" ] }, "templateId": { "type": "string", "minLength": 1 }, "description": { "type": [ "string", "null" ], "maxLength": 280 } }, "additionalProperties": false }arguments 40 linesquiz_video_update_quiz changes data unknown never probed
Update a quiz. `updates` accepts any subset of quiz settings (title, description, format, template, timing, music, TTS, publish status, etc.).
{ "type": "object", "required": [ "quizId", "updates" ], "properties": { "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." }, "updates": { "type": "object", "properties": { "title": { "type": "string", "description": "Updated quiz title." }, "format": { "enum": [ "tiktok", "youtube" ], "type": "string", "description": "Output aspect ratio: \"tiktok\" (9:16 vertical) or \"youtube\" (16:9 horizontal)." }, "quizType": { "enum": [ "multiple_choice", "reveal_answer", "picture_guess" ], "type": "string", "description": "Quiz mechanic: multiple_choice, reveal_answer, or picture_guess." }, "template": { "type": "string", "description": "Visual template id (e.g. \"neon\", \"minimal\"). See /api/v1 templates list." }, "ttsSpeed": { "type": "number", "maximum": 1.5, "minimum": 0.5, "description": "Text-to-speech playback speed multiplier." }, "ttsVoice": { "type": "string", "description": "Text-to-speech voice identifier." }, "enableTTS": { "type": "boolean", "description": "Whether to read questions and answers aloud via text-to-speech." }, "description": { "type": "string", "description": "Updated quiz description." }, "isPublished": { "type": "boolean", "description": "Whether the quiz is publicly listed on quiz.video. Setting this also ends \"anyone with the link\" access; use quiz_video_share_quiz to choose between private, unlisted and public." }, "musicVolume": { "type": "number", "maximum": 1, "minimum": 0, "description": "Background music volume from 0 (silent) to 1 (full). Default 0.15." }, "revealStyle": { "type": "string", "description": "Animation style used when revealing the correct answer." }, "answerFontSize": { "type": "integer", "maximum": 163, "minimum": 58, "description": "Answer text size. 96 is the template default. Text never clips, so it stops growing once it fills its space. Applies to built-in and custom templates." }, "paceMultiplier": { "type": "number", "maximum": 1.6, "minimum": 0.3, "description": "Global timing multiplier applied to durations and animations." }, "countdownSeconds": { "type": "number", "maximum": 15, "minimum": 3, "description": "Seconds of countdown shown before each question (3–15)." }, "progressBarStyle": { "enum": [ "circle", "line" ], "type": "string", "description": "Countdown progress indicator style." }, "questionFontSize": { "type": "integer", "maximum": 204, "minimum": 72, "description": "Question text size. 120 is the template default: 180 asks for 150%. Text never clips, so it stops growing once it fills its space. Applies to built-in and custom templates." }, "themeDescription": { "type": "string", "description": "Natural-language custom visual theme prompt. Example: \"golden luxury game show\". The server saves the generated themeCustomization and applies it automatically." }, "backgroundMusicId": { "type": [ "number", "null" ], "description": "Background music track id from /api/v1/music. Omit to use the default YouTube-safe shared track; set null for silent." }, "showQuestionCount": { "type": "boolean", "description": "Whether to show the \"Question N of M\" indicator." }, "ttsAnswerTemplate": { "type": "string", "description": "Template string used to phrase the answer for TTS." }, "themeCustomization": { "type": "object", "properties": { "name": { "type": "string", "description": "Optional saved theme label, e.g. \"Golden Theme\"." }, "description": { "type": "string", "description": "Optional natural-language source description for the custom theme." }, "styleControls": { "type": "boolean", "description": "Set automatically by the API when an override is sent. Makes overrides reach every scene and custom templates, not just preset question and answer slides." }, "textColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Hex color of question and on-screen text." }, "fontFamilyOverride": { "enum": [ "Inter", "Poppins", "Roboto", "Montserrat", "Open Sans", "Lato", "Raleway", "Source Sans 3", "Space Grotesk", "Manrope", "Work Sans", "DM Sans", "Lexend", "Nunito", "Quicksand", "Outfit", "Sora", "Albert Sans", "Bricolage Grotesque", "Playfair Display", "Merriweather", "Cormorant Garamond", "Fraunces", "Crimson Pro", "Cinzel", "Oswald", "Bebas Neue", "Anton", "Archivo Black", "Big Shoulders", "Bungee", "Bangers", "Lilita One", "Fredoka", "Baloo 2", "Exo 2", "Orbitron", "Press Start 2P", "Caveat", "Dancing Script", "Pacifico", "Permanent Marker", "Noto Sans", "Noto Naskh Arabic", "Vazirmatn" ], "type": "string", "description": "Font for all video text. A font without letters for the quiz language falls back to that language's own font for those letters." }, "accentColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Primary accent hex color, e.g. \"#F6C945\"." }, "secondaryColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Secondary accent hex color." }, "answerTextColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Hex color of answer text." }, "backgroundColorOverride": { "type": "string", "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", "description": "Solid background hex color." } }, "description": "Explicit custom theme to save on the quiz. Use this when you already know the exact colors/font.", "additionalProperties": false }, "ttsQuestionTemplate": { "type": "string", "description": "Template string used to phrase the question for TTS." } }, "description": "Partial quiz settings object; only included fields are updated.", "additionalProperties": true } }, "additionalProperties": false }arguments 229 linesquiz_video_delete_quiz_hook changes data unknown never probed
Delete a single hook from a quiz.
{ "type": "object", "required": [ "quizId", "hookId" ], "properties": { "hookId": { "type": "number", "description": "Numeric id of the hook to delete." }, "quizId": { "type": "string", "minLength": 1, "description": "Quiz ID in YouTube-style 11-character base64url format." } }, "additionalProperties": false }arguments 19 linesquiz_video_create_render changes data unknown never probed
Queue a new video render for an existing quiz. Returns the render sessionId; poll quiz_video_get_render until its status is "completed" (typically 1-5 minutes), then call quiz_video_download_render to obtain the signed MP4 URL. The quiz itself is viewable immediately at /quiz/{slug}/ regardless of render status.
{ "type": "object", "required": [ "quizId" ], "properties": { "quizId": { "type": "string", "minLength": 1, "description": "ID of the quiz to render into a video." } }, "additionalProperties": false }arguments 14 linesquiz_video_delete_template changes data unknown never probed
Permanently delete a custom template you own. Quizzes that have a snapshot of this template are unaffected — the snapshot remains in their themeCustomization.
{ "type": "object", "required": [ "templateId" ], "properties": { "templateId": { "type": "string", "minLength": 1 } }, "additionalProperties": false }arguments 13 lines
This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.
Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - Prove it is yours. Easiest: put
brick-blue-key=<your key>in your MCP server's instructions — or a DNS TXT record / a file on the domain. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's idf186e9c1632762b1.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/f186e9c1632762b1/claim.
Over MCP: the claim_endpoint tool.
[](https://brick.blue/agent/f186e9c1632762b1?ref=badge)
The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.
An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- paid reviews
- 0
- positive
- 0
- negative
- 0
- score
- —
0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.