Start a GitHub pull request’s change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as POST /chat/change-review.
The agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send POST /chat/change-review with applicationOverrides for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there.
Does nothing if the head commit already has a review in the conversation. Poll get_chat_conversation until its status is completed, failed, or cancelled; a prepared conversation completes once the tests are created.
Force a brand-new chat instead of reusing the pull request's existing review conversation. Defaults to false, so repeated reviews of the same PR share one chat unless that chat is archived.
Optional post-merge options for this PR. Stored on the review conversation and applied when the PR merges. Overrides GitHub App integration settings for this PR only.
Optional PR triage options for this review. GitHub pull requests only. Overrides the GitHub App integration PR triage toggle and prompt for this review.
Target a specific project by its prefixed short ID (proj-slug_shortId or proj_shortId), as returned by the projects API. Required for organization-scoped API keys; project-scoped keys may only pass their own project's short ID.
Pattern: ^proj(-.+_.+|_.+)$
Response
202 - application/json
The request has been accepted for processing, but processing has not yet completed.
Conversation data with recent messages (newest first).
Overall conversation lifecycle. in_progress while the assistant is working or a background test run / research task is still going. Assistant message COMPLETED is not enough — starting a run ends the current turn. Poll until this is completed, failed, or cancelled.
Test runs started from this conversation, newest first. Empty until a run is created. Use shortId with get_run (testCases = all) or nested test-case short IDs from that call with get_run_test_case.
Where the conversation originated. api for conversations created via this API, ui for the dashboard, github/gitlab for VCS-triggered chats, and system for everything else.
Recent messages, newest first. Empty on creation; poll get_chat_conversation to retrieve. Internal wake messages are omitted.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"QA.tech Docs","colors":{"primary":"#4F46E5","light":"#F672AB","dark":"#4F46E5"},"logo":{"light":"https://mintcdn.com/qatech/tn7srSYA67gRWgfI/logo/logo.svg?fit=max\u0026auto=format\u0026n=tn7srSYA67gRWgfI\u0026q=85\u0026s=2f0e3745a8079e74e66e0a904232888f","dark":"https://mintcdn.com/qatech/tn7srSYA67gRWgfI/logo/dark.svg?fit=max\u0026auto=format\u0026n=tn7srSYA67gRWgfI\u0026q=85\u0026s=8c39f071bcebaa8ec3c9b73c4e34faac","href":"https://docs.qa.tech"},"favicon":"https://mintcdn.com/qatech/tn7srSYA67gRWgfI/favicon.svg?fit=max\u0026auto=format\u0026n=tn7srSYA67gRWgfI\u0026q=85\u0026s=b34d80ecef9cd5e082545308e406134f","navbar":{"links":[{"href":"https://qa.tech/contact","label":"Support"}],"primary":{"type":"button","label":"Get Started","href":"https://qa.tech/demo"}},"footer":{"socials":{"x":"https://x.com/getqatech","github":"https://github.com/qAdottech","linkedin":"https://www.linkedin.com/company/qa-tech-ai"}},"seo":{"metatags":{"canonical":"https://docs.qa.tech"}},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://qa.tech/blog/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"qatech","hasAudioNarration":false,"actualSubdomain":"qatech","customDomains":["docs.qa.tech"],"gitSource":{"type":"github","owner":"qadottech","repo":"qatech","deployBranch":"live","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae24e800eb4397cd026a309","collectionId":"13591c6f-f0b1-46c5-862c-8473884fccb2","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae24e800eb4397cd026a309"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae24e800eb4397cd026a309","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API and CLI","count":71},{"language":"default","tag":"Endpoints","count":55},{"language":"default","tag":"Build Tests","count":30},{"language":"default","tag":"Get Started","count":26},{"language":"default","tag":"Regression Testing","count":26},{"language":"default","tag":"Agents","count":15},{"language":"default","tag":"Integrations","count":15},{"language":"default","tag":"PR Testing","count":13},{"language":"default","tag":"Runs","count":12},{"language":"default","tag":"Choose your CI","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableAskAiSearchBar":false},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"a[href='/integrations/mcp']>svg{-webkit-mask-image:url(/images/mcp-logo.svg)!important;mask-image:url(/images/mcp-logo.svg)!important}"}],"page":{"pagePath":"api-reference/chat/prepare-change-review","slug":"/api-reference/chat/prepare-change-review","pageMetadata":{"title":"Prepare change review","description":"Start a GitHub pull request's change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as `POST /chat/change-review`.\n\nThe agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send `POST /chat/change-review` with `applicationOverrides` for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there.\n\nDoes nothing if the head commit already has a review in the conversation. Poll `get_chat_conversation` until its `status` is `completed`, `failed`, or `cancelled`; a prepared conversation completes once the tests are created.","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/chat/change-review/prepare","href":"/api-reference/chat/prepare-change-review","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Start a GitHub pull request’s change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as \", _jsx(_components.code, {\n children: \"POST /chat/change-review\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send \", _jsx(_components.code, {\n children: \"POST /chat/change-review\"\n }), \" with \", _jsx(_components.code, {\n children: \"applicationOverrides\"\n }), \" for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Does nothing if the head commit already has a review in the conversation. Poll \", _jsx(_components.code, {\n children: \"get_chat_conversation\"\n }), \" until its \", _jsx(_components.code, {\n children: \"status\"\n }), \" is \", _jsx(_components.code, {\n children: \"completed\"\n }), \", \", _jsx(_components.code, {\n children: \"failed\"\n }), \", or \", _jsx(_components.code, {\n children: \"cancelled\"\n }), \"; a prepared conversation completes once the tests are created.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Prepare change review","description":"Start a GitHub pull request's change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as `POST /chat/change-review`.\n\nThe agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send `POST /chat/change-review` with `applicationOverrides` for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there.\n\nDoes nothing if the head commit already has a review in the conversation. Poll `get_chat_conversation` until its `status` is `completed`, `failed`, or `cancelled`; a prepared conversation completes once the tests are created.","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/chat/change-review/prepare","href":"/api-reference/chat/prepare-change-review","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"PrepareChangeReviewChat","summary":"Prepare change review","description":"Start a GitHub pull request's change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as `POST /chat/change-review`.\n\nThe agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send `POST /chat/change-review` with `applicationOverrides` for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there.\n\nDoes nothing if the head commit already has a review in the conversation. Poll `get_chat_conversation` until its `status` is `completed`, `failed`, or `cancelled`; a prepared conversation completes once the tests are created.","parameters":[],"responses":{"202":"500deea6-9d88-4992-acda-8d1e4952daaf"},"tags":["Chat"],"requestBody":"26af141c-8906-4649-9b2b-6b9694d8fa70","method":"post","type":"path","servers":["6b618bdc-6437-42b4-8078-3d430bcddcae"],"security":["00eb4d04-5e7b-4c87-896f-c94dab27b7a2"],"path":"/v1/chat/change-review/prepare","baseUrlOptions":["https://api.qa.tech"],"title":"Prepare change review","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["prUrl"],"properties":{"prUrl":{"type":"string","format":"uri","isRequired":true,"uniqueKey":"prUrl","typeLabel":"string\u003curi>"},"context":{"type":"string","uniqueKey":"context","typeLabel":"string"},"forceNewConversation":{"type":"boolean","description":"Force a brand-new chat instead of reusing the pull request's existing review conversation. Defaults to false, so repeated reviews of the same PR share one chat unless that chat is archived.","default":false,"uniqueKey":"forceNewConversation","typeLabel":"boolean"},"postMerge":{"type":"object","description":"Optional post-merge options for this PR. Stored on the review conversation and applied when the PR merges. Overrides GitHub App integration settings for this PR only.","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"When true, run the post-merge agent after this PR merges. When false, skip it even if the GitHub App integration has it enabled.","isRequired":true,"uniqueKey":"postMerge.enabled","typeLabel":"boolean"},"prompt":{"type":"string","maxLength":4000,"description":"Goal for the post-merge agent. This prompt is the entire task — the agent only changes tests when the prompt asks it to. Omit or leave empty to use the default maintenance prompt.","uniqueKey":"postMerge.prompt","typeLabel":"string"}},"uniqueKey":"postMerge","typeLabel":"object"},"triage":{"type":"object","description":"Optional PR triage options for this review. GitHub pull requests only. Overrides the GitHub App integration PR triage toggle and prompt for this review.","properties":{"enabled":{"type":"boolean","description":"When true, triage may skip this review even if the GitHub App integration has PR triage off. When false, never skip this review, including a commit triage already skipped. Omit to follow the integration toggle.","uniqueKey":"triage.enabled","typeLabel":"boolean"},"prompt":{"type":"string","maxLength":4000,"description":"PR triage prompt for this review, replacing the GitHub App integration prompt. Describes which changes to skip and which to review. Does not turn triage on by itself. Omit or leave empty to use the integration prompt.","uniqueKey":"triage.prompt","typeLabel":"string"}},"uniqueKey":"triage","typeLabel":"object"},"actor":{"type":"string","description":"Username that triggered the CI job. Example: `octocat`.","uniqueKey":"actor","typeLabel":"string"},"branch":{"type":"string","description":"Branch the run was triggered from. Example: `main` or `refs/heads/main`.","uniqueKey":"branch","typeLabel":"string"},"commitHash":{"type":"string","description":"Full commit SHA the run was triggered for. Used to link the run back to the commit.","uniqueKey":"commitHash","typeLabel":"string"},"commitMessage":{"type":"string","description":"Commit message subject for the triggering commit.","uniqueKey":"commitMessage","typeLabel":"string"},"repository":{"type":"string","description":"Repository the run was triggered from, as `owner/name`. Example: `QAdottech/qatech`.","uniqueKey":"repository","typeLabel":"string"},"projectShortId":{"type":"string","description":"Target a specific project by its prefixed short ID (proj-slug_shortId or proj_shortId), as returned by the projects API. Required for organization-scoped API keys; project-scoped keys may only pass their own project's short ID.","pattern":"^proj(-.+_.+|_.+)$","uniqueKey":"projectShortId","typeLabel":"string"}},"description":"Prepare a change review for a GitHub pull request before its preview is deployed","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"prUrl":"\u003cstring>","context":"\u003cstring>","forceNewConversation":false,"triage":{"enabled":true,"prompt":"\u003cstring>"},"actor":"\u003cstring>","branch":"\u003cstring>","commitHash":"\u003cstring>","commitMessage":"\u003cstring>","repository":"\u003cstring>","projectShortId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"500deea6-9d88-4992-acda-8d1e4952daaf":{"description":"The request has been accepted for processing, but processing has not yet completed.","content":{"application/json":{"schema":{"type":"object","required":["shortId","url","createdAt","updatedAt","status","runs"],"properties":{"shortId":{"type":"string","pattern":"^chat(-.+_.+|_.+)$","isRequired":true,"uniqueKey":"shortId","typeLabel":"string"},"url":{"type":"string","description":"Dashboard URL for the conversation.","isRequired":true,"uniqueKey":"url","typeLabel":"string"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"status":{"type":"string","enum":["in_progress","completed","failed","cancelled"],"description":"Overall conversation lifecycle. `in_progress` while the assistant is working or a background test run / research task is still going. Assistant message `COMPLETED` is not enough — starting a run ends the current turn. Poll until this is `completed`, `failed`, or `cancelled`.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"runs":{"type":"array","items":{"type":"object","required":["shortId","status","result","url"],"properties":{"shortId":{"type":"string","isRequired":true,"uniqueKey":"runs.items.[INDEX].shortId","typeLabel":"string"},"status":{"type":"string","description":"Run lifecycle status: `INITIATED`, `RUNNING`, `COMPLETED`, `ERROR`, or `CANCELLED`.","isRequired":true,"uniqueKey":"runs.items.[INDEX].status","typeLabel":"string"},"result":{"oneOf":[{"type":"string","description":"Run outcome once complete: `PASSED`, `FAILED`, or `SKIPPED`. `null` while the run is still in progress.","isRequired":true,"uniqueKey":"runs.items.[INDEX].result.oneOf.0","typeLabel":"string"},{"type":"null","description":"Run outcome once complete: `PASSED`, `FAILED`, or `SKIPPED`. `null` while the run is still in progress.","isRequired":true,"uniqueKey":"runs.items.[INDEX].result.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"runs.items.[INDEX].result","typeLabel":"string | null"},"url":{"type":"string","description":"Dashboard URL for the run.","isRequired":true,"uniqueKey":"runs.items.[INDEX].url","typeLabel":"string"}},"description":"A test run started from this conversation. `shortId` works with `get_run` and `rerun_run`.","uniqueKey":"runs.items.[INDEX]","typeLabel":"object"},"description":"Test runs started from this conversation, newest first. Empty until a run is created. Use `shortId` with `get_run` (`testCases` = all) or nested test-case short IDs from that call with `get_run_test_case`.","isRequired":true,"uniqueKey":"runs","typeLabel":"object[]"},"title":{"type":"string","uniqueKey":"title","typeLabel":"string"},"source":{"type":"string","enum":["api","ui","github","gitlab","system"],"description":"Where the conversation originated. `api` for conversations created via this API, `ui` for the dashboard, `github`/`gitlab` for VCS-triggered chats, and `system` for everything else.","uniqueKey":"source","typeLabel":"enum\u003cstring>"},"messages":{"type":"array","items":{"type":"object","required":["id","role","createdAt","text"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"messages.items.[INDEX].id","typeLabel":"string"},"role":{"type":"string","enum":["user","assistant"],"isRequired":true,"uniqueKey":"messages.items.[INDEX].role","typeLabel":"enum\u003cstring>"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"messages.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"text":{"type":"string","description":"The plain-text body of the message.","isRequired":true,"uniqueKey":"messages.items.[INDEX].text","typeLabel":"string"},"status":{"type":"string","enum":["INITIATED","PARTIAL","COMPLETED","CANCELLED","FAILED"],"description":"Lifecycle status of this message. Do not treat assistant `COMPLETED` as the end of the conversation — starting a test run ends the current turn while the run continues in the background. Poll the conversation `status` instead.","uniqueKey":"messages.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"isStreaming":{"type":"boolean","description":"True while the assistant is still streaming tokens for this message.","uniqueKey":"messages.items.[INDEX].isStreaming","typeLabel":"boolean"}},"description":"A chat message. Tool calls and reasoning are not exposed in this version; only the text response is returned.","uniqueKey":"messages.items.[INDEX]","typeLabel":"object"},"description":"Recent messages, newest first. Empty on creation; poll `get_chat_conversation` to retrieve. Internal wake messages are omitted.","uniqueKey":"messages","typeLabel":"object[]"}},"description":"Conversation data with recent messages (newest first).","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"shortId":"\u003cstring>","url":"\u003cstring>","createdAt":"2023-11-07T05:31:56Z","updatedAt":"2023-11-07T05:31:56Z","status":"in_progress","runs":[{"shortId":"\u003cstring>","status":"\u003cstring>","result":"\u003cstring>","url":"\u003cstring>"}],"title":"\u003cstring>","source":"api","messages":[{"id":"\u003cstring>","role":"user","createdAt":"2023-11-07T05:31:56Z","text":"\u003cstring>","status":"INITIATED","isStreaming":true}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"00eb4d04-5e7b-4c87-896f-c94dab27b7a2":{"BearerAuth":{"type":"http","scheme":"Bearer","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"6b618bdc-6437-42b4-8078-3d430bcddcae":{"url":"https://api.qa.tech","description":"Production","variables":{}}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"Bearer","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"api-reference/api.json"},"subdomain":"qatech","siteName":"QA.tech Docs","title":"Prepare change review - QA.tech Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T19:35:37.818Z","originalFileLocation":"api-reference/chat/prepare-change-review.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Start a GitHub pull request\u0026#x27;s change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as POST /chat/change-review. The agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send POST /chat/change-review with applicationOverrides for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there. Does nothing if the head commit already has a review in the conversation. Poll get_chat_conversation until its status is completed, failed, or cancelled; a prepared conversation completes once the tests are created.\">\u003cmeta data-mint-head name=\"application-name\" content=\"QA.tech Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Prepare change review - QA.tech Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Start a GitHub pull request\u0026#x27;s change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as POST /chat/change-review. The agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send POST /chat/change-review with applicationOverrides for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there. Does nothing if the head commit already has a review in the conversation. Poll get_chat_conversation until its status is completed, failed, or cancelled; a prepared conversation completes once the tests are created.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"QA.tech Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.qa.tech/api-reference/chat/prepare-change-review\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://qatech.mintlify.app/_mintlify/api/og/v2?division=Chat\u0026amp;title=Prepare+change+review\u0026amp;description=Start+a+GitHub+pull+request%27s+change+review+before+its+preview+is+deployed.+Call+it+when+the+PR+opens+or+gets+a+new+commit.+Returns+202+with+the+review+conversa\u0026amp;theme=1ae391f617cb8a464ae673d4\u0026amp;signature=0607f151fda4ef3d9e605d08ba039588fed0e7068d0c219a6b407bb21bdecdec\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Prepare change review - QA.tech Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Start a GitHub pull request\u0026#x27;s change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as POST /chat/change-review. The agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send POST /chat/change-review with applicationOverrides for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there. Does nothing if the head commit already has a review in the conversation. Poll get_chat_conversation until its status is completed, failed, or cancelled; a prepared conversation completes once the tests are created.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qatech.mintlify.app/_mintlify/api/og/v2?division=Chat\u0026amp;title=Prepare+change+review\u0026amp;description=Start+a+GitHub+pull+request%27s+change+review+before+its+preview+is+deployed.+Call+it+when+the+PR+opens+or+gets+a+new+commit.+Returns+202+with+the+review+conversa\u0026amp;theme=1ae391f617cb8a464ae673d4\u0026amp;signature=0607f151fda4ef3d9e605d08ba039588fed0e7068d0c219a6b407bb21bdecdec\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/qatech/iMlZaRlMvi7xyIQO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"QA.tech Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4F46E5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.qa.tech/api-reference/chat/prepare-change-review\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/chat/prepare-change-review.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.qa.tech/#organization\",\"name\":\"QA.tech Docs\",\"url\":\"https://docs.qa.tech\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/qatech/tn7srSYA67gRWgfI/logo/logo.svg?fit=max\u0026auto=format\u0026n=tn7srSYA67gRWgfI\u0026q=85\u0026s=2f0e3745a8079e74e66e0a904232888f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.qa.tech#website\",\"name\":\"QA.tech Docs\",\"url\":\"https://docs.qa.tech\",\"publisher\":{\"@id\":\"https://docs.qa.tech/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review#webpage\",\"url\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review\",\"name\":\"Prepare change review\",\"description\":\"Start a GitHub pull request's change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as POST /chat/change-review. The agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send POST /chat/change-review with applicationOverrides for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there. Does nothing if the head commit already has a review in the conversation. Poll get_chat_conversation until its status is completed, failed, or cancelled; a prepared conversation completes once the tests are created.\",\"dateModified\":\"2026-10-28T19:35:37.818Z\",\"isPartOf\":{\"@id\":\"https://docs.qa.tech#website\"},\"breadcrumb\":{\"@id\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.qa.tech/api-reference/applications/list-applications\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chat\",\"item\":\"https://docs.qa.tech/api-reference/chat/start-chat-conversation\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Prepare change review\",\"item\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review#apireference\",\"headline\":\"Prepare change review\",\"name\":\"Prepare change review\",\"description\":\"Start a GitHub pull request's change review before its preview is deployed. Call it when the PR opens or gets a new commit. Returns 202 with the review conversation, reused the same way as POST /chat/change-review. The agent reads the change and creates the tests it plans to run, without running them. Once the preview is deployed, send POST /chat/change-review with applicationOverrides for the same head commit: QA.tech treats it as the deployment being ready, and the waiting review runs its tests there. Does nothing if the head commit already has a review in the conversation. Poll get_chat_conversation until its status is completed, failed, or cancelled; a prepared conversation completes once the tests are created.\",\"url\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review\",\"mainEntityOfPage\":{\"@id\":\"https://docs.qa.tech/api-reference/chat/prepare-change-review#webpage\"},\"dateModified\":\"2026-10-28T19:35:37.818Z\",\"publisher\":{\"@id\":\"https://docs.qa.tech/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.qa.tech#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"QA.tech Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"QA.tech Docs","nav":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://qa.tech/blog/"}]},"tabs":[{"tab":"Get Started","icon":"book-open","pages":[{"title":"Get Started","href":"/core-concepts/ai-agent-testing"}]},{"tab":"AI Assistant","icon":"message-bot","pages":[{"title":"AI Assistant","href":"/core-concepts/ai-chat-assistant"}]},{"tab":"Build Tests","icon":"list-check","pages":[{"title":"Build Tests","href":"/best-practices/creating-tests"}]},{"tab":"PR Testing","icon":"code-pull-request","pages":[{"title":"PR Testing","href":"/pr-testing/overview"}]},{"tab":"Regression Testing","icon":"clipboard-list","pages":[{"title":"Regression Testing","href":"/regression-testing/overview"}]},{"tab":"Integrations","icon":"plug","pages":[{"title":"Integrations","href":"/configuration/github-app"}]},{"tab":"API and CLI","icon":"square-terminal","groups":[{"group":"Overview","pages":[{"title":"API Introduction","icon":"code","href":"/api-reference/introduction"},{"title":"Applications API","icon":"browser","href":"/api-reference/applications"},{"title":"Application Builds API","icon":"mobile","href":"/api-reference/application-builds"},{"title":"Chat API","icon":"message-bot","href":"/api-reference/chat"},{"title":"Remote Tunnels API","icon":"link","href":"/api-reference/remote-tunnels"},{"title":"Exporting Test Cases","icon":"file-export","href":"/api-reference/exporting-test-cases"}]},{"group":"Endpoints","pages":[{"group":"Applications","pages":[{"title":"List applications","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/applications","href":"/api-reference/applications/list-applications"},{"title":"List application environments","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/applications/{applicationShortId}/environments","href":"/api-reference/applications/list-application-environments"}]},{"group":"Application Builds","pages":[{"title":"List application builds","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/applications/{applicationShortId}/builds","href":"/api-reference/application-builds/list-application-builds"},{"title":"Create application build","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/applications/{applicationShortId}/builds","href":"/api-reference/application-builds/create-application-build"},{"title":"Get build upload URL","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/applications/{applicationShortId}/builds/upload-url","href":"/api-reference/application-builds/get-build-upload-url"}]},{"group":"Automations","pages":[{"title":"List automations","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/automations","href":"/api-reference/automations/list-automations"},{"title":"Create automation","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/automations","href":"/api-reference/automations/create-automation"},{"title":"Delete automation","deprecated":null,"version":null,"openapi":"/api-reference/api.json delete /v1/automations/{automationId}","href":"/api-reference/automations/delete-automation"},{"title":"Update automation","deprecated":null,"version":null,"openapi":"/api-reference/api.json patch /v1/automations/{automationId}","href":"/api-reference/automations/update-automation"},{"title":"Trigger automation","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/automations/{automationId}/trigger","href":"/api-reference/automations/trigger-automation"}]},{"group":"Status badge","pages":[{"title":"Get example status badge","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/badge-example.svg","href":"/api-reference/status-badge/get-example-status-badge"},{"title":"Get status badge","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/badge.svg","href":"/api-reference/status-badge/get-status-badge"}]},{"group":"Chat","pages":[{"title":"Start chat conversation","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/chat","href":"/api-reference/chat/start-chat-conversation"},{"title":"Start change review chat","description":"Start an autonomous change review from either a PR URL or raw change input. Returns 202 with the review conversation.\n\nPR mode reuses the pull request's existing review conversation unless `forceNewConversation` is true or that conversation is archived.\n\nFor a GitHub pull request's head commit:\n- If a `POST /chat/change-review/prepare` request left a review waiting, this request runs its tests against `applicationOverrides` in the same conversation, with this request's `context`.\n- Otherwise it runs a full review.\n- If PR triage skipped the commit, it does nothing unless it sends `triage.enabled: false` or a review was requested with `@qa.tech`.\n\nIn every case the response is the review conversation. Poll `get_chat_conversation` until its `status` is `completed`, `failed`, or `cancelled`.","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/chat/change-review","href":"/api-reference/chat/start-change-review-chat"},{"title":"Prepare change review","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/chat/change-review/prepare","href":"/api-reference/chat/prepare-change-review"},{"title":"Get chat conversation","description":"Get conversation metadata, associated test runs, and recent messages (newest first).\n\nUse `limit` to control how many messages are returned (default 20). Poll until\nconversation `status` is `completed`, `failed`, or `cancelled` — not merely until the\nlatest assistant message is `COMPLETED`, because starting a test run ends that turn\nwhile the run continues in the background. `runs` lists any test runs started from\nthis chat; pass `shortId` to `get_run` (with `testCases: \"all\"`) for browser results.","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/chat/{chatConversationShortId}","href":"/api-reference/chat/get-chat-conversation"},{"title":"Send chat message","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/chat/{chatConversationShortId}","href":"/api-reference/chat/send-chat-message"}]},{"group":"Features","pages":[{"title":"List features","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/features","href":"/api-reference/features/list-features"},{"title":"Get feature","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/features/{featureId}","href":"/api-reference/features/get-feature"}]},{"group":"Issues","pages":[{"title":"List issues","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/issues","href":"/api-reference/issues/list-issues"},{"title":"Get issue","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/issues/{shortId}","href":"/api-reference/issues/get-issue"}]},{"group":"Knowledge","pages":[{"title":"List knowledge items","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/knowledge","href":"/api-reference/knowledge/list-knowledge-items"},{"title":"Create knowledge item","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/knowledge","href":"/api-reference/knowledge/create-knowledge-item"},{"title":"Get knowledge item","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/knowledge/{knowledgeItemId}","href":"/api-reference/knowledge/get-knowledge-item"},{"title":"Delete knowledge item","deprecated":null,"version":null,"openapi":"/api-reference/api.json delete /v1/knowledge/{knowledgeItemId}","href":"/api-reference/knowledge/delete-knowledge-item"},{"title":"Update knowledge item","deprecated":null,"version":null,"openapi":"/api-reference/api.json patch /v1/knowledge/{knowledgeItemId}","href":"/api-reference/knowledge/update-knowledge-item"}]},{"group":"Metrics","pages":[{"title":"Get project metrics","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/metrics","href":"/api-reference/metrics/get-project-metrics"}]},{"group":"Infrastructure","pages":[{"title":"Get outbound IPs","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/outbound-ips","href":"/api-reference/infrastructure/get-outbound-ips"}]},{"group":"Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/projects","href":"/api-reference/projects/list-projects"},{"title":"Create project","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/projects","href":"/api-reference/projects/create-project"}]},{"group":"Remote Tunnels","pages":[{"title":"List remote tunnels","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/remote-tunnels","href":"/api-reference/remote-tunnels/list-remote-tunnels"},{"title":"Create remote tunnel","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/remote-tunnels","href":"/api-reference/remote-tunnels/create-remote-tunnel"},{"title":"Get remote tunnel","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/remote-tunnels/{runnerId}","href":"/api-reference/remote-tunnels/get-remote-tunnel"},{"title":"Delete remote tunnel","deprecated":null,"version":null,"openapi":"/api-reference/api.json delete /v1/remote-tunnels/{runnerId}","href":"/api-reference/remote-tunnels/delete-remote-tunnel"},{"title":"Get remote tunnel status","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/remote-tunnels/{runnerId}/status","href":"/api-reference/remote-tunnels/get-remote-tunnel-status"}]},{"group":"Rules","pages":[{"title":"List rules","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/rules","href":"/api-reference/rules/list-rules"},{"title":"Create rule","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/rules","href":"/api-reference/rules/create-rule"},{"title":"Delete rule","deprecated":null,"version":null,"openapi":"/api-reference/api.json delete /v1/rules/{ruleId}","href":"/api-reference/rules/delete-rule"},{"title":"Update rule","deprecated":null,"version":null,"openapi":"/api-reference/api.json patch /v1/rules/{ruleId}","href":"/api-reference/rules/update-rule"}]},{"group":"Runs","pages":[{"title":"List runs","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run","href":"/api-reference/runs/list-runs"},{"title":"Start test run","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/run","href":"/api-reference/runs/start-test-run"},{"title":"Get run test case","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run-test-case/{shortId}","href":"/api-reference/runs/get-run-test-case"},{"title":"Get test case history","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run-test-case/{shortId}/history","href":"/api-reference/runs/get-test-case-history"},{"title":"Get run test case logs","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run-test-case/{shortId}/logs","href":"/api-reference/runs/get-run-test-case-logs"},{"title":"Get run test case screenshots","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run-test-case/{shortId}/screenshots","href":"/api-reference/runs/get-run-test-case-screenshots"},{"title":"Get run test case trace","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run-test-case/{shortId}/trace","href":"/api-reference/runs/get-run-test-case-trace"},{"title":"Get run","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run/{shortId}","href":"/api-reference/runs/get-run"},{"title":"Rerun run","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/run/{shortId}","href":"/api-reference/runs/rerun-run"},{"title":"Get run issues","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/run/{shortId}/issues","href":"/api-reference/runs/get-run-issues"},{"title":"Export run test record","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/runs/{runShortId}/exports","href":"/api-reference/runs/export-run-test-record"},{"title":"Get run export","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/runs/{runShortId}/exports/{exportId}","href":"/api-reference/runs/get-run-export"}]},{"group":"Test Cases","pages":[{"title":"List test cases","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/test-cases","href":"/api-reference/test-cases/list-test-cases"},{"title":"Create test case","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/test-cases","href":"/api-reference/test-cases/create-test-case"},{"title":"Get test case","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/test-cases/{id}","href":"/api-reference/test-cases/get-test-case"},{"title":"Update test case","deprecated":null,"version":null,"openapi":"/api-reference/api.json patch /v1/test-cases/{id}","href":"/api-reference/test-cases/update-test-case"}]}]},{"group":"CLI","pages":[{"title":"CLI Overview","icon":"terminal","href":"/cli/overview"},{"group":"Commands","expanded":true,"pages":[{"title":"qatech configure","icon":"gear","href":"/cli/commands/configure"},{"title":"qatech test-cases","icon":"list-check","href":"/cli/commands/test-cases"},{"title":"qatech applications","icon":"cube","href":"/cli/commands/applications"},{"title":"qatech environments","icon":"cubes","href":"/cli/commands/environments"},{"title":"qatech run","icon":"play","href":"/cli/commands/run"},{"title":"qatech status","icon":"circle-check","href":"/cli/commands/status"},{"title":"qatech chat","icon":"comment","href":"/cli/commands/chat"},{"title":"qatech tunnel","icon":"link","href":"/cli/commands/tunnel"},{"title":"qatech init","icon":"wand-magic-sparkles","href":"/cli/commands/init"}]}]}]}]},"title":"Prepare change review - QA.tech Docs","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}