> ## Documentation Index
> Fetch the complete documentation index at: https://docs.userintuition.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Study And Launch Panel

> Preview a Panel study without creating or fielding it. Paid launch requires
a persisted study and a current estimate from the two-step launch flow.



## OpenAPI

````yaml /api-reference/openapi.json post /api/public/v1/studies/create-and-launch-panel
openapi: 3.1.0
info:
  title: User Intuition Public API
  description: >-
    ## Public Integration API


    Programmatic access to User Intuition for external integrators: manage
    studies, participants, interviews, reports, and panels.


    ### Authentication


    All endpoints require a Bearer token — either an API key (prefixed `ui_sk_`,
    created in the dashboard) or a dashboard JWT:


    ```

    Authorization: Bearer <ui_sk_… or JWT>

    ```


    ### Base URLs


    - **Production:** `https://api.userintuition.ai`

    - **Staging:** `https://staging.userintuition.ai`


    ### Support


    For API support, contact support@userintuition.ai
  version: 1.0.0
  contact:
    name: User Intuition Support
    email: support@userintuition.ai
servers:
  - url: https://api.userintuition.ai
    description: Production
  - url: https://staging.userintuition.ai
    description: Staging
security:
  - BearerAuth: []
paths:
  /api/public/v1/studies/create-and-launch-panel:
    post:
      tags:
        - public-studies
      summary: Create Study And Launch Panel
      description: >-
        Preview a Panel study without creating or fielding it. Paid launch
        requires

        a persisted study and a current estimate from the two-step launch flow.
      operationId: createStudyAndLaunchPanel
      parameters:
        - name: X-UI-Organization-ID
          in: header
          required: false
          schema:
            anyOf:
              - type: string
                maxLength: 128
              - type: 'null'
            description: >-
              Platform admins only: choose an organization for scoped reads and
              writes. Required to change another organization's study or use its
              wallet.
            title: X-Ui-Organization-Id
          description: >-
            Platform admins only: choose an organization for scoped reads and
            writes. Required to change another organization's study or use its
            wallet.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicCreateAndLaunch'
            examples:
              Targeted dry run:
                summary: Targeted cost estimate
                description: >-
                  dry_run true validates the complete request and returns cost
                  and timeline without creating or fielding a study.
                value:
                  study:
                    name: Startup CEO AI tool shortlist
                    study_type: in-depth-interview
                    recruiting_method: panel
                    interview_format: voice
                    voice: male
                    language: en
                    expected_duration_seconds: 1200
                    study_plan:
                      objectives: >-
                        Understand what triggers startup CEOs to evaluate
                        AI-powered research tools, how they build a shortlist,
                        and what proof makes a provider credible.
                      conversation_flow: >-
                        Discuss the last important customer-research decision,
                        how the CEO gathered input, why they considered an AI
                        tool, alternatives they compared, trust thresholds, and
                        evidence needed to shortlist one.
                      background: >-
                        Research into the earliest evaluation stage for AI
                        research tools.
                    targeting_attributes:
                      - qualification_id: 89
                        allowed_options:
                          - 1
                        disallowed_options: []
                    screener_questions:
                      - text: Are you the founder or CEO of a startup?
                        type: single_select
                        options:
                          - text: 'Yes'
                            disqualify: false
                          - text: 'No'
                            disqualify: true
                  panel:
                    target: 20
                    incident_rate: 25
                    country_code: US
                    frequency: one-time
                    dry_run: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicCreateAndLaunchResponse'
        '422':
          description: Public API error. X-Request-ID matches error.request_id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponse'
        default:
          description: Public API error. X-Request-ID matches error.request_id.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiErrorResponse'
