Skip to main content
Glama

Create form

create_form

Create a form in the team this token is bound to. Pass the questions array and report configuration in one call instead of following up with per-question calls. In the outcome_quiz scene report.outcomes is REQUIRED at create time (TrueFalse votes via trueOutcomes/falseOutcomes). In the ai_quiz scene nothing is scored: set custom question codes and pass report.aiReport.instructions referencing them as {{code}} in this same call. For a scored_quiz with dimensions, define report.dimensionAnalysis.dimensions with codes and formulas over question codes in this same call; a question may override its score for one dimension via choices[i].dimensionScores (TrueFalse: trueDimensionScores/falseDimensionScores). The returned structuredContent.fields carries each question code — read those first if you need to reference them: a scored_quiz totals its question scores by default, and only needs report.formula (e.g. {{q_a}} * 2 + {{q_b}}) for a custom total; dimensions go in report.dimensionAnalysis via update_form / set_dimension_analysis. Creates the primary language only; add other languages with create_form_translation. Limit: a quiz holds at most 50 questions on every plan (page breaks, statements and carousels do not count). An ai_quiz holds at most 20. Not idempotent: if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.

Input Schema

NameRequiredDescriptionDefault
sceneYesknowledge_quiz = graded exam (correctAnswer + score); scored_quiz = option scoring + report formula; outcome_quiz = typing quiz (votes decide which outcome type wins); ai_quiz = no scoring, an AI writes each report from report.aiReport (may include Attachment uploads). Immutable after creation.
themeNoOptional visual theme matching the quiz topic/mood. Default light. Pick the one that best fits the quiz: light (clean neutral bright; default — formal/general quizzes); corporate (professional blue+gray; B2B, career, business assessments); dark (modern sleek dark; tech, night, cool personality quizzes); cupcake (soft pink cute rounded; fun, food, kids, lighthearted); pastel (gentle pastel artsy; lifestyle, aesthetics, soft mood); valentine (pink romantic hearts; love, relationships, holidays); synthwave (neon purple/pink retro; gaming, trends, bold personality); luxury (dark + gold premium; finance, luxury brands, high-end); forest (deep green nature; environment, health, outdoors); coffee (warm brown cozy; food & drink, cafe, lifestyle); autumn (warm orange/brown seasonal; autumn, cozy, harvest); halloween (purple+orange spooky; Halloween, horror, festive fun); night (deep calm blue; astronomy, mindfulness, calm tech); cyberpunk (high-contrast neon yellow; tech, esports, gaming).light
titleYesForm title (1-200 characters). Plain text: no HTML or Markdown.
reportNoReport configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, rejected in the knowledge_quiz scene, which has no dimensions). outcome: only the outcomes key (required at create time) and sectionOrder are allowed. ai_quiz: only aiReport and sectionOrder are allowed.
languageNoDefault en_USen_US
openGraphNoSocial share card (Open Graph) settings: the title / description / image shown when the answer link is shared to social media or chat apps. In update_form each sub-key is merged independently (only the keys you pass change; pass an empty string to clear one). SEO keywords are generated automatically and cannot be set here.
questionsNoOptional. A list of questions/page breaks to create at once, written into form.fields in order. Question types: SingleCheck/MultiCheck/TrueFalse; FillBlank (free text — scored in quiz via correctAnswer, an unscored data-collection field in scored_quiz); DropDown (single or multiple via `multiple`, use it instead of SingleCheck/MultiCheck when there are more than 20 choices); Cascade (hierarchical choices via children, scored_quiz / ai_quiz); Ordering (quiz only, correctAnswer = all choices in the correct order); DateField/TimeField as unscored data-collection fields (scored_quiz / ai_quiz); NumberField (quiz: optional numeric correctAnswer + score; scored_quiz: the submitted number feeds report formulas); Rate (scored_quiz / ai_quiz; in scored_quiz the 1..steps rating value is the question score unless per-star scores are set in the web app); Attachment (ai_quiz only: a file upload with `kind` image / audio / video / document that the AI reads). Insert a page break with { type: "Breaker" }, which the AI can interleave between questions to paginate. Display blocks collect no answer: { type: "Statement", content } is a rich-text passage (intro / section lead-in / disclaimer) and { type: "Swiper", items } an image carousel. At most 100 items.
systemTextNoOptional. Answer-page system text overrides as a key→text map; empty values are dropped and fall back to the language default.
descriptionNoOptional form description. Allows description-scope rich text (including <img src>). Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not "- item", <h2> not "## heading". This field also accepts an inline image: put an <img src="..."> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one.

Output Schema

