add_question
ChatGPTAdd a question to a draft unmoderated project. Supported types: url, task, written, range, single_select, multiple_select. For url: label must be a valid http/https URL. For range: label, left_label, and right_label are required; scale (5-10, default 5) controls point count. For single_select/multiple_select: label and options (≥2 strings) are required; randomize shuffles options for testers; allow_other appends a free-text "Other" choice. For task: blur_video blurs tester webcam (default false). position is 0-based; omit to append at end. If the position is occupied, existing questions shift down. Returns the created question with id, type, position, label, and type-specific fields. Only works on unmoderated projects in draft status — use list_question_types to discover field schemas.
add_question
ChatGPTAdd a question to a draft unmoderated project. Supported types: url, task, written, range, single_select, multiple_select. For url: label must be a valid http/https URL. For range: label, left_label, and right_label are required; scale (5-10, default 5) controls point count. For single_select/multiple_select: label and options (≥2 strings) are required; randomize shuffles options for testers; allow_other appends a free-text "Other" choice. For task: blur_video blurs tester webcam (default false). position is 0-based; omit to append at end. If the position is occupied, existing questions shift down. Returns the created question with id, type, position, label, and type-specific fields. Only works on unmoderated projects in draft status — use list_question_types to discover field schemas.
add_question
ChatGPTAdd a question to a draft unmoderated project. Supported types: url, task, written, range, single_select, multiple_select. For url: label must be a valid http/https URL. For range: label, left_label, and right_label are required; scale (5-10, default 5) controls point count. For single_select/multiple_select: label and options (≥2 strings) are required; randomize shuffles options for testers; allow_other appends a free-text "Other" choice. For task: blur_video blurs tester webcam (default false). position is 0-based; omit to append at end. If the position is occupied, existing questions shift down. Returns the created question with id, type, position, label, and type-specific fields. Only works on unmoderated projects in draft status — use list_question_types to discover field schemas.
add_screener_question
ChatGPTAdd a screener (qualifying) question to an unmoderated draft project. Screener questions are a pre-qualification gate, separate from the study questions — participants who pick a "disqualify" option are excluded. Only works on unmoderated projects in draft status. Provide at least 2 answer options (the optional "Other" choice is separate). Each option has a disposition: "qualify", "disqualify", or "may_select" (neither). When disposition is omitted it defaults to the same value the UI uses: "qualify" for single_select, "may_select" for multiple_select. At least one option (including the "Other" choice if present) must not be "disqualify". To add a free-text "Other" choice, set other_option_disposition to its disposition (use "qualify" to match the UI default on single_select). That single choice is always labelled "Other" and shown last — it is NOT one of the entries in options. Omit it if the question has no "Other" choice. position is 0-based (0 = first) and matches the position returned by get_project; omit it to append the question to the end of the screener. Returns the created screener question with its options and stored positions.
add_screener_question
ChatGPTAdd a screener (qualifying) question to an unmoderated draft project. Screener questions are a pre-qualification gate, separate from the study questions — participants who pick a "disqualify" option are excluded. Only works on unmoderated projects in draft status. Provide at least 2 answer options (the optional "Other" choice is separate). Each option has a disposition: "qualify", "disqualify", or "may_select" (neither). When disposition is omitted it defaults to the same value the UI uses: "qualify" for single_select, "may_select" for multiple_select. At least one option (including the "Other" choice if present) must not be "disqualify". To add a free-text "Other" choice, set other_option_disposition to its disposition (use "qualify" to match the UI default on single_select). That single choice is always labelled "Other" and shown last — it is NOT one of the entries in options. Omit it if the question has no "Other" choice. position is 0-based (0 = first) and matches the position returned by get_project; omit it to append the question to the end of the screener. Returns the created screener question with its options and stored positions.
add_screener_question
ChatGPTAdd a screener (qualifying) question to an unmoderated draft project. Screener questions are a pre-qualification gate, separate from the study questions — participants who pick a "disqualify" option are excluded. Only works on unmoderated projects in draft status. Provide at least 2 answer options (the optional "Other" choice is separate). Each option has a disposition: "qualify", "disqualify", or "may_select" (neither). When disposition is omitted it defaults to the same value the UI uses: "qualify" for single_select, "may_select" for multiple_select. At least one option (including the "Other" choice if present) must not be "disqualify". To add a free-text "Other" choice, set other_option_disposition to its disposition (use "qualify" to match the UI default on single_select). That single choice is always labelled "Other" and shown last — it is NOT one of the entries in options. Omit it if the question has no "Other" choice. position is 0-based (0 = first) and matches the position returned by get_project; omit it to append the question to the end of the screener. Returns the created screener question with its options and stored positions.
apply_saved_audience
ChatGPTApply a saved audience template to a draft project, pre-filling its device, demographics, language, and screener questions. The audience_id must come from list_audience_templates — do NOT pass an ID from list_study_templates (those are study/question templates, not audience templates). Identify the audience by audience_id, or by audience_name (case-insensitive). The project must be in draft status. When a name matches multiple audiences, the response has meta.ambiguous = true and data.matches lists each candidate with its id, name, and created_at (UTC ISO-8601); no audience is applied — re-call with the chosen audience_id.
apply_saved_audience
ChatGPTApply a saved audience template to a draft project, pre-filling its device, demographics, language, and screener questions. The audience_id must come from list_audience_templates — do NOT pass an ID from list_study_templates (those are study/question templates, not audience templates). Identify the audience by audience_id, or by audience_name (case-insensitive). The project must be in draft status. When a name matches multiple audiences, the response has meta.ambiguous = true and data.matches lists each candidate with its id, name, and created_at (UTC ISO-8601); no audience is applied — re-call with the chosen audience_id.
apply_saved_audience
ChatGPTApply a saved audience template to a draft project, pre-filling its device, demographics, language, and screener questions. The audience_id must come from list_audience_templates — do NOT pass an ID from list_study_templates (those are study/question templates, not audience templates). Identify the audience by audience_id, or by audience_name (case-insensitive). The project must be in draft status. When a name matches multiple audiences, the response has meta.ambiguous = true and data.matches lists each candidate with its id, name, and created_at (UTC ISO-8601); no audience is applied — re-call with the chosen audience_id.
configure_blocks
ChatGPTConfigure block randomization for a draft unmoderated project. Defines which questions are grouped into each block and whether each block is shown in randomized or fixed order to testers. This is a full replacement — all existing blocks are overwritten in a single atomic write. At least 2 blocks must have randomize: true (UI requirement). Questions not assigned to any block are automatically placed in the first block. Default pattern mirrors the UI activation: [{ randomize: false }, { randomize: true }, { randomize: true }]. Use get_draft_project to get question IDs before calling this tool. Only works on unmoderated projects in draft status.
configure_blocks
ChatGPTConfigure block randomization for a draft unmoderated project. Defines which questions are grouped into each block and whether each block is shown in randomized or fixed order to testers. This is a full replacement — all existing blocks are overwritten in a single atomic write. At least 2 blocks must have randomize: true (UI requirement). Questions not assigned to any block are automatically placed in the first block. Default pattern mirrors the UI activation: [{ randomize: false }, { randomize: true }, { randomize: true }]. Use get_draft_project to get question IDs before calling this tool. Only works on unmoderated projects in draft status.
configure_blocks
ChatGPTConfigure block randomization for a draft unmoderated project. Defines which questions are grouped into each block and whether each block is shown in randomized or fixed order to testers. This is a full replacement — all existing blocks are overwritten in a single atomic write. At least 2 blocks must have randomize: true (UI requirement). Questions not assigned to any block are automatically placed in the first block. Default pattern mirrors the UI activation: [{ randomize: false }, { randomize: true }, { randomize: true }]. Use get_draft_project to get question IDs before calling this tool. Only works on unmoderated projects in draft status.
configure_project_details
ChatGPTConfigure the details step of a draft project: participant method, consent form, compensation, and study context (the participant-facing "Context" text shown before the recording to set the tone of the study). Must be called before the project can be published. The project must be in draft status.
configure_project_details
ChatGPTConfigure the details step of a draft project: participant method, consent form, compensation, and study context (the participant-facing "Context" text shown before the recording to set the tone of the study). Must be called before the project can be published. The project must be in draft status.
configure_project_details
ChatGPTConfigure the details step of a draft project: participant method, consent form, compensation, and study context (the participant-facing "Context" text shown before the recording to set the tone of the study). Must be called before the project can be published. The project must be in draft status.
create_project
ChatGPTCreate a new unmoderated research project in draft status. Returns the project ID, name, status, creation timestamp, and a direct URL to open the project in the PlaybookUX UI for manual review. The project is created in draft — it cannot be launched from MCP; use the PlaybookUX UI to publish it.
create_project
ChatGPTCreate a new unmoderated research project in draft status. Returns the project ID, name, status, creation timestamp, and a direct URL to open the project in the PlaybookUX UI for manual review. The project is created in draft — it cannot be launched from MCP; use the PlaybookUX UI to publish it.
create_project
ChatGPTCreate a new unmoderated research project in draft status. Returns the project ID, name, status, creation timestamp, and a direct URL to open the project in the PlaybookUX UI for manual review. The project is created in draft — it cannot be launched from MCP; use the PlaybookUX UI to publish it.
delete_draft
ChatGPTDelete a draft research project. Only unmoderated projects in draft status can be deleted, and only by the project creator or a workspace admin. Once deleted, the project no longer appears in list_projects and cannot be restored through MCP. Returns the deleted project ID. Fails with a 403 for non-draft projects or insufficient permissions, a 422 for non-unmoderated projects, and a 404 when the project does not exist in the workspace.
delete_draft
ChatGPTDelete a draft research project. Only unmoderated projects in draft status can be deleted, and only by the project creator or a workspace admin. Once deleted, the project no longer appears in list_projects and cannot be restored through MCP. Returns the deleted project ID. Fails with a 403 for non-draft projects or insufficient permissions, a 422 for non-unmoderated projects, and a 404 when the project does not exist in the workspace.
delete_draft
ChatGPTDelete a draft research project. Only unmoderated projects in draft status can be deleted, and only by the project creator or a workspace admin. Once deleted, the project no longer appears in list_projects and cannot be restored through MCP. Returns the deleted project ID. Fails with a 403 for non-draft projects or insufficient permissions, a 422 for non-unmoderated projects, and a 404 when the project does not exist in the workspace.
delete_question
ChatGPTDelete a question from a draft unmoderated project. question_id comes from get_draft_project or add_question. The remaining questions are re-indexed to stay contiguous; a question inside a randomization block is removed from that block too. Returns the remaining questions. Returns 404 if the question is not on the project.
delete_question
ChatGPTDelete a question from a draft unmoderated project. question_id comes from get_draft_project or add_question. The remaining questions are re-indexed to stay contiguous; a question inside a randomization block is removed from that block too. Returns the remaining questions. Returns 404 if the question is not on the project.
delete_question
ChatGPTDelete a question from a draft unmoderated project. question_id comes from get_draft_project or add_question. The remaining questions are re-indexed to stay contiguous; a question inside a randomization block is removed from that block too. Returns the remaining questions. Returns 404 if the question is not on the project.
delete_screener
ChatGPTDelete a screener (qualifying) question from an unmoderated draft project. Only works on unmoderated draft projects. screener_id comes from get_project (ids change after each edit). Returns the remaining screener questions. Deleting the last question leaves the segment with no screener.
delete_screener
ChatGPTDelete a screener (qualifying) question from an unmoderated draft project. Only works on unmoderated draft projects. screener_id comes from get_project (ids change after each edit). Returns the remaining screener questions. Deleting the last question leaves the segment with no screener.
delete_screener
ChatGPTDelete a screener (qualifying) question from an unmoderated draft project. Only works on unmoderated draft projects. screener_id comes from get_project (ids change after each edit). Returns the remaining screener questions. Deleting the last question leaves the segment with no screener.
get_analytics
ChatGPTGet aggregated analytics for a project. Only returns meaningful data for card_sort projects: total_participants, similarity_matrix (pre-computed integer percentages 0–100; use as-is for dendrograms — do not derive from category_frequencies), similarity_matrix_labels (objects with id and name), and category_frequencies. All other project types return an empty data object — callers should skip analytics rendering when the response is empty.
get_analytics
ChatGPTGet aggregated analytics for a project. Only returns meaningful data for card_sort projects: total_participants, similarity_matrix (pre-computed integer percentages 0–100; use as-is for dendrograms — do not derive from category_frequencies), similarity_matrix_labels (objects with id and name), and category_frequencies. All other project types return an empty data object — callers should skip analytics rendering when the response is empty.
get_analytics
ChatGPTGet aggregated analytics for a project. Only returns meaningful data for card_sort projects: total_participants, similarity_matrix (pre-computed integer percentages 0–100; use as-is for dendrograms — do not derive from category_frequencies), similarity_matrix_labels (objects with id and name), and category_frequencies. All other project types return an empty data object — callers should skip analytics rendering when the response is empty.
get_audience_setup_options
ChatGPTList the audience options supported when configuring a study, for discovery before calling set_audience. Returns the available devices, the operating systems available per device class (computer vs mobile), and the supported participant languages as label/value pairs (the value is the code set_audience expects).
get_audience_setup_options
ChatGPTList the audience options supported when configuring a study, for discovery before calling set_audience. Returns the available devices, the operating systems available per device class (computer vs mobile), and the supported participant languages as label/value pairs (the value is the code set_audience expects).
get_audience_setup_options
ChatGPTList the audience options supported when configuring a study, for discovery before calling set_audience. Returns the available devices, the operating systems available per device class (computer vs mobile), and the supported participant languages as label/value pairs (the value is the code set_audience expects).
get_consent_forms
ChatGPTList consent forms available in the workspace. Use this to find valid consent form names before calling configure_project_details. Returns meta.returned_count (items in this response) and meta.matching_count (total matching across all pages).
get_consent_forms
ChatGPTList consent forms available in the workspace. Use this to find valid consent form names before calling configure_project_details. Returns meta.returned_count (items in this response) and meta.matching_count (total matching across all pages).
get_consent_forms
ChatGPTList consent forms available in the workspace. Use this to find valid consent form names before calling configure_project_details. Returns meta.returned_count (items in this response) and meta.matching_count (total matching across all pages).
get_demographics
ChatGPTList every demographic and employment targeting category with its valid option identifiers. Call this before set_demographics to discover valid ids. Returns categories: age (a free-form range, not a fixed list), gender, ethnicity, household_income, location_country, location_state, job_role ({id,name} from the panel database), work_status, company_size, industry, and seniority.
get_demographics
ChatGPTList every demographic and employment targeting category with its valid option identifiers. Call this before set_demographics to discover valid ids. Returns categories: age (a free-form range, not a fixed list), gender, ethnicity, household_income, location_country, location_state, job_role ({id,name} from the panel database), work_status, company_size, industry, and seniority.
get_demographics
ChatGPTList every demographic and employment targeting category with its valid option identifiers. Call this before set_demographics to discover valid ids. Returns categories: age (a free-form range, not a fixed list), gender, ethnicity, household_income, location_country, location_state, job_role ({id,name} from the panel database), work_status, company_size, industry, and seniority.
get_draft_project
ChatGPTRetrieve the complete configuration of a draft project, including metadata, details (face recording, compensation, consent form), all questions with block assignments, audience attributes, and screener questions per segment. Only supports unmoderated projects.
get_draft_project
ChatGPTRetrieve the complete configuration of a draft project, including metadata, details (face recording, compensation, consent form), all questions with block assignments, audience attributes, and screener questions per segment. Only supports unmoderated projects.
get_draft_project
ChatGPTRetrieve the complete configuration of a draft project, including metadata, details (face recording, compensation, consent form), all questions with block assignments, audience attributes, and screener questions per segment. Only supports unmoderated projects.
get_highlights
ChatGPTGet highlight reels from a company. Optionally filter by project. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_highlights
ChatGPTGet highlight reels from a company. Optionally filter by project. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_highlights
ChatGPTGet highlight reels from a company. Optionally filter by project. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_notes_and_clips
ChatGPTGet notes and clips from test sessions in a project, differentiated by note type. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_notes_and_clips
ChatGPTGet notes and clips from test sessions in a project, differentiated by note type. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_notes_and_clips
ChatGPTGet notes and clips from test sessions in a project, differentiated by note type. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_project
ChatGPTGet detailed information about a specific project. Only available for unmoderated and survey projects.
get_project
ChatGPTGet detailed information about a specific project. Only available for unmoderated and survey projects.
get_project
ChatGPTGet detailed information about a specific project. Only available for unmoderated and survey projects.
get_questions
ChatGPTGet the questions defined in a project study. Only available for survey projects (not unmoderated or other types). Each question includes page_name (the survey page title, e.g. "Page 2: Five second test follow up questions") and page_order (1-based integer matching the page number shown in the UI, e.g. 2 for "Page 2") — use these fields to identify which survey page a question belongs to. Filter with page_order to narrow to a specific survey page. Returns meta.returned_count (questions in this response) and meta.matching_count (total questions matching the filters across all paginated results).
get_questions
ChatGPTGet the questions defined in a project study. Only available for survey projects (not unmoderated or other types). Each question includes page_name (the survey page title, e.g. "Page 2: Five second test follow up questions") and page_order (1-based integer matching the page number shown in the UI, e.g. 2 for "Page 2") — use these fields to identify which survey page a question belongs to. Filter with page_order to narrow to a specific survey page. Returns meta.returned_count (questions in this response) and meta.matching_count (total questions matching the filters across all paginated results).
get_questions
ChatGPTGet the questions defined in a project study. Only available for survey projects (not unmoderated or other types). Each question includes page_name (the survey page title, e.g. "Page 2: Five second test follow up questions") and page_order (1-based integer matching the page number shown in the UI, e.g. 2 for "Page 2") — use these fields to identify which survey page a question belongs to. Filter with page_order to narrow to a specific survey page. Returns meta.returned_count (questions in this response) and meta.matching_count (total questions matching the filters across all paginated results).
get_responses
ChatGPTGet participant survey and test responses for a project. Available for unmoderated, survey, tree test, and card sort projects. For non-card-sort projects, each answer includes page_name (the survey page title, e.g. "Page 2: Five second test follow up questions") and page_order (1-based integer matching the page number shown in the UI, e.g. 2 for "Page 2") — use these fields to filter or group answers by survey page. For tree test projects, each answer with question_type: "tree_test" contains a value object with path (breadcrumb string, e.g. "Home > Women > Shoes"), result (e.g. "Direct Success", "Indirect Success", "Direct Fail", "Indirect Fail"), duration_seconds, and duration_mm_ss. For card sort projects the response contains a categories array (with nested items) instead of an answers array, and a card_sort_type field ("open", "closed", or "hybrid"). Filter with question_id (not applicable for card sort), tester_id, or page_order (survey projects only — 422 on other types). Returns meta.returned_count (testers in this response) and meta.matching_count (total testers matching the filters across all paginated results).
get_responses
ChatGPTGet participant survey and test responses for a project. Available for unmoderated, survey, tree test, and card sort projects. For non-card-sort projects, each answer includes page_name (the survey page title, e.g. "Page 2: Five second test follow up questions") and page_order (1-based integer matching the page number shown in the UI, e.g. 2 for "Page 2") — use these fields to filter or group answers by survey page. For tree test projects, each answer with question_type: "tree_test" contains a value object with path (breadcrumb string, e.g. "Home > Women > Shoes"), result (e.g. "Direct Success", "Indirect Success", "Direct Fail", "Indirect Fail"), duration_seconds, and duration_mm_ss. For card sort projects the response contains a categories array (with nested items) instead of an answers array, and a card_sort_type field ("open", "closed", or "hybrid"). Filter with question_id (not applicable for card sort), tester_id, or page_order (survey projects only — 422 on other types). Returns meta.returned_count (testers in this response) and meta.matching_count (total testers matching the filters across all paginated results).
get_responses
ChatGPTGet participant survey and test responses for a project. Available for unmoderated, survey, tree test, and card sort projects. For non-card-sort projects, each answer includes page_name (the survey page title, e.g. "Page 2: Five second test follow up questions") and page_order (1-based integer matching the page number shown in the UI, e.g. 2 for "Page 2") — use these fields to filter or group answers by survey page. For tree test projects, each answer with question_type: "tree_test" contains a value object with path (breadcrumb string, e.g. "Home > Women > Shoes"), result (e.g. "Direct Success", "Indirect Success", "Direct Fail", "Indirect Fail"), duration_seconds, and duration_mm_ss. For card sort projects the response contains a categories array (with nested items) instead of an answers array, and a card_sort_type field ("open", "closed", or "hybrid"). Filter with question_id (not applicable for card sort), tester_id, or page_order (survey projects only — 422 on other types). Returns meta.returned_count (testers in this response) and meta.matching_count (total testers matching the filters across all paginated results).
get_segments
ChatGPTList audience segments for a company. Each segment belongs to a project and groups participants by criteria. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_segments
ChatGPTList audience segments for a company. Each segment belongs to a project and groups participants by criteria. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_segments
ChatGPTList audience segments for a company. Each segment belongs to a project and groups participants by criteria. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_sessions
ChatGPTList test sessions (participant recordings) for a project. Only available for unmoderated and moderated projects. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_sessions
ChatGPTList test sessions (participant recordings) for a project. Only available for unmoderated and moderated projects. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_sessions
ChatGPTList test sessions (participant recordings) for a project. Only available for unmoderated and moderated projects. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_tags
ChatGPTGet tags applied to highlights and notes in a company workspace. Filter by project_id to return only tags actively used in a specific project. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_tags
ChatGPTGet tags applied to highlights and notes in a company workspace. Filter by project_id to return only tags actively used in a specific project. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_tags
ChatGPTGet tags applied to highlights and notes in a company workspace. Filter by project_id to return only tags actively used in a specific project. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_testers
ChatGPTList participants (testers) and their demographic data for a project. Available for unmoderated, moderated, survey, tree test, and card sort projects. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_testers
ChatGPTList participants (testers) and their demographic data for a project. Available for unmoderated, moderated, survey, tree test, and card sort projects. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_testers
ChatGPTList participants (testers) and their demographic data for a project. Available for unmoderated, moderated, survey, tree test, and card sort projects. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
get_transcripts
ChatGPTGet the speaker-attributed transcript for a single moderated session. Returns the tester name, a platform video URL, and an array of utterances with speaker label, start/end timestamps, and text. By default returns all utterances at once. Pass paginate=true to receive paginated results instead.
get_transcripts
ChatGPTGet the speaker-attributed transcript for a single moderated session. Returns the tester name, a platform video URL, and an array of utterances with speaker label, start/end timestamps, and text. By default returns all utterances at once. Pass paginate=true to receive paginated results instead.
get_transcripts
ChatGPTGet the speaker-attributed transcript for a single moderated session. Returns the tester name, a platform video URL, and an array of utterances with speaker label, start/end timestamps, and text. By default returns all utterances at once. Pass paginate=true to receive paginated results instead.
get_video_link
ChatGPTFind video watch links for a participant by first name, searching across all projects in the company. Returns one result per matching participant with their project context and a platform URL to watch the recording. When multiple participants share the same name, all matches are returned so the caller can disambiguate.
get_video_link
ChatGPTFind video watch links for a participant by first name, searching across all projects in the company. Returns one result per matching participant with their project context and a platform URL to watch the recording. When multiple participants share the same name, all matches are returned so the caller can disambiguate.
get_video_link
ChatGPTFind video watch links for a participant by first name, searching across all projects in the company. Returns one result per matching participant with their project context and a platform URL to watch the recording. When multiple participants share the same name, all matches are returned so the caller can disambiguate.
list_audience_templates
ChatGPTList saved audience templates for a company. Audience templates define reusable participant criteria (demographics, screener questions, device settings) — these are NOT study or question templates. Use these IDs with apply_saved_audience to pre-fill a project's screener and demographics. To browse study/question templates instead, use list_study_templates. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_audience_templates
ChatGPTList saved audience templates for a company. Audience templates define reusable participant criteria (demographics, screener questions, device settings) — these are NOT study or question templates. Use these IDs with apply_saved_audience to pre-fill a project's screener and demographics. To browse study/question templates instead, use list_study_templates. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_audience_templates
ChatGPTList saved audience templates for a company. Audience templates define reusable participant criteria (demographics, screener questions, device settings) — these are NOT study or question templates. Use these IDs with apply_saved_audience to pre-fill a project's screener and demographics. To browse study/question templates instead, use list_study_templates. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_projects
ChatGPTList research projects in a company workspace. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_projects
ChatGPTList research projects in a company workspace. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_projects
ChatGPTList research projects in a company workspace. Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_question_types
ChatGPTList the question types available when building an unmoderated study, for discovery. Only unmoderated projects are supported. Each entry returns the canonical type identifier (e.g. written, url, task, range, single_select, multiple_select), a human label, required_fields and optional_fields (name/type/description), creation_validation constraints applied when building the question, a supported flag indicating whether the type can be used through MCP today, and available_in (a version hint such as "MCP 3.0") for types not yet supported.
list_question_types
ChatGPTList the question types available when building an unmoderated study, for discovery. Only unmoderated projects are supported. Each entry returns the canonical type identifier (e.g. written, url, task, range, single_select, multiple_select), a human label, required_fields and optional_fields (name/type/description), creation_validation constraints applied when building the question, a supported flag indicating whether the type can be used through MCP today, and available_in (a version hint such as "MCP 3.0") for types not yet supported.
list_question_types
ChatGPTList the question types available when building an unmoderated study, for discovery. Only unmoderated projects are supported. Each entry returns the canonical type identifier (e.g. written, url, task, range, single_select, multiple_select), a human label, required_fields and optional_fields (name/type/description), creation_validation constraints applied when building the question, a supported flag indicating whether the type can be used through MCP today, and available_in (a version hint such as "MCP 3.0") for types not yet supported.
list_study_templates
ChatGPTList saved study templates (question templates) available to a workspace for building unmoderated studies. These templates contain pre-built question sets — they are NOT audience or screener templates. To browse audience/screener templates instead, use list_audience_templates. Only unmoderated projects are supported. Returns both workspace-owned templates and PlaybookUX-provided global templates. Each template includes id, name, description, question_count, the distinct question_types it contains, and owner (workspace or playbookux). Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_study_templates
ChatGPTList saved study templates (question templates) available to a workspace for building unmoderated studies. These templates contain pre-built question sets — they are NOT audience or screener templates. To browse audience/screener templates instead, use list_audience_templates. Only unmoderated projects are supported. Returns both workspace-owned templates and PlaybookUX-provided global templates. Each template includes id, name, description, question_count, the distinct question_types it contains, and owner (workspace or playbookux). Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_study_templates
ChatGPTList saved study templates (question templates) available to a workspace for building unmoderated studies. These templates contain pre-built question sets — they are NOT audience or screener templates. To browse audience/screener templates instead, use list_audience_templates. Only unmoderated projects are supported. Returns both workspace-owned templates and PlaybookUX-provided global templates. Each template includes id, name, description, question_count, the distinct question_types it contains, and owner (workspace or playbookux). Returns meta.returned_count (items in this response) and meta.matching_count (total items matching the filters across all paginated results).
list_workspaces
ChatGPTWorkspaces: list_workspaces - get your workspace ID (required for all other calls)
list_workspaces
ChatGPTWorkspaces: list_workspaces - get your workspace ID (required for all other calls)
list_workspaces
ChatGPTWorkspaces: list_workspaces - get your workspace ID (required for all other calls)
reorder_questions
ChatGPTReorder the questions on a draft unmoderated project. Provide question_ids in the desired order — it must be the complete current set of question ids (from get_draft_project; ids come from add_question). Returns the reordered questions. Not supported for projects that use randomization blocks (returns 422).
reorder_questions
ChatGPTReorder the questions on a draft unmoderated project. Provide question_ids in the desired order — it must be the complete current set of question ids (from get_draft_project; ids come from add_question). Returns the reordered questions. Not supported for projects that use randomization blocks (returns 422).
reorder_questions
ChatGPTReorder the questions on a draft unmoderated project. Provide question_ids in the desired order — it must be the complete current set of question ids (from get_draft_project; ids come from add_question). Returns the reordered questions. Not supported for projects that use randomization blocks (returns 422).
reorder_screeners
ChatGPTReorder the screener (qualifying) questions on an unmoderated draft project. Provide screener_ids in the desired order — it must be the complete current set of screener question ids (from get_project; ids change after each edit). Only works on unmoderated draft projects. Returns the reordered screener questions.
reorder_screeners
ChatGPTReorder the screener (qualifying) questions on an unmoderated draft project. Provide screener_ids in the desired order — it must be the complete current set of screener question ids (from get_project; ids change after each edit). Only works on unmoderated draft projects. Returns the reordered screener questions.
reorder_screeners
ChatGPTReorder the screener (qualifying) questions on an unmoderated draft project. Provide screener_ids in the desired order — it must be the complete current set of screener question ids (from get_project; ids change after each edit). Only works on unmoderated draft projects. Returns the reordered screener questions.
search_projects
ChatGPTSearch for projects by name (partial, case-insensitive). Use this to find a project UUID when you know the name but not the ID. Returns up to 100 results. meta.matching_count reports the true total — if it exceeds meta.returned_count, narrow the search.
search_projects
ChatGPTSearch for projects by name (partial, case-insensitive). Use this to find a project UUID when you know the name but not the ID. Returns up to 100 results. meta.matching_count reports the true total — if it exceeds meta.returned_count, narrow the search.
search_projects
ChatGPTSearch for projects by name (partial, case-insensitive). Use this to find a project UUID when you know the name but not the ID. Returns up to 100 results. meta.matching_count reports the true total — if it exceeds meta.returned_count, narrow the search.
search_transcripts
ChatGPTSearch transcripts across the workspace by text. Uses full-text search powered by PostgreSQL. Optionally filter by project IDs.
search_transcripts
ChatGPTSearch transcripts across the workspace by text. Uses full-text search powered by PostgreSQL. Optionally filter by project IDs.
search_transcripts
ChatGPTSearch transcripts across the workspace by text. Uses full-text search powered by PostgreSQL. Optionally filter by project IDs.
set_audience
ChatGPTConfigure the audience step of a draft project: number of testers, device, operating system, and language. Only supports unmoderated projects in draft status. Unmoderated projects allow a single device only.
set_audience
ChatGPTConfigure the audience step of a draft project: number of testers, device, operating system, and language. Only supports unmoderated projects in draft status. Unmoderated projects allow a single device only.
set_audience
ChatGPTConfigure the audience step of a draft project: number of testers, device, operating system, and language. Only supports unmoderated projects in draft status. Unmoderated projects allow a single device only.
set_demographics
ChatGPTSet demographic and employment targeting on a DRAFT project that uses the PlaybookUX tester panel. Each category is an array of valid option ids — use get_demographics to discover them. A category you provide REPLACES that category's previous selection; an empty array CLEARS it; categories you omit are left unchanged. Only works on draft projects with the PlaybookUX tester method (Recruit-Your-Own projects return an error).
set_demographics
ChatGPTSet demographic and employment targeting on a DRAFT project that uses the PlaybookUX tester panel. Each category is an array of valid option ids — use get_demographics to discover them. A category you provide REPLACES that category's previous selection; an empty array CLEARS it; categories you omit are left unchanged. Only works on draft projects with the PlaybookUX tester method (Recruit-Your-Own projects return an error).
set_demographics
ChatGPTSet demographic and employment targeting on a DRAFT project that uses the PlaybookUX tester panel. Each category is an array of valid option ids — use get_demographics to discover them. A category you provide REPLACES that category's previous selection; an empty array CLEARS it; categories you omit are left unchanged. Only works on draft projects with the PlaybookUX tester method (Recruit-Your-Own projects return an error).
set_face_recording
ChatGPTEnable or disable face recording for an unmoderated draft project. Update face recording status requires a Scale plan; The project must be in draft status.
set_face_recording
ChatGPTEnable or disable face recording for an unmoderated draft project. Update face recording status requires a Scale plan; The project must be in draft status.
set_face_recording
ChatGPTEnable or disable face recording for an unmoderated draft project. Update face recording status requires a Scale plan; The project must be in draft status.
update_question
ChatGPTUpdate a question on a draft unmoderated project — partial update (PATCH): send only the fields you want to change. Get question_id from get_draft_project or add_question. The question type CANNOT be changed (the backend returns 400); position is not changed here — use reorder_questions. For range, scale (5-10) rebuilds the rating points. For single_select/multiple_select, sending options (≥2 strings) replaces the answer choices, allow_other adds/removes the free-text "Other" choice, and randomize toggles option shuffling. For task, blur_video toggles webcam blur. Returns the updated question. Returns 404 if the question is not on the project.
update_question
ChatGPTUpdate a question on a draft unmoderated project — partial update (PATCH): send only the fields you want to change. Get question_id from get_draft_project or add_question. The question type CANNOT be changed (the backend returns 400); position is not changed here — use reorder_questions. For range, scale (5-10) rebuilds the rating points. For single_select/multiple_select, sending options (≥2 strings) replaces the answer choices, allow_other adds/removes the free-text "Other" choice, and randomize toggles option shuffling. For task, blur_video toggles webcam blur. Returns the updated question. Returns 404 if the question is not on the project.
update_question
ChatGPTUpdate a question on a draft unmoderated project — partial update (PATCH): send only the fields you want to change. Get question_id from get_draft_project or add_question. The question type CANNOT be changed (the backend returns 400); position is not changed here — use reorder_questions. For range, scale (5-10) rebuilds the rating points. For single_select/multiple_select, sending options (≥2 strings) replaces the answer choices, allow_other adds/removes the free-text "Other" choice, and randomize toggles option shuffling. For task, blur_video toggles webcam blur. Returns the updated question. Returns 404 if the question is not on the project.
update_screener
ChatGPTUpdate a screener (qualifying) question on an unmoderated draft project — full replace (PUT): send the complete new definition. Adding or removing options is done by sending the new options list. Only works on unmoderated draft projects. Get screener_id from get_project (segments[].screener_questions[].id); ids change after each screener edit, so re-fetch before chaining edits. Same option rules as add_screener_question: at least 2 options, "may_select" only for multiple_select, and at least one option must not be "disqualify". Returns the updated screener question.
update_screener
ChatGPTUpdate a screener (qualifying) question on an unmoderated draft project — full replace (PUT): send the complete new definition. Adding or removing options is done by sending the new options list. Only works on unmoderated draft projects. Get screener_id from get_project (segments[].screener_questions[].id); ids change after each screener edit, so re-fetch before chaining edits. Same option rules as add_screener_question: at least 2 options, "may_select" only for multiple_select, and at least one option must not be "disqualify". Returns the updated screener question.
update_screener
ChatGPTUpdate a screener (qualifying) question on an unmoderated draft project — full replace (PUT): send the complete new definition. Adding or removing options is done by sending the new options list. Only works on unmoderated draft projects. Get screener_id from get_project (segments[].screener_questions[].id); ids change after each screener edit, so re-fetch before chaining edits. Same option rules as add_screener_question: at least 2 options, "may_select" only for multiple_select, and at least one option must not be "disqualify". Returns the updated screener question.
validate_draft
ChatGPTValidate whether a draft project has everything required for launch, mirroring the checks the PlaybookUX UI runs on its Summary step. The MCP cannot launch projects, so use this as a pre-flight check before handing the draft to a teammate to review and submit in the UI. Only supports unmoderated projects in draft status. The result is nested under a data envelope: data.valid (boolean), data.errors (array of { step, field, message }, where step is the wizard step the issue belongs to: "details", "audience", "build-study", or "summary"), and data.warnings (array, reserved for non-blocking issues). A "summary"/"payment" error means the project needs payment but no payment method is on file (or it could not be verified); resolve payment in the UI. When data.valid is true the draft is ready for hand-off.
validate_draft
ChatGPTValidate whether a draft project has everything required for launch, mirroring the checks the PlaybookUX UI runs on its Summary step. The MCP cannot launch projects, so use this as a pre-flight check before handing the draft to a teammate to review and submit in the UI. Only supports unmoderated projects in draft status. The result is nested under a data envelope: data.valid (boolean), data.errors (array of { step, field, message }, where step is the wizard step the issue belongs to: "details", "audience", "build-study", or "summary"), and data.warnings (array, reserved for non-blocking issues). A "summary"/"payment" error means the project needs payment but no payment method is on file (or it could not be verified); resolve payment in the UI. When data.valid is true the draft is ready for hand-off.
validate_draft
ChatGPTValidate whether a draft project has everything required for launch, mirroring the checks the PlaybookUX UI runs on its Summary step. The MCP cannot launch projects, so use this as a pre-flight check before handing the draft to a teammate to review and submit in the UI. Only supports unmoderated projects in draft status. The result is nested under a data envelope: data.valid (boolean), data.errors (array of { step, field, message }, where step is the wizard step the issue belongs to: "details", "audience", "build-study", or "summary"), and data.warnings (array, reserved for non-blocking issues). A "summary"/"payment" error means the project needs payment but no payment method is on file (or it could not be verified); resolve payment in the UI. When data.valid is true the draft is ready for hand-off.