Preset settings

With the preset settings you can customize:

  • Which project preset and palette to use
  • The remember user configuration
  • The Riddle language
  • When the Riddle automatically opens and closes
  • The Riddle and block timer
  • Navigation: pagination, auto-advance, back navigation
  • What the visitor sees while answering: live score, right/wrong feedback, results and stats on blocks
  • Vote limits: single vote per device, IP limits, email blocklist
  • Button and message texts, the footer (logo + text) and Riddle-level ad slots

Default case

If no preset setting is specified and the Riddle is created in a project (!) the default preset and its selected palette will be used for the built Riddle.

Click here to learn how to set a default preset for your project.

Specifying preset settings

The preset settings properties are sent in the preset property of the build object. If we now for example want to use a preset and palette from our project the request would look like this:

{
    "blocks": [...],
    "preset": {
        "preset": 805,
        "palette": "Zymx"
    }
}

Retrieving preset and palette IDs

Retrieving your project's presets and associated palettes is possible through the Builder API presets endpoint. An example response looks like this:

{
    "success": true,
    "code": 200,
    "data": [
        {
            "id": 805,
            "name": "My project preset",
            "palettes": [
                {
                    "id": "Zymx",
                    "name": "my palette"
                }
            ]
        }
    ]
}

palette accepts either form: the palette's id ("Zymx") or its name ("my palette"). If neither matches, the error message lists the palettes available in the Riddle's preset.

All preset properties

Every property is optional. Which ones are accepted depends on the Riddle type, see the "Available for..." column below.

Note: In a plain POST create build, a property that does not exist for the type you are building is silently ignored by default - unless you turn on strictProperties, in which case it is rejected with a 400 naming the property and listing what is supported for that type instead. That strict behaviour is not optional when editing an existing Riddle (PUT) - there an inapplicable property (e.g. preset.revealResultsLater, Poll only, sent for a Quiz) is always rejected.

