---
title: "List projects"
method: POST
path: "/v2/projects.listProjects"
tags: ["projects"]
---

# List projects

`POST /v2/projects.listProjects`

Retrieve a paginated list of projects in your workspace.

Use this to build project management dashboards or to enumerate projects for administrative purposes. Results are ordered by project id and returned in pages. When `hasMore` is true, pass the returned `cursor` to fetch the next page.

**Required Permissions**

Your root key must have the following permission:
- `project.*.read_project` (to read projects in your workspace)

## Request body

- V2ProjectsListProjectsRequestBody
  - `limit` integer — Maximum number of projects to return per request. Balance between response size and number of pagination calls needed.
  - `cursor` string — Pagination cursor from a previous response to fetch the next page. Use when `hasMore: true` in the previous response.
  - `search` string — Free-form text to filter projects. Returns projects whose ID, name, or slug contains the search string. Matching is case-insensitive.

## Response `200`

Successfully retrieved a paginated list of projects. Use the pagination cursor for additional results when `hasMore: true`.

- V2ProjectsListProjectsResponseBody
  - `meta` Meta, required — Metadata object included in every API response. This provides context about the request and is essential for debugging, audit trails, and support inquiries. The `requestId` is particularly important when troubleshooting issues with the Unkey support team.
    - `requestId` string, required — A unique id for this request. Always include this ID when contacting support about a specific API request. This identifier allows Unkey's support team to trace the exact request through logs and diagnostic systems to provide faster assistance.
  - `data` Project[], required — Array of projects in the workspace, ordered by project id.
    - `id` string, required — The unique identifier of the project, generated by Unkey.
    - `name` string, required — Human-readable name for this project.
    - `slug` string, required — URL-safe handle for this project, unique within your workspace. This is the caller-defined identifier used to reference the project in get, update, and delete operations.
    - `createdAt` integer, required — Unix timestamp in milliseconds when the project was created.
    - `updatedAt` integer — Unix timestamp in milliseconds when the project was last updated. Omitted if the project has never been updated.
    - `deleteProtection` boolean, required — Whether delete protection is enabled for this project. When true, the project cannot be deleted until protection is disabled.
  - `pagination` Pagination, required — Pagination metadata for list endpoints. Provides information necessary to traverse through large result sets efficiently using cursor-based pagination.
    - `cursor` string — Opaque pagination token for retrieving the next page of results. Include this exact value in the cursor field of subsequent requests. Cursors are temporary and may expire after extended periods.
    - `hasMore` boolean, required — Indicates whether additional results exist beyond this page. When true, use the cursor to fetch the next page. When false, you have reached the end of the result set.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden - Insufficient permissions (requires `project.*.read_project`)
- `429` — Too Many Requests
- `500` — Internal server error

---

[API](https://skmtc.net/unkeyed/apis/unkey-api.md) · [All operations](https://skmtc.net/unkeyed/apis/unkey-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/unkeyed/unkey-api/versions/fa78aafac89c/schema)
