Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.
Format (services/api-keys.ts): the literal prefix tst_live_
followed by 24 random bytes rendered as 32 base64url characters.
Only the SHA-256 hash is stored server-side. The shape check that
routes a token down the API-key path rather than the Clerk JWT path
requires the tst_live_ prefix and a total length of at least 25
characters.
Keys are minted in the dashboard at /settings/api-keys, in any
workspace, personal included. The same header also accepts a Clerk
session JWT, which is how the web app authenticates, but the JWT path
is out of scope for this document.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Testorim","description":"Documentation for Testorim: plain-English browser QA tests that run in a real browser.","colors":{"primary":"#059669","light":"#10b981","dark":"#047857"},"logo":{"light":"https://mintcdn.com/fulgic/ZOzvtyg298rAaunK/logo/wordmark.png?fit=max\u0026auto=format\u0026n=ZOzvtyg298rAaunK\u0026q=85\u0026s=c49b84c50b62f2ccafcc2660391619e7","dark":"https://mintcdn.com/fulgic/ZOzvtyg298rAaunK/logo/wordmark-dark.png?fit=max\u0026auto=format\u0026n=ZOzvtyg298rAaunK\u0026q=85\u0026s=d74e70ecf0f91872956e46385b5665e1","href":"https://testorim.com"},"favicon":"https://mintcdn.com/fulgic/MOzJBi6Mn9MbYgbw/favicon.png?fit=max\u0026auto=format\u0026n=MOzJBi6Mn9MbYgbw\u0026q=85\u0026s=783a1618974414f0ee72cf911352ab64","appearance":{"default":"system"},"navbar":{"links":[{"href":"https://status.testorim.com","label":"Status"},{"href":"mailto:info@fulgic.com","label":"Support"}],"primary":{"type":"button","label":"Open Testorim","href":"https://app.testorim.com"}},"footer":{"links":[{"header":"Product","items":[{"label":"Testorim","href":"https://testorim.com"},{"label":"Pricing","href":"https://testorim.com/pricing"},{"label":"Open the app","href":"https://app.testorim.com"},{"label":"Status","href":"https://status.testorim.com"}]},{"header":"Documentation","items":[{"label":"Quickstart","href":"https://docs.testorim.com/getting-started/quickstart"},{"label":"Plans and limits","href":"https://docs.testorim.com/resources/plans-and-limits"},{"label":"API reference","href":"https://docs.testorim.com/api-reference/introduction"},{"label":"CLI","href":"https://docs.testorim.com/developers/cli"}]},{"header":"Legal","items":[{"label":"Terms","href":"https://testorim.com/terms"},{"label":"Privacy","href":"https://testorim.com/privacy"}]}]},"search":{"prompt":"Search the Testorim docs"},"icons":{"library":"lucide"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Testorim app","icon":"monitor","href":"https://app.testorim.com"},{"anchor":"Website","icon":"globe","href":"https://testorim.com"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"fulgic","hasAudioNarration":false,"actualSubdomain":"fulgic","customDomains":["docs.testorim.com"],"gitSource":{"type":"github","owner":"sallar-ba","repo":"testorim-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6abb3a2d9ae82eb23a513b7a","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Documentation","count":29},{"language":"default","tag":"API reference","count":19},{"language":"default","tag":"Endpoints","count":17},{"language":"default","tag":"Runs","count":7},{"language":"default","tag":"Developers","count":6},{"language":"default","tag":"Developer documentation","count":6},{"language":"default","tag":"Getting started","count":4},{"language":"default","tag":"Integrations","count":4},{"language":"default","tag":"Resources","count":4},{"language":"default","tag":"Test creation","count":4}],"searchSettings":{"showContentSnippets":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@fulgic.com"}},"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":"rbac-expansion","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":"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":"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":"editor-metadata","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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/runs/list-runs-for-one-project","slug":"/api-reference/runs/list-runs-for-one-project","pageMetadata":{"title":"List runs for one project","description":"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/projects/{projectId}/runs","href":"/api-reference/runs/list-runs-for-one-project","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.\"\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":"List runs for one project","description":"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/projects/{projectId}/runs","href":"/api-reference/runs/list-runs-for-one-project","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Runs"],"operationId":"listProjectRuns","summary":"List runs for one project","description":"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.","security":["4518b12d-a39d-455a-8f2b-90c0c8eacc39"],"parameters":["593d8383-51d3-4516-b5cb-d28ff5f4aaae","9f175807-6bc4-4d41-91e7-0ecbccdac38b"],"responses":{"200":"572f6ac7-01d5-4af1-ba82-d93ac07bf0ae","401":"74b14ec2-8ee8-4dcf-829f-215d57d442bf","404":"59dd1cf6-6d9c-4f04-864a-91d5c0e42552","429":"bd07816d-e2dc-4cda-88da-6d681d95c0b6"},"method":"get","type":"path","servers":["d4db3c55-f4bc-46f2-9432-5f123e333c25","7ea51c90-14cf-4c02-9601-e57633a5e03f"],"path":"/api/projects/{projectId}/runs","baseUrlOptions":["https://app.testorim.com","http://localhost:3001"],"title":"List runs for one project","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"593d8383-51d3-4516-b5cb-d28ff5f4aaae":{"name":"projectId","in":"path","required":true,"description":"Project id (UUID).","schema":{"type":"string","format":"uuid","isRequired":true,"description":"Project id (UUID).","uniqueKey":"","typeLabel":"string\u003cuuid>"}},"9f175807-6bc4-4d41-91e7-0ecbccdac38b":{"name":"limit","in":"query","required":false,"description":"Maximum rows. Default 50, clamped to 1..200. A non-numeric value falls back to 50 rather than erroring.","schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"isRequired":false,"description":"Maximum rows. Default 50, clamped to 1..200. A non-numeric value falls back to 50 rather than erroring.","uniqueKey":"","typeLabel":"integer"}}},"responses":{"572f6ac7-01d5-4af1-ba82-d93ac07bf0ae":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["runs"],"properties":{"runs":{"type":"array","items":{"type":"object","title":"RunSummary","description":"The slim run shape used by both list endpoints (`SUMMARY_COLUMNS` plus `augmentSummary`). Heavy JSONB columns are omitted on purpose: they can reach megabytes per run.","required":["id","projectId","instruction","status","passedCount","failedCount","skippedCount","totalDurationMs","createdAt","hasVideo","hasTrace"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"runs.items.[INDEX].id","typeLabel":"string\u003cuuid>"},"projectId":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"runs.items.[INDEX].projectId","typeLabel":"string\u003cuuid>"},"instruction":{"type":"string","description":"The prompt for an ad-hoc run, or `Procedure: \u003cname>` for a replay. Truncated to 2000 characters at write time.","isRequired":true,"uniqueKey":"runs.items.[INDEX].instruction","typeLabel":"string"},"status":{"type":"string","title":"RunStatus","enum":["pending","running","completed","failed","cancelled"],"description":"Lifecycle state. `completed`, `failed` and `cancelled` are terminal; `pending` and `running` mean keep polling. A run waiting in line for a browser is `pending`. Note `completed` means the run finished, not that it passed. Read `overallStatus` for that.","isRequired":true,"uniqueKey":"runs.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"passedCount":{"type":"integer","isRequired":true,"uniqueKey":"runs.items.[INDEX].passedCount","typeLabel":"integer"},"failedCount":{"type":"integer","isRequired":true,"uniqueKey":"runs.items.[INDEX].failedCount","typeLabel":"integer"},"skippedCount":{"type":"integer","isRequired":true,"uniqueKey":"runs.items.[INDEX].skippedCount","typeLabel":"integer"},"totalDurationMs":{"type":"integer","isRequired":true,"uniqueKey":"runs.items.[INDEX].totalDurationMs","typeLabel":"integer"},"hasVideo":{"type":"boolean","description":"Presence flag; the summary shape does not presign the video.","isRequired":true,"uniqueKey":"runs.items.[INDEX].hasVideo","typeLabel":"boolean"},"hasTrace":{"type":"boolean","description":"Presence flag; the summary shape does not presign the trace.","isRequired":true,"uniqueKey":"runs.items.[INDEX].hasTrace","typeLabel":"boolean"},"createdAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"runs.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"procedureId":{"oneOf":[{"type":"string","format":"uuid","description":"Null for ad-hoc runs; also nulled if the procedure is later deleted.","uniqueKey":"runs.items.[INDEX].procedureId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"Null for ad-hoc runs; also nulled if the procedure is later deleted.","uniqueKey":"runs.items.[INDEX].procedureId.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].procedureId","typeLabel":"string\u003cuuid> | null"},"userExpectation":{"oneOf":[{"type":"string","title":"UserExpectation","description":"Null on legacy rows.","default":"pass","enum":["pass","fail","unknown"],"uniqueKey":"runs.items.[INDEX].userExpectation.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Null on legacy rows.","uniqueKey":"runs.items.[INDEX].userExpectation.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].userExpectation","typeLabel":"enum\u003cstring> | null"},"overallStatus":{"oneOf":[{"type":"string","title":"OverallStatus","description":"Null until the run finalizes.","enum":["passed","failed","needs_review"],"uniqueKey":"runs.items.[INDEX].overallStatus.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Null until the run finalizes.","uniqueKey":"runs.items.[INDEX].overallStatus.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].overallStatus","typeLabel":"enum\u003cstring> | null"},"initialUrl":{"oneOf":[{"type":"string","uniqueKey":"runs.items.[INDEX].initialUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"runs.items.[INDEX].initialUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].initialUrl","typeLabel":"string | null"},"finalUrl":{"oneOf":[{"type":"string","uniqueKey":"runs.items.[INDEX].finalUrl.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"runs.items.[INDEX].finalUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].finalUrl","typeLabel":"string | null"},"reportMarkdown":{"oneOf":[{"type":"string","description":"The generated Markdown report. Included even in the summary shape, so a list response can be large. Null until finalization.","uniqueKey":"runs.items.[INDEX].reportMarkdown.oneOf.0","typeLabel":"string"},{"type":"null","description":"The generated Markdown report. Included even in the summary shape, so a list response can be large. Null until finalization.","uniqueKey":"runs.items.[INDEX].reportMarkdown.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].reportMarkdown","typeLabel":"string | null"},"confidenceScore":{"oneOf":[{"type":"integer","description":"0-100 confidence heuristic. Frequently null.","uniqueKey":"runs.items.[INDEX].confidenceScore.oneOf.0","typeLabel":"integer"},{"type":"null","description":"0-100 confidence heuristic. Frequently null.","uniqueKey":"runs.items.[INDEX].confidenceScore.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].confidenceScore","typeLabel":"integer | null"},"finalScreenshotR2Key":{"oneOf":[{"type":"string","description":"Raw R2 object key. Prefer `finalScreenshotUrl`.","uniqueKey":"runs.items.[INDEX].finalScreenshotR2Key.oneOf.0","typeLabel":"string"},{"type":"null","description":"Raw R2 object key. Prefer `finalScreenshotUrl`.","uniqueKey":"runs.items.[INDEX].finalScreenshotR2Key.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].finalScreenshotR2Key","typeLabel":"string | null"},"finalScreenshotUrl":{"oneOf":[{"type":"string","description":"Presigned URL, valid for one hour. Null when no screenshot was captured.","uniqueKey":"runs.items.[INDEX].finalScreenshotUrl.oneOf.0","typeLabel":"string"},{"type":"null","description":"Presigned URL, valid for one hour. Null when no screenshot was captured.","uniqueKey":"runs.items.[INDEX].finalScreenshotUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].finalScreenshotUrl","typeLabel":"string | null"},"videoR2Key":{"oneOf":[{"type":"string","uniqueKey":"runs.items.[INDEX].videoR2Key.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"runs.items.[INDEX].videoR2Key.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].videoR2Key","typeLabel":"string | null"},"traceR2Key":{"oneOf":[{"type":"string","uniqueKey":"runs.items.[INDEX].traceR2Key.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"runs.items.[INDEX].traceR2Key.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].traceR2Key","typeLabel":"string | null"},"videoUrl":{"type":"null","description":"Always literally `null` in list responses, because presigning video for a whole page of runs is too expensive. Fetch the single run to get a real URL.","uniqueKey":"runs.items.[INDEX].videoUrl","typeLabel":"null"},"traceUrl":{"type":"null","description":"Always literally `null` in list responses. See `videoUrl`.","uniqueKey":"runs.items.[INDEX].traceUrl","typeLabel":"null"},"viewportPreset":{"oneOf":[{"type":"string","description":"`desktop` (1280x720) or `mobile` (390x844). Null on runs that predate multi-viewport; treat as desktop. Stored as free text, not a DB enum.","uniqueKey":"runs.items.[INDEX].viewportPreset.oneOf.0","typeLabel":"string"},{"type":"null","description":"`desktop` (1280x720) or `mobile` (390x844). Null on runs that predate multi-viewport; treat as desktop. Stored as free text, not a DB enum.","uniqueKey":"runs.items.[INDEX].viewportPreset.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].viewportPreset","typeLabel":"string | null"},"batchId":{"oneOf":[{"type":"string","format":"uuid","uniqueKey":"runs.items.[INDEX].batchId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","uniqueKey":"runs.items.[INDEX].batchId.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].batchId","typeLabel":"string\u003cuuid> | null"},"browser":{"oneOf":[{"type":"string","description":"`chromium`, `firefox` or `webkit`. Null on legacy runs; treat as chromium. Stored as free text, not a DB enum.","uniqueKey":"runs.items.[INDEX].browser.oneOf.0","typeLabel":"string"},{"type":"null","description":"`chromium`, `firefox` or `webkit`. Null on legacy runs; treat as chromium. Stored as free text, not a DB enum.","uniqueKey":"runs.items.[INDEX].browser.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].browser","typeLabel":"string | null"},"attemptIndex":{"oneOf":[{"type":"integer","description":"1-indexed leg within a flaky-detection batch; null otherwise.","uniqueKey":"runs.items.[INDEX].attemptIndex.oneOf.0","typeLabel":"integer"},{"type":"null","description":"1-indexed leg within a flaky-detection batch; null otherwise.","uniqueKey":"runs.items.[INDEX].attemptIndex.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].attemptIndex","typeLabel":"integer | null"},"parentRunId":{"oneOf":[{"type":"string","format":"uuid","description":"For a fuzz variant, the normal run that anchored the batch.","uniqueKey":"runs.items.[INDEX].parentRunId.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"For a fuzz variant, the normal run that anchored the batch.","uniqueKey":"runs.items.[INDEX].parentRunId.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].parentRunId","typeLabel":"string\u003cuuid> | null"},"runKind":{"oneOf":[{"type":"string","description":"`api` (triggered through this API), `scheduled`, `fuzz_control`, `fuzz_variant` or `role_probe_session` today; null for a run from the app. Free text in the DB, so new kinds can appear.","uniqueKey":"runs.items.[INDEX].runKind.oneOf.0","typeLabel":"string"},{"type":"null","description":"`api` (triggered through this API), `scheduled`, `fuzz_control`, `fuzz_variant` or `role_probe_session` today; null for a run from the app. Free text in the DB, so new kinds can appear.","uniqueKey":"runs.items.[INDEX].runKind.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].runKind","typeLabel":"string | null"},"startedAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"runs.items.[INDEX].startedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"runs.items.[INDEX].startedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].startedAt","typeLabel":"string\u003cdate-time> | null"},"completedAt":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"runs.items.[INDEX].completedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"runs.items.[INDEX].completedAt.oneOf.1","typeLabel":"null"}],"uniqueKey":"runs.items.[INDEX].completedAt","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"runs.items.[INDEX]","typeLabel":"RunSummary · object"},"isRequired":true,"uniqueKey":"runs","typeLabel":"RunSummary · object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"runs":[{"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","projectId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","instruction":"\u003cstring>","status":"pending","passedCount":123,"failedCount":123,"skippedCount":123,"totalDurationMs":123,"hasVideo":true,"hasTrace":true,"createdAt":"2023-11-07T05:31:56Z","procedureId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","userExpectation":"pass","overallStatus":"passed","initialUrl":"\u003cstring>","finalUrl":"\u003cstring>","reportMarkdown":"\u003cstring>","confidenceScore":123,"finalScreenshotR2Key":"\u003cstring>","finalScreenshotUrl":"\u003cstring>","videoR2Key":"\u003cstring>","traceR2Key":"\u003cstring>","videoUrl":null,"traceUrl":null,"viewportPreset":"\u003cstring>","batchId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","browser":"\u003cstring>","attemptIndex":123,"parentRunId":"3c90c3cc-0d44-4b50-8888-8dd25736052a","runKind":"\u003cstring>","startedAt":"2023-11-07T05:31:56Z","completedAt":"2023-11-07T05:31:56Z"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"74b14ec2-8ee8-4dcf-829f-215d57d442bf":{"description":"No `Authorization: Bearer …` header, or the credential did not\nverify. Distinct messages the code can return:\n\n* `Missing or invalid Authorization header`\n* `Invalid or revoked API key`\n* `API key owner not found`\n* `API key's organization is no longer accessible`. The key's user\n has been removed from the org it is bound to\n* `Invalid token` / `Token missing sub claim`. Clerk JWT path\n\nRepeated failures burn the `auth:strict` bucket (5 per 15 minutes\nper IP) and then return `429` instead.\n","content":{"application/json":{"schema":{"type":"object","title":"Error","description":"The universal error envelope. Every failing handler in this surface responds with a JSON object carrying a human-readable `error` string; some add extra fields (see the other error schemas).","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message. Not a stable machine-readable code.","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"","typeLabel":"Error · object"},"example":{"error":"Invalid or revoked API key"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid or revoked API key"}}},"exampleType":"examples"}},"exampleType":"examples"},"59dd1cf6-6d9c-4f04-864a-91d5c0e42552":{"description":"No live project with this id in the key's organization. Deleted and foreign projects look like missing ones, except that when the key's owner is a member of the organization that holds the project, the body adds `code: \"other_workspace\"` with that organization's `orgId` and `orgName`.","content":{"application/json":{"schema":{"type":"object","title":"Error","description":"The universal error envelope. Every failing handler in this surface responds with a JSON object carrying a human-readable `error` string; some add extra fields (see the other error schemas).","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable message. Not a stable machine-readable code.","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"additionalProperties":true,"uniqueKey":"","typeLabel":"Error · object"},"example":{"error":"Project not found"},"examples":{"Example":{"title":"Example","value":{"error":"Project not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"bd07816d-e2dc-4cda-88da-6d681d95c0b6":{"description":"Throttled. Every `/api/*` route sits behind `api:global` (600 / minute per IP); some routes add a tighter per-user limiter.","headers":{"Retry-After":{"description":"Seconds until the window frees up.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","title":"RateLimitError","description":"Emitted by the rate-limit middleware alongside a `Retry-After` header.","required":["error"],"properties":{"error":{"type":"string","description":"The limiter's reason, e.g. `Rate limit exceeded. Try again in 42s.`","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retryAfter":{"oneOf":[{"type":"integer","description":"Seconds until the window frees. Mirrors `Retry-After`. May be absent/null when the limiter did not report a reset time, in which case the header defaults to 60.","uniqueKey":"retryAfter.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Seconds until the window frees. Mirrors `Retry-After`. May be absent/null when the limiter did not report a reset time, in which case the header defaults to 60.","uniqueKey":"retryAfter.oneOf.1","typeLabel":"null"}],"uniqueKey":"retryAfter","typeLabel":"integer | null"}},"additionalProperties":true,"uniqueKey":"","typeLabel":"RateLimitError · object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","retryAfter":123}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"4518b12d-a39d-455a-8f2b-90c0c8eacc39":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"tst_live_\u003c32 url-safe base64 chars>","description":"Send `Authorization: Bearer tst_live_…`.\n\nFormat (`services/api-keys.ts`): the literal prefix `tst_live_`\nfollowed by 24 random bytes rendered as 32 base64url characters.\nOnly the SHA-256 hash is stored server-side. The shape check that\nroutes a token down the API-key path rather than the Clerk JWT path\nrequires the `tst_live_` prefix and a total length of at least 25\ncharacters.\n\nKeys are minted in the dashboard at `/settings/api-keys`, in any\nworkspace, personal included. The same header also accepts a Clerk\nsession JWT, which is how the web app authenticates, but the JWT path\nis out of scope for this document.\n","scopes":[]}}},"servers":{"d4db3c55-f4bc-46f2-9432-5f123e333c25":{"url":"https://app.testorim.com","description":"Production. Single-origin deployment: Caddy on one GCP VM serves the SPA at `/` and reverse-proxies `/api/*` and `/ws` to the backend. This is also the default API base URL used by the Testorim CLI."},"7ea51c90-14cf-4c02-9601-e57633a5e03f":{"url":"http://localhost:3001","description":"A locally running Testorim backend, for self-hosted or development use. The default port is 3001."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"tst_live_\u003c32 url-safe base64 chars>","description":"Send `Authorization: Bearer tst_live_…`.\n\nFormat (`services/api-keys.ts`): the literal prefix `tst_live_`\nfollowed by 24 random bytes rendered as 32 base64url characters.\nOnly the SHA-256 hash is stored server-side. The shape check that\nroutes a token down the API-key path rather than the Clerk JWT path\nrequires the `tst_live_` prefix and a total length of at least 25\ncharacters.\n\nKeys are minted in the dashboard at `/settings/api-keys`, in any\nworkspace, personal included. The same header also accepts a Clerk\nsession JWT, which is how the web app authenticates, but the JWT path\nis out of scope for this document.\n","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Send `Authorization: Bearer tst_live_…`.\n\nFormat (`services/api-keys.ts`): the literal prefix `tst_live_`\nfollowed by 24 random bytes rendered as 32 base64url characters.\nOnly the SHA-256 hash is stored server-side. The shape check that\nroutes a token down the API-key path rather than the Clerk JWT path\nrequires the `tst_live_` prefix and a total length of at least 25\ncharacters.\n\nKeys are minted in the dashboard at `/settings/api-keys`, in any\nworkspace, personal included. The same header also accepts a Clerk\nsession JWT, which is how the web app authenticates, but the JWT path\nis out of scope for this document.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"fulgic","siteName":"Testorim","title":"List runs for one project - Testorim","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-25T12:52:51.762Z","originalFileLocation":"api-reference/runs/list-runs-for-one-project.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=\"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Testorim\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/fulgic/HlhB1s7g4HMZVSXy/_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/fulgic/HlhB1s7g4HMZVSXy/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/fulgic/HlhB1s7g4HMZVSXy/_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/fulgic/HlhB1s7g4HMZVSXy/_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/fulgic/HlhB1s7g4HMZVSXy/_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/fulgic/HlhB1s7g4HMZVSXy/_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/fulgic/HlhB1s7g4HMZVSXy/_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/fulgic/HlhB1s7g4HMZVSXy/_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/fulgic/HlhB1s7g4HMZVSXy/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List runs for one project - Testorim\">\u003cmeta data-mint-head property=\"og:description\" content=\"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Testorim\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://fulgic.mintlify.site/_mintlify/api/og/v2?division=Runs\u0026amp;title=List+runs+for+one+project\u0026amp;description=Runs+belonging+to+a+single+project%2C+newest+first%2C+in+the+summary+shape.+The+project+is+resolved+org-scoped+first%2C+so+an+unknown+or+foreign+project+id+404s+befor\u0026amp;theme=21e417d08933df01149b8e86\u0026amp;signature=74c3460c9b429d393625276e0e11a2757bfa2e37f09374d6bb61d008d0181dfe\">\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=\"List runs for one project - Testorim\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://fulgic.mintlify.site/_mintlify/api/og/v2?division=Runs\u0026amp;title=List+runs+for+one+project\u0026amp;description=Runs+belonging+to+a+single+project%2C+newest+first%2C+in+the+summary+shape.+The+project+is+resolved+org-scoped+first%2C+so+an+unknown+or+foreign+project+id+404s+befor\u0026amp;theme=21e417d08933df01149b8e86\u0026amp;signature=74c3460c9b429d393625276e0e11a2757bfa2e37f09374d6bb61d008d0181dfe\">\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/fulgic/HlhB1s7g4HMZVSXy/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Testorim\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#059669\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/runs/list-runs-for-one-project.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.testorim.com/#organization\",\"name\":\"Testorim\",\"url\":\"https://docs.testorim.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/fulgic/ZOzvtyg298rAaunK/logo/wordmark.png?fit=max\u0026auto=format\u0026n=ZOzvtyg298rAaunK\u0026q=85\u0026s=c49b84c50b62f2ccafcc2660391619e7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.testorim.com#website\",\"name\":\"Testorim\",\"url\":\"https://docs.testorim.com\",\"publisher\":{\"@id\":\"https://docs.testorim.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project#webpage\",\"url\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project\",\"name\":\"List runs for one project\",\"description\":\"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.\",\"dateModified\":\"2026-09-25T12:52:51.762Z\",\"isPartOf\":{\"@id\":\"https://docs.testorim.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.testorim.com/api-reference/runs/start-a-test-run-headlessly\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Runs\",\"item\":\"https://docs.testorim.com/api-reference/runs/start-a-test-run-headlessly\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"List runs for one project\",\"item\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project#apireference\",\"headline\":\"List runs for one project\",\"name\":\"List runs for one project\",\"description\":\"Runs belonging to a single project, newest first, in the summary shape. The project is resolved org-scoped first, so an unknown or foreign project id 404s before any run is read.\",\"url\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project\",\"mainEntityOfPage\":{\"@id\":\"https://docs.testorim.com/api-reference/runs/list-runs-for-one-project#webpage\"},\"dateModified\":\"2026-09-25T12:52:51.762Z\",\"publisher\":{\"@id\":\"https://docs.testorim.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.testorim.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Testorim\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Testorim","nav":{"global":{"anchors":[{"anchor":"Testorim app","icon":"monitor","href":"https://app.testorim.com"},{"anchor":"Website","icon":"globe","href":"https://testorim.com"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/developers/platform-overview"}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"API reference","href":"/api-reference/introduction"},{"title":"Errors","href":"/api-reference/errors"}]},{"group":"Endpoints","pages":[{"group":"Runs","pages":[{"title":"Start a test run headlessly","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/runs/trigger","href":"/api-reference/runs/start-a-test-run-headlessly"},{"title":"List runs across the organization","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/runs","href":"/api-reference/runs/list-runs-across-the-organization"},{"title":"List in-flight runs, grouped by batch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/runs/active","href":"/api-reference/runs/list-in-flight-runs-grouped-by-batch"},{"title":"Get one run with all artifacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/runs/{id}","href":"/api-reference/runs/get-one-run-with-all-artifacts"},{"title":"Cancel a single run","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/runs/{id}/cancel","href":"/api-reference/runs/cancel-a-single-run"},{"title":"Cancel every run in a batch","description":"Same as the single-run cancel, applied to every `pending`/`running` row sharing the `batchId`. This is the way to stop a whole fuzz batch or matrix fan-out; queued fuzz variants that have not started are not fired. Ownership is checked by requiring at least one run in the batch to belong to the key's organization. Takes no request body.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/runs/batch/{batchId}/cancel","href":"/api-reference/runs/cancel-every-run-in-a-batch"},{"title":"List runs for one project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/projects/{projectId}/runs","href":"/api-reference/runs/list-runs-for-one-project"}]},{"group":"Procedures","pages":[{"title":"List a project's saved procedures","description":"Every procedure under the project, ordered by `lastRunAt` descending then `createdAt` descending, so the most recently exercised ones come first. Returns whole rows, including `stepsJson` with every saved secret masked as `***`, plus a derived `expectation`. Used by `testorim list --project \u003cid>` and by `testorim init` to build its alias map.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/projects/{projectId}/procedures","href":"/api-reference/procedures/list-a-projects-saved-procedures"},{"title":"Get one procedure by id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/procedures/{id}","href":"/api-reference/procedures/get-one-procedure-by-id"},{"title":"Export a procedure as a standalone Playwright spec","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/procedures/{id}/export","href":"/api-reference/procedures/export-a-procedure-as-a-standalone-playwright-spec"}]},{"group":"Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/projects","href":"/api-reference/projects/list-projects"},{"title":"Create (or re-use) a project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/projects","href":"/api-reference/projects/create-or-re-use-a-project"},{"title":"Get one project","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/projects/{id}","href":"/api-reference/projects/get-one-project"}]},{"group":"API keys","pages":[{"title":"List active API keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/keys","href":"/api-reference/api-keys/list-active-api-keys"},{"title":"Mint a new API key (browser session only)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api/keys","href":"/api-reference/api-keys/mint-a-new-api-key-browser-session-only"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api/keys/{id}","href":"/api-reference/api-keys/revoke-an-api-key"}]},{"group":"Identity","pages":[{"title":"Identify the presented credential","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api/me","href":"/api-reference/identity/identify-the-presented-credential"}]}]}]}]},"basePath":"","title":"List runs for one project - Testorim","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}