Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application’s default environment, or against environment when given (e.g. a preview deployment or remote tunnel URL).
IMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have:
Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume.
A goal describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness.
An expectedResult stating a UI-observable outcome a user can see on screen.
Prerequisites in place: a login/auth dependency via resumeFromDependencyProjectTestCaseId when the flow needs authentication, plus the right configShortIds.
Checked existing tests with list_test_cases to avoid duplicates.
If you have not gathered this context, prefer create_chat instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.
Environment of applicationShortId to run the initial burn-in against (e.g. a preview URL or remote tunnel URL). Omit to use the application's default environment. Optional customHeaders and basicAuth persist auth or protection-bypass rules on the environment.
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.
{"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":"6aea09539e45d74e232ec9a0","collectionId":"81d97f46-80fe-4be9-8ae1-3784b90c93a1","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea09539e45d74e232ec9a0"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aea0e2498ee2cfbfea9491f","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"API and CLI","count":75},{"language":"default","tag":"Endpoints","count":59},{"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":"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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"turbopuffer-dual-write","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},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","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/test-cases/create-test-case","slug":"/api-reference/test-cases/create-test-case","pageMetadata":{"title":"Create test case","description":"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application's default environment, or against `environment` when given (e.g. a preview deployment or remote tunnel URL).\n\nIMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have:\n- Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume.\n- A `goal` describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness.\n- An `expectedResult` stating a UI-observable outcome a user can see on screen.\n- Prerequisites in place: a login/auth dependency via `resumeFromDependencyProjectTestCaseId` when the flow needs authentication, plus the right `configShortIds`.\n- Checked existing tests with `list_test_cases` to avoid duplicates.\n\nIf you have not gathered this context, prefer `create_chat` instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/test-cases","href":"/api-reference/test-cases/create-test-case","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 li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application’s default environment, or against \", _jsx(_components.code, {\n children: \"environment\"\n }), \" when given (e.g. a preview deployment or remote tunnel URL).\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"IMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have:\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume.\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"A \", _jsx(_components.code, {\n children: \"goal\"\n }), \" describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"An \", _jsx(_components.code, {\n children: \"expectedResult\"\n }), \" stating a UI-observable outcome a user can see on screen.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Prerequisites in place: a login/auth dependency via \", _jsx(_components.code, {\n children: \"resumeFromDependencyProjectTestCaseId\"\n }), \" when the flow needs authentication, plus the right \", _jsx(_components.code, {\n children: \"configShortIds\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"Checked existing tests with \", _jsx(_components.code, {\n children: \"list_test_cases\"\n }), \" to avoid duplicates.\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"If you have not gathered this context, prefer \", _jsx(_components.code, {\n children: \"create_chat\"\n }), \" instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.\"]\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":"Create test case","description":"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application's default environment, or against `environment` when given (e.g. a preview deployment or remote tunnel URL).\n\nIMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have:\n- Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume.\n- A `goal` describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness.\n- An `expectedResult` stating a UI-observable outcome a user can see on screen.\n- Prerequisites in place: a login/auth dependency via `resumeFromDependencyProjectTestCaseId` when the flow needs authentication, plus the right `configShortIds`.\n- Checked existing tests with `list_test_cases` to avoid duplicates.\n\nIf you have not gathered this context, prefer `create_chat` instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/test-cases","href":"/api-reference/test-cases/create-test-case","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"CreateTestCase","summary":"Create test case","description":"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application's default environment, or against `environment` when given (e.g. a preview deployment or remote tunnel URL).\n\nIMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have:\n- Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume.\n- A `goal` describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness.\n- An `expectedResult` stating a UI-observable outcome a user can see on screen.\n- Prerequisites in place: a login/auth dependency via `resumeFromDependencyProjectTestCaseId` when the flow needs authentication, plus the right `configShortIds`.\n- Checked existing tests with `list_test_cases` to avoid duplicates.\n\nIf you have not gathered this context, prefer `create_chat` instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.","parameters":[],"responses":{"200":"773f47c0-96b6-4790-a187-52bf889c3efd"},"tags":["Test Cases"],"requestBody":"6cb35dcf-5ab9-455a-9098-051b92aeeb18","method":"post","type":"path","servers":["a880be0e-b5c6-411f-a895-570b0d510bb2"],"security":["de0efc7c-c420-4438-ac20-eb06aa8fc434"],"path":"/v1/test-cases","baseUrlOptions":["https://api.qa.tech"],"title":"Create test case","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","goal","applicationShortId"],"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"goal":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"goal","typeLabel":"string"},"applicationShortId":{"type":"string","pattern":"^app(-.+_.+|_.+)$","isRequired":true,"uniqueKey":"applicationShortId","typeLabel":"string"},"expectedResult":{"type":"string","uniqueKey":"expectedResult","typeLabel":"string"},"resumeFromDependencyProjectTestCaseId":{"type":"string","uniqueKey":"resumeFromDependencyProjectTestCaseId","typeLabel":"string"},"waitForDependenciesProjectTestCaseIds":{"type":"array","items":{"type":"string","uniqueKey":"waitForDependenciesProjectTestCaseIds.items.[INDEX]","typeLabel":"string"},"uniqueKey":"waitForDependenciesProjectTestCaseIds","typeLabel":"string[]"},"configShortIds":{"type":"array","items":{"type":"string","pattern":"^cfg(-.+_.+|_.+)$","uniqueKey":"configShortIds.items.[INDEX]","typeLabel":"string"},"uniqueKey":"configShortIds","typeLabel":"string[]"},"scenarioShortId":{"type":"string","pattern":"^scenario(-.+_.+|_.+)$","uniqueKey":"scenarioShortId","typeLabel":"string"},"environment":{"oneOf":[{"type":"object","description":"Environment of `applicationShortId` to run the initial burn-in against (e.g. a preview URL or remote tunnel URL). Omit to use the application's default environment. Optional customHeaders and basicAuth persist auth or protection-bypass rules on the environment.","required":["url"],"properties":{"url":{"type":"string","format":"uri","pattern":"^https?:\\x2f\\x2f","description":"Base URL of the environment. Must use http or https.","isRequired":true,"uniqueKey":"environment.oneOf.0.url","typeLabel":"string\u003curi>"},"name":{"type":"string","uniqueKey":"environment.oneOf.0.name","typeLabel":"string"},"customHeaders":{"type":"array","items":{"type":"object","required":["domains","headers"],"properties":{"domains":{"type":"array","items":{"type":"string","uniqueKey":"environment.oneOf.0.customHeaders.items.[INDEX].domains.items.[INDEX]","typeLabel":"string"},"description":"Host patterns that receive these headers. `*.preview.example.com` matches the apex and any subdomain.","isRequired":true,"uniqueKey":"environment.oneOf.0.customHeaders.items.[INDEX].domains","typeLabel":"string[]"},"headers":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"environment.oneOf.0.customHeaders.items.[INDEX].headers.additionalProperties","typeLabel":"string"},"description":"Header name to value. Applied by the platform on matching requests; generated test code cannot read the values.","isRequired":true,"uniqueKey":"environment.oneOf.0.customHeaders.items.[INDEX].headers","typeLabel":"object"}},"description":"Host patterns (`*.preview.example.com` or an exact host) and the headers to attach to matching requests. Used for auth, deployment-protection bypass, and similar platform access. When provided on an environment override, the rules are persisted on the environment.","uniqueKey":"environment.oneOf.0.customHeaders.items.[INDEX]","typeLabel":"object"},"description":"Custom headers for this environment. Persisted on create and on reuse. Omit to leave stored headers unchanged; pass an empty list to clear them.","uniqueKey":"environment.oneOf.0.customHeaders","typeLabel":"object[]"},"basicAuth":{"type":"array","items":{"type":"object","required":["domains","username","password"],"properties":{"domains":{"type":"array","items":{"type":"string","uniqueKey":"environment.oneOf.0.basicAuth.items.[INDEX].domains.items.[INDEX]","typeLabel":"string"},"description":"Host patterns that receive these credentials. `*.preview.example.com` matches the apex and any subdomain.","isRequired":true,"uniqueKey":"environment.oneOf.0.basicAuth.items.[INDEX].domains","typeLabel":"string[]"},"username":{"type":"string","pattern":"^[^:]+$","description":"Basic auth username. May not contain `:`.","isRequired":true,"uniqueKey":"environment.oneOf.0.basicAuth.items.[INDEX].username","typeLabel":"string"},"password":{"type":"string","description":"Basic auth password. Applied by the platform on matching requests; generated test code cannot read it.","isRequired":true,"uniqueKey":"environment.oneOf.0.basicAuth.items.[INDEX].password","typeLabel":"string"}},"description":"Host patterns (`*.preview.example.com` or an exact host) and the HTTP Basic Auth credentials to send to matching hosts. Browser, crawler, and API tests send `Authorization: Basic` to matching hosts only. When provided on an environment override, the rules are persisted on the environment.","uniqueKey":"environment.oneOf.0.basicAuth.items.[INDEX]","typeLabel":"object"},"description":"Basic auth rules for this environment. Persisted on create and on reuse. Omit to leave stored rules unchanged; pass an empty list to clear them.","uniqueKey":"environment.oneOf.0.basicAuth","typeLabel":"object[]"}},"uniqueKey":"environment.oneOf.0","typeLabel":"object"},{"type":"object","description":"Environment of `applicationShortId` to run the initial burn-in against (e.g. a preview URL or remote tunnel URL). Omit to use the application's default environment. Optional customHeaders and basicAuth persist auth or protection-bypass rules on the environment.","required":["shortId"],"properties":{"shortId":{"type":"string","pattern":"^env(-.+_.+|_.+)$","isRequired":true,"uniqueKey":"environment.oneOf.1.shortId","typeLabel":"string"},"customHeaders":{"type":"array","items":{"type":"object","required":["domains","headers"],"properties":{"domains":{"type":"array","items":{"type":"string","uniqueKey":"environment.oneOf.1.customHeaders.items.[INDEX].domains.items.[INDEX]","typeLabel":"string"},"description":"Host patterns that receive these headers. `*.preview.example.com` matches the apex and any subdomain.","isRequired":true,"uniqueKey":"environment.oneOf.1.customHeaders.items.[INDEX].domains","typeLabel":"string[]"},"headers":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"environment.oneOf.1.customHeaders.items.[INDEX].headers.additionalProperties","typeLabel":"string"},"description":"Header name to value. Applied by the platform on matching requests; generated test code cannot read the values.","isRequired":true,"uniqueKey":"environment.oneOf.1.customHeaders.items.[INDEX].headers","typeLabel":"object"}},"description":"Host patterns (`*.preview.example.com` or an exact host) and the headers to attach to matching requests. Used for auth, deployment-protection bypass, and similar platform access. When provided on an environment override, the rules are persisted on the environment.","uniqueKey":"environment.oneOf.1.customHeaders.items.[INDEX]","typeLabel":"object"},"description":"Replace custom headers on the existing environment. Omit to leave stored headers unchanged; pass an empty list to clear them.","uniqueKey":"environment.oneOf.1.customHeaders","typeLabel":"object[]"},"basicAuth":{"type":"array","items":{"type":"object","required":["domains","username","password"],"properties":{"domains":{"type":"array","items":{"type":"string","uniqueKey":"environment.oneOf.1.basicAuth.items.[INDEX].domains.items.[INDEX]","typeLabel":"string"},"description":"Host patterns that receive these credentials. `*.preview.example.com` matches the apex and any subdomain.","isRequired":true,"uniqueKey":"environment.oneOf.1.basicAuth.items.[INDEX].domains","typeLabel":"string[]"},"username":{"type":"string","pattern":"^[^:]+$","description":"Basic auth username. May not contain `:`.","isRequired":true,"uniqueKey":"environment.oneOf.1.basicAuth.items.[INDEX].username","typeLabel":"string"},"password":{"type":"string","description":"Basic auth password. Applied by the platform on matching requests; generated test code cannot read it.","isRequired":true,"uniqueKey":"environment.oneOf.1.basicAuth.items.[INDEX].password","typeLabel":"string"}},"description":"Host patterns (`*.preview.example.com` or an exact host) and the HTTP Basic Auth credentials to send to matching hosts. Browser, crawler, and API tests send `Authorization: Basic` to matching hosts only. When provided on an environment override, the rules are persisted on the environment.","uniqueKey":"environment.oneOf.1.basicAuth.items.[INDEX]","typeLabel":"object"},"description":"Replace basic auth rules on the existing environment. Omit to leave stored rules unchanged; pass an empty list to clear them.","uniqueKey":"environment.oneOf.1.basicAuth","typeLabel":"object[]"}},"uniqueKey":"environment.oneOf.1","typeLabel":"object"},{"type":"object","description":"Environment of `applicationShortId` to run the initial burn-in against (e.g. a preview URL or remote tunnel URL). Omit to use the application's default environment. Optional customHeaders and basicAuth persist auth or protection-bypass rules on the environment.","required":["applicationBuildShortId"],"properties":{"applicationBuildShortId":{"type":"string","pattern":"^build(-.+_.+|_.+)$","isRequired":true,"uniqueKey":"environment.oneOf.2.applicationBuildShortId","typeLabel":"string"},"otherApplicationBuildShortIds":{"type":"array","items":{"type":"string","pattern":"^build(-.+_.+|_.+)$","uniqueKey":"environment.oneOf.2.otherApplicationBuildShortIds.items.[INDEX]","typeLabel":"string"},"uniqueKey":"environment.oneOf.2.otherApplicationBuildShortIds","typeLabel":"string[]"},"customHeaders":{"type":"array","items":{"type":"object","required":["domains","headers"],"properties":{"domains":{"type":"array","items":{"type":"string","uniqueKey":"environment.oneOf.2.customHeaders.items.[INDEX].domains.items.[INDEX]","typeLabel":"string"},"description":"Host patterns that receive these headers. `*.preview.example.com` matches the apex and any subdomain.","isRequired":true,"uniqueKey":"environment.oneOf.2.customHeaders.items.[INDEX].domains","typeLabel":"string[]"},"headers":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"environment.oneOf.2.customHeaders.items.[INDEX].headers.additionalProperties","typeLabel":"string"},"description":"Header name to value. Applied by the platform on matching requests; generated test code cannot read the values.","isRequired":true,"uniqueKey":"environment.oneOf.2.customHeaders.items.[INDEX].headers","typeLabel":"object"}},"description":"Host patterns (`*.preview.example.com` or an exact host) and the headers to attach to matching requests. Used for auth, deployment-protection bypass, and similar platform access. When provided on an environment override, the rules are persisted on the environment.","uniqueKey":"environment.oneOf.2.customHeaders.items.[INDEX]","typeLabel":"object"},"description":"Custom headers for the preview environment created or reused for this build. Omit to leave stored headers unchanged; pass an empty list to clear them.","uniqueKey":"environment.oneOf.2.customHeaders","typeLabel":"object[]"},"basicAuth":{"type":"array","items":{"type":"object","required":["domains","username","password"],"properties":{"domains":{"type":"array","items":{"type":"string","uniqueKey":"environment.oneOf.2.basicAuth.items.[INDEX].domains.items.[INDEX]","typeLabel":"string"},"description":"Host patterns that receive these credentials. `*.preview.example.com` matches the apex and any subdomain.","isRequired":true,"uniqueKey":"environment.oneOf.2.basicAuth.items.[INDEX].domains","typeLabel":"string[]"},"username":{"type":"string","pattern":"^[^:]+$","description":"Basic auth username. May not contain `:`.","isRequired":true,"uniqueKey":"environment.oneOf.2.basicAuth.items.[INDEX].username","typeLabel":"string"},"password":{"type":"string","description":"Basic auth password. Applied by the platform on matching requests; generated test code cannot read it.","isRequired":true,"uniqueKey":"environment.oneOf.2.basicAuth.items.[INDEX].password","typeLabel":"string"}},"description":"Host patterns (`*.preview.example.com` or an exact host) and the HTTP Basic Auth credentials to send to matching hosts. Browser, crawler, and API tests send `Authorization: Basic` to matching hosts only. When provided on an environment override, the rules are persisted on the environment.","uniqueKey":"environment.oneOf.2.basicAuth.items.[INDEX]","typeLabel":"object"},"description":"Basic auth rules for the preview environment created or reused for this build. Omit to leave stored rules unchanged; pass an empty list to clear them.","uniqueKey":"environment.oneOf.2.basicAuth","typeLabel":"object[]"}},"uniqueKey":"environment.oneOf.2","typeLabel":"object"}],"uniqueKey":"environment","typeLabel":"object"},"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":"Request body for creating a new test case linked to a project","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","goal":"\u003cstring>","applicationShortId":"\u003cstring>","expectedResult":"\u003cstring>","resumeFromDependencyProjectTestCaseId":"\u003cstring>","waitForDependenciesProjectTestCaseIds":["\u003cstring>"],"configShortIds":["\u003cstring>"],"scenarioShortId":"\u003cstring>","environment":{"url":"\u003cstring>","name":"\u003cstring>","customHeaders":[{"domains":["\u003cstring>"],"headers":{}}],"basicAuth":[{"domains":["\u003cstring>"],"username":"\u003cstring>","password":"\u003cstring>"}]},"projectShortId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"773f47c0-96b6-4790-a187-52bf889c3efd":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","required":["success","testCase"],"properties":{"success":{"type":"boolean","isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"testCase":{"type":"object","required":["id","name","url"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"testCase.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"testCase.name","typeLabel":"string"},"url":{"type":"string","isRequired":true,"uniqueKey":"testCase.url","typeLabel":"string"}},"isRequired":true,"uniqueKey":"testCase","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"testCase":{"id":"\u003cstring>","name":"\u003cstring>","url":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"de0efc7c-c420-4438-ac20-eb06aa8fc434":{"BearerAuth":{"type":"http","scheme":"Bearer","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"a880be0e-b5c6-411f-a895-570b0d510bb2":{"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":"Create test case - QA.tech Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-03T16:39:08.876Z","originalFileLocation":"api-reference/test-cases/create-test-case.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=\"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application\u0026#x27;s default environment, or against environment when given (e.g. a preview deployment or remote tunnel URL). IMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have: - Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume. - A goal describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness. - An expectedResult stating a UI-observable outcome a user can see on screen. - Prerequisites in place: a login/auth dependency via resumeFromDependencyProjectTestCaseId when the flow needs authentication, plus the right configShortIds. - Checked existing tests with list_test_cases to avoid duplicates. If you have not gathered this context, prefer create_chat instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.\">\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=\"Create test case - QA.tech Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application\u0026#x27;s default environment, or against environment when given (e.g. a preview deployment or remote tunnel URL). IMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have: - Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume. - A goal describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness. - An expectedResult stating a UI-observable outcome a user can see on screen. - Prerequisites in place: a login/auth dependency via resumeFromDependencyProjectTestCaseId when the flow needs authentication, plus the right configShortIds. - Checked existing tests with list_test_cases to avoid duplicates. If you have not gathered this context, prefer create_chat instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.\">\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/test-cases/create-test-case\">\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=Test+Cases\u0026amp;title=Create+test+case\u0026amp;description=Create+a+test+case+in+the+project.+It+is+created+in+draft+and+a+burn-in+run+starts+automatically+against+the+application%27s+default+environment%2C+or+against+%60envi\u0026amp;theme=1ae391f617cb8a464ae673d4\u0026amp;signature=d11bd715097bceaf1712c108714494b112cec80e00dab4da5be71650de116e0a\">\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=\"Create test case - QA.tech Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application\u0026#x27;s default environment, or against environment when given (e.g. a preview deployment or remote tunnel URL). IMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have: - Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume. - A goal describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness. - An expectedResult stating a UI-observable outcome a user can see on screen. - Prerequisites in place: a login/auth dependency via resumeFromDependencyProjectTestCaseId when the flow needs authentication, plus the right configShortIds. - Checked existing tests with list_test_cases to avoid duplicates. If you have not gathered this context, prefer create_chat instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://qatech.mintlify.app/_mintlify/api/og/v2?division=Test+Cases\u0026amp;title=Create+test+case\u0026amp;description=Create+a+test+case+in+the+project.+It+is+created+in+draft+and+a+burn-in+run+starts+automatically+against+the+application%27s+default+environment%2C+or+against+%60envi\u0026amp;theme=1ae391f617cb8a464ae673d4\u0026amp;signature=d11bd715097bceaf1712c108714494b112cec80e00dab4da5be71650de116e0a\">\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/test-cases/create-test-case\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/test-cases/create-test-case.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/test-cases/create-test-case#webpage\",\"url\":\"https://docs.qa.tech/api-reference/test-cases/create-test-case\",\"name\":\"Create test case\",\"description\":\"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application's default environment, or against environment when given (e.g. a preview deployment or remote tunnel URL). IMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have: - Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume. - A goal describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness. - An expectedResult stating a UI-observable outcome a user can see on screen. - Prerequisites in place: a login/auth dependency via resumeFromDependencyProjectTestCaseId when the flow needs authentication, plus the right configShortIds. - Checked existing tests with list_test_cases to avoid duplicates. If you have not gathered this context, prefer create_chat instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.\",\"dateModified\":\"2026-11-03T16:39:08.876Z\",\"isPartOf\":{\"@id\":\"https://docs.qa.tech#website\"},\"breadcrumb\":{\"@id\":\"https://docs.qa.tech/api-reference/test-cases/create-test-case#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.qa.tech/api-reference/test-cases/create-test-case#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.qa.tech/api-reference/applications/list-applications\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Test Cases\",\"item\":\"https://docs.qa.tech/api-reference/test-cases/list-test-cases\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create test case\",\"item\":\"https://docs.qa.tech/api-reference/test-cases/create-test-case\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.qa.tech/api-reference/test-cases/create-test-case#apireference\",\"headline\":\"Create test case\",\"name\":\"Create test case\",\"description\":\"Create a test case in the project. It is created in draft and a burn-in run starts automatically against the application's default environment, or against environment when given (e.g. a preview deployment or remote tunnel URL). IMPORTANT: gather context first, or the test will be flaky. This tool records the test exactly as you describe it. It does NOT explore the site to confirm the flow exists, so a vague or unverified goal produces low-value, flaky tests. Before calling, make sure you have: - Verified the functionality, pages, and UI labels actually exist in the target environment. Do not guess or assume. - A goal describing a single concrete user flow in plain UI terms, using generic data rather than specific entity names. Specific entities change over time and cause flakiness. - An expectedResult stating a UI-observable outcome a user can see on screen. - Prerequisites in place: a login/auth dependency via resumeFromDependencyProjectTestCaseId when the flow needs authentication, plus the right configShortIds. - Checked existing tests with list_test_cases to avoid duplicates. If you have not gathered this context, prefer create_chat instead. The QA.tech chat agent crawls the site, grounds the test in what actually exists, sets up login and config dependencies, and verifies the test runs. That is how reliable tests get created. Use this tool directly only when you already know the flow exists and have the details above.\",\"url\":\"https://docs.qa.tech/api-reference/test-cases/create-test-case\",\"mainEntityOfPage\":{\"@id\":\"https://docs.qa.tech/api-reference/test-cases/create-test-case#webpage\"},\"dateModified\":\"2026-11-03T16:39:08.876Z\",\"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","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","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","description":"Lists test cases for the project, optionally filtered by application, labels, enabled state, or scenario.\n\nTo find tests by their wording, pass `query` instead of listing everything and filtering client-side. It is database websearch across name, goal, expected result, steps, and scenario name — unquoted terms are ANDed, quoted phrases match as a phrase, `OR` is alternation, and `-term` excludes.","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","description":"Fetches a test case's authored configuration by its ID (UUID, as returned by `list_test_cases`): goal, expected result, steps, start URL path, dependencies, labels, enabled state, and scenario. This is the authored config the agent executes — for a specific run's outcome use `get_run_test_case` instead.","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":"Todos","pages":[{"title":"List todos","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/todos","href":"/api-reference/todos/list-todos"},{"title":"Create todo","deprecated":null,"version":null,"openapi":"/api-reference/api.json post /v1/todos","href":"/api-reference/todos/create-todo"},{"title":"Get todo","deprecated":null,"version":null,"openapi":"/api-reference/api.json get /v1/todos/{shortId}","href":"/api-reference/todos/get-todo"},{"title":"Update todo","deprecated":null,"version":null,"openapi":"/api-reference/api.json patch /v1/todos/{shortId}","href":"/api-reference/todos/update-todo"}]}]},{"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"}]}]}]}]},"basePath":"","title":"Create test case - QA.tech Docs","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}