Skip to main content
In linear mode, the interviewer asks these questions in order, probing with follow-ups. For branching interviews, see client.graph.

list()

The study’s questions, in interview order. Returns QuestionListOut.

create()

Create a question and append it to the end of the list.
str | UUID
required
The study.
str
required
Question text.
str
text, scale, choices, multi_select, ranking, slots, card_sort or image_upload. If omitted, it’s inferred: scale → scale, options → choices, slots → slots, expected_image → image_upload, otherwise text. image_upload needs the standard or premium model tier.
str
Guidance for the interviewer on how to probe this question.
ScaleConfig | dict
For scale questions, for example {"minScale": 1, "maxScale": 5, "minLabel": "Not at all", "maxLabel": "Very"}.
list[str]
Answer options, for choices, multi_select and ranking.
list[str]
Named slots to fill, for slots questions.
list[str]
Bucket names, for card_sort questions.
int
Minimum selections, for multi_select.
int
Maximum selections, for multi_select.
bool
default:"True"
Whether the interviewer asks follow-up questions.
int
Minimum conversation turns on this question.
int
Maximum conversation turns on this question.
str
Description of the expected upload, for image_upload questions.
Returns QuestionOut.

generate()

Write questions with AI and append them to the list. The generator works from the study’s research question, objectives, methodology and target population, picks a mix of question types and writes in the study’s language. New questions extend the existing list; nothing is replaced. Usually takes 30 seconds to 2 minutes.
int
default:"10"
How many questions to generate, from 3 to 20.
str
Extra guidance, such as "start with two warm-up questions".
Returns GeneratedQuestionsOut. skipped_image_questions counts image-upload questions the generator proposed but didn’t add, because your plan has no vision-capable interview model.

update()

Partially update a question. Takes the same optional fields as create(), including question; only the ones you pass change. Pass an empty list to clear options, slots or groups. Returns QuestionOut.

delete()

Delete a question and its attached images. The remaining questions are renumbered. Returns SuccessResponse.

reorder()

Pass every question ID, in the interview order you want.
Returns QuestionListOut.

validate()

Review the questions before going live: an overall ethics pass or fail, plus per-question language quality and redundancy findings. It’s the same check as the dashboard’s Validate button. For a check of the whole study before publishing, use studies.validate().
Returns ValidationOut.