studyGuide field of Create Study defines everything participants see: the questions, their order, screening, concept testing, and routing logic. It’s an array of blocks, and each block contains one or more items (questions).
Minimal study
Top-level request fields
string
required
Internal study title (shown in the dashboard).
string
Participant-facing title. Falls back to
title when omitted.string
Background context for the AI interviewer — what the study is about and who you’re talking to.
string
What you want to learn. Helps the AI interviewer probe in the right direction.
object
{ "title": "...", "message": "..." } shown to participants before the interview starts.string
Message shown when the interview ends.
Block[]
required
The blocks described below. At least one.
Config
string
One of
text, audio, audio_text, audio_screen, video, video_screen.string
Language code the questions are written in (e.g.
en, de, fr, es, zh-TW, en-medical). See the complete language list.string[] | null
Translation target codes participants can switch to.
null or omitted = English only.string[]
Restrict which devices can take the study: any of
ios, android, desktop.Example config
Blocks
Every block has atype, a title, and an items array (at least one item).
Screening blocks
Screening blocks may contain onlymultiple_choice items, and every option must carry a status:
approve— selecting it qualifies the participantreject— selecting it screens the participant outneutral— doesn’t affect qualification
Screening block
status must be null or omitted.
Concept blocks
Concept blocks show stimuli — product ideas, ads, prototypes — and ask the block’s items about each one. They require aconceptSamplingConfig with at least one concept; other block types must omit it.
Concept[]
required
Each concept has a
nickname (internal label) and content: a participant-facing title, optional description, optional media (images/videos), and an optional embed (e.g. a Figma prototype URL).integer | null
How many concepts each participant sees, randomly sampled.
null = every participant sees all concepts.conditional, so it’s only shown to participants matching the criteria — e.g. gate each concept on a screener answer. selectedTemplateOptions criteria on a concept must reference an item in a block before the concept block.
Concept block
Question types
All items share a few common fields:string
required
The question text.
string
required
One of
open_ended, multiple_choice, ranking, matrix, max_diff, statement.string
Stable identifier for the item, unique within the payload. Auto-generated when omitted — set it only when a conditional or
carryForwardFrom needs to reference this item.Conditional | null
Show this question only when the criteria match. See Conditional logic.
Media[] | null
Images or videos shown with the question:
{ "name", "url", "type": "image" | "video", "widthPercentage"?, "forceWatching"? }. forceWatching requires the participant to finish the video before answering.Embed | null
An embedded web page shown with the question:
{ "url", "proxyUrl"? }.Open-ended
The AI interviewer asks the question conversationally and can probe with follow-ups.string | null
Follow-up depth:
none, light, medium, or heavy.string | null
Extra instructions for the AI interviewer on how to probe this question.
string | null
text, voice, screenRecording, or none.boolean | null
Lets the AI observe the participant’s screen while they answer. Only applies when
preferredInput is screenRecording.Open-ended
Multiple choice
Option[]
Required unless
carryForwardFrom is set. Each option: { "text", "externalId"?, "status"?, "exclusiveOption"? }.boolean | null
Allow selecting more than one option.
integer | null
Bounds on how many options must be selected. Both must be set together (or both omitted), only valid when
multiSelect is true, and minSelect ≤ maxSelect.boolean | null
Adds an “Other” option with free-text input.
boolean | null
Shuffle option order per participant.
boolean | null
Keep the last option in place when randomizing (e.g. “None of the above”).
string | null
externalId of an earlier multi-select multiple choice item; this question shows only the options the participant selected there. See Carry-forward.exclusiveOption: true clears and locks the other selections when picked (e.g. “None of the above”). It’s only valid on the final option of a multi-select question.
Multiple choice
Ranking
Participants order the options. SupportsrandomizeOptionOrder and carryForwardFrom (rank only the options selected in an earlier multi-select question).
Ranking
Matrix
A grid: each row is rated single-select across the options (columns).Matrix
MaxDiff
Best/worst scaling across at least two options. See MaxDiff analysis for how results are reported.Option[]
required
The items being compared (minimum 2).
string | null
What participants judge the items on (e.g. “importance”, “appeal”).
3 | 4 | 5 | null
How many items are shown per comparison screen.
MaxDiff
Statement
Not a question — shows text (and optional media/embed) with a continue button. Use it for instructions or section intros.string
Custom label for the continue button.
Statement
Conditional logic
Any item — and any concept in a concept block — can carry aconditional: it’s only shown when the criteria match. Criteria are combined with an operator (and / or).
Show only if they selected Blue Bottle
selectedTemplateOptions — based on an answer to an earlier multiple_choice or matrix item.
string
required
externalId of an earlier multiple_choice or matrix item. For a conditional on a concept, the item must live in a block before the concept block.string
required
mustSelect or mustNotSelect.string[]
required
Option
externalIds (falls back to option text). For a matrix source, these are the columns.string | null
Required only for a matrix source: the exact row text the criterion applies to.
searchParam — based on a URL parameter passed into the study link.
string
required
The query parameter name, e.g.
segment in https://listenlabs.ai/s/abc123?segment=pro.string
required
The value it must equal.
Carry-forward
multiple_choice and ranking items can set carryForwardFrom to the externalId of an earlier multi-select multiple choice item. The question then only shows (or ranks) the options the participant actually selected there — so you can ask “which have you used?” followed by “which of those do you prefer?”. When carryForwardFrom is set, omit options; they’re inherited from the source question.
External IDs
externalIds are stable handles you assign to blocks, items, options, and concepts. They’re optional everywhere — the server auto-generates them when omitted — but you must set one on any item that a conditional (questionId) or carryForwardFrom references. Block, item, and concept externalIds must be unique across the entire payload.
Validation rules
Beyond field-level validation, the server enforces these cross-field rules, returning400 with code: invalid_study_guide and a descriptive error message when violated:
- At most one screening block, and it must be the first block.
- Screening blocks may contain only
multiple_choiceitems, and every option in them must carry astatus; outside screening blocks,statusmust be null/omitted. - Concept blocks require
conceptSamplingConfigwith at least one concept; other block types must omit it. externalIds must be unique across blocks, items, and concepts.conditional.criteria[].questionIdandcarryForwardFrommust reference theexternalIdof an earlier item (of the right type).- A concept’s
conditionalmust reference an item in a block before the concept block. minSelect/maxSelectmust both be set or both omitted, only whenmultiSelectis true, withminSelect≤maxSelect.exclusiveOptionis only valid on the final option of a multi-selectmultiple_choicequestion.