Skip to main content

ish study create

Create a new study (the persistent shape: modality, tasks, questionnaire). Optionally creates iteration A inline when —content-text, —url, —image-urls, —content-url, or —endpoint is passed. Usage: ish study create [options]

Options

--workspace <id>
string
Workspace ID
--name <name>
string
Study name Required.
--description <description>
string
Study description
--modality <modality>
string
Study modality (interactive, video, audio, text, image, document, chat)
--content-type <type>
string
Content type (per-modality enum - see ‘Content types by modality’ below). Changes how —title is presented to participants (e.g. content-type email renders —title as the Subject: line). Not used for interactive / chat.
--assignment <name:instructions>
string
Assignment as ‘Name:Instructions’ (repeatable) Default: [].
--assignments-file <path>
string
JSON file with assignments array
--assignments <json>
string
Inline JSON array of assignments (escape hatch)
--question <text>
string
Add a text question to the questionnaire (repeatable; type=text, timing=after) Default: [].
--questionnaire <json|@file|path>
string
Questionnaire as inline JSON array, @file, or a JSON file path - supports text, slider, likert, single-choice, multiple-choice, number; timing=before|after
--content-text <text>
string
Text content to evaluate, or @filepath to read from file. Creates iteration A inline (text modality only)
--url <url>
string
URL to test. Creates iteration A inline (interactive modality only)
--screen-format <format>
string
Screen format for interactive iterations: desktop (default) or mobile_portrait (hyphen/underscore variants accepted)
--content-url <url>
string
Public URL of the media file. Creates iteration A inline (video, audio, document modalities). For local files, use the 2-step iteration create flow.
--image-urls <urls>
string
Comma-separated public image URLs. Creates iteration A inline (image modality). For local files, use the 2-step iteration create flow.
--title <title>
string
Participant-facing content title - the headline participants read before the body (text + media modalities - image, video, audio, document; optional). With —content-type email it becomes the email Subject: line. Not an internal label. Not used for interactive / chat.
--segmentation-json <json>
string
Segmentation JSON for the inline iteration A - time_based {intervals_seconds, labels?}, section_based {sections[{name,label,…}]}, or page_based {} (text + media). section_based sections are SEMANTIC: group related paragraphs into a few coherent sections (a long article is usually 3-6 sections, not one per paragraph). Lets one study create build a complete segmented iteration - no separate iteration create needed.
--content-config-json <json>
string
Content-config JSON for the inline iteration A (early_termination, selected_segment_indices) - text + media.
--content-html <html>
string
HTML version of the text, or @filepath - text modality (email rendering)
--sender-name <name>
string
Email ‘From’ display name - text modality (email rendering)
--sender-email <email>
string
Email sender address - text modality (email rendering)
Hero image URL - text modality (email rendering)
--endpoint <id>
string
Saved chatbot endpoint id or alias. Creates iteration A inline (chat modality, external_chatbot mode)
--endpoint-config <file>
string
ChatbotEndpointConfig JSON file (or - for stdin); embedded directly. Mutually exclusive with —endpoint (chat modality, external_chatbot mode)
--max-turns <n>
string
Maximum conversation turns per participant (chat modality only; default 12)
--chat-mode <mode>
string
Chat mode: external_chatbot (default) or participant_pair (two AI groups talk to each other) - chat modality only
--group-a <ids>
string
Person IDs/aliases for group A (comma-separated or repeatable). Pass a single profile and N on —group-b to broadcast (1×N rehearsal: fix side A, vary side B) - chat participant_pair mode Default: [].
--group-b <ids>
string
Person IDs/aliases for group B. When both sides are explicit they must be equal length, BUT if either side is a singleton it’s auto-broadcast to match the other (1×N rehearsal) - chat participant_pair mode Default: [].
--scenario-a <text-or-@file>
string
Side-A scenario + goal - chat participant_pair mode
--scenario-b <text-or-@file>
string
Side-B scenario + goal - chat participant_pair mode
--initiator-side <a|b>
string
Which side speaks first (default: a) - chat participant_pair mode
--role-criteria-a <json-or-@file>
string
RoleCriteria filter for side A (JSON object or @filepath). Keys: occupation[], min_age, max_age, gender[], country[], education_level_in[], household_in[], locale_type_in[], income_level_in[], employment_status_in[], requires_captions, uses_screen_reader, prefers_reduced_motion, prefers_high_contrast, has_any_accessibility_need. The five *_in arrays accept snake_case spec values; the five accessibility filters are booleans. Use INSTEAD of —group-a or alongside it. chat participant_pair mode.
--role-criteria-b <json-or-@file>
string
RoleCriteria filter for side B - same shape as —role-criteria-a. chat participant_pair mode.

Global flags

Every command accepts the global flags.
-V, --version
boolean
output the version number
-t, --token <token>
string
Auth token (or set ISH_TOKEN env var)
--token-file <path>
string
Read auth token from a file (preferred over —token / ISH_TOKEN)
--workspace <id>
string
Default workspace ID; per-subcommand —workspace overrides
--json
boolean
Output as JSON (auto-enabled when piped)
--get <field>
string
Extract a single field from the JSON response and print only its value (implies —json internally; supports dotted paths e.g. person.name)
--human
boolean
Force human-readable output even when stdout is piped (overrides JSON-when-piped auto-detection)
--fields <fields>
string
Comma-separated fields to include in JSON output (e.g. alias,name,status)
--verbose
boolean
Include full UUIDs and timestamps in JSON output
--no-color
boolean
Disable colored output (also honored: NO_COLOR env var)
-q, --quiet
boolean
Suppress progress messages on stderr (no-op for read commands that emit none)