Quiz
Creation returns immediately, so poll the video or listen with webhooks.
/v1/quiz-videosCreate a quiz video
itemsrequiredtemplatestandardlanguageEnglishvoiceIdpNInz6obpgDQGcFmaJgBvoiceProvider11voiceStyleanswerTemplate{{answer}}generateBackgroundImagetruebackgroundImagePromptBible times, pyramids, Egypt, pharaohgenerateQuestionImagetrueimageStyleANIMErenderwebhookUrltextrequiredtypequestionanswerslevel1textrequiredcorrectfalsevoiceStyle.stability38voiceStyle.similarityBoost75voiceStyle.style0voiceStyle.speed100render.formatstandardrender.frameRate30curl -X POST "https://api.vsub.io/v1/quiz-videos" \
-H "Authorization: Bearer vp_a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c6d7e8f90" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "type": "comment", "text": "Only 1 in 10 people get all of these right" },
{
"text": "Which planet is closest to the sun?",
"answers": [
{ "text": "Venus" },
{ "text": "Mercury", "correct": true },
{ "text": "Mars" }
]
},
{
"text": "How many bones are in the human body?",
"answers": [
{ "text": "206", "correct": true },
{ "text": "218" },
{ "text": "194" }
]
}
],
"backgroundImagePrompt": "galaxy",
"webhookUrl": "https://your-app.example.com/hooks/vsub-video"
}'{
"id": "9f0c1d5e-3a1b-4c2f-9d7e-8b1a2c3d4e5f",
"status": "processing",
"step": "create-vocal",
"render": false,
"createdAt": "2026-08-05T09:20:11.000Z",
"editorUrl": "https://vsub.io/workspace/editor/9f0c1d5e-3a1b-4c2f-9d7e-8b1a2c3d4e5f"
}Generation runs in the background. Follow the video with Video status or let a webhook tell you when it's done.
More examples
Each of these is the body of the same request, the url and headers don't change.
Climbing the levels
The multi levels template draws a ladder of four levels and moves up it as the questions get harder, so each question carries a level and only its correct answer. Questions of the same level stay together, and the level never goes back down.
{
"template": "multi-levels",
"items": [
{ "text": "What is the capital of France?", "level": 1, "answers": [{ "text": "Paris" }] },
{ "text": "What is the capital of Australia?", "level": 2, "answers": [{ "text": "Canberra" }] },
{ "text": "What is the capital of Kazakhstan?", "level": 3, "answers": [{ "text": "Astana" }] },
{ "text": "What is the capital of Bhutan?", "level": 4, "answers": [{ "text": "Thimphu" }] }
]
}Announcing the answer in another language
answerTemplate wraps the answer before the voice reads it, which is how you turn a bare word into a sentence. Setting language switches the narration to the multilingual model, and turning the generated images off falls back to your workspace background video.
{
"language": "Spanish",
"answerTemplate": "La respuesta es {{answer}}",
"voiceId": "aEO01A4wXwd1O8GPgGlF",
"voiceStyle": { "stability": 50, "speed": 95 },
"generateBackgroundImage": false,
"generateQuestionImage": false,
"items": [
{
"text": "¿Cuál es el río más largo del mundo?",
"answers": [
{ "text": "El Nilo" },
{ "text": "El Amazonas", "correct": true },
{ "text": "El Danubio" }
]
}
]
}The gameplay behind the quiz, the fonts, the answer colours and the timer come from your workspace defaults, the same ones the app starts a quiz video with. Anything the request doesn't cover, such as swapping a generated image or retiming a question, is still yours to change in the editor before rendering.
