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

> Create a new B2B or B2C research project. Projects start in **DRAFT** status — add screener questions and then call [Publish](/projects/publish-a-project) to go live.

# Create a project

## Quick start

<Steps>
  <Step title="Create a draft project">
    Use this endpoint with your project configuration. The project starts in **DRAFT** status.
  </Step>

  <Step title="Add screener questions">
    Use [Create Screener Questions](/screener-questions/create-a-screener-question) to add screening criteria.
  </Step>

  <Step title="Publish the project">
    Call [Publish Project](/projects/publish-a-project) to make it live. The `publicDescription` field is required at publish time.
  </Step>
</Steps>


## OpenAPI

````yaml post /v1/projects
openapi: 3.0.0
info:
  title: Partner API
  description: Public API for partner integrations
  version: '1.0'
  contact: {}
servers:
  - url: https://api-staging.respondent.io
security: []
tags: []
paths:
  /v1/projects:
    post:
      tags:
        - projects
      summary: Create a project
      description: Creates a Project.
      operationId: ProjectsController_create
      parameters:
        - name: x-api-key
          in: header
          required: true
          schema:
            type: string
        - name: x-api-secret
          in: header
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
                - $ref: '#/components/schemas/CreateB2bProjectDto'
                - $ref: '#/components/schemas/CreateB2cProjectDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