components:
  schemas:
    PublicCreateAndLaunch:
      properties:
        study:
          $ref: '#/components/schemas/PublicPanelStudyCreate'
        panel:
          $ref: '#/components/schemas/PublicPanelCreate'
      additionalProperties: false
      type: object
      required:
        - study
        - panel
      title: PublicCreateAndLaunch
      description: >-
        Preview a Panel study without creating or fielding it. Paid launch
        requires

        creating the study, obtaining a current estimate, then calling
        launch-panel.
    PublicCreateAndLaunchResponse:
      properties:
        study:
          anyOf:
            - $ref: '#/components/schemas/PublicStudy'
            - type: 'null'
        panel:
          $ref: '#/components/schemas/PublicPanelResponse'
      type: object
      required:
        - panel
      title: PublicCreateAndLaunchResponse
    PublicApiErrorResponse:
      type: object
      required:
        - detail
        - error
      properties:
        detail:
          description: Legacy error detail; may be a string, list, or object.
        error:
          $ref: '#/components/schemas/PublicApiError'
    PublicPanelStudyCreate:
      properties:
        name:
          anyOf:
            - type: string
              maxLength: 40
            - type: 'null'
          title: Name
          description: Study display name (maximum 40 characters)
        study_type:
          type: string
          enum:
            - in-depth-interview
            - concept-test
            - prototype-test
          title: Study Type
          description: Study-type template slug
          default: in-depth-interview
        recruiting_method:
          anyOf:
            - type: string
              const: panel
            - type: 'null'
          enum:
            - panel
          title: Recruiting Method
          description: Must be panel when supplied.
        interview_format:
          anyOf:
            - type: string
              enum:
                - chat
                - video
                - voice
            - type: 'null'
          title: Interview Format
          description: chat, video, or voice
        voice:
          anyOf:
            - type: string
              enum:
                - male
                - female
            - type: 'null'
          title: Voice
          description: 'Interviewer voice: male (Elliot) or female (Clara)'
        language:
          anyOf:
            - type: string
            - type: 'null'
          enum:
            - auto
            - af
            - am
            - ar
            - as
            - az
            - bg
            - bn
            - bs
            - ca
            - cs
            - cy
            - da
            - de
            - el
            - en
            - es
            - et
            - eu
            - fa
            - fi
            - fil
            - fr
            - ga
            - gl
            - gu
            - he
            - hi
            - hr
            - hu
            - hy
            - id
            - is
            - it
            - iu
            - ja
            - jv
            - ka
            - kk
            - km
            - kn
            - ko
            - lo
            - lt
            - lv
            - mk
            - ml
            - mn
            - mr
            - ms
            - mt
            - my
            - nb
            - ne
            - nl
            - or
            - pa
            - pl
            - ps
            - pt
            - ro
            - ru
            - si
            - sk
            - sl
            - so
            - sq
            - sr
            - su
            - sv
            - sw
            - ta
            - te
            - th
            - tr
            - uk
            - ur
            - uz
            - vi
            - wuu
            - yue
            - zh
            - zu
          title: Language
          description: >-
            Interview language: an ISO 639-1 code, or 'auto' to auto-detect.
            Must be one of the supported options.
        study_plan:
          anyOf:
            - $ref: '#/components/schemas/PublicStudyPlan'
            - type: 'null'
          description: Interview instructions as named sections.
        expected_duration_seconds:
          anyOf:
            - type: integer
              minimum: 300
            - type: 'null'
          title: Expected Duration Seconds
          description: >-
            Maximum planned interview duration in seconds, including all
            sections, transitions, and likely follow-up probes. Estimate this
            from the completed study plan; it is not a guaranteed participant
            completion time.
        screener_questions:
          anyOf:
            - items:
                $ref: '#/components/schemas/PublicScreenerQuestionInput'
              type: array
            - type: 'null'
          title: Screener Questions
        targeting_attributes:
          anyOf:
            - items:
                $ref: '#/components/schemas/PublicTargetingAttribute'
              type: array
            - type: 'null'
          title: Targeting Attributes
          description: Target the panel by demographic qualifications (panel studies).
      additionalProperties: false
      type: object
      title: PublicPanelStudyCreate
      description: |-
        Study fields for create-and-launch-panel — no incentive config (always a
        panel study, so incentives don't apply).
    PublicPanelCreate:
      properties:
        target:
          type: integer
          maximum: 1000
          exclusiveMinimum: 0
          title: Target
          description: >-
            Target number of completed responses (maximum 1,000 for direct
            launch; request feasibility for larger studies)
        incident_rate:
          type: number
          maximum: 100
          minimum: 0
          title: Incident Rate
          description: >-
            Expected audience incidence rate as percentage points (10 means
            10%). Rates below 10% require a feasibility request.
        country_code:
          type: string
          enum:
            - AR
            - AU
            - AT
            - BE
            - BO
            - BR
            - CA
            - CL
            - CN
            - CO
            - CR
            - CZ
            - DK
            - DO
            - EC
            - EG
            - FI
            - FR
            - DE
            - GR
            - HK
            - HU
            - IN
            - ID
            - IE
            - IT
            - JP
            - KE
            - KR
            - LU
            - MY
            - MX
            - NL
            - NZ
            - NG
            - 'NO'
            - PK
            - PE
            - PH
            - PL
            - PT
            - RO
            - RU
            - SA
            - SG
            - SK
            - ZA
            - ES
            - SE
            - CH
            - TW
            - TH
            - TR
            - UG
            - AE
            - GB
            - US
            - VN
          title: Country Code
          description: >-
            Target country (one of the supported countries). Required for every
            public Panel estimate and launch; no country is inferred.
        frequency:
          type: string
          enum:
            - one-time
            - weekly
            - monthly
            - quarterly
          title: Frequency
          description: Recurring schedule, or one-time.
          default: one-time
        targeting_attributes:
          items:
            $ref: '#/components/schemas/PublicPanelTargetingAttribute'
          type: array
          title: Targeting Attributes
          description: >-
            Optional launch-specific targets for single-select panel attributes.
            Each target must be a positive whole number; per-attribute totals
            may not exceed target; and an under-filled attribute must leave an
            option open.
        dry_run:
          type: boolean
          title: Dry Run
          description: Return a cost estimate without provisioning the panel
          default: false
        estimate_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Estimate Id
          description: >-
            Short-lived estimate identifier required for a paid launch; obtain
            it from estimatePanel
      additionalProperties: false
      type: object
      required:
        - target
        - incident_rate
        - country_code
      title: PublicPanelCreate
      description: >-
        Field a paid panel for a Panel-type study. The interview language is
        taken

        from the study (not set here).
    PublicStudy:
      properties:
        id:
          type: string
          title: Id
        name:
          anyOf:
            - type: string
              maxLength: 40
            - type: 'null'
          title: Name
        study_type:
          type: string
          enum:
            - in-depth-interview
            - concept-test
            - prototype-test
          title: Study Type
          description: Current study-type template slug
        use_case:
          anyOf:
            - type: string
            - type: 'null'
          title: Use Case
          description: Historical study-type label when it is outside the current catalog
        recruiting_method:
          anyOf:
            - type: string
              enum:
                - panel
                - byop
                - synthetic_respondents
            - type: 'null'
          enum:
            - panel
            - byop
            - synthetic_respondents
          title: Recruiting Method
          description: panel, byop, or synthetic_respondents
        interview_format:
          anyOf:
            - type: string
              enum:
                - chat
                - video
                - voice
            - type: 'null'
          title: Interview Format
          description: chat, video, or voice
        voice:
          anyOf:
            - type: string
              enum:
                - male
                - female
            - type: 'null'
          title: Voice
          description: male or female
        language:
          anyOf:
            - type: string
            - type: 'null'
          title: Language
          description: Interview language code, e.g. 'en'
        expected_duration_seconds:
          type: integer
          minimum: 300
          title: Expected Duration Seconds
          description: >-
            Maximum planned interview duration in seconds, including transitions
            and likely follow-up probes. This is an estimate, not a guaranteed
            length.
          default: 900
        byop_config:
          $ref: '#/components/schemas/PublicByopConfigOut'
        study_link:
          anyOf:
            - type: string
            - type: 'null'
          title: Study Link
          description: >-
            Live participant interview link; null until the interviewer is
            provisioned. This is not a researcher preview URL.
        dashboard_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Dashboard Url
          description: Researcher management link for the study
        provisioning_status:
          type: string
          enum:
            - draft
            - ready
            - provisioned
          title: Provisioning Status
          description: >-
            draft when required interviewer settings are missing, ready when the
            study can be provisioned, and provisioned when interviews can run
        fielding_status:
          type: string
          enum:
            - not_started
            - starting
            - collecting
            - fielding
            - paused
            - complete
            - partial
            - failed
            - stopped
            - unavailable
            - not_applicable
            - unknown
          title: Fielding Status
          description: >-
            Recruitment state, separate from interviewer provisioning. Panel
            studies report their persisted lifecycle. BYOP studies are
            collecting once the interviewer is provisioned, and can be paused or
            stopped; invitation delivery is tracked per participant. Synthetic
            respondents are not_applicable.
        missing_requirements:
          items:
            type: string
          type: array
          title: Missing Requirements
          description: Fields still required before the study can be provisioned
        created_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Created At
        updated_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Updated At
        interview_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Interview Count
          description: >-
            Completed visible non-test interviews satisfying quality criteria,
            matching list_interviews(status=completed).
        report_status:
          anyOf:
            - type: string
              enum:
                - available
                - not_generated
            - type: 'null'
          title: Report Status
        study_plan:
          anyOf:
            - $ref: '#/components/schemas/PublicStudyPlanOut'
            - type: 'null'
        screener_questions:
          anyOf:
            - items:
                $ref: '#/components/schemas/PublicScreenerQuestion'
              type: array
            - type: 'null'
          title: Screener Questions
        targeting_attributes:
          anyOf:
            - items:
                $ref: '#/components/schemas/PublicTargetingAttribute'
              type: array
            - type: 'null'
          title: Targeting Attributes
        resolved_targeting:
          items:
            $ref: '#/components/schemas/PublicResolvedTargeting'
          type: array
          title: Resolved Targeting
          description: Human-readable interpretation of the configured panel targeting
        concept_links:
          items:
            $ref: '#/components/schemas/PublicConceptLink'
          type: array
          title: Concept Links
        concept_images:
          items:
            $ref: '#/components/schemas/PublicConceptImage'
          type: array
          title: Concept Images
        invitation_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Invitation Count
          description: >-
            Invitation records for this study. A panel launch may use one
            invitation for many participants.
        interview_attempt_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Interview Attempt Count
          description: >-
            Interview attempts, including attempts that did not yield a quality
            interview.
        quality_interview_count:
          anyOf:
            - type: integer
            - type: 'null'
          title: Quality Interview Count
          description: Interviews that passed the study quality criteria.
      type: object
      required:
        - id
        - study_type
        - provisioning_status
        - fielding_status
      title: PublicStudy
      description: Full study shape returned by get-by-id (includes the heavy fields).
    PublicPanelResponse:
      properties:
        study_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Study Id
        panel_status:
          anyOf:
            - type: string
            - type: 'null'
          title: Panel Status
        dry_run:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Dry Run
        target:
          anyOf:
            - type: integer
            - type: 'null'
          title: Target
        country_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Country Code
          description: Resolved ISO country code used for the estimate or launch.
        language_code:
          anyOf:
            - type: string
            - type: 'null'
          title: Language Code
          description: >-
            Resolved lowercase panel language code used for the estimate or
            launch.
        estimated_total_cost_per_interview_usd:
          anyOf:
            - type: number
            - type: 'null'
          title: Estimated Total Cost Per Interview Usd
          description: >-
            Per-interview cost in USD (interview credit cost + participant
            reward).
        estimated_total_cost_usd:
          anyOf:
            - type: number
            - type: 'null'
          title: Estimated Total Cost Usd
          description: Total estimated cost in USD (per-interview × target).
        estimated_timeline_hours:
          anyOf:
            - type: integer
            - type: 'null'
          title: Estimated Timeline Hours
          description: >-
            Heuristic time to complete, in whole hours (rounded up); audience
            and country may change actual timing.
        credit_cost_per_interview:
          anyOf:
            - type: number
            - type: 'null'
          title: Credit Cost Per Interview
        total_credit_cost:
          anyOf:
            - type: number
            - type: 'null'
          title: Total Credit Cost
        available_credit_balance:
          anyOf:
            - type: number
            - type: 'null'
          title: Available Credit Balance
        credit_deficit:
          anyOf:
            - type: number
            - type: 'null'
          title: Credit Deficit
        sufficient_credits:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Sufficient Credits
        reward_per_interview_usd:
          anyOf:
            - type: number
            - type: 'null'
          title: Reward Per Interview Usd
        card_hold_usd:
          anyOf:
            - type: number
            - type: 'null'
          title: Card Hold Usd
        frequency:
          anyOf:
            - type: string
              enum:
                - one-time
                - weekly
                - monthly
                - quarterly
            - type: 'null'
          title: Frequency
          description: >-
            Estimate applies to one cycle of this recurrence; later cycles may
            be repriced.
        assumptions:
          items:
            type: string
          type: array
          title: Assumptions
        estimate_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Estimate Id
          description: >-
            Fingerprint of the study version, launch inputs, and current
            estimated price
        expires_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Expires At
          description: Estimate expiry; request a new estimate after this time
      type: object
      title: PublicPanelResponse
      description: |-
        Either a launch acknowledgement (study_id + panel_status) or, for
        ``dry_run``, a cost + timeline estimate.
    PublicApiError:
      type: object
      required:
        - code
        - message
        - field
        - request_id
        - outcome
        - recovery_action
        - docs_url
      properties:
        code:
          type: string
        message:
          type: string
        field:
          anyOf:
            - type: string
            - type: 'null'
        request_id:
          type: string
          format: uuid
        outcome:
          type: string
          enum:
            - not_started
            - failed
            - unknown
        recovery_action:
          type: string
        docs_url:
          type: string
          format: uri
    PublicStudyPlan:
      properties:
        objectives:
          type: string
          title: Objectives
          description: What the study is trying to learn and the decision it informs.
        conversation_flow:
          type: string
          title: Conversation Flow
          description: >-
            How the interview should flow — topics/clusters with example
            prompts.
        background:
          anyOf:
            - type: string
            - type: 'null'
          title: Background
          description: Context about the company/product/market.
        learning_goals:
          anyOf:
            - type: string
            - type: 'null'
          title: Learning Goals
          description: >-
            Answerable questions as ### Learning goal N: headings, each followed
            by **Evidence needed:** requirements.
        study_specific_rules:
          anyOf:
            - type: string
            - type: 'null'
          title: Study Specific Rules
          description: Operational guardrails and neutrality notes.
        study_improvements:
          anyOf:
            - type: string
            - type: 'null'
          title: Study Improvements
          description: Accepted additions to guide future interviews.
      additionalProperties: false
      type: object
      required:
        - objectives
        - conversation_flow
      title: PublicStudyPlan
      description: |-
        The interview instructions, as named sections. ``objectives`` and
        ``conversation_flow`` are required; the rest are optional. Each value is
        free-form text/markdown (bullets allowed).
    PublicScreenerQuestionInput:
      properties:
        text:
          type: string
          title: Text
        type:
          type: string
          enum:
            - single_select
            - multi_select
            - text_input
          title: Type
          default: single_select
        options:
          items:
            $ref: '#/components/schemas/PublicScreenerOptionInput'
          type: array
          title: Options
        order:
          anyOf:
            - type: integer
            - type: 'null'
          title: Order
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: Id
        input_mode:
          anyOf:
            - type: string
              enum:
                - integers_only
                - unrestricted
            - type: 'null'
          title: Input Mode
          description: text_input only. Which characters the field accepts.
        numeric_ranges:
          anyOf:
            - items:
                $ref: '#/components/schemas/NumericRange'
              type: array
            - type: 'null'
          title: Numeric Ranges
          description: >-
            text_input + integers_only only. Optional minimum and/or maximum
            shown to the participant; empty/absent accepts any integer.
      additionalProperties: false
      type: object
      required:
        - text
      title: PublicScreenerQuestionInput
      description: >-
        Inbound screener question. ``id``/``order`` are auto-generated if
        omitted.
      examples:
        - options:
            - selection_rule: must_select
              text: Required tool
            - selection_rule: may_select
              text: Optional tool
            - selection_rule: reject
              text: Disqualifying tool
          text: Which tools do you use?
          type: multi_select
    PublicTargetingAttribute:
      properties:
        qualification_id:
          type: integer
          title: Qualification Id
          description: Qualification id (from GET /targeting-attributes)
        allowed_options:
          items:
            type: integer
          type: array
          title: Allowed Options
          description: option_ids to allow
        disallowed_options:
          items:
            type: integer
          type: array
          title: Disallowed Options
          description: option_ids to disqualify
      additionalProperties: false
      type: object
      required:
        - qualification_id
      title: PublicTargetingAttribute
      description: >-
        Target the panel by a qualification's answer options. Option-id rules:

        - both lists empty → allow all options;

        - only allowed → disqualify any option not listed;

        - only disallowed → allow any option not listed (can't disallow them
        all);

        - both → allowed are kept, disallowed are disqualified, and together
        they
          must cover every option_id of the qualification.
        Look up qualification_id / option_id via GET /targeting-attributes.
    PublicPanelTargetingAttribute:
      properties:
        qualification_id:
          type: integer
          title: Qualification Id
          description: Qualification id from GET /targeting-attributes
        option_targets:
          anyOf:
            - items:
                $ref: '#/components/schemas/PublicPanelOptionTarget'
              type: array
            - additionalProperties:
                type: integer
              type: object
          title: Option Targets
          description: >-
            Fixed interview targets. The playground uses [{option_id, target}];
            direct API callers may also send an object keyed by option_id.
            Omitted options remain open.
      additionalProperties: false
      type: object
      required:
        - qualification_id
      title: PublicPanelTargetingAttribute
      description: >-
        Launch-specific targets for qualifying options of one panel attribute.


        ``qualification_id`` and the keys in ``option_targets`` come from the

        targeting-attributes catalog. Options omitted from ``option_targets``
        stay

        open and share the remaining panel capacity.
    PublicByopConfigOut:
      properties:
        incentive_amount:
          anyOf:
            - type: number
            - type: 'null'
          title: Incentive Amount
        is_incentives_enabled:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Is Incentives Enabled
        auto_send_incentives:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Auto Send Incentives
      type: object
      title: PublicByopConfigOut
    PublicStudyPlanOut:
      properties:
        objectives:
          anyOf:
            - type: string
            - type: 'null'
          title: Objectives
        conversation_flow:
          anyOf:
            - type: string
            - type: 'null'
          title: Conversation Flow
        background:
          anyOf:
            - type: string
            - type: 'null'
          title: Background
        learning_goals:
          anyOf:
            - type: string
            - type: 'null'
          title: Learning Goals
        learning_goals_structured:
          anyOf:
            - items:
                $ref: '#/components/schemas/PublicLearningGoal'
              type: array
            - type: 'null'
          title: Learning Goals Structured
          description: >-
            Stable goals whose IDs match report learning_goal_id values. Older
            plans also return goal IDs; evidence_needed is null if no
            requirements were recorded.
        study_specific_rules:
          anyOf:
            - type: string
            - type: 'null'
          title: Study Specific Rules
        study_improvements:
          anyOf:
            - type: string
            - type: 'null'
          title: Study Improvements
      type: object
      title: PublicStudyPlanOut
      description: >-
        Response variant — all sections optional (a study's stored prompt may
        not

        contain every section).
    PublicScreenerQuestion:
      properties:
        id:
          type: string
          title: Id
        text:
          type: string
          title: Text
        type:
          type: string
          enum:
            - single_select
            - multi_select
            - text_input
          title: Type
        order:
          type: integer
          title: Order
        options:
          items:
            $ref: '#/components/schemas/PublicScreenerOption'
          type: array
          title: Options
        input_mode:
          anyOf:
            - type: string
              enum:
                - integers_only
                - unrestricted
            - type: 'null'
          title: Input Mode
          description: text_input only. Which characters the field accepts.
        numeric_ranges:
          anyOf:
            - items:
                $ref: '#/components/schemas/NumericRange'
              type: array
            - type: 'null'
          title: Numeric Ranges
          description: >-
            text_input + integers_only only. Optional minimum and/or maximum
            shown to the participant; empty/absent accepts any integer.
      type: object
      required:
        - id
        - text
        - type
        - order
      title: PublicScreenerQuestion
    PublicResolvedTargeting:
      properties:
        qualification_id:
          type: integer
          title: Qualification Id
        attribute:
          type: string
          title: Attribute
        include:
          items:
            type: string
          type: array
          title: Include
        exclude:
          items:
            type: string
          type: array
          title: Exclude
        applies_to:
          type: string
          const: panel
          title: Applies To
          default: panel
        active:
          type: boolean
          title: Active
          description: False when the study is currently using invitation-based recruitment
        approximation_note:
          anyOf:
            - type: string
            - type: 'null'
          title: Approximation Note
      type: object
      required:
        - qualification_id
        - attribute
        - active
      title: PublicResolvedTargeting
    PublicConceptLink:
      properties:
        id:
          type: string
          title: Id
        url:
          type: string
          title: Url
        label:
          type: string
          title: Label
        embeddable:
          anyOf:
            - type: boolean
            - type: 'null'
          title: Embeddable
      type: object
      required:
        - id
        - url
        - label
      title: PublicConceptLink
      description: |-
        Participant-facing external stimulus. Recorder and credential metadata
        remain internal.
    PublicConceptImage:
      properties:
        id:
          type: string
          title: Id
        url:
          type: string
          title: Url
        label:
          type: string
          title: Label
      type: object
      required:
        - id
        - url
        - label
      title: PublicConceptImage
      description: Participant-facing image stimulus. Storage metadata remains internal.
    PublicScreenerOptionInput:
      properties:
        text:
          type: string
          title: Text
        disqualify:
          type: boolean
          title: Disqualify
          default: false
        selection_rule:
          anyOf:
            - type: string
              enum:
                - must_select
                - may_select
                - reject
            - type: 'null'
          title: Selection Rule
          description: >-
            multi_select only. must_select requires the participant to select
            this option; may_select makes it optional; reject disqualifies the
            participant when selected.
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: Id
      additionalProperties: false
      type: object
      required:
        - text
      title: PublicScreenerOptionInput
      description: Inbound screener option. ``id`` is auto-generated if omitted.
    NumericRange:
      properties:
        min:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Min
          description: Inclusive lower bound
        max:
          anyOf:
            - type: integer
              minimum: 0
            - type: 'null'
          title: Max
          description: Inclusive upper bound
      type: object
      title: NumericRange
      description: Optional inclusive bounds constraining a numeric `text_input` answer.
    PublicPanelOptionTarget:
      properties:
        option_id:
          type: integer
          title: Option Id
          description: Option id from GET /targeting-attributes
        target:
          type: integer
          title: Target
          description: Fixed number of completed interviews for this option
      additionalProperties: false
      type: object
      required:
        - option_id
        - target
      title: PublicPanelOptionTarget
      description: Playground-safe representation of one fixed option target.
    PublicLearningGoal:
      properties:
        id:
          type: string
          title: Id
        question:
          type: string
          title: Question
        evidence_needed:
          anyOf:
            - type: string
            - type: 'null'
          title: Evidence Needed
          description: >-
            Evidence requirements; null for legacy plans that did not record
            them.
      type: object
      required:
        - id
        - question
      title: PublicLearningGoal
    PublicScreenerOption:
      properties:
        id:
          type: string
          title: Id
        text:
          type: string
          title: Text
        disqualify:
          type: boolean
          title: Disqualify
        selection_rule:
          anyOf:
            - type: string
              enum:
                - must_select
                - may_select
                - reject
            - type: 'null'
          title: Selection Rule
          description: >-
            multi_select only. must_select requires the participant to select
            this option; may_select makes it optional; reject disqualifies the
            participant when selected.
      type: object
      required:
        - id
        - text
        - disqualify
      title: PublicScreenerOption
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        Authenticate with an API key (prefixed `ui_sk_`) or a JWT token from the
        dashboard.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.