> ## 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'
        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 and Max 5.
          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'
        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'
        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 and Max 5.
          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
        Max: 3
      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
    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
    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
        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
    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
    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
    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
    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
    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

````