Item formats

Most blocks hold a collection of smaller entries: a question's items, a form's fields, a TierList's tiers, a personality test's personalities. All of these use the same format, so you only have to learn it once - the pages of the individual Riddle types and blocks then only tell you what is specific to that collection.

One format: an array of objects

A collection is an array of objects, and every entry carries its own properties as keys. The entry's text is its title:

"items": [
    { "title": "Spaghetti" },
    { "title": "Fusilli" }
]

That is the whole rule. Beyond title and its own id, an entry only accepts the properties of the collection it sits in - there is no set of keys that every entry shares. A Quiz answer has an isCorrect flag, a form field a type, a personality answer its scores:

"items": [
    { "title": "Rome", "isCorrect": true },
    { "title": "Madrid", "isCorrect": false }
]
"fields": [
    { "title": "Your email", "type": "Email" },
    { "title": "Your name", "type": "Name" }
]
"items": [
    { "title": "I plan every detail", "scores": [3, 0] },
    { "title": "I improvise", "scores": [0, 3] }
]

Which properties those are is listed on the page of the Riddle type or block that owns the collection. A property that is not on that list is rejected, and the error names what the collection does accept:

Matrix scale[0]: "description" is not a supported property of this block. Supported here: title.

A description and a media of its own, for example, exist only on the answers of a choice question and on the entries of a few Poll blocks - not on a Matrix rating, a TierList tier or a Predictor team.

Giving an entry its own id

Every entry of a collection gets an id - auto-generated and counting up from 1 if you do not send one:

"items": [
    { "id": 201, "title": "Spaghetti" },
    { "id": 202, "title": "Fusilli" }
]

An item ID has to be a positive integer and only has to be unique within its own block. Assigning them yourself pays off in three places: logic settings can reference an answer by ID instead of by its exact text, stats and webhook data become stable when a wording changes, and an edit can address the entry. See custom IDs for the full rules.

Editing a collection

When you edit an existing Riddle, the entries of these collections are merged by their id: an entry you do not mention stays as it is, and an entry you send by id is updated with the properties you send.

{
    "id": 3,
    "items": [
        { "id": 2, "title": "Bonn" }
    ]
}

An entry without an id is not addressing anything, so an edit rejects it - add "$create": true to send it as a new entry instead:

{
    "id": 3,
    "items": [
        { "$create": true, "title": "Cologne" }
    ]
}

The one collection with keys: a Matrix scale

A Likert/matrix question stores the value a rating stands for, and that value is the key of the entry:

"scale": {
    "0": { "title": "Bad" },
    "2": { "title": "Medium" },
    "4": { "title": "Good" }
}

The entries themselves are objects like everywhere else. Send scale as a plain array to get the default values - the index of the entry, counting from 0.

Older configurations: the bare-value shorthand

The object entry above is the only item format the Builder API documentation describes. Older configurations, written when a collection also accepted a bare value in place of an object, may still look different, and what such a value meant depended on the collection it was in:

What an old configuration may holdWhat it meansThe same thing as an object
"items": ["Spaghetti", "Fusilli"]Each value is one entry's title"items": [{ "title": "Spaghetti" }, { "title": "Fusilli" }]
"items": {"Rome": true}The key is the title, the value the isCorrect flag"items": [{ "title": "Rome", "isCorrect": true }]
"fields": {"Your email": "Email"}The key is the field label, the value the field type"fields": [{ "title": "Your email", "type": "Email" }]

Those configurations keep working on POST /riddle-builder for backwards compatibility, but the shorthand is no longer documented, and it is rejected wherever strict property validation applies: when you edit a Riddle, when you build through the MCP server, and on a create build sent with strictProperties:

SingleChoice: Invalid item at key "Madrid": expected an object with the item's properties as keys, e.g. {"title":"Madrid","isCorrect":false}. A bare bool is not accepted here - only an object can carry an "id", which is what addressing a single item takes.

There is nothing a bare value can express that an object cannot, so move any configuration that still sends one over to the object entry: the text goes into title, every other value into a key of its own.

Next steps