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

# List projects

`GET /v1/projects`

## Request

- Base URL: `https://api.masko.ai`
- URL: `https://api.masko.ai/v1/projects`
- Auth: HTTP bearer

Returns all projects owned by the authenticated user, paginated. Projects are the top-level containers for mascots. No credit cost.

Select Masko-API-Version: 2026-09-26 (or api_version=2026-09-26) for the canonical mascot contract shown first. Existing unversioned clients keep legacy collection fields. A mascot_id query filter also selects the canonical contract. Mixing identifier names returns 400.

## Query parameters

- `limit` number: Page size. 1 to 100. Defaults to 50.
- `offset` number, nullable: Number of records to skip. Defaults to 0.
- `cursor` string: Opaque next_cursor from the previous page. Use instead of offset.
- `api_version` '2026-09-26' | 'legacy'

## Headers

- `Masko-API-Version` '2026-09-26' | 'legacy'

## Response `200`

List of projects

- ProjectListResponse
  - `data` Project[], required
    - `object` 'project': Resource type. Always "project".
    - `id` string, uuid, required
    - `name` string, required
    - `organization_id` string, uuid, nullable, required
    - `created_at` string, required
    - `updated_at` string, required
  - `meta` Meta, required
    - `pagination` Pagination
      - `total` integer, required
      - `limit` integer, required
      - `offset` integer, required
      - `has_more` boolean, required
      - `next_cursor` string, nullable: Pass as the cursor query parameter to get the next page. Null on the last page.

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict

---

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