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.
| Property | Required | Type | Description | Available for... | Default |
|---|---|---|---|---|---|
preset | integer | The project preset to connect the Riddle to | all | ||
presetId | integer | Legacy alias of preset | all | ||
palette | string | The palette to use - either its ID or its display name | all | ||
paletteValues | object | Individual palette values to override, keyed by field path; see below | all | ||
language | string | The Riddle language; see below | all | ||
rememberUser | object | Remember-user configuration; see below | all | ||
autoOpenDate | string | When the Riddle opens; see below | all | ||
isAutoOpenEnabled | boolean | Explicitly switches auto-open on or off; see below | all | ||
autoClose | object | When the Riddle closes; see below | all | ||
customStrings | object | Overrides for button and feedback texts; see below | all | ||
isRiddleFooterVisible | boolean | Whether the Riddle's footer is shown at all (default true) | all | ||
footerText | object | A free text note in the footer; see below | all | ||
footerBranding | object | Your own logo in the footer; see below | all | ||
ads | object | Riddle-level ad slots above/below the Riddle; see below | all | ||
isOneVotePerIdentifierEnabled | boolean | Whether each visitor may only vote once, identified by their generated ID (default false) | all | ||
mediaOrientation | string | The aspect ratio every media element of the Riddle is cropped to: Wide, Square, Tall or Original | all | ||
isRiddleOpen | boolean | The master open/closed switch; see below | Poll, Quiz, Personality, Form, Predictor, Minigame, Story | ||
riddleTimer | object | A time limit for the whole Riddle; see below | Poll, Quiz, Personality, Form, Minigame | ||
blockTimer | object | A time limit per block; see below | Poll, Quiz, Personality, Form, Minigame | ||
displayLiveScore | object | A running score while answering; see below | Quiz | ||
quizRightWrongDisplay | object | Right/wrong answer feedback; see below | Quiz | ||
pagination | object | Pager/progress bar navigation; see below | Poll, Quiz, Personality, Form, Story | ||
resultsOnBlocks | object | Showing a block's own results after answering; see below | Poll, Quiz, Personality, Form | ||
statsBeforeVoting | object | Showing view/completion counts before answering; see below | Poll, Quiz, Personality, Form | ||
revealResultsLater | object | Hiding the results until a set date; see below | Poll | ||
riddleSingleVote | object | One vote per device; see below | Poll, Quiz, Personality, Form, Predictor | ||
riddleIpLimit | object | Vote limit per IP address; see below | Poll, Quiz, Personality, Form, Predictor | ||
clockRiddle | object | An always-visible running clock; see below | Minigame | ||
personalitySettings | object | How the winning result is calculated; see below | Personality | ||
isAutoAdvance | boolean | Whether the Riddle advances to the next block automatically after answering (default true) | Poll, Quiz, Personality, Predictor | ||
isChooseButtonVisible | boolean | Whether an explicit "choose" button is shown instead of answering by clicking (default false) | Poll, Quiz, Personality | ||
isTimerWarmupEnabled | boolean | Whether a short countdown runs before a timer starts (default false) | Poll, Quiz, Personality, Form, Minigame | ||
timerWarmupTime | integer | That countdown's length in seconds; 0 or more (default 3) | Poll, Quiz, Personality, Form, Minigame | ||
isEmailBlocklistEnabled | boolean | Whether your email blocklist is applied to submissions (default false) | all except Leaderboard | ||
isExternalContentBannerEnabled | boolean | Whether a privacy banner is shown before external content (YouTube, X, Vimeo) is loaded (default false) | Poll, Quiz, Personality, Form, Story | ||
privacyTextYoutube | string | Custom banner text for YouTube embeds | Poll, Quiz, Personality, Form | ||
privacyTextTwitter | string | Custom banner text for X/Twitter embeds | Poll, Quiz, Personality, Form, Story | ||
privacyTextVimeo | string | Custom banner text for Vimeo embeds | Poll, Quiz, Personality, Form, Story | ||
privacyTextButton | string | Label of the "load content anyway" button | Poll, Quiz, Personality, Form, Story | ||
scoreSeparator | string | How the two predicted scores are separated: Versus, Colon, At, Dash, Slash or X (default Versus) | Predictor | ||
hasEmphasizeWinnerEnabled | boolean | Whether the winning side is emphasized (default true) | Predictor | ||
hasGrayOutEnabled | boolean | Whether the losing side is grayed out (default true) | Predictor | ||
areShareablesOnBlockEnabled | boolean | Whether each prediction can be shared right on the block (default false) | Predictor | ||
quizTimeMultiplier | integer | 0-100; how strongly answering time influences the ranking (default 0) | Leaderboard | ||
isCompactView | boolean | Whether entries use the compact, single-line view (default false) | Leaderboard | ||
isShareButtonVisible | boolean | Whether the leaderboard offers a share button (default true) | Leaderboard | ||
entriesAbove | integer | How many entries are shown above the visitor's own (default 1) | Leaderboard | ||
entriesBelow | integer | How many entries are shown below the visitor's own (default 3) | Leaderboard | ||
isTotalEntriesEnabled | boolean | Whether the total number of entries is displayed (default false) | Leaderboard | ||
isBadwordFilterEnabled | boolean | Whether nicknames run through the bad-word filter (default false) | Leaderboard | ||
badwordFilterCustomList | string | Additional comma-separated words to filter | Leaderboard | ||
isEmailVerificationEnabled | boolean | Whether participants have to confirm their email address before their score is ranked (default false) | Leaderboard | ||
color1st | string | CSS color of the first-place row on the podium (default #D38807) | Leaderboard | ||
color2nd | string | CSS color of the second-place row on the podium (default #A9A9A9) | Leaderboard | ||
color3rd | string | CSS 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
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether the remember user feature is enabled or not | false |
isAutoSubmitEnabled | boolean | If true, the form will be submitted automatically when the user returns to the Riddle | true | |
isDsgvoAccepted | boolean | Whether the user has accepted the DSGVO | false | |
isUserPermissionRequired | boolean | Whether the user has to give permission to store their data in local storage | true | |
isPIDOnly | boolean | Whether only the generated participant ID is remembered instead of the answers themselves. The Creator only offers this once isEnabled and isDsgvoAccepted are both on | false |
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:
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
date | ✓ | string | The 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) | |
resultId | integer | The 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 shown | 1 | |
isResultEnabled | boolean | Explicitly switches showing that result on or off - see feature toggles | derived from resultId | |
isEnabled | boolean | Explicitly switches the automatic closing on or off - see feature toggles | true (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
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
timeLimit | ✓ | integer | The time limit in seconds | |
isEnabled | boolean | Explicitly switches the Riddle timer on or off - see feature toggles | true (sending the object enables the timer) | |
pauseOnNonQuestionBlocks | boolean | Whether the timer should pause on non-question blocks, such as Form blocks | true | |
warningAt | integer | The time in seconds when the warning should be shown. The warning is a message that tells the user how much time they have left | 10 | |
format | string | The format of the timer. Allowed values: s (Seconds as number), m_s (Minutes:Seconds), x_m_x_s (X minutes Y seconds) | s | |
shape | string | The shape of the timer. Allowed values: circleTimer, barTimer | barTimer |
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
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
timeLimit | ✓ | integer | The time limit in seconds; not required when individualBlockTimes is set | |
pauseOnNonQuestionBlocks | boolean | Whether the timer should pause on non-question blocks, such as Form blocks | true | |
warningAt | integer | The time in seconds when the warning should be shown. The warning is a message that tells the user how much time they have left | 10 | |
format | string | The format of the timer. Allowed values: s (Seconds as number), m_s (Minutes:Seconds), x_m_x_s (X minutes Y seconds) | s | |
shape | string | The shape of the timer. Allowed values: circleTimer, barTimer | barTimer | |
individualBlockTimes | int | An 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 | ||
areIndividualTimesEnabled | boolean | Whether 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 effect | derived from individualBlockTimes | |
isEnabled | boolean | Explicitly switches the block timer on or off - see feature toggles | true (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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isTimerWarmupEnabled | boolean | Whether the warm-up countdown runs | false | |
timerWarmupTime | integer | Its length in seconds; 0 or more | 3 |
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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether pagination is used at all | true |
pagerIsEnabled | boolean | Whether the pager ("3 / 10") is shown | true | |
progressBarIsEnabled | boolean | Whether the progress bar is shown | true | |
isOnlyOnQuestionBlocksEnabled | boolean | Whether it only appears on question blocks | false | |
isBackNavigationEnabled | boolean | Whether the visitor may navigate back | false | |
paginationStyle | string | Unsegmented (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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether the live score is displayed | false |
type | string | RawTotal (e.g. "3 / 10") or Percentage | RawTotal | |
isOnResultPageEnabled | boolean | Whether it is also shown on the result page | true | |
isOnlyOnQuestionBlocksEnabled | boolean | Whether it only appears on question blocks | true |
Right/wrong answer feedback
Quiz only: what the visitor sees right after answering a question.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether right/wrong feedback is given at all | true |
isVisualEnabled | boolean | Whether the answer is marked visually (green/red) | true | |
isVisualBrieflyEnabled | boolean | Whether that marking only flashes briefly instead of staying | true | |
isMsgEnabled | boolean | Whether a "Correct!"/"Wrong!" message is shown | true | |
isConfettiEnabled | boolean | Whether a correct answer triggers confetti | false |
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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether a block's own results are shown after answering | true (Poll, Quiz, Form), false (Personality) |
isPercentageVisible | boolean | Whether each choice's percentage is shown | true | |
isVotesNumberVisible | boolean | Whether each choice's number of votes is shown | false | |
areTotalVotesVisible | boolean | Whether the total number of votes is shown | false |
Stats before voting
Available for polls, quizzes, personality tests and forms: showing how popular the Riddle is before the visitor answers.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether these stats are shown | false |
areViewsVisible | boolean | Whether the number of views is shown | false | |
areCompletionsVisible | boolean | Whether the number of completions is shown | false |
Reveal results later
Poll only: keep the results hidden until a set date, e.g. while a vote is still running.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether the results are withheld | false |
revealDate | string | The date the results become visible, in the format YYYY-mm-dd HH:ii:ss (timezone Europe/Berlin) | ||
revealLaterText | string | The 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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether a device may only submit once | false |
isVoteAgainEnabled | boolean | Whether the visitor may deliberately vote again anyway | depends 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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether the IP limit applies | false |
countLimit | integer | How many submissions one IP may make; 1 or more | 1 | |
timePeriod | string | The window that limit applies to: OneMinute, OneHour or OneDay | OneDay |
Clock
Minigame only: an always-visible clock counting up (as opposed to a countdown timer).
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isEnabled | ✓ | boolean | Whether the clock is displayed | false |
format | string | s (seconds), m_s (Minutes:Seconds) or x_m_x_s (X minutes Y seconds) | m_s | |
isAutoPauseEnabled | boolean | Whether the clock pauses automatically, e.g. when the tab loses focus | true | |
isPauseOnNonRiddleBlocksEnabled | boolean | Whether it pauses on blocks that are not part of the game | true |
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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
calculationType | string | How results scored by result points are ranked: TotalPointsAchieved or MaxAchievablePoints | ||
calculationTypeAttributes | string | The 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.
| Property | Required | Type | Description | Available for... | Default |
|---|---|---|---|---|---|
isEnabled | boolean | Explicitly switches the custom strings on or off. Sending false keeps them stored but unused - see feature toggles | all | ||
startBtn | string | "Start" button | all | ||
nextBtn | string | "Next" button | all | ||
skipBtn | string | "Skip" button | all | ||
startOverBtn | string | "Start over" button | all | ||
chooseBtn | string | "Choose" button | all | ||
formSubmitBtn | string | Form submit button | all | ||
formSkipBtn | string | Form skip button | all | ||
correctAnswerText | string | Message for a correct answer | all | ||
wrongAnswerText | string | Message for a wrong answer | all | ||
chooseAgainBtn | string | "Choose again" button | Quiz | ||
giveUpBtn | string | "Give up" button | Quiz | ||
drawBtn | string | "Draw" button (both sides tie) | Predictor | ||
saveScoreBtn | string | "Save score" button | Predictor |
Example:
{
"blocks": [...],
"preset": {
"customStrings": {
"startBtn": "Let's go!",
"nextBtn": "Continue",
"correctAnswerText": "Spot on!"
}
}
}
Footer
isRiddleFooterVisible (default true) controls whether the Riddle has a footer at all. Inside it you can place your own text and logo.
Footer text
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
text | string | The footer text; supports rich text. Sending it switches the footer text on | ||
isEnabled | boolean | Explicitly switches the footer text on or off. Sending false keeps the text stored but hidden - see feature toggles | derived from text | |
isOnAllBlocksEnabled | boolean | Whether the text appears on every block instead of only the first | false |
Footer branding
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
type | ✓ | string | CustomLogo to show your own logo, NoFooter to remove Riddle's branding without adding one | NoFooter |
logo | string|object | The logo to display. See Use media | ||
mediaOrientation | string | How the logo is cropped: Wide, Square, Tall or Original | Original | |
maxWidth | integer | Maximum logo width in pixels; 1 or more | 200 | |
logoPosition | string | Left, Center or Right | Center | |
link | string | Where 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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
adTop | object | The slot above the Riddle | ||
adBottom | object | The slot below the Riddle | ||
isEnabled | boolean | Explicitly 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:
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
projectSlot | object | slotId (integer, required) and optional variables (key-value overrides) of one of your project ad slots | ||
iframe | object | url (required) and optional height in pixels (1 or more) | ||
isEnabled | boolean | Explicitly 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.
| Property | Required | Type | Description | Default |
|---|---|---|---|---|
isExternalContentBannerEnabled | boolean | Whether the banner is shown | false | |
privacyTextYoutube | string | Custom text for YouTube embeds (not available for stories) | ||
privacyTextTwitter | string | Custom text for X/Twitter embeds | ||
privacyTextVimeo | string | Custom text for Vimeo embeds | ||
privacyTextButton | string | Label 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
}
}
}
}
- Default case
- Specifying preset settings
- All preset properties
- Customizing individual palette values
- Add remember user configuration
- Changing Riddle language
- Opening the Riddle at a set time
- Closing the Riddle at a set time
- Setting Riddle timer
- Setting block timer
- Timer warm-up
- Pagination
- Live score
- Right/wrong answer feedback
- Results on blocks
- Stats before voting
- Reveal results later
- Single vote
- IP limit
- Clock
- Open or close the Riddle right away
- Personality result calculation
- Custom strings
- Footer
- Riddle-level ads
- External content privacy banner
- Full example

