---
title: "List the test suites of a project"
method: GET
path: "/api/projects/{projectId}/test-suites"
tags: ["CI & Test Runs"]
---

# List the test suites of a project

`GET /api/projects/{projectId}/test-suites`

## Request

- Base URL: `https://api.routebase.dev`
- URL: `https://api.routebase.dev/api/projects/{projectId}/test-suites`
- Auth: API key in header `X-API-Key`

The project scoped equivalent of `/api/cli/suites`, which returns the same page
of suites. Use whichever fits the path style of your client.

## Path parameters

- `ProjectId` string, uuid, required

## Query parameters

- `Skip` integer
- `Take` integer

## Headers

- `X-RB-Region` string

## Response `200`

A page of test suites.

- TestSuiteList: A page of test suites.
  - `items` TestSuite[], required: The test suites on this page.
    - `id` string, uuid, required: Public id of the test suite.
    - `name` string, required: Display name of the suite, which is what the CLI resolves when you pass a name.
    - `description` string, nullable: Free-text note on the suite. Null when none was set.
    - `tags` string[], nullable: Labels used to group and filter suites.
    - `testCaseCount` integer, required: How many test cases the suite holds.
    - `authMode` string, required: How the suite authenticates against the target API.
    - `authType` string, nullable: The concrete scheme when the suite carries its own credentials, for example bearer or basic.
    - `createdAt` string, date-time, required: When the suite was created, in UTC.
    - `modifiedAt` string, date-time, nullable: When the suite was last changed, in UTC. Null when it was never edited.
    - `fixtureScopeJson` string, nullable: Fixture scope of the suite, as JSON.
    - `testSuiteFolderId` string, uuid, nullable: Folder the suite sits in, or null at the root.
  - `totalCount` integer, required: Total number of suites, ignoring paging.

## Other responses

- `401`: The API key is missing, invalid, expired or revoked. A US organization calling without `X-RB-Region: us` also lands here, because the request reached the wrong region.
- `403`: The key is valid but lacks the permission or the project scope for this call. A scoped key is also refused on organization level operations by design.
- `404`: The resource does not exist, or it belongs to another organization or project. Both cases answer the same way on purpose, so the API cannot be used to probe for foreign identifiers.
- `429`: The rate limit was exceeded. The `Retry-After` header gives the seconds to wait.

---

[API](https://skmtc.dev/routebase/apis/routebase-public-api.md) · [All operations](https://skmtc.dev/routebase/apis/routebase-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/routebase/apis/routebase-public-api/revisions/7187df489f27?raw)
