---
title: "List the caller's projects"
method: GET
path: "/api/projects"
tags: ["Projects"]
---

# List the caller's projects

`GET /api/projects`

## Request

- Base URL: `https://dosai.pro`
- URL: `https://dosai.pro/api/projects`
- Auth: HTTP bearer

Returns every project the authenticated user owns or is a member of. Not available to project-scoped keys.

## Query parameters

- `compact` '1'

## Response `200`

Projects array (returned bare, not wrapped). The list omits `system_prompt`: it is the longest column a project has and nothing reading a list needs it. Fetch one project to get its prompt. With `?compact=1` it also omits `description`.

- ProjectListItem[]
  - `id` string, uuid
  - `name` string
  - `company_name` string
  - `industry` string
  - `description` string
  - `status` 'draft' | 'active' | 'paused' | 'archived'
  - `channel` string
  - `color` string
  - `openai_model` string: Owner/admin only.
  - `token_balance` integer: Balance in US cents.
  - `tokens_used` integer
  - `total_conversations` integer
  - `total_leads` integer
  - `subscription_active` boolean
  - `subscription_expires_at` string, date-time, nullable
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `401`: Missing, invalid, expired or revoked key.
- `403`: Not allowed. Distinguish by `code`: `INSUFFICIENT_SCOPE` (read-only key attempted a mutation), `API_KEY_PROJECT_SCOPE` (project-scoped key reached outside its project), `FORBIDDEN` (the user's role on this project is too low), `ACCOUNT_BANNED`.
- `429`: Too many requests. 120/min per key overall, plus a stricter per-endpoint budget. Retry after the number of seconds in Retry-After.

---

[API](https://skmtc.dev/dosai/apis/dos-ai-public-api.md) · [All operations](https://skmtc.dev/dosai/apis/dos-ai-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dosai/apis/dos-ai-public-api/revisions/38ce5f4e8f50?raw)