NameRequiredDescriptionDefault
idNoThe new form id
urlNoAdmin edit URL
sceneNoknowledge_quiz / scored_quiz / outcome_quiz / ai_quiz
themeNoAnswer-page theme name
titleNoForm title
fieldsNoEvery question code — read these before writing a formula or dimensions
languageNoPrimary language of the form
outcomesNoOutcome types (outcome_quiz scene only)
shareUrlNoPublic share / answer link
hasReportNoWhether a report configuration was passed
publicTokenNoToken behind the public answer link
questionCountNoHow many questions / page breaks were created

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / questions / items / description
      Previous value: -"One question, a page break, or a display block (Statement / Swiper). FIELD APPLICABILITY — `type` is the only field the schema always requires; `type` (plus the form scene) decides which of the remaining fields apply, and one that does not apply is either rejected with an explanatory error or ignored, so never pass it. Breaker (page break) takes nothing but `type`. Display blocks collect no answer, are never scored and are allowed in every scene: Statement takes `content` (the rich text IS the block) and Swiper takes `items` (an image carousel); both also accept an optional `name`, a label used by the web editor only, and neither takes any question field. Every question type takes `name` (required) plus the optional `code` / `description` / `explain` / `required`. Type-specific fields: SingleCheck / MultiCheck / DropDown / Ordering / Cascade need `choices` (Cascade nests via choices[i].children; DropDown also takes `multiple`; Ordering also takes `shuffle`); TrueFalse has a fixed pair of options and takes `trueLabel` / `falseLabel` instead of `choices`; DateField / TimeField take `precision`; NumberField takes `min` / `max` / `unit` / `decimalPlaces`; Rate takes `steps` / `words`; Attachment takes `kind` (required) / `maxFiles`. Scene rules for scoring: quiz — `correctAnswer` plus `score` > 0 are REQUIRED on SingleCheck / MultiCheck / DropDown / Ordering, optional on FillBlank (add `aiMatch` to have AI grade it instead of exact string match) and NumberField (omit both and the question is just a data-collection field), and rejected on DateField / TimeField; scored_quiz — score each option via choices[i].score; `correctAnswer` / `score` are rejected on NumberField and Rate (the submitted value is the score) and on FillBlank (free text is collected only, never scored); outcome — nothing is scored: `correctAnswer` / `score` / `aiMatch` are all rejected, every choice needs `outcomes` (TrueFalse votes via `trueOutcomes` / `falseOutcomes`); ai_quiz — nothing is scored: `correctAnswer` / `score` / `aiMatch` / choices[i].score are all rejected; an AI reads the answers and writes the report from report.aiReport. Type availability per scene: Ordering is knowledge_quiz-only; FillBlank works in knowledge_quiz (optionally scored) and in scored_quiz (data-collection only — its answer never feeds a score or a report formula); Cascade, Rate, DateField and TimeField work in scored_quiz and ai_quiz only; the outcome_quiz scene accepts only SingleCheck / MultiCheck / DropDown / TrueFalse / Breaker; the ai_quiz scene accepts every type except Ordering, plus Attachment (ai_quiz-only via MCP, at most 2 per form)."New value: +"One question, a page break, or a display block (Statement / Swiper). FIELD APPLICABILITY — `type` is the only field the schema always requires; `type` (plus the form scene) decides which of the remaining fields apply, and one that does not apply is either rejected with an explanatory error or ignored, so never pass it. Breaker (page break) takes nothing but `type`. Display blocks collect no answer, are never scored and are allowed in every scene: Statement takes `content` (the rich text IS the block) and Swiper takes `items` (an image carousel); both also accept an optional `name`, a label used by the web editor only, and neither takes any question field. Every question type takes `name` (required) plus the optional `code` / `description` / `explain` / `required`. Type-specific fields: SingleCheck / MultiCheck / DropDown / Ordering / Cascade need `choices` (Cascade nests via choices[i].children; DropDown also takes `multiple`; Ordering also takes `shuffle`); TrueFalse has a fixed pair of options and takes `trueLabel` / `falseLabel` instead of `choices`; DateField / TimeField take `precision`; NumberField takes `min` / `max` / `unit` / `decimalPlaces`; Rate takes `steps` / `words` / `rateStyle`; Attachment takes `kind` (required) / `maxFiles`. Scene rules for scoring: quiz — `correctAnswer` plus `score` > 0 are REQUIRED on SingleCheck / MultiCheck / DropDown / Ordering, optional on FillBlank (add `aiMatch` to have AI grade it instead of exact string match) and NumberField (omit both and the question is just a data-collection field), and rejected on DateField / TimeField; scored_quiz — score each option via choices[i].score; `correctAnswer` / `score` are rejected on NumberField and Rate (the submitted value is the score) and on FillBlank (free text is collected only, never scored); outcome — nothing is scored: `correctAnswer` / `score` / `aiMatch` are all rejected, every choice needs `outcomes` (TrueFalse votes via `trueOutcomes` / `falseOutcomes`); ai_quiz — nothing is scored: `correctAnswer` / `score` / `aiMatch` / choices[i].score are all rejected; an AI reads the answers and writes the report from report.aiReport. Type availability per scene: Ordering is knowledge_quiz-only; FillBlank works in knowledge_quiz (optionally scored) and in scored_quiz (data-collection only — its answer never feeds a score or a report formula); Cascade, Rate, DateField and TimeField work in scored_quiz and ai_quiz only; the outcome_quiz scene accepts only SingleCheck / MultiCheck / DropDown / TrueFalse / Breaker; the ai_quiz scene accepts every type except Ordering, plus Attachment (ai_quiz-only via MCP, at most 2 per form)."
    • addedInput schema / properties / questions / items / properties / rateStyle
      Added value: +{
      +  "description": "Rate only: how the rating control looks — \"star\" (default, a row of stars) or \"number\" (a row of numbered circles 1..steps, reads more like a professional self-assessment scale). Display only: the submitted value is 1..steps either way. Rejected for other question types.",
      +  "enum": [
      +    "star",
      +    "number"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / report / properties / scoreStyle
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "scale",
      +        "ring",
      +        "gauge",
      +        "steps"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "knowledge_quiz / scored_quiz only: how the result page's overall score card shows the result — scale (a level bar with a marker), ring (a progress ring with the score inside), gauge (a semicircle gauge split by level with a needle) or steps (one bar per level, taller for higher levels). Display only. null (the default) follows the personalized theme: the applied library design's style, or scale when none is applied. Styles that need data the quiz lacks (e.g. steps without levels) fall back to scale."
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / report / properties / levelOrder
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "asc",
      +        "desc"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "knowledge_quiz / scored_quiz only: display order of the score levels — asc (default, lowest level first) or desc (highest level first). Applies to the overall levels and every dimension's levels, in the editor and on the result page's level scale. Display only: levels are still stored and matched by minScore ascending, so pass report.levels in ascending order either way. null restores asc."
      +}
  4. Changed3 schema fields changed
    • removedInput schema / properties / report / properties / levels / items / properties / color
      Removed value: -{
      -  "description": "Level color, e.g. #4caf50",
      -  "type": "string"
      -}
    • removedInput schema / properties / report / properties / outcomes / items / properties / color
      Removed value: -{
      -  "description": "Theme color of this outcome, e.g. \"#4caf50\". Optional.",
      -  "maxLength": 30,
      -  "type": "string"
      -}
    • changedInput schema / properties / report / properties / sectionOrder / description
      Previous value: -"Any scene: the order of the movable result-page sections — dimension (dimension breakdown / radar), booking (the Cal.com booking block), feedback (the feedback block). The overall score / outcome always stays on top and the answer review / share area at the bottom. Keys you leave out keep their default relative order after the ones you list; [] restores the default (dimension, booking, feedback). Lead with booking when the quiz exists to book calls."New value: +"Any scene: the order of the movable result-page sections — dimension (dimension breakdown / radar), booking (the Cal.com booking block), feedback (the feedback block). The overall score / outcome always stays on top and the answer review / share area at the bottom. Keys you leave out keep their default relative order after the ones you list; [] restores the default (booking, dimension, feedback)."
  5. Changed2 schema fields changed
    • addedInput schema / properties / report / properties / levels / items / properties / redirectUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 2048,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "http(s) link respondents are sent to right after submitting when the score falls in this level, instead of seeing the result page. Only takes effect while redirects are switched on (update_form_settings resultRedirect, Pro). In update_form, omit it to keep the link of the current level with the same label; pass \"\" or null to remove it. Overall levels only."
      +}
    • addedInput schema / properties / report / properties / outcomes / items / properties / redirectUrl
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 2048,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "outcome_quiz only: http(s) link respondents are sent to right after submitting when this outcome wins, instead of seeing the result page. Only takes effect while redirects are switched on (update_form_settings resultRedirect, Pro). In update_form, omit it to keep the outcome's current link; pass \"\" or null to remove it. Rejected on ai_quiz result tags."
      +}
  6. Changed2 schema fields changed
    • changedInput schema / properties / language / default
      Previous value: -"zh_CN"New value: +"en_US"
    • changedInput schema / properties / language / description
      Previous value: -"Default zh_CN"New value: +"Default en_US"
  7. Changed4 schema fields changed
    • addedInput schema / properties / report / properties / levels / items / properties / description / description
      Added value: +"Result-page text shown when the score falls in this level. Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\"."
    • removedInput schema / properties / report / properties / suggestionsTemplate
      Removed value: -{
      -  "description": "Suggestions template; same rich-text rules as summaryTemplate. Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\".",
      -  "maxLength": 5000,
      -  "type": "string"
      -}
    • changedInput schema / properties / report / properties / summaryTemplate / description
      Previous value: -"Summary template. Allows description-scope rich text (headings/lists/links/images/<span> etc.). Supports math formulas: write `<span data-type=\"math-formula\" data-latex=\"x^2+1\"></span>`, rendered by KaTeX on the frontend. Supports variable placeholders `<art-field data-type=\"fieldVariable\" data-cid=\"score\"></art-field>` (cid can be score / level / a question code). Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\". This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."New value: +"Summary template. Allows description-scope rich text (headings/lists/links/images/<span> etc.). Supports math formulas: write `<span data-type=\"math-formula\" data-latex=\"x^2+1\"></span>` with the LaTeX in data-latex and nothing inside; the server renders it. Two variables are available: write {{score}} (the overall score) and {{level}} (the matched level label); they are stored as `<art-field data-type=\"fieldVariable\" data-cid=\"score\"></art-field>`. Any other variable is rejected. Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\". This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."
    • changedInput schema / properties / title / description
      Previous value: -"Form title (1-200 characters)"New value: +"Form title (1-200 characters). Plain text: no HTML or Markdown."
  8. Changed7 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"Optional form description. Allows description-scope rich text (including <img src>). This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."New value: +"Optional form description. Allows description-scope rich text (including <img src>). Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\". This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."
    • changedInput schema / properties / questions / items / properties / content / description
      Previous value: -"Statement only, and required there: the text respondents read — an intro, a section lead-in, instructions, a disclaimer. The block renders this and nothing else. Same rich-text rules as `description` (headings / lists / links / <img src> / math formulas). This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."New value: +"Statement only, and required there: the text respondents read — an intro, a section lead-in, instructions, a disclaimer. The block renders this and nothing else. Same rich-text rules as `description` (headings / lists / links / <img src> / math formulas). Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\". This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."
    • changedInput schema / properties / questions / items / properties / description / description
      Previous value: -"Optional supplementary note for the question. Allows a wider HTML subset: everything the stem allows + <h1>-<h6> <ul> <ol> <li> <blockquote> <a href> <img src> <hr> <art-field> (variable placeholder, data-type / data-cid); unsafe protocols (javascript:/data:) and unknown attributes are stripped. This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."New value: +"Optional supplementary note for the question. Allows a wider HTML subset: everything the stem allows + <h1>-<h6> <ul> <ol> <li> <blockquote> <a href> <img src> <hr> <art-field> (variable placeholder, data-type / data-cid); unsafe protocols (javascript:/data:) and unknown attributes are stripped. Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\". This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."
    • changedInput schema / properties / questions / items / properties / explain / description
      Previous value: -"Optional answer explanation. The frontend renders it in the question's \"answer explanation\" field (DescriptionEditor); the rich-text rules are identical to description. Do not stuff the answer explanation into description — that is the question's supplementary note and will not be shown as an explanation to respondents/graders."New value: +"Optional answer explanation. The frontend renders it in the question's \"answer explanation\" field (DescriptionEditor); the rich-text rules are identical to description. Do not stuff the answer explanation into description — that is the question's supplementary note and will not be shown as an explanation to respondents/graders. Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\"."
    • changedInput schema / properties / report / properties / outcomes / items / properties / description / description
      Previous value: -"Result-page content shown when this outcome wins. Allows description-scope rich text (headings/lists/links/images etc.). This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."New value: +"Result-page content shown when this outcome wins. Allows description-scope rich text (headings/lists/links/images etc.). Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\". This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."
    • changedInput schema / properties / report / properties / suggestionsTemplate / description
      Previous value: -"Suggestions template; same rich-text rules as summaryTemplate."New value: +"Suggestions template; same rich-text rules as summaryTemplate. Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\"."
    • changedInput schema / properties / report / properties / summaryTemplate / description
      Previous value: -"Summary template. Allows description-scope rich text (headings/lists/links/images/<span> etc.). Supports math formulas: write `<span data-type=\"math-formula\" data-latex=\"x^2+1\"></span>`, rendered by KaTeX on the frontend. Supports variable placeholders `<art-field data-type=\"fieldVariable\" data-cid=\"score\"></art-field>` (cid can be score / level / a question code). This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."New value: +"Summary template. Allows description-scope rich text (headings/lists/links/images/<span> etc.). Supports math formulas: write `<span data-type=\"math-formula\" data-latex=\"x^2+1\"></span>`, rendered by KaTeX on the frontend. Supports variable placeholders `<art-field data-type=\"fieldVariable\" data-cid=\"score\"></art-field>` (cid can be score / level / a question code). Write HTML, never Markdown: <strong>bold</strong> not **bold**, <ul><li> not \"- item\", <h2> not \"## heading\". This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one."
  9. Changed1 schema field changed
    • changedInput schema / properties / report / properties / aiReport / properties / length / description
      Previous value: -"Report length: brief (about 150 words, verdict + 1-2 findings + next steps), standard (default, about 300 words, 2-4 sections, one chart) or detailed (about 650 words, up to 6 sections and 3 charts). null restores standard. A length rule written in style takes precedence."New value: +"Report length: brief (about 150 words, verdict + 1-2 findings + next steps), standard (default, about 300 words, 2-4 sections, one chart) or detailed (about 650 words, up to 6 sections and 3 charts). null restores standard. brief and standard are hard caps: a longer word count, more sections or more detail asked for in instructions or style is ignored. Only detailed lets a length rule written in style take precedence."
  10. Changed1 schema field changed
    • addedInput schema / properties / report / properties / aiReport / properties / length
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "brief",
      +        "standard",
      +        "detailed"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Report length: brief (about 150 words, verdict + 1-2 findings + next steps), standard (default, about 300 words, 2-4 sections, one chart) or detailed (about 650 words, up to 6 sections and 3 charts). null restores standard. A length rule written in style takes precedence."
      +}
  11. Changed1 schema field changed
    • removedInput schema / properties / report / properties / hideOverallScore
      Removed value: -{
      -  "description": "Hide scores on the result page: the overall score (score ring / number / percentile) AND every dimension score (score / max score / progress bar / score rate) are hidden together, keeping level names, level descriptions, the level ladder, dimension levels and the summary. Note the summary template still renders its score variable if you left one in. Scored scenes only (ignored for outcome). Default false.",
      -  "type": "boolean"
      -}
  12. Changed7 schema fields changed
    • changedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / children / items / properties / dimensionScores / description
      Previous value: -"scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Any choice carrying it switches the question to per-dimension scoring: for each dimension the question contributes the selected choices' scores for that dimension (a dimension not listed on the chosen choice counts 0), and a dimension without a formula automatically sums these contributions across questions. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score fed to report.formula. Rejected in the knowledge_quiz / outcome_quiz scenes."New value: +"scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Each entry overrides this choice's score for that one dimension; a dimension not listed falls back to the plain choice `score`, and an explicit 0 really counts 0. Dimension scores still come only from each dimension's required formula: inside it `{{q}}` is the sum of the selected choices' override-or-score for that dimension, and a question the formula does not reference adds nothing. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score (summed by default, or fed to report.formula when set). Rejected in the knowledge_quiz / outcome_quiz scenes."
    • changedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / dimensionScores / description
      Previous value: -"scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Any choice carrying it switches the question to per-dimension scoring: for each dimension the question contributes the selected choices' scores for that dimension (a dimension not listed on the chosen choice counts 0), and a dimension without a formula automatically sums these contributions across questions. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score fed to report.formula. Rejected in the knowledge_quiz / outcome_quiz scenes."New value: +"scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Each entry overrides this choice's score for that one dimension; a dimension not listed falls back to the plain choice `score`, and an explicit 0 really counts 0. Dimension scores still come only from each dimension's required formula: inside it `{{q}}` is the sum of the selected choices' override-or-score for that dimension, and a question the formula does not reference adds nothing. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score (summed by default, or fed to report.formula when set). Rejected in the knowledge_quiz / outcome_quiz scenes."
    • changedInput schema / properties / questions / items / properties / choices / items / properties / dimensionScores / description
      Previous value: -"scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Any choice carrying it switches the question to per-dimension scoring: for each dimension the question contributes the selected choices' scores for that dimension (a dimension not listed on the chosen choice counts 0), and a dimension without a formula automatically sums these contributions across questions. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score fed to report.formula. Rejected in the knowledge_quiz / outcome_quiz scenes."New value: +"scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Each entry overrides this choice's score for that one dimension; a dimension not listed falls back to the plain choice `score`, and an explicit 0 really counts 0. Dimension scores still come only from each dimension's required formula: inside it `{{q}}` is the sum of the selected choices' override-or-score for that dimension, and a question the formula does not reference adds nothing. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score (summed by default, or fed to report.formula when set). Rejected in the knowledge_quiz / outcome_quiz scenes."
    • changedInput schema / properties / report / properties / formula / description
      Previous value: -"Total-score formula for the scored_quiz scene, and the ONLY source of the overall score there — summing question scores is the knowledge_quiz rule, so a scored_quiz without this formula scores null and no level ever matches. Required whenever levels are set. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` for custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. It may also reference dimension codes the same way (e.g. `{{dim_d}} * 2 + {{dim_i}}`): dimensions are computed first, so the overall score can be a weighted sum of dimension scores; a dimension referenced here cannot be removed later. Supported operators: + - * / ( ); every referenced code must exist in the current form (questions and dimensions). Setting dimension formulas does NOT cover this — the overall formula is separate."New value: +"Optional custom total-score formula for the scored_quiz scene. Leave it out to use the default: the overall score is the sum of every scored question (choice scores, plus the star value / configured score of Rate questions; NumberField / DateField / TimeField raw values are not summed) and the full mark is the sum of each question's highest attainable score. Set it only when you need weights, dimension combinations or NumberField / date values. In update_form, omitting it keeps the current formula; pass \"\" to remove it. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` for custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. It may also reference dimension codes the same way (e.g. `{{dim_d}} * 2 + {{dim_i}}`): dimensions are computed first, so the overall score can be a weighted sum of dimension scores; a dimension referenced here cannot be removed later. Supported operators: + - * / ( ); every referenced code must exist in the current form (questions and dimensions). Setting dimension formulas does NOT cover this — the overall formula is separate."
    • changedInput schema / properties / report / properties / levels / description
      Previous value: -"Score levels (at most 20), ordered by upper bound ascending. Example: [{label:\"Needs improvement\",upTo:60},{label:\"Good\",upTo:80},{label:\"Excellent\"}] means (-∞,60) / [60,80) / [80,+∞). The last level must omit upTo. In the scored_quiz scene these levels are matched against the formula score, so formula must be set alongside them (rejected otherwise)."New value: +"Score levels (at most 20), ordered by upper bound ascending. Example: [{label:\"Needs improvement\",upTo:60},{label:\"Good\",upTo:80},{label:\"Excellent\"}] means (-∞,60) / [60,80) / [80,+∞). The last level must omit upTo. In the scored_quiz scene these levels are matched against the overall score: report.formula when set, otherwise the sum of every scored question."
    • changedInput schema / properties / report / properties / outcomes / description
      Previous value: -"Outcome scene only (required there at create time, 1-50 items): the outcome types this quiz can result in. Each question choice votes for outcome codes; the outcome with the most votes wins (ties resolved by array order, earlier wins). Rejected in the knowledge_quiz / scored_quiz scenes."New value: +"outcome_quiz: the outcome types this quiz can result in (required at create time, 1-50 items). Each question choice votes for outcome codes; the outcome with the most votes wins (ties resolved by array order, earlier wins). ai_quiz: optional result tags (0-10; [] removes them) — before writing each report the AI picks one tag per respondent, so leads can be filtered and pushed by it; put the criteria for choosing a tag in its description, and an optional cta shown under that respondent's report. Tags are internal: respondents never see the tag name. Rejected in the knowledge_quiz / scored_quiz scenes."
    • removedInput schema / properties / report / properties / outcomes / minItems
      Removed value: -1
  13. Changed1 schema field changed
    • removedInput schema / properties / questions / items / properties / collectOnly
      Removed value: -{
      -  "description": "scored_quiz scene only, for SingleCheck / MultiCheck / DropDown / Cascade / TrueFalse / Rate: collect the answer as data without scoring it (e.g. age range, industry, how they heard about you). A collect-only question produces no score, cannot be referenced by report.formula or dimension formulas, and is shown with plain radio buttons / checkboxes instead of A/B/C letter badges. Do not pass any scoring input (choices[i].score, dimensionScores, score, correctAnswer) together with it. Rejected in other scenes.",
      -  "type": "boolean"
      -}
  14. Changed5 schema fields changed
    • changedInput schema / properties / report / description
      Previous value: -"Report configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, optional for the knowledge_quiz scene). outcome: only the outcomes key (required at create time) and sectionOrder are allowed. ai_quiz: only aiReport and sectionOrder are allowed."New value: +"Report configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, rejected in the knowledge_quiz scene, which has no dimensions). outcome: only the outcomes key (required at create time) and sectionOrder are allowed. ai_quiz: only aiReport and sectionOrder are allowed."
    • changedInput schema / properties / report / properties / dimensionAnalysis / description
      Previous value: -"Multi-dimension analysis (radar chart + per-dimension breakdown). Each dimension has a stable code (pass dimensions[].code or let the server generate one; returned in structuredContent). In the knowledge_quiz scene set fieldCodes per dimension. In the scored_quiz scene every dimension needs a formula over question codes (e.g. `{{q1}} + {{q2}}`); a question may override its score for one dimension via choices[i].dimensionScores, otherwise the formula uses its plain choice score. If you set custom question codes you can configure everything in one create_form call; otherwise create the questions first, then get_form to read the auto-generated codes."New value: +"Multi-dimension analysis (radar chart + per-dimension breakdown); scored_quiz scene only — knowledge quizzes have no dimensions and reject it. Each dimension has a stable code (pass dimensions[].code or let the server generate one; returned in structuredContent). Every dimension needs a formula over question codes (e.g. `{{q1}} + {{q2}}`); a question may override its score for one dimension via choices[i].dimensionScores, otherwise the formula uses its plain choice score. If you set custom question codes you can configure everything in one create_form call; otherwise create the questions first, then get_form to read the auto-generated codes."
    • removedInput schema / properties / report / properties / dimensionAnalysis / properties / dimensions / items / properties / fieldCodes
      Removed value: -{
      -  "description": "Required in the knowledge_quiz scene: the question codes this dimension covers (dimension score = sum of these field scores). Each code must exist in the form. Ignored in the scored_quiz scene, where the formula decides which questions count.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • changedInput schema / properties / report / properties / dimensionAnalysis / properties / dimensions / items / properties / formula / description
      Previous value: -"Required in the scored_quiz scene: the dimension score formula, usually the sum of the questions in this dimension. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` when you set custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. Inside a dimension formula `{{q}}` is the question's score for THIS dimension: its choices[i].dimensionScores override when set, otherwise the plain choice score. A dimension formula cannot reference other dimensions (only report.formula can). Supported operators: + - * / ( ). Ignored in the knowledge_quiz scene."New value: +"Required: the dimension score formula, usually the sum of the questions in this dimension. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` when you set custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. Inside a dimension formula `{{q}}` is the question's score for THIS dimension: its choices[i].dimensionScores override when set, otherwise the plain choice score. A dimension formula cannot reference other dimensions (only report.formula can). Supported operators: + - * / ( )."
    • changedInput schema / properties / report / properties / dimensionAnalysis / properties / dimensions / items / properties / standardScore / description
      Previous value: -"Standard score (the radar-chart standard line; in the scored_quiz scene it also acts as the dimension full mark). When omitted in the scored_quiz scene it defaults to the attainable maximum: the formula evaluated with every referenced question at its highest score for this dimension (choices[i].dimensionScores override, else the choice score); 0 when that cannot be estimated, e.g. the formula uses NumberField / date questions. knowledge_quiz defaults to 0."New value: +"Standard score: the radar-chart standard line and the dimension full mark. When omitted it defaults to the attainable maximum: the formula evaluated with every referenced question at its highest score for this dimension (choices[i].dimensionScores override, else the choice score); 0 when that cannot be estimated, e.g. the formula uses NumberField / date questions."
  15. Changed11 schema fields changed
    • changedInput schema / properties / questions / description
      Previous value: -"Optional. A list of questions/page breaks to create at once, written into form.fields in order. Question types: SingleCheck/MultiCheck/TrueFalse; FillBlank (free text — scored in quiz via correctAnswer, an unscored data-collection field in scored_quiz); DropDown (single or multiple via `multiple`, use it instead of SingleCheck/MultiCheck when there are more than 20 choices); Cascade (hierarchical choices via children, scored_quiz only); Ordering (quiz only, correctAnswer = all choices in the correct order); DateField/TimeField as unscored data-collection fields (scored_quiz only); NumberField (quiz: optional numeric correctAnswer + score; scored_quiz: the submitted number feeds report formulas); Rate (scored_quiz only, the 1..steps rating value is the question score unless per-star scores are set in the web app). Insert a page break with { type: \"Breaker\" }, which the AI can interleave between questions to paginate. Display blocks collect no answer: { type: \"Statement\", content } is a rich-text passage (intro / section lead-in / disclaimer) and { type: \"Swiper\", items } an image carousel. At most 100 items."New value: +"Optional. A list of questions/page breaks to create at once, written into form.fields in order. Question types: SingleCheck/MultiCheck/TrueFalse; FillBlank (free text — scored in quiz via correctAnswer, an unscored data-collection field in scored_quiz); DropDown (single or multiple via `multiple`, use it instead of SingleCheck/MultiCheck when there are more than 20 choices); Cascade (hierarchical choices via children, scored_quiz / ai_quiz); Ordering (quiz only, correctAnswer = all choices in the correct order); DateField/TimeField as unscored data-collection fields (scored_quiz / ai_quiz); NumberField (quiz: optional numeric correctAnswer + score; scored_quiz: the submitted number feeds report formulas); Rate (scored_quiz / ai_quiz; in scored_quiz the 1..steps rating value is the question score unless per-star scores are set in the web app); Attachment (ai_quiz only: a file upload with `kind` image / audio / video / document that the AI reads). Insert a page break with { type: \"Breaker\" }, which the AI can interleave between questions to paginate. Display blocks collect no answer: { type: \"Statement\", content } is a rich-text passage (intro / section lead-in / disclaimer) and { type: \"Swiper\", items } an image carousel. At most 100 items."
    • changedInput schema / properties / questions / items / description
      Previous value: -"One question, a page break, or a display block (Statement / Swiper). FIELD APPLICABILITY — `type` is the only field the schema always requires; `type` (plus the form scene) decides which of the remaining fields apply, and one that does not apply is either rejected with an explanatory error or ignored, so never pass it. Breaker (page break) takes nothing but `type`. Display blocks collect no answer, are never scored and are allowed in every scene: Statement takes `content` (the rich text IS the block) and Swiper takes `items` (an image carousel); both also accept an optional `name`, a label used by the web editor only, and neither takes any question field. Every question type takes `name` (required) plus the optional `code` / `description` / `explain` / `required`. Type-specific fields: SingleCheck / MultiCheck / DropDown / Ordering / Cascade need `choices` (Cascade nests via choices[i].children; DropDown also takes `multiple`; Ordering also takes `shuffle`); TrueFalse has a fixed pair of options and takes `trueLabel` / `falseLabel` instead of `choices`; DateField / TimeField take `precision`; NumberField takes `min` / `max` / `unit` / `decimalPlaces`; Rate takes `steps` / `words`. Scene rules for scoring: quiz — `correctAnswer` plus `score` > 0 are REQUIRED on SingleCheck / MultiCheck / DropDown / Ordering, optional on FillBlank (add `aiMatch` to have AI grade it instead of exact string match) and NumberField (omit both and the question is just a data-collection field), and rejected on DateField / TimeField; scored_quiz — score each option via choices[i].score; `correctAnswer` / `score` are rejected on NumberField and Rate (the submitted value is the score) and on FillBlank (free text is collected only, never scored); outcome — nothing is scored: `correctAnswer` / `score` / `aiMatch` are all rejected, every choice needs `outcomes` (TrueFalse votes via `trueOutcomes` / `falseOutcomes`). Type availability per scene: Ordering is knowledge_quiz-only; FillBlank works in knowledge_quiz (optionally scored) and in scored_quiz (data-collection only — its answer never feeds a score or a report formula); Cascade, Rate, DateField and TimeField are scored_quiz-only; and the outcome_quiz scene accepts only SingleCheck / MultiCheck / DropDown / TrueFalse / Breaker."New value: +"One question, a page break, or a display block (Statement / Swiper). FIELD APPLICABILITY — `type` is the only field the schema always requires; `type` (plus the form scene) decides which of the remaining fields apply, and one that does not apply is either rejected with an explanatory error or ignored, so never pass it. Breaker (page break) takes nothing but `type`. Display blocks collect no answer, are never scored and are allowed in every scene: Statement takes `content` (the rich text IS the block) and Swiper takes `items` (an image carousel); both also accept an optional `name`, a label used by the web editor only, and neither takes any question field. Every question type takes `name` (required) plus the optional `code` / `description` / `explain` / `required`. Type-specific fields: SingleCheck / MultiCheck / DropDown / Ordering / Cascade need `choices` (Cascade nests via choices[i].children; DropDown also takes `multiple`; Ordering also takes `shuffle`); TrueFalse has a fixed pair of options and takes `trueLabel` / `falseLabel` instead of `choices`; DateField / TimeField take `precision`; NumberField takes `min` / `max` / `unit` / `decimalPlaces`; Rate takes `steps` / `words`; Attachment takes `kind` (required) / `maxFiles`. Scene rules for scoring: quiz — `correctAnswer` plus `score` > 0 are REQUIRED on SingleCheck / MultiCheck / DropDown / Ordering, optional on FillBlank (add `aiMatch` to have AI grade it instead of exact string match) and NumberField (omit both and the question is just a data-collection field), and rejected on DateField / TimeField; scored_quiz — score each option via choices[i].score; `correctAnswer` / `score` are rejected on NumberField and Rate (the submitted value is the score) and on FillBlank (free text is collected only, never scored); outcome — nothing is scored: `correctAnswer` / `score` / `aiMatch` are all rejected, every choice needs `outcomes` (TrueFalse votes via `trueOutcomes` / `falseOutcomes`); ai_quiz — nothing is scored: `correctAnswer` / `score` / `aiMatch` / choices[i].score are all rejected; an AI reads the answers and writes the report from report.aiReport. Type availability per scene: Ordering is knowledge_quiz-only; FillBlank works in knowledge_quiz (optionally scored) and in scored_quiz (data-collection only — its answer never feeds a score or a report formula); Cascade, Rate, DateField and TimeField work in scored_quiz and ai_quiz only; the outcome_quiz scene accepts only SingleCheck / MultiCheck / DropDown / TrueFalse / Breaker; the ai_quiz scene accepts every type except Ordering, plus Attachment (ai_quiz-only via MCP, at most 2 per form)."
    • addedInput schema / properties / questions / items / properties / kind
      Added value: +{
      +  "description": "Attachment only, and required there: what respondents upload, which also decides how the AI reads it (image = vision, audio / video = transcribed, document = text extracted). Per-file limits: image ≤10MB; audio ≤10MB and ≤180s; video ≤20MB and ≤60s; document ≤10MB. Fixed once the question exists — to change it, delete_question and add a new one. Rejected for other question types.",
      +  "enum": [
      +    "image",
      +    "audio",
      +    "video",
      +    "document"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / questions / items / properties / maxFiles
      Added value: +{
      +  "description": "Attachment only: how many files a respondent may upload to this question (1-3, default 3). Rejected for other question types.",
      +  "maximum": 3,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • changedInput schema / properties / questions / items / properties / type / enum
      Previous value: -[
      -  "SingleCheck",
      -  "MultiCheck",
      -  "TrueFalse",
      -  "FillBlank",
      -  "DateField",
      -  "TimeField",
      -  "NumberField",
      -  "Rate",
      -  "DropDown",
      -  "Cascade",
      -  "Ordering",
      -  "Breaker",
      -  "Statement",
      -  "Swiper"
      -]New value: +[
      +  "SingleCheck",
      +  "MultiCheck",
      +  "TrueFalse",
      +  "FillBlank",
      +  "DateField",
      +  "TimeField",
      +  "NumberField",
      +  "Rate",
      +  "DropDown",
      +  "Cascade",
      +  "Ordering",
      +  "Attachment",
      +  "Breaker",
      +  "Statement",
      +  "Swiper"
      +]
    • changedInput schema / properties / report / description
      Previous value: -"Report configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, optional for the knowledge_quiz scene). outcome: only the outcomes key (required at create time) and sectionOrder are allowed."New value: +"Report configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, optional for the knowledge_quiz scene). outcome: only the outcomes key (required at create time) and sectionOrder are allowed. ai_quiz: only aiReport and sectionOrder are allowed."
    • addedInput schema / properties / report / properties / aiReport
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "ai_quiz scene only (rejected elsewhere): how the AI writes each respondent's report. Sub-keys are merged — pass only the one you change; null or \"\" clears it.",
      +  "properties": {
      +    "instructions": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Generation instructions: what the report should cover, how to read the answers, what to recommend. Plain text (one paragraph per line) or description-scope rich text HTML. Reference a question as {{code}} (visible input questions only; call get_form for the codes) — the AI is pointed at that answer, the answer text itself is not inlined. Unknown codes are rejected. At most 20000 visible characters. get_form returns it in this same {{code}} form."
      +    },
      +    "style": {
      +      "anyOf": [
      +        {
      +          "maxLength": 5000,
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "Optional style and rules (tone, length, things to avoid), plain text, at most 5000 characters."
      +    }
      +  },
      +  "type": "object"
      +}
    • changedInput schema / properties / report / properties / sectionOrder / description
      Previous value: -"Any scene: the order of the movable result-page sections — dimension (dimension breakdown / radar), booking (the 1:1 call block), feedback (the feedback block). The overall score / outcome always stays on top and the answer review / share area at the bottom. Keys you leave out keep their default relative order after the ones you list; [] restores the default (dimension, booking, feedback). Lead with booking when the quiz exists to book calls."New value: +"Any scene: the order of the movable result-page sections — dimension (dimension breakdown / radar), booking (the Cal.com booking block), feedback (the feedback block). The overall score / outcome always stays on top and the answer review / share area at the bottom. Keys you leave out keep their default relative order after the ones you list; [] restores the default (dimension, booking, feedback). Lead with booking when the quiz exists to book calls."
    • changedInput schema / properties / scene / description
      Previous value: -"quiz=exam, scored_quiz=scored_quiz, outcome=typing quiz (votes decide which outcome type wins)"New value: +"knowledge_quiz = graded exam (correctAnswer + score); scored_quiz = option scoring + report formula; outcome_quiz = typing quiz (votes decide which outcome type wins); ai_quiz = no scoring, an AI writes each report from report.aiReport (may include Attachment uploads). Immutable after creation."
    • changedInput schema / properties / scene / enum
      Previous value: -[
      -  "knowledge_quiz",
      -  "scored_quiz",
      -  "outcome_quiz"
      -]New value: +[
      +  "knowledge_quiz",
      +  "scored_quiz",
      +  "outcome_quiz",
      +  "ai_quiz"
      +]
    • changedOutput schema / properties / scene / description
      Previous value: -"knowledge_quiz / scored_quiz / outcome_quiz"New value: +"knowledge_quiz / scored_quiz / outcome_quiz / ai_quiz"
  16. Changed2 schema fields changed
    • changedInput schema / properties / questions / items / properties / choices / description
      Previous value: -"Choice-based questions only (SingleCheck / MultiCheck / DropDown / Ordering / Cascade), where it is required; ignored for every other type, including TrueFalse — its two options come from trueLabel / falseLabel. Per-type limits: SingleCheck / MultiCheck 2-20 items — for a longer list use DropDown (2-100 items) instead; Ordering 2-10 items; Cascade nests via choices[i].children (up to 3 levels, at most 100 nodes in total). IMPORTANT (knowledge_quiz scene): vary the position of the correct option(s) across questions — do NOT always place the correct answer first. Distribute correct answers roughly evenly over all positions so they are not predictable."New value: +"Choice-based questions only (SingleCheck / MultiCheck / DropDown / Ordering / Cascade), where it is required; ignored for every other type, including TrueFalse — its two options come from trueLabel / falseLabel. Per-type limits: SingleCheck / MultiCheck 2-100 items — for a longer list use DropDown (2-300 items) instead; Ordering 2-10 items; Cascade nests via choices[i].children (up to 3 levels, at most 100 nodes in total). IMPORTANT (knowledge_quiz scene): vary the position of the correct option(s) across questions — do NOT always place the correct answer first. Distribute correct answers roughly evenly over all positions so they are not predictable."
    • changedInput schema / properties / questions / items / properties / choices / maxItems
      Previous value: -100New value: +300
  17. Changed3 schema fields changed
    • changedInput schema / properties / report / properties / sectionOrder / description
      Previous value: -"Any scene: the order of the movable result-page sections — dimension (dimension breakdown / radar), ai (AI suggestions), booking (the 1:1 call block), feedback (the feedback block). The overall score / outcome always stays on top and the answer review / share area at the bottom. Keys you leave out keep their default relative order after the ones you list; [] restores the default (dimension, ai, booking, feedback). Lead with booking when the quiz exists to book calls."New value: +"Any scene: the order of the movable result-page sections — dimension (dimension breakdown / radar), booking (the 1:1 call block), feedback (the feedback block). The overall score / outcome always stays on top and the answer review / share area at the bottom. Keys you leave out keep their default relative order after the ones you list; [] restores the default (dimension, booking, feedback). Lead with booking when the quiz exists to book calls."
    • changedInput schema / properties / report / properties / sectionOrder / items / enum
      Previous value: -[
      -  "dimension",
      -  "ai",
      -  "booking",
      -  "feedback"
      -]New value: +[
      +  "dimension",
      +  "booking",
      +  "feedback"
      +]
    • changedInput schema / properties / report / properties / sectionOrder / maxItems
      Previous value: -4New value: +3
  18. Changed17 schema fields changed
    • changedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / children / items / properties / outcomes / description
      Previous value: -"Outcome scene only, and required there on every choice: the outcome codes this choice votes for when selected (each must exist in report.outcomes; a choice may vote for multiple outcomes). Use [] for a neutral choice that votes for nothing. Rejected in the knowledge_quiz / scored_quiz scenes."New value: +"Outcome scene only, and required there on every choice: the outcomes this choice votes for when selected (each code must exist in report.outcomes; a choice may vote for multiple outcomes). Use [] for a neutral choice that votes for nothing. Rejected in the knowledge_quiz / scored_quiz scenes. Each item is an outcome code (one vote) or { code, weight } to make this pick count more or less — e.g. { \"code\": \"lion\", \"weight\": 2 } for a question that should decide the result more than the others. The outcome with the most total votes wins."
    • addedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / children / items / properties / outcomes / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "description": "Outcome code from report.outcomes",
      +        "type": "string"
      +      },
      +      "weight": {
      +        "description": "Votes this pick casts for the outcome; omit for 1. Decimals allowed, 0 = counts for nothing.",
      +        "maximum": 100,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "code"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / children / items / properties / outcomes / items / type
      Removed value: -"string"
    • changedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / outcomes / description
      Previous value: -"Outcome scene only, and required there on every choice: the outcome codes this choice votes for when selected (each must exist in report.outcomes; a choice may vote for multiple outcomes). Use [] for a neutral choice that votes for nothing. Rejected in the knowledge_quiz / scored_quiz scenes."New value: +"Outcome scene only, and required there on every choice: the outcomes this choice votes for when selected (each code must exist in report.outcomes; a choice may vote for multiple outcomes). Use [] for a neutral choice that votes for nothing. Rejected in the knowledge_quiz / scored_quiz scenes. Each item is an outcome code (one vote) or { code, weight } to make this pick count more or less — e.g. { \"code\": \"lion\", \"weight\": 2 } for a question that should decide the result more than the others. The outcome with the most total votes wins."
    • addedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / outcomes / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "description": "Outcome code from report.outcomes",
      +        "type": "string"
      +      },
      +      "weight": {
      +        "description": "Votes this pick casts for the outcome; omit for 1. Decimals allowed, 0 = counts for nothing.",
      +        "maximum": 100,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "code"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / outcomes / items / type
      Removed value: -"string"
    • changedInput schema / properties / questions / items / properties / choices / items / properties / outcomes / description
      Previous value: -"Outcome scene only, and required there on every choice: the outcome codes this choice votes for when selected (each must exist in report.outcomes; a choice may vote for multiple outcomes). Use [] for a neutral choice that votes for nothing. Rejected in the knowledge_quiz / scored_quiz scenes."New value: +"Outcome scene only, and required there on every choice: the outcomes this choice votes for when selected (each code must exist in report.outcomes; a choice may vote for multiple outcomes). Use [] for a neutral choice that votes for nothing. Rejected in the knowledge_quiz / scored_quiz scenes. Each item is an outcome code (one vote) or { code, weight } to make this pick count more or less — e.g. { \"code\": \"lion\", \"weight\": 2 } for a question that should decide the result more than the others. The outcome with the most total votes wins."
    • addedInput schema / properties / questions / items / properties / choices / items / properties / outcomes / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "description": "Outcome code from report.outcomes",
      +        "type": "string"
      +      },
      +      "weight": {
      +        "description": "Votes this pick casts for the outcome; omit for 1. Decimals allowed, 0 = counts for nothing.",
      +        "maximum": 100,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "code"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / questions / items / properties / choices / items / properties / outcomes / items / type
      Removed value: -"string"
    • changedInput schema / properties / questions / items / properties / falseOutcomes / description
      Previous value: -"Outcome scene + TrueFalse only (required there together with trueOutcomes): the outcome codes that answering \"false\" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes."New value: +"Outcome scene + TrueFalse only (required there together with trueOutcomes): the outcomes that answering \"false\" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes. Each item is an outcome code (one vote) or { code, weight } to make this pick count more or less — e.g. { \"code\": \"lion\", \"weight\": 2 } for a question that should decide the result more than the others. The outcome with the most total votes wins."
    • addedInput schema / properties / questions / items / properties / falseOutcomes / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "description": "Outcome code from report.outcomes",
      +        "type": "string"
      +      },
      +      "weight": {
      +        "description": "Votes this pick casts for the outcome; omit for 1. Decimals allowed, 0 = counts for nothing.",
      +        "maximum": 100,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "code"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / questions / items / properties / falseOutcomes / items / type
      Removed value: -"string"
    • changedInput schema / properties / questions / items / properties / trueOutcomes / description
      Previous value: -"Outcome scene + TrueFalse only (required there together with falseOutcomes): the outcome codes that answering \"true\" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes."New value: +"Outcome scene + TrueFalse only (required there together with falseOutcomes): the outcomes that answering \"true\" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes. Each item is an outcome code (one vote) or { code, weight } to make this pick count more or less — e.g. { \"code\": \"lion\", \"weight\": 2 } for a question that should decide the result more than the others. The outcome with the most total votes wins."
    • addedInput schema / properties / questions / items / properties / trueOutcomes / items / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "code": {
      +        "description": "Outcome code from report.outcomes",
      +        "type": "string"
      +      },
      +      "weight": {
      +        "description": "Votes this pick casts for the outcome; omit for 1. Decimals allowed, 0 = counts for nothing.",
      +        "maximum": 100,
      +        "minimum": 0,
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "code"
      +    ],
      +    "type": "object"
      +  }
      +]
    • removedInput schema / properties / questions / items / properties / trueOutcomes / items / type
      Removed value: -"string"
    • changedInput schema / properties / report / description
      Previous value: -"Report configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, optional for the knowledge_quiz scene). outcome: only the outcomes key is allowed, and it is required at create time."New value: +"Report configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, optional for the knowledge_quiz scene). outcome: only the outcomes key (required at create time) and sectionOrder are allowed."
    • addedInput schema / properties / report / properties / sectionOrder
      Added value: +{
      +  "description": "Any scene: the order of the movable result-page sections — dimension (dimension breakdown / radar), ai (AI suggestions), booking (the 1:1 call block), feedback (the feedback block). The overall score / outcome always stays on top and the answer review / share area at the bottom. Keys you leave out keep their default relative order after the ones you list; [] restores the default (dimension, ai, booking, feedback). Lead with booking when the quiz exists to book calls.",
      +  "items": {
      +    "enum": [
      +      "dimension",
      +      "ai",
      +      "booking",
      +      "feedback"
      +    ],
      +    "type": "string"
      +  },
      +  "maxItems": 4,
      +  "type": "array",
      +  "uniqueItems": true
      +}
  19. Changed1 schema field changed
    • changedInput schema / properties / questions / items / properties / precision / description
      Previous value: -"DateField / TimeField only: picker precision. DateField accepts year | month | day | hour | minute | second (default day; e.g. \"month\" shows a year-month picker, \"second\" a full datetime picker). TimeField accepts only minute | second (default minute). Ignored for other question types."New value: +"DateField / TimeField only: picker precision. DateField accepts year | month | day | hour | minute (default day; e.g. \"month\" shows a year-month picker, \"minute\" a date + hour:minute picker). TimeField accepts only minute | second (default minute). Ignored for other question types."
  20. Changed1 schema field changed
    • addedInput schema / properties / questions / items / properties / collectOnly
      Added value: +{
      +  "description": "scored_quiz scene only, for SingleCheck / MultiCheck / DropDown / Cascade / TrueFalse / Rate: collect the answer as data without scoring it (e.g. age range, industry, how they heard about you). A collect-only question produces no score, cannot be referenced by report.formula or dimension formulas, and is shown with plain radio buttons / checkboxes instead of A/B/C letter badges. Do not pass any scoring input (choices[i].score, dimensionScores, score, correctAnswer) together with it. Rejected in other scenes.",
      +  "type": "boolean"
      +}
  21. Changed13 schema fields changed
    • addedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / children / items / properties / dimensionScores
      Added value: +{
      +  "additionalProperties": {
      +    "maximum": 100,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  "description": "scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Any choice carrying it switches the question to per-dimension scoring: for each dimension the question contributes the selected choices' scores for that dimension (a dimension not listed on the chosen choice counts 0), and a dimension without a formula automatically sums these contributions across questions. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score fed to report.formula. Rejected in the knowledge_quiz / outcome_quiz scenes.",
      +  "type": "object"
      +}
    • addedInput schema / properties / questions / items / properties / choices / items / properties / children / items / properties / dimensionScores
      Added value: +{
      +  "additionalProperties": {
      +    "maximum": 100,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  "description": "scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Any choice carrying it switches the question to per-dimension scoring: for each dimension the question contributes the selected choices' scores for that dimension (a dimension not listed on the chosen choice counts 0), and a dimension without a formula automatically sums these contributions across questions. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score fed to report.formula. Rejected in the knowledge_quiz / outcome_quiz scenes.",
      +  "type": "object"
      +}
    • addedInput schema / properties / questions / items / properties / choices / items / properties / dimensionScores
      Added value: +{
      +  "additionalProperties": {
      +    "maximum": 100,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  "description": "scored_quiz scene only: the points this choice adds to each dimension when selected, as a map of dimension code → score, e.g. { \"dim_d\": 3, \"dim_i\": 1 }. Any choice carrying it switches the question to per-dimension scoring: for each dimension the question contributes the selected choices' scores for that dimension (a dimension not listed on the chosen choice counts 0), and a dimension without a formula automatically sums these contributions across questions. Codes must exist in report.dimensionAnalysis.dimensions — give dimensions[].code and reference them in the same create_form call. `score` remains the overall score fed to report.formula. Rejected in the knowledge_quiz / outcome_quiz scenes.",
      +  "type": "object"
      +}
    • addedInput schema / properties / questions / items / properties / falseDimensionScores
      Added value: +{
      +  "additionalProperties": {
      +    "maximum": 100,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  "description": "scored_quiz scene + TrueFalse only: the points answering \"false\" adds to each dimension, as a map of dimension code → score (same semantics as choices[i].dimensionScores). Rejected for other question types / scenes.",
      +  "type": "object"
      +}
    • addedInput schema / properties / questions / items / properties / trueDimensionScores
      Added value: +{
      +  "additionalProperties": {
      +    "maximum": 100,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  "description": "scored_quiz scene + TrueFalse only: the points answering \"true\" adds to each dimension, as a map of dimension code → score (same semantics as choices[i].dimensionScores). Rejected for other question types / scenes.",
      +  "type": "object"
      +}
    • changedInput schema / properties / report / properties / dimensionAnalysis / description
      Previous value: -"Multi-dimension analysis (radar chart + per-dimension breakdown). Each dimension gets a server-generated code returned in structuredContent. In the knowledge_quiz scene set fieldCodes per dimension; in the scored_quiz scene set a formula. Dimensions reference question codes: if you set custom question codes you can configure dimensions in the same create_form call; otherwise create the questions first, then get_form to read the auto-generated codes."New value: +"Multi-dimension analysis (radar chart + per-dimension breakdown). Each dimension has a stable code (pass dimensions[].code or let the server generate one; returned in structuredContent). In the knowledge_quiz scene set fieldCodes per dimension. In the scored_quiz scene every dimension needs a formula over question codes (e.g. `{{q1}} + {{q2}}`); a question may override its score for one dimension via choices[i].dimensionScores, otherwise the formula uses its plain choice score. If you set custom question codes you can configure everything in one create_form call; otherwise create the questions first, then get_form to read the auto-generated codes."
    • addedInput schema / properties / report / properties / dimensionAnalysis / properties / dimensions / items / properties / code
      Added value: +{
      +  "description": "Optional stable identifier for the dimension (same rules as question codes: starts with a letter or underscore, letters/digits/underscores only). Set it when questions reference the dimension via choices[i].dimensionScores in the same create_form call. When updating, pass the existing code to keep it; if omitted, a dimension with the same name keeps its current code, otherwise one is generated.",
      +  "maxLength": 64,
      +  "type": "string"
      +}
    • changedInput schema / properties / report / properties / dimensionAnalysis / properties / dimensions / items / properties / fieldCodes / description
      Previous value: -"Required in the knowledge_quiz scene: the question codes this dimension covers (dimension score = sum of these field scores). Each code must exist in the form. Ignored in the scored_quiz scene."New value: +"Required in the knowledge_quiz scene: the question codes this dimension covers (dimension score = sum of these field scores). Each code must exist in the form. Ignored in the scored_quiz scene, where the formula decides which questions count."
    • changedInput schema / properties / report / properties / dimensionAnalysis / properties / dimensions / items / properties / formula / description
      Previous value: -"Required in the scored_quiz scene: the dimension score formula. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` when you set custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. Supported operators: + - * / ( ). Ignored in the knowledge_quiz scene."New value: +"Required in the scored_quiz scene: the dimension score formula, usually the sum of the questions in this dimension. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` when you set custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. Inside a dimension formula `{{q}}` is the question's score for THIS dimension: its choices[i].dimensionScores override when set, otherwise the plain choice score. A dimension formula cannot reference other dimensions (only report.formula can). Supported operators: + - * / ( ). Ignored in the knowledge_quiz scene."
    • changedInput schema / properties / report / properties / dimensionAnalysis / properties / dimensions / items / properties / standardScore / description
      Previous value: -"Standard score (the radar-chart standard line; in the scored_quiz scene it also acts as the dimension full mark). Default 0."New value: +"Standard score (the radar-chart standard line; in the scored_quiz scene it also acts as the dimension full mark). When omitted in the scored_quiz scene it defaults to the attainable maximum: the formula evaluated with every referenced question at its highest score for this dimension (choices[i].dimensionScores override, else the choice score); 0 when that cannot be estimated, e.g. the formula uses NumberField / date questions. knowledge_quiz defaults to 0."
    • changedInput schema / properties / report / properties / formula / description
      Previous value: -"Total-score formula for the scored_quiz scene, and the ONLY source of the overall score there — summing question scores is the knowledge_quiz rule, so a scored_quiz without this formula scores null and no level ever matches. Required whenever levels are set. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` for custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. Supported operators: + - * / ( ); every referenced code must exist in the current form. Setting dimension formulas does NOT cover this — the overall formula is separate."New value: +"Total-score formula for the scored_quiz scene, and the ONLY source of the overall score there — summing question scores is the knowledge_quiz rule, so a scored_quiz without this formula scores null and no level ever matches. Required whenever levels are set. Question codes must be wrapped in `{{code}}` (e.g. `{{q1}} + {{q2}}` for custom question codes, or `{{__field_abc}} + {{__field_def}}` for auto-generated ones); bare codes are rejected. It may also reference dimension codes the same way (e.g. `{{dim_d}} * 2 + {{dim_i}}`): dimensions are computed first, so the overall score can be a weighted sum of dimension scores; a dimension referenced here cannot be removed later. Supported operators: + - * / ( ); every referenced code must exist in the current form (questions and dimensions). Setting dimension formulas does NOT cover this — the overall formula is separate."
    • changedInput schema / properties / report / properties / levels / items / properties / cta / properties / newWindow / description
      Previous value: -"Open the link in a new window, default false"New value: +"Deprecated and ignored: the CTA link always opens in a new window."
    • changedInput schema / properties / report / properties / outcomes / items / properties / cta / properties / newWindow / description
      Previous value: -"Open the link in a new window, default false"New value: +"Deprecated and ignored: the CTA link always opens in a new window."
  22. Changed1 schema field changed
    • changedInput schema / properties / report / properties / hideOverallScore / description
      Previous value: -"Hide the overall score on the result page (the score ring / number / percentile), keeping the level name, level description and summary. Scored scenes only (ignored for outcome). Default false."New value: +"Hide scores on the result page: the overall score (score ring / number / percentile) AND every dimension score (score / max score / progress bar / score rate) are hidden together, keeping level names, level descriptions, the level ladder, dimension levels and the summary. Note the summary template still renders its score variable if you left one in. Scored scenes only (ignored for outcome). Default false."
  23. Changed6 schema fields changed
    • changedInput schema / properties / questions / description
      Previous value: -"Optional. A list of questions/page breaks to create at once, written into form.fields in order. Question types: SingleCheck/MultiCheck/TrueFalse; FillBlank (free text — scored in quiz via correctAnswer, an unscored data-collection field in scored_quiz); DropDown (single or multiple via `multiple`, use it instead of SingleCheck/MultiCheck when there are more than 20 choices); Cascade (hierarchical choices via children, scored_quiz only); Ordering (quiz only, correctAnswer = all choices in the correct order); DateField/TimeField as unscored data-collection fields (scored_quiz only); NumberField (quiz: optional numeric correctAnswer + score; scored_quiz: the submitted number feeds report formulas); Rate (scored_quiz only, the 1..steps rating value is the question score unless per-star scores are set in the web app). Insert a page break with { type: \"Breaker\" }, which the AI can interleave between questions to paginate. At most 100 items."New value: +"Optional. A list of questions/page breaks to create at once, written into form.fields in order. Question types: SingleCheck/MultiCheck/TrueFalse; FillBlank (free text — scored in quiz via correctAnswer, an unscored data-collection field in scored_quiz); DropDown (single or multiple via `multiple`, use it instead of SingleCheck/MultiCheck when there are more than 20 choices); Cascade (hierarchical choices via children, scored_quiz only); Ordering (quiz only, correctAnswer = all choices in the correct order); DateField/TimeField as unscored data-collection fields (scored_quiz only); NumberField (quiz: optional numeric correctAnswer + score; scored_quiz: the submitted number feeds report formulas); Rate (scored_quiz only, the 1..steps rating value is the question score unless per-star scores are set in the web app). Insert a page break with { type: \"Breaker\" }, which the AI can interleave between questions to paginate. Display blocks collect no answer: { type: \"Statement\", content } is a rich-text passage (intro / section lead-in / disclaimer) and { type: \"Swiper\", items } an image carousel. At most 100 items."
    • changedInput schema / properties / questions / items / description
      Previous value: -"One question, or a page break. FIELD APPLICABILITY — `type` is the only field the schema always requires; `type` (plus the form scene) decides which of the remaining fields apply, and one that does not apply is either rejected with an explanatory error or ignored, so never pass it. Breaker (page break) takes nothing but `type`. Every question type takes `name` (required) plus the optional `code` / `description` / `explain` / `required`. Type-specific fields: SingleCheck / MultiCheck / DropDown / Ordering / Cascade need `choices` (Cascade nests via choices[i].children; DropDown also takes `multiple`; Ordering also takes `shuffle`); TrueFalse has a fixed pair of options and takes `trueLabel` / `falseLabel` instead of `choices`; DateField / TimeField take `precision`; NumberField takes `min` / `max` / `unit` / `decimalPlaces`; Rate takes `steps` / `words`. Scene rules for scoring: quiz — `correctAnswer` plus `score` > 0 are REQUIRED on SingleCheck / MultiCheck / DropDown / Ordering, optional on FillBlank (add `aiMatch` to have AI grade it instead of exact string match) and NumberField (omit both and the question is just a data-collection field), and rejected on DateField / TimeField; scored_quiz — score each option via choices[i].score; `correctAnswer` / `score` are rejected on NumberField and Rate (the submitted value is the score) and on FillBlank (free text is collected only, never scored); outcome — nothing is scored: `correctAnswer` / `score` / `aiMatch` are all rejected, every choice needs `outcomes` (TrueFalse votes via `trueOutcomes` / `falseOutcomes`). Type availability per scene: Ordering is knowledge_quiz-only; FillBlank works in knowledge_quiz (optionally scored) and in scored_quiz (data-collection only — its answer never feeds a score or a report formula); Cascade, Rate, DateField and TimeField are scored_quiz-only; and the outcome_quiz scene accepts only SingleCheck / MultiCheck / DropDown / TrueFalse / Breaker."New value: +"One question, a page break, or a display block (Statement / Swiper). FIELD APPLICABILITY — `type` is the only field the schema always requires; `type` (plus the form scene) decides which of the remaining fields apply, and one that does not apply is either rejected with an explanatory error or ignored, so never pass it. Breaker (page break) takes nothing but `type`. Display blocks collect no answer, are never scored and are allowed in every scene: Statement takes `content` (the rich text IS the block) and Swiper takes `items` (an image carousel); both also accept an optional `name`, a label used by the web editor only, and neither takes any question field. Every question type takes `name` (required) plus the optional `code` / `description` / `explain` / `required`. Type-specific fields: SingleCheck / MultiCheck / DropDown / Ordering / Cascade need `choices` (Cascade nests via choices[i].children; DropDown also takes `multiple`; Ordering also takes `shuffle`); TrueFalse has a fixed pair of options and takes `trueLabel` / `falseLabel` instead of `choices`; DateField / TimeField take `precision`; NumberField takes `min` / `max` / `unit` / `decimalPlaces`; Rate takes `steps` / `words`. Scene rules for scoring: quiz — `correctAnswer` plus `score` > 0 are REQUIRED on SingleCheck / MultiCheck / DropDown / Ordering, optional on FillBlank (add `aiMatch` to have AI grade it instead of exact string match) and NumberField (omit both and the question is just a data-collection field), and rejected on DateField / TimeField; scored_quiz — score each option via choices[i].score; `correctAnswer` / `score` are rejected on NumberField and Rate (the submitted value is the score) and on FillBlank (free text is collected only, never scored); outcome — nothing is scored: `correctAnswer` / `score` / `aiMatch` are all rejected, every choice needs `outcomes` (TrueFalse votes via `trueOutcomes` / `falseOutcomes`). Type availability per scene: Ordering is knowledge_quiz-only; FillBlank works in knowledge_quiz (optionally scored) and in scored_quiz (data-collection only — its answer never feeds a score or a report formula); Cascade, Rate, DateField and TimeField are scored_quiz-only; and the outcome_quiz scene accepts only SingleCheck / MultiCheck / DropDown / TrueFalse / Breaker."
    • addedInput schema / properties / questions / items / properties / content
      Added value: +{
      +  "description": "Statement only, and required there: the text respondents read — an intro, a section lead-in, instructions, a disclaimer. The block renders this and nothing else. Same rich-text rules as `description` (headings / lists / links / <img src> / math formulas). This field also accepts an inline image: put an <img src=\"...\"> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one.",
      +  "maxLength": 5000,
      +  "type": "string"
      +}
    • addedInput schema / properties / questions / items / properties / items
      Added value: +{
      +  "description": "Swiper only, and required there: the carousel slides in display order, 1-10 of them. Upload the images with prepare_image_upload / finalize_image_upload first and pass the returned media IDs. Rejected for every other type.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "description": {
      +        "description": "Optional slide note. Web editor only, same as title.",
      +        "maxLength": 1000,
      +        "type": "string"
      +      },
      +      "image": {
      +        "description": "The slide image: a media ID returned by finalize_image_upload, or the media URL of an image already in this team library. Required — the answer page renders the images and nothing else.",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "Optional slide label. Shown in the web editor only (the answer page renders the image), and translatable per language.",
      +        "maxLength": 200,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "image"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 10,
      +  "minItems": 1,
      +  "type": "array"
      +}
    • changedInput schema / properties / questions / items / properties / type / description
      Previous value: -"Question type; Breaker means a page break (the frontend pushes subsequent questions to the next page), no name/choices etc. needed"New value: +"Question type; Breaker means a page break (the frontend pushes subsequent questions to the next page), no name/choices etc. needed; Statement / Swiper are display-only blocks that collect no answer"
    • changedInput schema / properties / questions / items / properties / type / enum
      Previous value: -[
      -  "SingleCheck",
      -  "MultiCheck",
      -  "TrueFalse",
      -  "FillBlank",
      -  "DateField",
      -  "TimeField",
      -  "NumberField",
      -  "Rate",
      -  "DropDown",
      -  "Cascade",
      -  "Ordering",
      -  "Breaker"
      -]New value: +[
      +  "SingleCheck",
      +  "MultiCheck",
      +  "TrueFalse",
      +  "FillBlank",
      +  "DateField",
      +  "TimeField",
      +  "NumberField",
      +  "Rate",
      +  "DropDown",
      +  "Cascade",
      +  "Ordering",
      +  "Breaker",
      +  "Statement",
      +  "Swiper"
      +]
  24. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources