Feature toggles

Many Riddle features consist of two things: the content of the feature, and a flag saying whether it is used. In a builder config you normally only send the content - supplying a feature's content switches the feature on. Sending an explanation enables the explanation, sending a footerText enables the footer text, sending an adTop slot enables ads.

For every such feature the flag is also available as a property of its own, so you can state it explicitly.

The rule

  1. Send only the content → the feature is switched on.
  2. Send the flag as true → same thing, explicit.
  3. Send the content and the flag as false → the content stays stored, the feature is off.
  4. Send neither → nothing changes.

An explicit flag is always applied after the content it belongs to, so it always wins - the order inside your JSON object does not matter.

Case 3 is what makes a feature switchable again when editing an existing Riddle: without it, resending a configuration would silently switch every configured feature back on.

{
    "blocks": [
        {
            "id": 1,
            "explanation": "Paris has been the capital since 508.",
            "isExplanationEnabled": false
        }
    ]
}

The explanation stays exactly as it is, but is no longer shown. Dropping isExplanationEnabled from the same request would switch it back on.

Round trips

Reading a Riddle back always returns the flag next to the feature it belongs to, so "is this on?" is answered by the configuration itself and an off state survives being sent back unchanged. A feature nobody ever configured is left out entirely, flag included.

Where they are

FlagWhereSwitched on by
isEnabledpreset.riddleTimer, preset.blockTimer, preset.autoCloseSending the object
isEnabledpreset.customStringsSending at least one string
isEnabledpreset.footerTextA non-empty text
isEnabledpreset.ads, and each of its adTop / adBottom slotsSending a slot / the slot's projectSlot or iframe
isAutoOpenEnabledpresetautoOpenDate
isResultEnabledpreset.autoCloseresultId
areIndividualTimesEnabledpreset.blockTimerindividualBlockTimes
isCustomConfirmationPageEnabledpublish.doiAny of the confirmation page properties
isExplanationEnabledA Quiz question / answerexplanation
isRankFormatEnabledAn "order it" blockrankFormat
isDescriptionVisibleA choice blockAny item description
areOtherResultsEnabled, isIncludeCTAButtonEnabledA personality resultThe other results / CTA button properties
isDescriptionEnabled, isPrefilledTextEnabled, isAdvancedValidationEnabledA form fielddescription / prefilledText / regex
isShowNextButtonAfterDelayEnabledAn Ad blockA showNextButtonDelay greater than 0
isSuccessMessageEnabledA Sudoku blockA non-empty successMessage
isDelayEnabledA result redirectA delay greater than 0

Flags that are not derived from anything - isRequired on a form field, preset.riddleSingleVote.isEnabled, preset.pagination.isEnabled and the like - are ordinary properties and behave exactly as they read.

Next steps