Skip to main content
A study moves through four statuses: New studies start as draft. studies.publish opens a study, and studies.pause stops admitting participants and unlocks editing.

1. Create the study

Create it directly with the fields you already have:
survey_type is one of sociology (the default), user_experience, customer_development or polling. model_tier is one of open_weights (the default), standard or premium.

Or draft it with AI

studies.draft turns a short brief into study fields, and studies.draft_from_site does the same from a product landing page. Neither stores anything, so review the draft and pass its fields to create:
Each survey_type reads a different set of brief fields. See draft for which are required.
Drafting is a model call that usually takes 20–40 seconds. Keep the client timeout at its 120-second default or higher.

2. Configure what participants see

Participants go through these stages in order. Each is optional except the questions.
1

Welcome and consent

Or draft it from the study’s own fields with client.welcome.generate(study.id). Fill in any placeholders the draft lists, then save it with set. Add translations with upsert_translation.
2

Screening

Qualifying multiple-choice questions. Participants whose answers aren’t in acceptable_options are disqualified.
3

Characteristics

Participant attributes you’ll segment by later.
4

Interview questions

Write them, generate them, or both. Generated questions are appended, never replacing what’s there.
For branching interviews, author a flow instead. See Interview flows.

Question types

If you omit qtype, it’s inferred from the config you pass: Set qtype explicitly for multi_select, ranking and card_sort (which uses groups). image_upload needs the standard or premium model tier.

3. Validate

studies.validate checks everything participants will read (questions or flow, welcome, screening and characteristics) and records the result. Each issue has a severity:
  • Ethical and blocking issues must be fixed before publishing.
  • Methodological issues can be acknowledged.
For a quicker, questions-only check (ethics, language quality and redundancy), use questions.validate.

4. Publish

publish checks your plan’s open-study limit, your credits and the latest validation. If anything blocks it, it raises ConflictError, with the refusal code, the issues and the validation_run_id in e.body.
If your balance covers at least one interview but not every remaining response, pass acknowledge_credit_shortfall=True to publish anyway. Check where a study stands at any time with get_publication:

5. Pause and edit

An open study’s interview configuration is locked. Pause it to make changes, then publish again to reopen:

6. Monitor

stats counts simulated interviews and test runs separately, in simulated_interviews and test_interviews.