PropertyRequiredTypeDescriptionAvailable for...Default
presetintegerThe project preset to connect the Riddle toall
presetIdintegerLegacy alias of presetall
palettestringThe palette to use - either its ID or its display nameall
paletteValuesobjectIndividual palette values to override, keyed by field path; see belowall
languagestringThe Riddle language; see belowall
rememberUserobjectRemember-user configuration; see belowall
autoOpenDatestringWhen the Riddle opens; see belowall
isAutoOpenEnabledbooleanExplicitly switches auto-open on or off; see belowall
autoCloseobjectWhen the Riddle closes; see belowall
customStringsobjectOverrides for button and feedback texts; see belowall
isRiddleFooterVisiblebooleanWhether the Riddle's footer is shown at all (default true)all
footerTextobjectA free text note in the footer; see belowall
footerBrandingobjectYour own logo in the footer; see belowall
adsobjectRiddle-level ad slots above/below the Riddle; see belowall
isOneVotePerIdentifierEnabledbooleanWhether each visitor may only vote once, identified by their generated ID (default false)all
mediaOrientationstringThe aspect ratio every media element of the Riddle is cropped to: Wide, Square, Tall or Originalall
isRiddleOpenbooleanThe master open/closed switch; see belowPoll, Quiz, Personality, Form, Predictor, Minigame, Story
riddleTimerobjectA time limit for the whole Riddle; see belowPoll, Quiz, Personality, Form, Minigame
blockTimerobjectA time limit per block; see belowPoll, Quiz, Personality, Form, Minigame
displayLiveScoreobjectA running score while answering; see belowQuiz
quizRightWrongDisplayobjectRight/wrong answer feedback; see belowQuiz
paginationobjectPager/progress bar navigation; see belowPoll, Quiz, Personality, Form, Story
resultsOnBlocksobjectShowing a block's own results after answering; see belowPoll, Quiz, Personality, Form
statsBeforeVotingobjectShowing view/completion counts before answering; see belowPoll, Quiz, Personality, Form
revealResultsLaterobjectHiding the results until a set date; see belowPoll
riddleSingleVoteobjectOne vote per device; see belowPoll, Quiz, Personality, Form, Predictor
riddleIpLimitobjectVote limit per IP address; see belowPoll, Quiz, Personality, Form, Predictor
clockRiddleobjectAn always-visible running clock; see belowMinigame
personalitySettingsobjectHow the winning result is calculated; see belowPersonality
isAutoAdvancebooleanWhether the Riddle advances to the next block automatically after answering (default true)Poll, Quiz, Personality, Predictor
isChooseButtonVisiblebooleanWhether an explicit "choose" button is shown instead of answering by clicking (default false)Poll, Quiz, Personality
isTimerWarmupEnabledbooleanWhether a short countdown runs before a timer starts (default false)Poll, Quiz, Personality, Form, Minigame
timerWarmupTimeintegerThat countdown's length in seconds; 0 or more (default 3)Poll, Quiz, Personality, Form, Minigame
isEmailBlocklistEnabledbooleanWhether your email blocklist is applied to submissions (default false)all except Leaderboard
isExternalContentBannerEnabledbooleanWhether a privacy banner is shown before external content (YouTube, X, Vimeo) is loaded (default false)Poll, Quiz, Personality, Form, Story
privacyTextYoutubestringCustom banner text for YouTube embedsPoll, Quiz, Personality, Form
privacyTextTwitterstringCustom banner text for X/Twitter embedsPoll, Quiz, Personality, Form, Story
privacyTextVimeostringCustom banner text for Vimeo embedsPoll, Quiz, Personality, Form, Story
privacyTextButtonstringLabel of the "load content anyway" buttonPoll, Quiz, Personality, Form, Story
scoreSeparatorstringHow the two predicted scores are separated: Versus, Colon, At, Dash, Slash or X (default Versus)Predictor
hasEmphasizeWinnerEnabledbooleanWhether the winning side is emphasized (default true)Predictor
hasGrayOutEnabledbooleanWhether the losing side is grayed out (default true)Predictor
areShareablesOnBlockEnabledbooleanWhether each prediction can be shared right on the block (default false)Predictor
quizTimeMultiplierinteger0-100; how strongly answering time influences the ranking (default 0)Leaderboard
isCompactViewbooleanWhether entries use the compact, single-line view (default false)Leaderboard
isShareButtonVisiblebooleanWhether the leaderboard offers a share button (default true)Leaderboard
entriesAboveintegerHow many entries are shown above the visitor's own (default 1)Leaderboard
entriesBelowintegerHow many entries are shown below the visitor's own (default 3)Leaderboard
isTotalEntriesEnabledbooleanWhether the total number of entries is displayed (default false)Leaderboard
isBadwordFilterEnabledbooleanWhether nicknames run through the bad-word filter (default false)Leaderboard
badwordFilterCustomListstringAdditional comma-separated words to filterLeaderboard
isEmailVerificationEnabledbooleanWhether participants have to confirm their email address before their score is ranked (default false)Leaderboard
color1ststringCSS color of the first-place row on the podium (default #D38807)Leaderboard
color2ndstringCSS color of the second-place row on the podium (default #A9A9A9)Leaderboard
color3rdstringCSS color of the third-place row on the podium (default #C2691C)Leaderboard

Note: Sending preset re-applies that project preset to the Riddle from scratch. Any other preset property you send in the same build config is applied on top of it, so {"preset": 805, "language": "de_formal"} gives you the project preset with German as its language.

Customizing individual palette values

paletteValues overrides individual design values (colors, fonts, layout options) of the palette the Riddle ends up on, without switching to a different palette. It is an object of path => value pairs, e.g.:

{
    "blocks": [...],
    "preset": {
        "paletteValues": {
            "bgColor": "#ffffff",
            "font.name": "Roboto"
        }
    }
}

If palette is sent in the same build config, the values are applied on top of that palette. A built-in palette is forked into a Riddle-owned copy first, since a built-in palette itself cannot be changed. An unknown path or a value that does not match the path (e.g. a non-color string for a color field) is rejected, naming the path and the reason.

Reading a Riddle back only reports the values that differ from the palette's own defaults, not the palette's full content.

Add remember user configuration

'Remember user' means writing the user's answers to the local storage, meaning that the user doesn't have to input their name or email again when revisiting the Riddle / website.

Properties

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether the remember user feature is enabled or notfalse
isAutoSubmitEnabledbooleanIf true, the form will be submitted automatically when the user returns to the Riddletrue
isDsgvoAcceptedbooleanWhether the user has accepted the DSGVOfalse
isUserPermissionRequiredbooleanWhether the user has to give permission to store their data in local storagetrue
isPIDOnlybooleanWhether only the generated participant ID is remembered instead of the answers themselves. The Creator only offers this once isEnabled and isDsgvoAccepted are both onfalse

Example

{
    "blocks": [...],
    "preset": {
        "rememberUser": {
            "isEnabled": true,
            "isAutoSubmitEnabled": false,
            "isDsgvoAccepted": true,
            "isUserPermissionRequired": false
        }
    }
}

Changing Riddle language

The language of the Riddle can be changed by setting the language property in the preset settings. The default is en.

Most languages are their plain ISO code (en, it, es), some carry a region (en-GB, pt-br, zh-tw), and some exist only as a formal and a casual tone variant, written as <language>:formal / <language>:casual: de:formal, de:casual, fr:formal, fr:casual, cs:formal, pt:formal, zh-hans:formal, zh-hans:casual. The older underscore spelling (de_formal) is still accepted and normalized to the colon form.

Sending a variant language's bare code (de, fr) resolves to its formal variant where it has one. A variant language with no formal variant rejects the bare code and lists the variants you can send explicitly instead. An unknown language is rejected with the full list of available codes.

Example

{
    "blocks": [...],
    "preset": {
        "language": "de:formal"
    }
}

Opening the Riddle at a set time

Opening the Riddle at a set time can be done by setting the autoOpenDate property in the preset settings. The value must be a date in the format 'YYYY-mm-dd HH:ii:ss', e.g. '2023-10-01 00:00:00'. The date must be in the timezone Europe/Berlin (German local time).

Example

{
    "blocks": [...],
    "preset": {
        "autoOpenDate": "2099-10-01 00:00:00"
    }
}

Closing the Riddle at a set time

Closing the Riddle at a set time can be done by setting the autoClose property in the preset settings. The property is an object with the following properties:

PropertyRequiredTypeDescriptionDefault
datestringThe date when the Riddle should close. The value must be a date in the format 'YYYY-mm-dd HH:ii:ss', e.g. '2023-10-01 00:00:00'. The date must be in the timezone Europe/Berlin (German local time)
resultIdintegerThe ID of the result that should be shown when the Riddle is closed. Use 1 for the first result, 2 for the second result, ...; by default the first result is shown1
isResultEnabledbooleanExplicitly switches showing that result on or off - see feature togglesderived from resultId
isEnabledbooleanExplicitly switches the automatic closing on or off - see feature togglestrue (sending the object closes the Riddle at that date)

Example

{
    "blocks": [...],
    "preset": {
        "autoClose": {
            "date": "2099-10-01 00:00:00",
            "resultId": 1
        }
    }
}

As with autoOpenDate, sending date switches the automatic closing on, and sending resultId switches on showing that result once the Riddle is closed.

Setting Riddle timer

The Riddle timer is a limit on how long the user has to complete the Riddle.

Note: The Riddle timer is available for polls, quizzes, personality tests, forms and minigames. For all other Riddle types, riddleTimer is silently ignored in a plain create build, but rejected as an unsupported property (see the note under All preset properties) when strict validation applies - editing an existing Riddle, or strictProperties: true.

Properties

PropertyRequiredTypeDescriptionDefault
timeLimitintegerThe time limit in seconds
isEnabledbooleanExplicitly switches the Riddle timer on or off - see feature togglestrue (sending the object enables the timer)
pauseOnNonQuestionBlocksbooleanWhether the timer should pause on non-question blocks, such as Form blockstrue
warningAtintegerThe time in seconds when the warning should be shown. The warning is a message that tells the user how much time they have left10
formatstringThe format of the timer. Allowed values: s (Seconds as number), m_s (Minutes:Seconds), x_m_x_s (X minutes Y seconds)s
shapestringThe shape of the timer. Allowed values: circleTimer, barTimerbarTimer

Example

{
    "blocks": [...],
    "preset": {
        "riddleTimer": {
            "timeLimit": 60,
            "pauseOnNonQuestionBlocks": true,
            "warningAt": 10,
            "format": "s",
            "shape": "circleTimer"
        }
    }
}

Setting block timer

The block timer is a limit on how long the user has to complete a block. The time limit can be set either per block or globally for all blocks.

Note: The block timer is available for polls, quizzes, personality tests, forms and minigames. For all other Riddle types, blockTimer is silently ignored in a plain create build, but rejected as an unsupported property (see the note under All preset properties) when strict validation applies - editing an existing Riddle, or strictProperties: true.

Properties

PropertyRequiredTypeDescriptionDefault
timeLimitintegerThe time limit in seconds; not required when individualBlockTimes is set
pauseOnNonQuestionBlocksbooleanWhether the timer should pause on non-question blocks, such as Form blockstrue
warningAtintegerThe time in seconds when the warning should be shown. The warning is a message that tells the user how much time they have left10
formatstringThe format of the timer. Allowed values: s (Seconds as number), m_s (Minutes:Seconds), x_m_x_s (X minutes Y seconds)s
shapestringThe shape of the timer. Allowed values: circleTimer, barTimerbarTimer
individualBlockTimesintAn array of integers that specify the time limit for each block. The order of the blocks is the same as in the blocks property of the build object. The length of the array must be equal to the number of blocks in the Riddle
areIndividualTimesEnabledbooleanWhether those per-block times are actually used instead of the single shared timeLimit. Sending individualBlockTimes switches it on; send false to store the times but keep the shared limit in effectderived from individualBlockTimes
isEnabledbooleanExplicitly switches the block timer on or off - see feature togglestrue (sending the object enables the timer)

Example

Setting a global block time limit:

{
    "blocks": [...],
    "preset": {
        "blockTimer": {
            "timeLimit": 60,
            "pauseOnNonQuestionBlocks": true,
            "warningAt": 10,
            "format": "s",
            "shape": "circleTimer"
        }
    }
}

Setting a block time limit for each block:

{
    "blocks": [
        {
            "title": "Solve this Riddle: What is the capital of France?",
            "type": "SingleChoice",
            "items": [
                { "title": "Paris", "isCorrect": true },
                { "title": "Berlin", "isCorrect": false }
            ]
        },
        {
            "title": "Solve this Riddle: What is the capital of Germany?",
            "type": "SingleChoice",
            "items": [
                { "title": "Berlin", "isCorrect": true },
                { "title": "Paris", "isCorrect": false }
            ]
        }
    ],
    "preset": {
        "blockTimer": {
            "individualBlockTimes": [60, 30]
        }
    }
}

Timer warm-up

Available for polls, quizzes, personality tests, forms and minigames: a short countdown before the timer actually starts running.

PropertyRequiredTypeDescriptionDefault
isTimerWarmupEnabledbooleanWhether the warm-up countdown runsfalse
timerWarmupTimeintegerIts length in seconds; 0 or more3

Pagination

Available for polls, quizzes, personality tests, forms and stories. Pagination is the pager and progress bar the visitor navigates the Riddle with; it is on by default.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether pagination is used at alltrue
pagerIsEnabledbooleanWhether the pager ("3 / 10") is showntrue
progressBarIsEnabledbooleanWhether the progress bar is showntrue
isOnlyOnQuestionBlocksEnabledbooleanWhether it only appears on question blocksfalse
isBackNavigationEnabledbooleanWhether the visitor may navigate backfalse
paginationStylestringUnsegmented (one continuous bar) or Segmented (one segment per block)Unsegmented

Note: Pagination and custom logic are mutually exclusive - a logic tree already controls how the Riddle moves from block to block. This is not just about isEnabled: sending logic in the same build config together with any of pagination's toggles set to true - isEnabled, pagerIsEnabled, progressBarIsEnabled, isOnlyOnQuestionBlocksEnabled or isBackNavigationEnabled (paginationStyle is pure styling and is exempt) - is rejected, naming which toggle(s) conflict. Only sending logic with pagination.isEnabled: false and every other toggle left false or omitted is accepted - that combination is what lets a Riddle with custom logic be re-saved with its preset object at all.

Example:

{
    "blocks": [...],
    "preset": {
        "pagination": {
            "isEnabled": true,
            "paginationStyle": "Segmented",
            "isBackNavigationEnabled": true
        }
    }
}

Live score

Quiz only: a running score displayed while the visitor answers.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether the live score is displayedfalse
typestringRawTotal (e.g. "3 / 10") or PercentageRawTotal
isOnResultPageEnabledbooleanWhether it is also shown on the result pagetrue
isOnlyOnQuestionBlocksEnabledbooleanWhether it only appears on question blockstrue

Right/wrong answer feedback

Quiz only: what the visitor sees right after answering a question.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether right/wrong feedback is given at alltrue
isVisualEnabledbooleanWhether the answer is marked visually (green/red)true
isVisualBrieflyEnabledbooleanWhether that marking only flashes briefly instead of stayingtrue
isMsgEnabledbooleanWhether a "Correct!"/"Wrong!" message is showntrue
isConfettiEnabledbooleanWhether a correct answer triggers confettifalse

The message texts themselves can be overridden with customStrings.correctAnswerText and customStrings.wrongAnswerText.

Results on blocks

Available for polls, quizzes, personality tests and forms: showing how everyone else answered, right on the block.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether a block's own results are shown after answeringtrue (Poll, Quiz, Form), false (Personality)
isPercentageVisiblebooleanWhether each choice's percentage is showntrue
isVotesNumberVisiblebooleanWhether each choice's number of votes is shownfalse
areTotalVotesVisiblebooleanWhether the total number of votes is shownfalse

Stats before voting

Available for polls, quizzes, personality tests and forms: showing how popular the Riddle is before the visitor answers.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether these stats are shownfalse
areViewsVisiblebooleanWhether the number of views is shownfalse
areCompletionsVisiblebooleanWhether the number of completions is shownfalse

Reveal results later

Poll only: keep the results hidden until a set date, e.g. while a vote is still running.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether the results are withheldfalse
revealDatestringThe date the results become visible, in the format YYYY-mm-dd HH:ii:ss (timezone Europe/Berlin)
revealLaterTextstringThe message shown instead of the results until then

Single vote

Available for polls, quizzes, personality tests, forms and predictors: limit each visitor's device to one submission.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether a device may only submit oncefalse
isVoteAgainEnabledbooleanWhether the visitor may deliberately vote again anywaydepends on the Riddle type - see below

Note: isVoteAgainEnabled has no single default. A newly created Quiz starts with true (retaking is allowed), a newly created Poll with false (retaking is blocked), and every other type with whatever its own default preset data carries. This only applies to a Riddle created without a parent preset - one built with a presetId inherits the setting from that preset instead. Send the key explicitly whenever the distinction matters to you rather than relying on the type default.

IP limit

Available for the same Riddle types as single vote: a coarser limit per IP address.

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether the IP limit appliesfalse
countLimitintegerHow many submissions one IP may make; 1 or more1
timePeriodstringThe window that limit applies to: OneMinute, OneHour or OneDayOneDay

Clock

Minigame only: an always-visible clock counting up (as opposed to a countdown timer).

PropertyRequiredTypeDescriptionDefault
isEnabledbooleanWhether the clock is displayedfalse
formatstrings (seconds), m_s (Minutes:Seconds) or x_m_x_s (X minutes Y seconds)m_s
isAutoPauseEnabledbooleanWhether the clock pauses automatically, e.g. when the tab loses focustrue
isPauseOnNonRiddleBlocksEnabledbooleanWhether it pauses on blocks that are not part of the gametrue

Open or close the Riddle right away

isRiddleOpen is the master switch for whether the Riddle accepts submissions at all - independent of autoOpenDate and autoClose, which schedule that state for a date.

{
    "blocks": [...],
    "preset": {
        "isRiddleOpen": false
    }
}

Scheduling an opening date closes the Riddle as a side effect, so this is also how you open one back up, or close one without inventing a date for it. Sending both in the same build config is fine: isRiddleOpen is applied after autoOpenDate and wins.

Personality result calculation

Personality tests only. Both properties pick between the same two scoring modes; they apply to the two independent ways such a test can be scored.

PropertyRequiredTypeDescriptionDefault
calculationTypestringHow results scored by result points are ranked: TotalPointsAchieved or MaxAchievablePoints
calculationTypeAttributesstringThe same choice for results scored by attributes

TotalPointsAchieved ranks results by the raw points a participant collected for each of them. MaxAchievablePoints ranks them by the share of the points that were achievable for that result, which keeps results with fewer scoring answers competitive.

{
    "blocks": [...],
    "preset": {
        "personalitySettings": {
            "calculationType": "MaxAchievablePoints"
        }
    }
}

Custom strings

customStrings overrides the Riddle's button and feedback texts. Sending at least one of them switches the custom-strings feature on.

PropertyRequiredTypeDescriptionAvailable for...Default
isEnabledbooleanExplicitly switches the custom strings on or off. Sending false keeps them stored but unused - see feature togglesall
startBtnstring"Start" buttonall
nextBtnstring"Next" buttonall
skipBtnstring"Skip" buttonall
startOverBtnstring"Start over" buttonall
chooseBtnstring"Choose" buttonall
formSubmitBtnstringForm submit buttonall
formSkipBtnstringForm skip buttonall
correctAnswerTextstringMessage for a correct answerall
wrongAnswerTextstringMessage for a wrong answerall
chooseAgainBtnstring"Choose again" buttonQuiz
giveUpBtnstring"Give up" buttonQuiz
drawBtnstring"Draw" button (both sides tie)Predictor
saveScoreBtnstring"Save score" buttonPredictor

Example:

{
    "blocks": [...],
    "preset": {
        "customStrings": {
            "startBtn": "Let's go!",
            "nextBtn": "Continue",
            "correctAnswerText": "Spot on!"
        }
    }
}

isRiddleFooterVisible (default true) controls whether the Riddle has a footer at all. Inside it you can place your own text and logo.

PropertyRequiredTypeDescriptionDefault
textstringThe footer text; supports rich text. Sending it switches the footer text on
isEnabledbooleanExplicitly switches the footer text on or off. Sending false keeps the text stored but hidden - see feature togglesderived from text
isOnAllBlocksEnabledbooleanWhether the text appears on every block instead of only the firstfalse
PropertyRequiredTypeDescriptionDefault
typestringCustomLogo to show your own logo, NoFooter to remove Riddle's branding without adding oneNoFooter
logostring|objectThe logo to display. See Use media
mediaOrientationstringHow the logo is cropped: Wide, Square, Tall or OriginalOriginal
maxWidthintegerMaximum logo width in pixels; 1 or more200
logoPositionstringLeft, Center or RightCenter
linkstringWhere clicking the logo takes the visitor

Example:

{
    "blocks": [...],
    "preset": {
        "isRiddleFooterVisible": true,
        "footerText": {
            "text": "Sponsored by Example Inc.",
            "isOnAllBlocksEnabled": true
        },
        "footerBranding": {
            "type": "CustomLogo",
            "logo": "https://httpbin.io/image/jpeg",
            "logoPosition": "Left",
            "maxWidth": 120,
            "link": "https://www.your-website.com"
        }
    }
}

Riddle-level ads

Unlike the Ad block (which is a block of its own in the Riddle), ads places a fixed ad slot above and/or below the whole Riddle. Supplying either slot switches ads on.

PropertyRequiredTypeDescriptionDefault
adTopobjectThe slot above the Riddle
adBottomobjectThe slot below the Riddle
isEnabledbooleanExplicitly switches Riddle-level ads on or off. Sending false keeps both slots configured but unused - see feature toggles

Each slot is configured with either a project ad slot or a custom iframe - setting one clears the other:

PropertyRequiredTypeDescriptionDefault
projectSlotobjectslotId (integer, required) and optional variables (key-value overrides) of one of your project ad slots
iframeobjecturl (required) and optional height in pixels (1 or more)
isEnabledbooleanExplicitly switches this single slot on or off, independently of ads.isEnabled

Note: projectSlot requires the Riddle to belong to a team, since the slot IDs are the team's own.

Example:

{
    "blocks": [...],
    "preset": {
        "ads": {
            "adTop": {
                "projectSlot": {
                    "slotId": 123456,
                    "variables": {
                        "ad-variable-key1": "override-value1"
                    }
                }
            },
            "adBottom": {
                "iframe": {
                    "url": "https://ads.your-website.com/ad.html",
                    "height": 250
                }
            }
        }
    }
}

External content privacy banner

Available for polls, quizzes, personality tests, forms and stories: before an embedded YouTube/X/Vimeo item is loaded, the visitor is asked for consent.

PropertyRequiredTypeDescriptionDefault
isExternalContentBannerEnabledbooleanWhether the banner is shownfalse
privacyTextYoutubestringCustom text for YouTube embeds (not available for stories)
privacyTextTwitterstringCustom text for X/Twitter embeds
privacyTextVimeostringCustom text for Vimeo embeds
privacyTextButtonstringLabel of the button that loads the content anyway

Full example

A poll with a preset object built into it: German as its formal variant, a segmented pager the visitor can navigate back through, an opening date, and returning visitors remembered.

{
    "type": "Poll",
    "build": {
        "title": "Pasta poll",
        "blocks": [
            {
                "type": "SingleChoice",
                "title": "Spaghetti or Fusilli?",
                "items": [
                    { "title": "Spaghetti" },
                    { "title": "Fusilli" }
                ]
            }
        ],
        "result": {
            "title": "Thanks for voting!"
        },
        "preset": {
            "language": "de:formal",
            "autoOpenDate": "2026-09-01 00:00:00",
            "pagination": {
                "isEnabled": true,
                "paginationStyle": "Segmented",
                "isBackNavigationEnabled": true
            },
            "rememberUser": {
                "isEnabled": true,
                "isDsgvoAccepted": true
            }
        }
    }
}