components:
  schemas:
    CreateB2bProjectDto:
      type: object
      properties:
        publicTitle:
          type: string
          description: >-
            Project Title.

            This is visible to Respondents, do not mention any incentive amount
            as you may change it during your project.
        publicInternalName:
          type: string
          description: |-
            Internal Project Name.
            This is visible only to your organization.
            Character Limit: Min 3 and Max 50.
        publicDescription:
          type: string
          description: >-
            Required when publishing a project.

            This is visible to Respondents.

            A short description of the project visible to participants. This
            should clearly outline the purpose, requirements, and expectations
            for participation.

            Character Limit: Max 800.
        targetMarketType:
          $ref: '#/components/schemas/B2bAudienceTypes'
        typeOfResearch:
          $ref: '#/components/schemas/ResearchTypes'
        targetResearchMethodology:
          $ref: '#/components/schemas/KindOfResearch'
        unmoderatedStudyOrSurvey:
          description: For Unmoderated Studies and Surveys only.
          allOf:
            - $ref: '#/components/schemas/UnmoderatedStudyOrSurvey'
        participantTimeRequiredMinutes:
          type: number
        incentiveAmount:
          type: number
          description: >-
            Dollars ranging: Min 5 and Max 1000.

            Pro tip: Set your incentive at or above $2 per minute (B2C) or $3
            per minute (B2B) to attract quality participants faster.

            More tips to pick the right incentive:
            https://help.respondent.io/en/articles/5471087-what-is-the-best-incentive-for-my-research-project
        targetNumberOfParticipants:
          type: number
          description: >-
            Number of Participants

            We will recruit up to 3 times your target number of qualified
            participants.

            Number Limit: Min 1 and Max 500.
        targetCountry:
          $ref: '#/components/schemas/ProjectCountryCode'
        targetCountries:
          type: array
          items:
            $ref: '#/components/schemas/ProjectCountryCode'
        targetJobFunctions:
          type: array
          items:
            $ref: '#/components/schemas/JobFunction'
        targetLocationRespondentInPerson:
          description: >-
            Required for In-Person projects only.

            Please provide the full address (including city & state if
            applicable) where the project will be conducted.
          allOf:
            - $ref: '#/components/schemas/ProjectLocationInPerson'
        targetHouseholdIncome:
          type: array
          items:
            $ref: '#/components/schemas/HouseholdIncome'
        targetGenders:
          $ref: '#/components/schemas/Gender'
        targetEducation:
          type: array
          items:
            $ref: '#/components/schemas/EducationLevel'
        targetEthnicities:
          type: array
          items:
            $ref: '#/components/schemas/Ethnicities'
        targetAgeGroups:
          type: array
          items:
            $ref: '#/components/schemas/AgeGroup'
        ndaType:
          $ref: '#/components/schemas/NdaTypeDeprecated'
        ndaLink:
          type: string
          nullable: true
          description: Use ndaDetails.ndaLink.
          deprecated: true
        seniority:
          type: array
          items:
            $ref: '#/components/schemas/SeniorityLevel'
        automations:
          description: >-
            - Autopay is used to automatically pay participants after they
            complete a project.
              - If not provided, defaults to `true`.
            - Autoinvite is used to automatically invite participants to a
            project if they qualify after completing the screener.
              - Only available when `targetResearchMethodology` is one of: [`unmoderatedStudy`, `survey`].
              - If not provided, defaults to `false`.
          allOf:
            - $ref: '#/components/schemas/Automation'
        keyQualifiers:
          type: array
          items:
            $ref: '#/components/schemas/KeyQualifierB2b'
        advancedTargeting:
          description: >-
            Flat advanced-targeting attribute map (relationship status,
            languages,

            devices, products & services, professional and shopping preferences,
            …).

            Each provided attribute acts as a soft preference unless promoted to
            a hard

            filter via `keyQualifiers`, EXCEPT for the always-hard attributes
            that act

            as hard filters whenever set and cannot be soft-moded (they are
            absent from

            the `KeyQualifier` enum): `areaType`, `workSetting`, `browsers`,

            `computerOS`, `programmingLanguages`, `tabletOS`, `smartphoneOS`,
            `webcam`,

            `mobilePhoneWithInternet`, `headsetWithMicrophone`.

            All advanced attributes are available identically on B2C and B2B
            payloads.

            On update, advancedTargeting is merged per attribute: include a key
            to set

            it, send `null` to clear it, omit a key to leave it unchanged. For
            array

            attributes an empty array `[]` also clears the targeting (treated as
            no

            target). `keyQualifiers` is replaced as a whole.

            **Beta:** behind the `advanced-targeting-attributes` org feature
            flag.
          allOf:
            - $ref: '#/components/schemas/AdvancedTargeting'
        filterPastParticipation:
          description: >-
            - If researcher wants to filter out participants who have
            participated in past projects.

            - Past Participation logic is used at Researcher level based on
            external reseacher id.

            - The participant must have been paid for a project to count as a
            past participant.

            - Past participation filtering is available within 4 hours of a
            payout being made, NOT immediately after payment.
          allOf:
            - $ref: '#/components/schemas/UpsertPastParticipationDto'
        targetCompanySize:
          type: array
          items:
            $ref: '#/components/schemas/CompanySize'
        targetCities:
          type: array
          items:
            $ref: '#/components/schemas/CreateProjectCitiesDto'
        ndaDetails:
          description: >-
            ndaType = file is not supported on this endpoint. Use the [Upload
            NDA File
            endpoint](https://developers.respondent.io/reference/projectscontroller_uploadfilesformdata)
            to upload NDA documents
          allOf:
            - $ref: '#/components/schemas/NdaDetailsDto'
        externalResearcher:
          description: >-
            Required for all projects to identify your researcher with
            Respondent to differentiate from other researchers recruiting
            through your platform.
          allOf:
            - $ref: '#/components/schemas/ExternalResearcher'
        targetProfessionalIndustries:
          description: |-
            Pass ids only.
            IDs differ from staging to production.
            Required for Industry professionals (B2B) projects.
            Array: Min 1.
          type: array
          items:
            type: string
        targetJobTitles:
          description: |-
            Pass ids only.
            IDs differ from staging to production.
            Array: Max 10.
          type: array
          items:
            type: string
        targetAudienceSkills:
          description: >-
            Pass ids only.

            IDs differ from staging to production.

            Array: Min 0 and Max: 25.

            Select skills, knowledge areas, tools and/or certifications you
            would like to target.
          type: array
          items:
            type: string
      required:
        - publicTitle
        - publicInternalName
        - targetMarketType
        - typeOfResearch
        - targetResearchMethodology
        - participantTimeRequiredMinutes
        - incentiveAmount
        - targetNumberOfParticipants
        - externalResearcher
        - targetProfessionalIndustries
      title: Create B2B Project
    CreateB2cProjectDto:
      type: object
      properties:
        publicTitle:
          type: string
          description: >-
            Project Title.

            This is visible to Respondents, do not mention any incentive amount
            as you may change it during your project.
        publicInternalName:
          type: string
          description: |-
            Internal Project Name.
            This is visible only to your organization.
            Character Limit: Min 3 and Max 50.
        publicDescription:
          type: string
          description: >-
            Required when publishing a project.

            This is visible to Respondents.

            A short description of the project visible to participants. This
            should clearly outline the purpose, requirements, and expectations
            for participation.

            Character Limit: Max 800.
        targetMarketType:
          $ref: '#/components/schemas/B2cAudienceTypes'
        typeOfResearch:
          $ref: '#/components/schemas/ResearchTypes'
        targetResearchMethodology:
          $ref: '#/components/schemas/KindOfResearch'
        unmoderatedStudyOrSurvey:
          description: For Unmoderated Studies and Surveys only.
          allOf:
            - $ref: '#/components/schemas/UnmoderatedStudyOrSurvey'
        participantTimeRequiredMinutes:
          type: number
        incentiveAmount:
          type: number
          description: >-
            Dollars ranging: Min 5 and Max 1000.

            Pro tip: Set your incentive at or above $2 per minute (B2C) or $3
            per minute (B2B) to attract quality participants faster.

            More tips to pick the right incentive:
            https://help.respondent.io/en/articles/5471087-what-is-the-best-incentive-for-my-research-project
        targetNumberOfParticipants:
          type: number
          description: >-
            Number of Participants

            We will recruit up to 3 times your target number of qualified
            participants.

            Number Limit: Min 1 and Max 500.
        targetCountry:
          $ref: '#/components/schemas/ProjectCountryCode'
        targetCountries:
          type: array
          items:
            $ref: '#/components/schemas/ProjectCountryCode'
        targetLocationRespondentInPerson:
          description: >-
            Required for In-Person projects only.

            Please provide the full address (including city & state if
            applicable) where the project will be conducted.
          allOf:
            - $ref: '#/components/schemas/ProjectLocationInPerson'
        targetHouseholdIncome:
          type: array
          items:
            $ref: '#/components/schemas/HouseholdIncome'
        targetGenders:
          $ref: '#/components/schemas/Gender'
        targetEducation:
          type: array
          items:
            $ref: '#/components/schemas/EducationLevel'
        targetEthnicities:
          type: array
          items:
            $ref: '#/components/schemas/Ethnicities'
        targetAgeGroups:
          type: array
          items:
            $ref: '#/components/schemas/AgeGroup'
        ndaType:
          $ref: '#/components/schemas/NdaTypeDeprecated'
        ndaLink:
          type: string
          nullable: true
          description: Use ndaDetails.ndaLink.
          deprecated: true
        automations:
          description: >-
            - Autopay is used to automatically pay participants after they
            complete a project.
              - If not provided, defaults to `true`.
            - Autoinvite is used to automatically invite participants to a
            project if they qualify after completing the screener.
              - Only available when `targetResearchMethodology` is one of: [`unmoderatedStudy`, `survey`].
              - If not provided, defaults to `false`.
          allOf:
            - $ref: '#/components/schemas/Automation'
        keyQualifiers:
          type: array
          items:
            $ref: '#/components/schemas/KeyQualifierB2c'
        advancedTargeting:
          description: >-
            Flat advanced-targeting attribute map (relationship status,
            languages,

            devices, products & services and shopping preferences, …). All
            advanced

            attributes are available to B2C and B2B alike. Each provided
            attribute acts

            as a soft preference unless promoted to a hard filter via
            `keyQualifiers`,

            EXCEPT for the always-hard attributes that act as hard filters
            whenever set

            and cannot be soft-moded (they are absent from the `KeyQualifier`
            enum):

            `areaType`, `workSetting`, `browsers`, `computerOS`,
            `programmingLanguages`,

            `tabletOS`, `smartphoneOS`, `webcam`, `mobilePhoneWithInternet`,

            `headsetWithMicrophone`.

            On update, advancedTargeting is merged per attribute: include a key
            to set

            it, send `null` to clear it, omit a key to leave it unchanged. For
            array

            attributes an empty array `[]` also clears the targeting (treated as
            no

            target). `keyQualifiers` is replaced as a whole.

            **Beta:** behind the `advanced-targeting-attributes` org feature
            flag.
          allOf:
            - $ref: '#/components/schemas/AdvancedTargeting'
        filterPastParticipation:
          description: >-
            - If researcher wants to filter out participants who have
            participated in past projects.

            - Past Participation logic is used at Researcher level based on
            external reseacher id.

            - The participant must have been paid for a project to count as a
            past participant.

            - Past participation filtering is available within 4 hours of a
            payout being made, NOT immediately after payment.
          allOf:
            - $ref: '#/components/schemas/UpsertPastParticipationDto'
        targetCities:
          type: array
          items:
            $ref: '#/components/schemas/CreateProjectCitiesDto'
        ndaDetails:
          description: >-
            ndaType = file is not supported on this endpoint. Use the [Upload
            NDA File
            endpoint](https://developers.respondent.io/reference/projectscontroller_uploadfilesformdata)
            to upload NDA documents
          allOf:
            - $ref: '#/components/schemas/NdaDetailsDto'
        externalResearcher:
          description: >-
            Required for all projects to identify your researcher with
            Respondent to differentiate from other researchers recruiting
            through your platform.
          allOf:
            - $ref: '#/components/schemas/ExternalResearcher'
        targetProjectTopics:
          description: >-
            Pass ids only.

            IDs differ from staging to production.

            Required for General Population (B2C) projects only.

            Tagging your projects with topics will better help match your
            general population project with participants that have indicated
            interest in these topics.

            Array: Min 1 and Max 2.
          type: array
          items:
            type: string
      required:
        - publicTitle
        - publicInternalName
        - targetMarketType
        - typeOfResearch
        - targetResearchMethodology
        - participantTimeRequiredMinutes
        - incentiveAmount
        - targetNumberOfParticipants
        - externalResearcher
        - targetProjectTopics
      title: Create B2C Project
    Project:
      type: object
      properties:
        createdAt:
          type: string
        updatedAt:
          type: string
        publicTitle:
          type: string
          description: >-
            Project Title.

            This is visible to Respondents, do not mention any incentive amount
            as you may change it during your project.
        publicInternalName:
          type: string
          description: |-
            Internal Project Name.
            This is visible only to your organization.
            Character Limit: Min 3 and Max 50.
        publicDescription:
          type: string
          description: >-
            Required when publishing a project.

            This is visible to Respondents.

            A short description of the project visible to participants. This
            should clearly outline the purpose, requirements, and expectations
            for participation.

            Character Limit: Max 800.
        organizationId:
          type: string
          format: ObjectId
        teamId:
          type: string
          format: ObjectId
        projectStatus:
          $ref: '#/components/schemas/ProjectStatus'
        projectRecruitingStatus:
          $ref: '#/components/schemas/ProjectRecruitingStatus'
        targetMarketType:
          $ref: '#/components/schemas/AudienceTypes'
        typeOfResearch:
          $ref: '#/components/schemas/ResearchTypes'
        targetResearchMethodology:
          $ref: '#/components/schemas/KindOfResearch'
        unmoderatedStudyOrSurvey:
          description: For Unmoderated Studies and Surveys only.
          allOf:
            - $ref: '#/components/schemas/UnmoderatedStudyOrSurvey'
        participantTimeRequiredMinutes:
          type: number
        incentiveAmount:
          type: number
          description: >-
            Dollars ranging: Min 5 and Max 1000.

            Pro tip: Set your incentive at or above $2 per minute (B2C) or $3
            per minute (B2B) to attract quality participants faster.

            More tips to pick the right incentive:
            https://help.respondent.io/en/articles/5471087-what-is-the-best-incentive-for-my-research-project
        targetNumberOfParticipants:
          type: number
          description: >-
            Number of Participants

            We will recruit up to 3 times your target number of qualified
            participants.

            Number Limit: Min 1 and Max 500.
        targetCountry:
          $ref: '#/components/schemas/ProjectCountryCode'
        targetCountries:
          type: array
          items:
            $ref: '#/components/schemas/ProjectCountryCode'
        targetCities:
          type: array
          items:
            $ref: '#/components/schemas/ProjectCities'
        targetJobFunctions:
          type: array
          items:
            $ref: '#/components/schemas/JobFunction'
        targetCompanySize:
          type: array
          items:
            $ref: '#/components/schemas/CompanySize'
        targetLocationRespondentInPerson:
          description: >-
            Required for In-Person projects only.

            Please provide the full address (including city & state if
            applicable) where the project will be conducted.
          allOf:
            - $ref: '#/components/schemas/ProjectLocationInPerson'
        targetHouseholdIncome:
          type: array
          items:
            $ref: '#/components/schemas/HouseholdIncome'
        targetGenders:
          $ref: '#/components/schemas/Gender'
        targetEducation:
          type: array
          items:
            $ref: '#/components/schemas/EducationLevel'
        targetEthnicities:
          type: array
          items:
            $ref: '#/components/schemas/Ethnicities'
        targetAgeGroups:
          type: array
          items:
            $ref: '#/components/schemas/AgeGroup'
        screenerQuestions:
          type: array
          items:
            $ref: '#/components/schemas/ScreenerQuestion'
        inviteSurveyLink:
          type: string
        closedDetails:
          $ref: '#/components/schemas/ProjectClosedDetails'
        closed:
          type: boolean
          description: 'Use projectStatus: ''CLOSED'''
          deprecated: true
        closedMessage:
          type: string
          description: Use closedDetails.closedMessage.
          deprecated: true
        closedOnDate:
          format: date-time
          type: string
          description: Use closedDetails.closedOnDate.
          deprecated: true
        closedByUserId:
          type: string
          description: Use closedDetails.closedByUserId.
          deprecated: true
        ndaDetails:
          $ref: '#/components/schemas/NdaDetails'
        ndaType:
          $ref: '#/components/schemas/NdaTypeDeprecated'
        ndaFileUrl:
          type: string
          nullable: true
          description: Use ndaDetails.ndaFileUrl
          deprecated: true
        ndaLink:
          type: string
          nullable: true
          description: Use ndaDetails.ndaLink.
          deprecated: true
        filterPastParticipation:
          description: >-
            - If researcher wants to filter out participants who have
            participated in past projects.

            - Past Participation logic is used at Researcher level based on
            external reseacher id.

            - The participant must have been paid for a project to count as a
            past participant.

            - Past participation filtering is available within 4 hours of a
            payout being made, NOT immediately after payment.
          allOf:
            - $ref: '#/components/schemas/PastParticipation'
        externalResearcher:
          description: >-
            Required for all projects to identify your researcher with
            Respondent to differentiate from other researchers recruiting
            through your platform.
          allOf:
            - $ref: '#/components/schemas/ExternalResearcher'
        seniority:
          type: array
          items:
            $ref: '#/components/schemas/SeniorityLevel'
        publishedAt:
          format: date-time
          type: string
        automations:
          description: >-
            - Autopay is used to automatically pay participants after they
            complete a project.
              - If not provided, defaults to `true`.
            - Autoinvite is used to automatically invite participants to a
            project if they qualify after completing the screener.
              - Only available when `targetResearchMethodology` is one of: [`unmoderatedStudy`, `survey`].
              - If not provided, defaults to `false`.
          allOf:
            - $ref: '#/components/schemas/Automation'
        keyQualifiers:
          type: array
          items:
            $ref: '#/components/schemas/KeyQualifier'
        advancedTargeting:
          description: >-
            Flat advanced-targeting attribute map set on this project
            (relationship

            status, languages, devices, products & services, professional and
            shopping

            preferences, …). Present only when the requesting organisation has
            the

            `advanced-targeting-attributes` feature flag enabled. All advanced

            attributes appear identically on B2C and B2B projects.
          allOf:
            - $ref: '#/components/schemas/AdvancedTargeting'
        completionUrl:
          type: string
          nullable: true
          description: >-
            Researchers can provide participants with this link at the
            conclusion of their survey or study, enabling them to self-report
            task completion.

            Available for projects where the targetResearchMethodology is either
            unmoderatedStudy or survey.
        targetProfessionalIndustries:
          description: |-
            Required for Industry professionals (B2B) projects
            Array: Min 1.
          type: array
          items:
            $ref: '#/components/schemas/SimpleIndustry'
        targetJobTitles:
          description: |-
            Available for Industry professionals (B2B) projects.
            Array: Max 30.
          type: array
          items:
            $ref: '#/components/schemas/SimpleJobTitle'
        targetProjectTopics:
          description: >-
            Required for General Population (B2C) projects only

            Tagging your projects with topics will better help match your
            general population project with participants that have indicated
            interest in these topics.

            Array: Min 1 and Max 2.
          type: array
          items:
            $ref: '#/components/schemas/SimpleTopic'
        targetAudienceSkills:
          description: >-
            Array: Min 0 and Max 25.

            Select skills, knowledge areas, tools and/or certifications you
            would like to target.
          type: array
          items:
            $ref: '#/components/schemas/Skill'
        id:
          type: string
      required:
        - createdAt
        - publicTitle
        - publicInternalName
        - projectStatus
        - projectRecruitingStatus
        - targetMarketType
        - typeOfResearch
        - targetResearchMethodology
        - participantTimeRequiredMinutes
        - incentiveAmount
        - targetNumberOfParticipants
        - externalResearcher
        - id
    B2bAudienceTypes:
      type: string
      description: >-
        Audience type to be targeted for this project. Example values: Industry
        professionals (B2B) or General Population (B2C)
      default: b2b
      enum:
        - b2b
    ResearchTypes:
      type: string
      description: Research type for this project, if it is in-person or remote
      enum:
        - inPerson
        - remote
    KindOfResearch:
      type: string
      description: >-
        Kind of research to be conducted for this project. [Details
        here](https://help.respondent.io/en/articles/5489302-research-method-and-types-of-research-projects).

        If `typeOfResearch == inPerson` &rarr; allowed values are: [`oneOnOne`,
        `focusGroup`, `inRespondentHome`, `inRespondentOffice`]

        If `typeOfResearch == remote` &rarr; allowed values are: [`oneOnOne`,
        `focusGroup`, `unmoderatedStudy`, `survey`, `diaryStudy`]
      enum:
        - oneOnOne
        - focusGroup
        - inRespondentHome
        - inRespondentOffice
        - unmoderatedStudy
        - survey
        - diaryStudy
    UnmoderatedStudyOrSurvey:
      type: object
      properties:
        remoteCommunicationDetails:
          type: string
          description: |-
            Custom url for the study, to be sent in the invitation .
            Can be updated when inviting the participant.
        specialInstructions:
          type: string
          description: |-
            Special instructions for the study, to be sent in the invitation.
            Can be updated when inviting the participant.
            Character limit: Max 2000.
    ProjectCountryCode:
      type: string
      enum:
        - AX
        - AL
        - DZ
        - AS
        - AD
        - AI
        - AQ
        - AG
        - AR
        - AM
        - AW
        - AU
        - AT
        - BS
        - BH
        - BD
        - BB
        - BY
        - BE
        - BZ
        - BJ
        - BM
        - BT
        - BO
        - BA
        - BW
        - BV
        - BR
        - VG
        - IO
        - BN
        - BG
        - BF
        - BI
        - CV
        - CM
        - CA
        - KY
        - CF
        - TD
        - CL
        - CX
        - CC
        - CO
        - KM
        - CG
        - CK
        - CR
        - HR
        - CU
        - CW
        - CY
        - CZ
        - CI
        - CD
        - DK
        - DJ
        - DM
        - EC
        - EG
        - SV
        - GQ
        - ER
        - EE
        - SZ
        - ET
        - FK
        - FO
        - FJ
        - FI
        - FR
        - GF
        - PF
        - TF
        - GA
        - GM
        - GE
        - DE
        - GI
        - GR
        - GL
        - GD
        - GP
        - GU
        - GT
        - GG
        - GN
        - GW
        - GY
        - HT
        - HM
        - VA
        - HN
        - HK
        - HU
        - IS
        - IN
        - ID
        - IR
        - IQ
        - IE
        - IM
        - IL
        - IT
        - JM
        - JP
        - JE
        - JO
        - KZ
        - KE
        - KI
        - LA
        - LV
        - LB
        - LR
        - LY
        - LI
        - LT
        - LU
        - MG
        - MW
        - MY
        - MV
        - ML
        - MT
        - MH
        - MQ
        - MR
        - MU
        - YT
        - MX
        - FM
        - MD
        - MC
        - MN
        - ME
        - MS
        - MA
        - MZ
        - NA
        - NR
        - NP
        - NL
        - NC
        - NZ
        - NI
        - NE
        - NU
        - NF
        - KP
        - MK
        - MP
        - 'NO'
        - OM
        - PW
        - PA
        - PG
        - PY
        - PE
        - PH
        - PN
        - PL
        - PT
        - PR
        - QA
        - RO
        - RW
        - RE
        - SH
        - KN
        - LC
        - PM
        - VC
        - WS
        - SM
        - ST
        - SA
        - RS
        - SC
        - SL
        - SG
        - SK
        - SI
        - SB
        - SO
        - ZA
        - GS
        - KR
        - ES
        - LK
        - SR
        - SJ
        - SE
        - CH
        - TZ
        - TW
        - TH
        - TL
        - TG
        - TK
        - TO
        - TT
        - TN
        - TR
        - TM
        - TC
        - TV
        - VI
        - UG
        - AE
        - GB
        - UM
        - US
        - UY
        - VU
        - VE
        - VN
        - WF
        - EH
        - ZM
        - ZW
        - all
    JobFunction:
      type: string
      description: Available for Industry professionals (B2B) projects
      enum:
        - accountingAuditing
        - administrative
        - advertising
        - analyst
        - artCreative
        - businessDevelopment
        - consulting
        - customerService
        - distribution
        - design
        - education
        - finance
        - generalBusiness
        - healthcareProvider
        - humanResources
        - informationTechnology
        - legal
        - management
        - manufacturing
        - marketing
        - other
        - publicRelations
        - purchasing
        - productManagement
        - projectManagement
        - production
        - qualityAssurance
        - research
        - sales
        - science
        - strategyPlanning
        - supplyChain
        - training
        - writingEditing
    ProjectLocationInPerson:
      type: object
      properties:
        id:
          type: string
        address1:
          type: string
        zipcode:
          type: string
        city:
          type: string
        region:
          type: string
        state:
          type: string
        country:
          $ref: '#/components/schemas/ProjectCountryCode'
        formattedAddress:
          type: string
        latitude:
          type: number
        longitude:
          type: number
      required:
        - address1
        - city
        - country
        - formattedAddress
        - latitude
        - longitude
    HouseholdIncome:
      type: string
      enum:
        - <30000
        - 30000-39999
        - 40000-59999
        - 60000-79999
        - 80000-99999
        - 100000-149999
        - 150000-199999
        - 200000+
        - all
        - all
    Gender:
      type: string
      enum:
        - male
        - female
        - other
        - nonbinary
        - transmale
        - transfemale
        - prefernottoanswer
        - N/A
    EducationLevel:
      type: string
      enum:
        - somehighschool
        - highschoolgraduate
        - somecollegenodegree
        - tradetechnicalvocationaltraining
        - associatedegree
        - bachelordegree
        - masterdegree
        - doctoratedegree
        - N/A
    Ethnicities:
      type: string
      enum:
        - americanindianalaskannative
        - hispaniclatino
        - blackorafricanamerican
        - asianpacificislander
        - whitecaucasian
        - middleeastern
        - multipleethnicity
        - prefernotdisclose
        - N/A
    AgeGroup:
      type: string
      enum:
        - 18-20
        - 21-29
        - 30-39
        - 40-54
        - 55+
        - N/A
    NdaTypeDeprecated:
      type: string
      description: Use ndaDetails.ndaType.
      deprecated: true
      default: none
      enum:
        - none
        - file
        - link
    SeniorityLevel:
      type: string
      enum:
        - unpaid
        - student
        - training
        - entrylevel
        - senior
        - manager
        - director
        - chiefofficer
        - partner
        - vicepresident
    Automation:
      type: object
      properties:
        autopay:
          type: boolean
        autoinvite:
          type: boolean
      required:
        - autopay
    KeyQualifierB2b:
      type: string
      description: >-
        You can select audience signals to restrict who qualifies for this
        project. Learn more about filters vs signals.

        Learn more about filters vs signals:
        https://help.respondent.io/en/articles/5482285-filtering-targeting-and-qualifying
      enum:
        - targetHouseholdIncome
        - targetProfessionalIndustries
        - targetCompanySize
        - targetAudienceSkills
        - relationshipStatus
        - languages
        - numberOfChildren
        - numberOfChildrenLiveAtHome
        - childrenBirthYears
        - livingSituation
        - pets
        - homeOwner
        - nationality
        - militaryServiceStatus
        - employmentStatuses
        - cloudPlatforms
        - codingAITools
        - designPrototypingTools
        - productivitySoftware
        - streamingServices
        - foodDeliveryServices
        - onlineBankingTools
        - onlineLearningPlatforms
        - onlineMarketplacePlatforms
        - onlineTravelBooking
        - smartHomeDevices
        - socialNetworkPlatforms
        - vehicleBrands
        - healthWellnessApps
        - onlineShoppingFrequency
    AdvancedTargeting:
      type: object
      properties:
        relationshipStatus:
          $ref: '#/components/schemas/RelationshipStatus'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/ParticipantLanguage'
        numberOfChildren:
          type: integer
          minimum: 0
        numberOfChildrenLiveAtHome:
          type: integer
          minimum: 0
        childrenBirthYears:
          type: array
          items:
            type: string
        livingSituation:
          $ref: '#/components/schemas/LivingSituation'
        pets:
          type: array
          items:
            $ref: '#/components/schemas/Pet'
        homeOwner:
          type: boolean
        nationality:
          type: array
          items:
            $ref: '#/components/schemas/Nationality'
        areaType:
          $ref: '#/components/schemas/AreaType'
        webcam:
          type: boolean
        mobilePhoneWithInternet:
          type: boolean
        headsetWithMicrophone:
          type: boolean
        programmingLanguages:
          type: array
          items:
            $ref: '#/components/schemas/ProgrammingLanguage'
        browsers:
          type: array
          items:
            $ref: '#/components/schemas/Browser'
        smartphoneOS:
          type: array
          items:
            $ref: '#/components/schemas/SmartphoneOS'
        tabletOS:
          type: array
          items:
            $ref: '#/components/schemas/TabletOS'
        computerOS:
          type: array
          items:
            $ref: '#/components/schemas/ComputerOS'
        cloudPlatforms:
          type: array
          items:
            $ref: '#/components/schemas/CloudPlatform'
        codingAITools:
          type: array
          items:
            $ref: '#/components/schemas/CodingAITool'
        designPrototypingTools:
          type: array
          items:
            $ref: '#/components/schemas/DesignPrototypingTool'
        foodDeliveryServices:
          type: array
          items:
            $ref: '#/components/schemas/FoodDeliveryService'
        healthWellnessApps:
          type: array
          items:
            $ref: '#/components/schemas/HealthWellnessApp'
        onlineBankingTools:
          type: array
          items:
            $ref: '#/components/schemas/OnlineBankingTool'
        onlineLearningPlatforms:
          type: array
          items:
            $ref: '#/components/schemas/OnlineLearningPlatform'
        onlineMarketplacePlatforms:
          type: array
          items:
            $ref: '#/components/schemas/OnlineMarketplacePlatform'
        onlineTravelBooking:
          type: array
          items:
            $ref: '#/components/schemas/OnlineTravelBooking'
        productivitySoftware:
          type: array
          items:
            $ref: '#/components/schemas/ProductivitySoftware'
        smartHomeDevices:
          type: array
          items:
            $ref: '#/components/schemas/SmartHomeDevice'
        socialNetworkPlatforms:
          type: array
          items:
            $ref: '#/components/schemas/SocialNetworkPlatform'
        streamingServices:
          type: array
          items:
            $ref: '#/components/schemas/StreamingService'
        vehicleBrands:
          type: array
          items:
            $ref: '#/components/schemas/VehicleBrand'
        onlineShoppingFrequency:
          $ref: '#/components/schemas/OnlineShoppingFrequency'
        militaryServiceStatus:
          $ref: '#/components/schemas/MilitaryServiceStatus'
        workSetting:
          $ref: '#/components/schemas/WorkSetting'
        employmentStatuses:
          type: array
          items:
            $ref: '#/components/schemas/TargetableEmploymentStatus'
      title: Advanced Targeting
    UpsertPastParticipationDto:
      type: object
      properties:
        hasNeverParticipated:
          type: boolean
          description: >-
            If true &rarr; only include participants who have never participated
            in a project with the researcher.

            If false &rarr; only include participants who have not participated
            in a project with the researcher in the past `months` months.
        months:
          $ref: '#/components/schemas/PastParticipationMonths'
        since:
          format: date-time
          type: string
          description: >-
            It's autocalculated based on the `hasNeverParticipated` / `months`
            entered and displays in the API response
          deprecated: true
    CompanySize:
      type: string
      enum:
        - selfemployed
        - 1-10
        - 11-50
        - 51-200
        - 201-500
        - 501-1000
        - 1001-5000
        - 5001-10000
        - 10000+
        - all
    CreateProjectCitiesDto:
      type: object
      properties:
        location:
          $ref: '#/components/schemas/CreateLocationDto'
      required:
        - location
    NdaDetailsDto:
      type: object
      properties:
        ndaType:
          $ref: '#/components/schemas/NdaType'
        ndaLink:
          type: string
          nullable: true
    ExternalResearcher:
      type: object
      properties:
        researcherId:
          type: string
          description: >-
            A unique researcher ID provided by you, used to associate and filter
            projects.
        researcherName:
          type: string
          description: >-
            To be used when sending messages or emails to the respondent. Full
            name not required.
        teamId:
          type: string
          description: >-
            Optional additional filtering. This researcher's internal teamId
            from your organization.
        companyName:
          type: string
        companyId:
          type: string
          description: >-
            Optional additional filtering. This researcher's internal companyId
            from your organization.
        bookingUrl:
          type: string
          description: >-
            Link to book a meeting with the researcher. Required if
            targetResearchMethodology of project is oneOnOne or focusGroup.
      required:
        - researcherId
    B2cAudienceTypes:
      type: string
      description: >-
        Audience type to be targeted for this project. Example values: Industry
        professionals (B2B) or General Population (B2C)
      default: b2c
      enum:
        - b2c
    KeyQualifierB2c:
      type: string
      description: >-
        You can select audience signals to restrict who qualifies for this
        project. Learn more about filters vs signals.

        Learn more about filters vs signals:
        https://help.respondent.io/en/articles/5482285-filtering-targeting-and-qualifying
      enum:
        - targetProjectTopics
        - relationshipStatus
        - languages
        - numberOfChildren
        - numberOfChildrenLiveAtHome
        - childrenBirthYears
        - livingSituation
        - pets
        - homeOwner
        - nationality
        - militaryServiceStatus
        - employmentStatuses
        - cloudPlatforms
        - codingAITools
        - designPrototypingTools
        - productivitySoftware
        - streamingServices
        - foodDeliveryServices
        - onlineBankingTools
        - onlineLearningPlatforms
        - onlineMarketplacePlatforms
        - onlineTravelBooking
        - smartHomeDevices
        - socialNetworkPlatforms
        - vehicleBrands
        - healthWellnessApps
        - onlineShoppingFrequency
    ProjectStatus:
      type: string
      enum:
        - DRAFT
        - PAID
        - ARCHIVED
        - CLOSED
    ProjectRecruitingStatus:
      type: string
      enum:
        - RECRUITING
        - RECRUITED
        - PAUSED
    AudienceTypes:
      type: string
      description: >-
        Audience type to be targeted for this project. Example values: Industry
        professionals (B2B) or General Population (B2C)
      enum:
        - b2b
        - b2c
    ProjectCities:
      type: object
      properties:
        location:
          $ref: '#/components/schemas/Location'
      required:
        - location
    ScreenerQuestion:
      type: object
      properties:
        createdAt:
          type: string
        updatedAt:
          type: string
        questionType:
          $ref: '#/components/schemas/QuestionType'
        uid:
          type: string
        text:
          type: string
        answers:
          type: array
          items:
            $ref: '#/components/schemas/ScreenerQuestionAnswer'
        isRequired:
          type: boolean
        skipLogic:
          type: boolean
        includeOtherOption:
          type: boolean
        isEnd:
          type: boolean
        logic:
          $ref: '#/components/schemas/ScreenerQuestionSkipLogic'
        minValue:
          type: number
        maxValue:
          type: number
        step:
          type: number
        order:
          type: number
        rankRule:
          $ref: '#/components/schemas/ScreenerQuestionRankRule'
        randomizeOrder:
          type: boolean
        matrixRows:
          type: array
          items:
            $ref: '#/components/schemas/ScreenerQuestionMatrixRow'
        matrixMatchType:
          $ref: '#/components/schemas/MatrixMatchType'
        warnings:
          type: array
          items:
            type: string
        id:
          type: string
      required:
        - createdAt
        - text
        - minValue
        - maxValue
        - step
        - id
    ProjectClosedDetails:
      type: object
      properties:
        closed:
          type: boolean
        closedMessage:
          type: string
        closedOnDate:
          format: date-time
          type: string
        closedByUserId:
          type: string
    NdaDetails:
      type: object
      properties:
        ndaType:
          $ref: '#/components/schemas/NdaType'
        ndaLink:
          type: string
          nullable: true
        ndaFileUrl:
          type: string
          nullable: true
    PastParticipation:
      type: object
      properties:
        hasNeverParticipated:
          type: boolean
          description: >-
            If true &rarr; only include participants who have never participated
            in a project with the researcher.

            If false &rarr; only include participants who have not participated
            in a project with the researcher in the past `months` months.
        since:
          format: date-time
          type: string
          description: >-
            It's autocalculated based on the `hasNeverParticipated` / `months`
            entered and displays in the API response
        months:
          $ref: '#/components/schemas/PastParticipationMonths'
      required:
        - hasNeverParticipated
    KeyQualifier:
      type: string
      description: >-
        Converts signals into required match filters. [Details
        here](https://developers.respondent.io/docs/targeting-audiences-effectively).
      enum:
        - targetHouseholdIncome
        - targetProfessionalIndustries
        - targetCompanySize
        - targetProjectTopics
        - targetAudienceSkills
        - relationshipStatus
        - languages
        - numberOfChildren
        - numberOfChildrenLiveAtHome
        - childrenBirthYears
        - livingSituation
        - pets
        - homeOwner
        - nationality
        - militaryServiceStatus
        - employmentStatuses
        - cloudPlatforms
        - codingAITools
        - designPrototypingTools
        - productivitySoftware
        - streamingServices
        - foodDeliveryServices
        - onlineBankingTools
        - onlineLearningPlatforms
        - onlineMarketplacePlatforms
        - onlineTravelBooking
        - smartHomeDevices
        - socialNetworkPlatforms
        - vehicleBrands
        - healthWellnessApps
        - onlineShoppingFrequency
    SimpleIndustry:
      type: object
      properties:
        id:
          type: string
          format: ObjectId
        name:
          type: string
      required:
        - id
        - name
    SimpleJobTitle:
      type: object
      properties:
        id:
          type: string
          format: ObjectId
        name:
          type: string
      required:
        - id
        - name
    SimpleTopic:
      type: object
      properties:
        id:
          type: string
          format: ObjectId
        name:
          type: string
      required:
        - id
        - name
    Skill:
      type: object
      properties:
        createdAt:
          type: string
        updatedAt:
          type: string
        name:
          type: string
        slug:
          type: string
        validated:
          type: boolean
          default: false
        type:
          type: string
          default: skill
        count:
          type: number
          default: 0
        id:
          type: string
      required:
        - createdAt
        - name
        - slug
        - validated
        - type
        - id
    RelationshipStatus:
      type: string
      enum:
        - single
        - inRelationship
        - married
        - divorced
        - widowed
        - separated
        - domesticPartnershipCivilUnion
        - itsComplicated
        - preferNotToSay
        - other
    ParticipantLanguage:
      type: string
      enum:
        - en
        - es
        - zh
        - hi
        - ar
        - bn
        - ru
        - pt
        - ja
        - de
        - fr
        - it
        - ko
        - tr
        - pl
        - nl
        - vi
        - sv
        - fa
        - el
        - da
        - fi
        - 'no'
        - cs
        - th
        - ro
        - he
        - id
        - hu
        - uk
        - other
    LivingSituation:
      type: string
      enum:
        - alone
        - roommates
        - significantOther
        - spouse
        - parents
        - other
    Pet:
      type: string
      enum:
        - noPets
        - dog
        - cat
        - bird
        - fish
        - reptile
        - amphibian
        - other
    Nationality:
      type: string
      enum:
        - american
        - canadian
        - mexican
        - british
        - french
        - german
        - italian
        - spanish
        - dutch
        - swedish
        - norwegian
        - danish
        - finnish
        - polish
        - irish
        - portuguese
        - greek
        - swiss
        - austrian
        - belgian
        - czech
        - romanian
        - hungarian
        - chinese
        - indian
        - japanese
        - korean
        - filipino
        - vietnamese
        - thai
        - malaysian
        - singaporean
        - indonesian
        - pakistani
        - bangladeshi
        - australian
        - newzealander
        - brazilian
        - argentinian
        - colombian
        - chilean
        - peruvian
        - venezuelan
        - southafrican
        - nigerian
        - egyptian
        - kenyan
        - israeli
        - turkish
        - saudiarabian
        - other
    AreaType:
      type: string
      enum:
        - urban
        - suburban
        - rural
    ProgrammingLanguage:
      type: string
      enum:
        - javaScript
        - python
        - java
        - c#
        - c++
        - ruby
        - php
        - swift
        - kotlin
        - golang
        - r
        - typeScript
        - sql
        - other
    Browser:
      type: string
      enum:
        - chrome
        - edge
        - firefox
        - internetExplorer
        - safari
        - other
    SmartphoneOS:
      type: string
      enum:
        - android
        - ios
        - windows
        - other
        - noSmartphone
    TabletOS:
      type: string
      enum:
        - amazonFire
        - android
        - ipadOS
        - windows
        - other
        - noTablet
    ComputerOS:
      type: string
      enum:
        - macOS
        - windows
        - linux
        - other
        - noComputer
    CloudPlatform:
      type: string
      enum:
        - aws
        - microsoftazure
        - googlecloud
        - ibmcloud
        - oraclecloud
        - alibabacloud
        - digitalocean
        - heroku
        - vercel
        - netlify
        - cloudflare
        - linode
        - other
    CodingAITool:
      type: string
      enum:
        - claudecode
        - cursor
        - windsurf
        - githubcopilot
        - chatgpt
        - gemini
        - copilotchat
        - other
    DesignPrototypingTool:
      type: string
      enum:
        - figma
        - adobexd
        - sketch
        - invision
        - framer
        - axure
        - balsamiq
        - marvel
        - protoio
        - adobephotoshop
        - adobeillustrator
        - canva
        - affinitydesigner
        - principle
        - origami
        - other
    FoodDeliveryService:
      type: string
      enum:
        - ubereats
        - doordash
        - grubhub
        - postmates
        - seamless
        - instacart
        - deliveroo
        - justeat
        - skipthedishes
        - menulog
        - foodpanda
        - zomato
        - swiggy
        - rappi
        - other
    HealthWellnessApp:
      type: string
      enum:
        - applefitness
        - fitbit
        - strava
        - peloton
        - niketrainingclub
        - myfitnesspal
        - loseit
        - headspace
        - calm
        - insighttimer
        - tenpercenthappier
        - betterhelp
        - talkspace
        - sleepcycle
        - slumber
        - applehealth
        - googlefit
        - samsunghealth
        - noom
        - weightwatchers
        - cronometer
        - other
    OnlineBankingTool:
      type: string
      enum:
        - chime
        - varo
        - current
        - revolut
        - n26
        - monzo
        - mint
        - ynab
        - personalcapital
        - quicken
        - paypal
        - venmo
        - cashapp
        - zelle
        - applepay
        - googlepay
        - robinhood
        - webull
        - acorns
        - stash
        - betterment
        - wealthfront
        - coinbase
        - binance
        - kraken
        - other
    OnlineLearningPlatform:
      type: string
      enum:
        - coursera
        - udemy
        - linkedinlearning
        - skillshare
        - edx
        - khanacademy
        - pluralsight
        - masterclass
        - udacity
        - datacamp
        - codecademy
        - treehouse
        - brilliant
        - duolingo
        - rosettastone
        - babbel
        - googleskillshop
        - other
    OnlineMarketplacePlatform:
      type: string
      enum:
        - amazon
        - ebay
        - etsy
        - walmart
        - target
        - bestbuy
        - alibaba
        - aliexpress
        - shopify
        - wayfair
        - mercari
        - poshmark
        - depop
        - facebookmarketplace
        - craigslist
        - offerup
        - letgo
        - other
    OnlineTravelBooking:
      type: string
      enum:
        - expedia
        - bookingdotcom
        - airbnb
        - vrbo
        - kayak
        - priceline
        - hotelsdotcom
        - tripadvisor
        - orbitz
        - travelocity
        - hotwire
        - skyscanner
        - agoda
        - tripdotcom
        - hopper
        - googleflights
        - other
    ProductivitySoftware:
      type: string
      enum:
        - microsoftoffice
        - microsoft365
        - googleworkspace
        - appleiwork
        - notion
        - evernote
        - trello
        - asana
        - mondaydotcom
        - slack
        - microsoftteams
        - zoom
        - airtable
        - clickup
        - basecamp
        - jira
        - confluence
        - dropbox
        - googledrive
        - other
    SmartHomeDevice:
      type: string
      enum:
        - amazonecho
        - googlenest
        - applehomepod
        - echoshow
        - nesthub
        - nestthermostat
        - ecobee
        - honeywellhome
        - philipshue
        - lifx
        - nanoleaf
        - ring
        - arlo
        - nestcam
        - blink
        - augustlock
        - tplink
        - wemo
        - kasa
        - roomba
        - roborock
        - eufy
        - smartrefrigerator
        - smartoven
        - smartwasher
        - other
    SocialNetworkPlatform:
      type: string
      enum:
        - facebook
        - instagram
        - twitter
        - tiktok
        - linkedin
        - snapchat
        - pinterest
        - reddit
        - youtube
        - whatsapp
        - telegram
        - discord
        - twitch
        - mastodon
        - threads
        - bluesky
        - wechat
        - weibo
        - clubhouse
        - nextdoor
        - other
    StreamingService:
      type: string
      enum:
        - netflix
        - amazonprimevideo
        - disneyplus
        - hulu
        - hbomax
        - appletvplus
        - paramountplus
        - peacock
        - youtubetv
        - youtubepremium
        - crunchyroll
        - discoveryplus
        - showtime
        - starz
        - spotify
        - applemusic
        - youtubemusic
        - amazonmusic
        - tidal
        - pandora
        - soundcloud
        - slingtv
        - fubotv
        - other
    VehicleBrand:
      type: string
      enum:
        - ford
        - chevrolet
        - dodge
        - ram
        - jeep
        - gmc
        - cadillac
        - tesla
        - rivian
        - lucid
        - toyota
        - honda
        - nissan
        - mazda
        - subaru
        - mitsubishi
        - lexus
        - acura
        - infiniti
        - hyundai
        - kia
        - genesis
        - bmw
        - mercedesbenz
        - audi
        - volkswagen
        - porsche
        - volvo
        - mini
        - landrover
        - jaguar
        - fiat
        - alfaromeo
        - peugeot
        - renault
        - ferrari
        - lamborghini
        - maserati
        - bentley
        - rollsroyce
        - other
    OnlineShoppingFrequency:
      type: string
      enum:
        - severaltimesweek
        - aboutonceweek
        - fewtimesmonth
        - rarely
        - never
    MilitaryServiceStatus:
      type: string
      enum:
        - neverserved
        - currentlyserving
        - veteran
    WorkSetting:
      type: string
      enum:
        - hybrid
        - inPerson
        - remote
    TargetableEmploymentStatus:
      type: string
      enum:
        - owner
        - employedfulltime
        - employedparttime
        - unemployedlookingforwork
        - unemployed
        - retired
        - homemaker
        - fulltimestudent
        - parttimestudent
    PastParticipationMonths:
      type: string
      description: >-
        Number of months to exclude participants who have previously
        participated in a study.

        Used only when `hasNeverParticipated` is false. For example, `months: 3`
        excludes participants who participated in the past 3 months.
      enum:
        - '-1'
        - '1'
        - '2'
        - '3'
        - '6'
        - '9'
        - '12'
    CreateLocationDto:
      type: object
      properties:
        googleId:
          type: string
        region:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          $ref: '#/components/schemas/CountryCode'
        zipcode:
          type: string
        location:
          $ref: '#/components/schemas/LocationCoordinate'
      required:
        - city
        - country
        - location
    NdaType:
      type: string
      default: none
      enum:
        - none
        - file
        - link
    Location:
      type: object
      properties:
        id:
          type: string
        googleId:
          type: string
        region:
          type: string
        city:
          type: string
        state:
          type: string
        country:
          $ref: '#/components/schemas/ProjectCountryCode'
        zipcode:
          type: string
        address1:
          type: string
        formattedAddress:
          type: string
        location:
          $ref: '#/components/schemas/LocationCoordinate'
      required:
        - city
        - country
        - location
    QuestionType:
      type: string
      enum:
        - radio
        - multiLineTextbox
        - checkbox
        - singleLineTextbox
        - numericBox
        - sliderScale
        - fileUpload
        - rank
        - matrix
    ScreenerQuestionAnswer:
      type: object
      properties:
        createdAt:
          type: string
        updatedAt:
          type: string
        uid:
          type: string
        text:
          type: string
          description: Required  unless `isOther`, then text will be set to 'Other'
        answerValue:
          type: number
          description: |-
            CHECKBOX: {
                    id: 3,
                    answerValues: [
                      { id: 1, text: 'May Select' },
                      { id: 2, text: 'Must Select' },
                      { id: 3, text: 'Disqualify' },
                    ],
                  },
                   RADIO: {
                    id: 1,
                    answerValues: [
                      { id: 1, text: 'Qualify' },
                      { id: 2, text: 'Disqualify' },
                    ],
                  },
        goToQuestionUid:
          type: string
          description: Skip logic for radio questions. Uid of question to skip to.
        isOther:
          type: boolean
          description: Is 'Other' answer with comment field
        id:
          type: string
      required:
        - createdAt
        - uid
        - answerValue
        - id
    ScreenerQuestionSkipLogic:
      type: object
      properties:
        answerUid:
          type: string
        goToQuestionUid:
          type: string
        skipLogicType:
          $ref: '#/components/schemas/ScreenerQuestionSkipLogicType'
        multipleAnswers:
          type: array
          items:
            $ref: '#/components/schemas/SkipLogicMultipleAnswer'
        multipleAnswersBoolType:
          $ref: '#/components/schemas/SkipLogicMultipleAnswersBoolType'
      required:
        - answerUid
    ScreenerQuestionRankRule:
      type: object
      properties:
        topN:
          type: number
          description: >-
            Cutoff position (1-based). Preferred options must rank within the
            top N.

            Bounded by the per-question option cap; the launch-time schema
            additionally

            enforces `topN <= answers.length` (which can't be checked here
            because the

            rule is validated independently of the answers array).
        matchType:
          $ref: '#/components/schemas/RankMatchType'
      required:
        - topN
        - matchType
    ScreenerQuestionMatrixRow:
      type: object
      properties:
        uid:
          type: string
        text:
          type: string
        qualifyingAnswerUids:
          type: array
          items:
            type: string
      required:
        - uid
        - text
    MatrixMatchType:
      type: string
      enum:
        - all
        - any
    CountryCode:
      type: string
      enum:
        - AF
        - AX
        - AL
        - DZ
        - AS
        - AD
        - AO
        - AI
        - AQ
        - AG
        - AR
        - AM
        - AW
        - AU
        - AT
        - AZ
        - BS
        - BH
        - BD
        - BB
        - BY
        - BE
        - BZ
        - BJ
        - BM
        - BT
        - BO
        - BA
        - BW
        - BV
        - BR
        - VG
        - IO
        - BN
        - BG
        - BF
        - BI
        - CV
        - KH
        - CM
        - CA
        - KY
        - CF
        - TD
        - CL
        - CN
        - CX
        - CC
        - CO
        - KM
        - CG
        - CK
        - CR
        - HR
        - CU
        - CW
        - CY
        - CZ
        - CI
        - CD
        - DK
        - DJ
        - DM
        - DO
        - EC
        - EG
        - SV
        - GQ
        - ER
        - EE
        - SZ
        - ET
        - FK
        - FO
        - FJ
        - FI
        - FR
        - GF
        - PF
        - TF
        - GA
        - GM
        - GE
        - DE
        - GH
        - GI
        - GR
        - GL
        - GD
        - GP
        - GU
        - GT
        - GG
        - GN
        - GW
        - GY
        - HT
        - HM
        - VA
        - HN
        - HK
        - HU
        - IS
        - IN
        - ID
        - IR
        - IQ
        - IE
        - IM
        - IL
        - IT
        - JM
        - JP
        - JE
        - JO
        - KZ
        - KE
        - KI
        - KW
        - KG
        - LA
        - LV
        - LB
        - LS
        - LR
        - LY
        - LI
        - LT
        - LU
        - MO
        - MG
        - MW
        - MY
        - MV
        - ML
        - MT
        - MH
        - MQ
        - MR
        - MU
        - YT
        - MX
        - FM
        - MD
        - MC
        - MN
        - ME
        - MS
        - MA
        - MZ
        - NA
        - NR
        - NP
        - NL
        - NC
        - NZ
        - NI
        - NE
        - NG
        - NU
        - NF
        - KP
        - MK
        - MP
        - 'NO'
        - OM
        - PK
        - PW
        - PS
        - PA
        - PG
        - PY
        - PE
        - PH
        - PN
        - PL
        - PT
        - PR
        - QA
        - RO
        - RW
        - RE
        - SH
        - KN
        - LC
        - PM
        - VC
        - WS
        - SM
        - ST
        - SA
        - SN
        - RS
        - SC
        - SL
        - SG
        - SK
        - SI
        - SB
        - SO
        - ZA
        - GS
        - KR
        - ES
        - LK
        - SD
        - SR
        - SJ
        - SE
        - CH
        - TJ
        - TZ
        - TH
        - TL
        - TG
        - TK
        - TO
        - TT
        - TN
        - TM
        - TC
        - TV
        - TR
        - VI
        - UG
        - UA
        - AE
        - GB
        - UM
        - US
        - UY
        - UZ
        - VU
        - VE
        - VN
        - WF
        - EH
        - YE
        - ZM
        - ZW
        - all
    LocationCoordinate:
      type: object
      properties:
        longitude:
          type: number
        latitude:
          type: number
      required:
        - longitude
        - latitude
    ScreenerQuestionSkipLogicType:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/SkipLogicTypeId'
        text:
          $ref: '#/components/schemas/SkipLogicType'
      required:
        - id
        - text
    SkipLogicMultipleAnswer:
      type: object
      properties:
        answer:
          type: string
        logicType:
          $ref: '#/components/schemas/ScreenerQuestionSkipLogicType'
      required:
        - answer
        - logicType
    SkipLogicMultipleAnswersBoolType:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/MultipleAnswersBoolTypeId'
        text:
          $ref: '#/components/schemas/MultipleAnswersBoolType'
      required:
        - id
        - text
    RankMatchType:
      type: string
      enum:
        - all
        - any
    SkipLogicTypeId:
      type: number
      description: |-
        [

         SELECTED: 1

         NOT_SELECTED: 2

        ]
      enum:
        - 1
        - 2
    SkipLogicType:
      type: string
      enum:
        - Selected
        - Not Selected
    MultipleAnswersBoolTypeId:
      type: number
      description: |-
        [

         AND: 1

         OR: 2

        ]
      enum:
        - 1
        - 2
    MultipleAnswersBoolType:
      type: string
      enum:
        - AND
        - OR

````