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

# List projects

`GET /api/v1/projects`

## Request

- Base URL: `https://previewdrop.dev`
- URL: `https://previewdrop.dev/api/v1/projects`
- Auth: HTTP bearer

Returns all projects for your workspace. Use the optional `githubRepo` query parameter to look up a specific project by its GitHub repository slug (e.g. `owner/repo`). This is useful in CI scripts to resolve a project ID from the repo name without hardcoding a UUID.

## Query parameters

- `githubRepo` string

## Response `200`

OK

- object
  - `projects` object[], required
    - `id` string, uuid
    - `name` string
    - `github_repo` string
    - `default_branch` string
    - `auto_preview` boolean
    - `start_cmd` string, nullable: Custom start command override. Overrides the auto-detected start command. e.g. `python app.py`
    - `build_cmd` string, nullable: Custom build command override. e.g. `npm run build`
    - `install_cmd` string, nullable: Custom install command override. e.g. `pip install -r requirements.txt`
    - `created_at` string, date-time
    - `updated_at` string, date-time

## Other responses

- `401`: Missing or invalid API key.
- `429`: You have exceeded the rate limit. Check the `Retry-After` header for when to resume. The limit value reflects the specific endpoint's cap (10, 60, or 120 req/60s — see Rate Limits in the overview).
- `500`: Internal server error.

---

[API](https://skmtc.dev/previewdrop/apis/previewdrop-api.md) · [All operations](https://skmtc.dev/previewdrop/apis/previewdrop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/previewdrop/apis/previewdrop-api/revisions/0742e253496b?raw)
