GET/test-suites
List the caller's test suites with run counts and latest run.
List the caller's test suites with run counts and latest run.
Only suites the caller owns or has been granted access to are returned;
`scope` narrows that to just owned or just shared-with-me. Crawl-based
suites are returned by default — pass `kind=MANUAL` for the lightweight
manual-run buckets instead.
- Auth
- Required
- Status
- 200
- Query
- ListTestSuitesParams
- Returns
- TestSuitesListResponse
apps/api/src/routes/testSuites.ts:123POST/test-suites
Create a crawl-based test suite.
Create a crawl-based test suite.
Creates the suite, queues the first discovery crawl and registers the
automatic recrawl schedule from the suite settings.
The creator becomes the owner and holds an implicit, non-removable ADMIN
role on the suite.
- Auth
- Required
- Status
- 201
- Body
- CreateTestSuiteInput
- Returns
- TestSuite
apps/api/src/routes/testSuites.ts:188DELETE/test-suites/:id
Delete a test suite.
Delete a test suite.
Removes the suite, its discovered pages, every access grant on it and its
repeatable recrawl job. Run and baseline clean-up is handled separately.
- Auth
- Required — ADMIN
- Status
- 204
- Params
- { id: string }
- Returns
- Empty response
apps/api/src/routes/testSuites.ts:334GET/test-suites/:id
Get a suite with recent runs and current baselines.
Get a suite with recent runs and current baselines.
Use this for the suite detail screen before drilling into pages or an
individual run.
- Auth
- Required — VIEWER
- Status
- 200
- Params
- { id: string }
- Returns
- TestSuiteResponse
apps/api/src/routes/testSuites.ts:234PUT/test-suites/:id
Update a test suite.
Update a test suite.
Updates basic settings, active state or GitHub link data. Changing the
base URL queues a fresh discovery crawl because the sitemap is stale.
Requires EDITOR, except for linking or unlinking a GitHub repo, which is
an ADMIN action — it changes who the suite reports to outside the app.
- Auth
- Required — EDITOR (ADMIN to change the GitHub link)
- Status
- 200
- Params
- { id: string }
- Body
- UpdateTestSuiteInput
- Returns
- TestSuite
apps/api/src/routes/testSuites.ts:276GET/test-suites/:id/access
List who a suite is shared with.
List who a suite is shared with.
Returns the owner separately (they hold an implicit ADMIN that has no
grant row), every grant, and the caller's own access so the UI knows
whether to render the management controls at all.
- Auth
- Required — VIEWER
- Status
- 200
- Params
- { id: string }
- Returns
- TestSuiteAccessResponse
apps/api/src/routes/testSuites.ts:773POST/test-suites/:id/access
Share a suite with a person (or, once teams ship, a team).
Share a suite with a person (or, once teams ship, a team).
Identify the grantee by `email` or `userId`; the account must already
exist. Re-sharing with someone who already has a grant updates their role
rather than failing, so the UI can use one code path for both.
- Auth
- Required — ADMIN
- Status
- 201
- Params
- { id: string }
- Body
- ShareTestSuiteInput
- Returns
- TestSuiteGrantResponse
apps/api/src/routes/testSuites.ts:809DELETE/test-suites/:id/access/:grantId
Revoke a share.
Revoke a share.
The owner has no grant row, so this can never remove the owner's access.
- Auth
- Required — ADMIN
- Status
- 204
- Params
- { id: string; grantId: string }
- Returns
- Empty response
apps/api/src/routes/testSuites.ts:922PATCH/test-suites/:id/access/:grantId
Change the role on an existing share.
- Auth
- Required — ADMIN
- Status
- 200
- Params
- { id: string; grantId: string }
- Body
- UpdateTestSuiteGrantInput
- Returns
- TestSuiteGrantResponse
apps/api/src/routes/testSuites.ts:880POST/test-suites/:id/crawl
Queue a discovery crawl for a suite.
Queue a discovery crawl for a suite.
Starts or restarts page discovery unless a recent crawl is already queued
or running.
- Auth
- Required — EDITOR
- Status
- 202
- Params
- { id: string }
- Returns
- CrawlSiteResponse
apps/api/src/routes/testSuites.ts:368GET/test-suites/:id/pages
List discovered pages for a suite.
List discovered pages for a suite.
Returns the sitemap view with crawl state, tracked counts and each page's
outcome in the most recent finished manual run.
- Auth
- Required — VIEWER
- Status
- 200
- Params
- { id: string }
- Returns
- SitePagesResponse
apps/api/src/routes/testSuites.ts:406PATCH/test-suites/:id/pages
Apply a bulk action to discovered pages.
Apply a bulk action to discovered pages.
Tracks, untracks, acknowledges or deletes selected page records within a
suite's discovered sitemap.
- Auth
- Required — EDITOR
- Status
- 200
- Params
- { id: string }
- Body
- SitePageBulkActionInput
- Returns
- SitePageBulkActionResponse
apps/api/src/routes/testSuites.ts:634GET/test-suites/:id/pages/:pageId
Get one discovered page with current baselines.
Get one discovered page with current baselines.
Returns the page, its latest per-viewport baselines and its latest manual
run outcome for the page detail view.
- Auth
- Required — VIEWER
- Status
- 200
- Params
- { id: string; pageId: string }
- Returns
- PageDetailResponse
apps/api/src/routes/testSuites.ts:476GET/test-suites/:id/pages/:pageId/history
Get baseline history for one discovered page.
Get baseline history for one discovered page.
Returns the timeline newest first. Each event includes the previous version
where available so the UI can render before and after without another call.
- Auth
- Required — VIEWER
- Status
- 200
- Params
- { id: string; pageId: string }
- Query
- { viewport?: string }
- Returns
- PageHistoryResponse
apps/api/src/routes/testSuites.ts:562POST/test-suites/:id/run
Queue a new suite run.
Queue a new suite run.
Omit the body for a manual run against the suite base URL, or pass a target
preview URL for a branch diff that does not mutate baselines or GitHub.
- Auth
- Required — EDITOR
- Status
- 202
- Params
- { id: string }
- Body
- RunTestSuiteInput
- Returns
- RunTestSuiteResponse
apps/api/src/routes/testSuites.ts:717