---
title: "List projects"
method: GET
path: "/api/v1/projects"
tags: ["Projects"]
---

# List projects

`GET /api/v1/projects`

## Request

- Base URL: `https://api.studio.kaitoi.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.studio.kaitoi.io/api/v1/projects`
- Auth: HTTP bearer

Returns projects visible to the authenticated API key owner. Results are ordered by most recently updated project first and paginated with opaque keyset cursors.

## Query parameters

- `limit` integer, nullable: Maximum number of projects to return. Defaults to 50; capped at 200.
- `cursor` string, nullable: Opaque cursor returned from the previous page.
- `externalId` string, nullable: Filter by developer-provided external project identifier.
- `externalUserId` string, nullable: Filter by developer-provided end-user identifier.
- `externalWorkspaceId` string, nullable: Filter by developer-provided workspace/team identifier.
- `search` string, nullable: Case-insensitive project-name search.

## Headers

- `authorization` string, nullable

## Response `200`

A page of project summaries.

- PublicListResponsePublicProjectSummary
  - `data` PublicProjectSummary[], required: Items returned for this page.
    - `id` string, required: Stable project identifier.
    - `name` string, required: Project display name.
    - `externalId` string, nullable: Developer-provided external project/workspace identifier.
    - `externalUserId` string, nullable: Developer-provided identifier for the developer's own end user.
    - `externalWorkspaceId` string, nullable: Developer-provided identifier for the developer's own workspace/team.
    - `nodeCount` integer, required: Number of nodes in the project graph.
    - `createdAt` string, date-time, nullable: Project creation timestamp, when available.
    - `updatedAt` string, date-time, nullable: Most recent project update timestamp, when available.
    - `thumbnailUrl` string, nullable: Short-lived signed thumbnail URL, when a project thumbnail is available.
    - `thumbnailExpiresAt` string, date-time, nullable: Expiration timestamp for thumbnailUrl, when present.
  - `nextCursor` string, nullable: Opaque cursor for the next page. Omitted when there are no more results.
  - `hasMore` boolean, required: True when another page is available.

## Other responses

- `401`: Missing, malformed, expired, or revoked bearer token.
- `403`: The API key lacks the required scope or account capability.
- `422`: Validation Error
- `429`: The client or API key exceeded the REST API rate limit.
- `503`: The shared REST API rate limiter is temporarily unavailable.

---

[API](https://skmtc.dev/kaitoi/apis/kaitoi-rest-api.md) · [All operations](https://skmtc.dev/kaitoi/apis/kaitoi-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kaitoi/apis/kaitoi-rest-api/revisions/239a74aa2c64?raw)
