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

# List projects

`GET /v1/projects`

Lists projects, optionally filtered by workspace and name.

## Query parameters

- `sort` union
  - union[]
    - union
      - 'createdAt'
      - '-createdAt'
      - 'updatedAt'
      - '-updatedAt'
      - 'id'
      - '-id'
  - 'createdAt'
  - '-createdAt'
  - 'updatedAt'
  - '-updatedAt'
  - 'id'
  - '-id'
- `page[size]` number
- `page[after]` string
- `page[before]` string
- `filter[workspaceId]` string, uuid
- `filter[workspaceId][eq]` string, uuid
- `filter[name]` string
- `filter[name][eq]` string

## Headers

- `Authorization` string

## Response `200`

Default Response

- object
  - `links` object, required
    - `self` string, uri, required
    - `next` string, uri, nullable, required
    - `prev` string, uri, nullable, required
  - `meta` object, required
    - `count` number, required
  - `data` object[], required
    - `id` string, uuid, required
    - `type` 'project', required
    - `attributes` object, required
      - `workspaceId` string, uuid, required
      - `name` string, required
      - `sourceType` string, required
      - `sourceUri` string, required
      - `repoSubpath` string, required
      - `lastScheduleSyncOk` boolean, nullable, required
      - `lastScheduleSyncAt` string, date-time, nullable, required
      - `lastScheduleSyncResult` union, required
        - object
          - `commitSha` string, nullable, required
          - `created` number, required
          - `updated` number, required
          - `deleted` number, required
          - `skipped` number, required
          - `reason` 'write_failed'
        - object
          - `commitSha` string, nullable, required
          - `failures` object, required
          - `omittedFailures` integer
        - object
          - `commitSha` string, nullable, required
          - `reason` union, required
            - 'workspace_not_reachable'
            - 'byo_unavailable'
            - 'sync_failed'
        - object
          - `commitSha` string, nullable, required
          - `reason` union, required
            - 'schema_validation_failed'
            - 'unreadable_encoding'
            - 'malformed_json'
            - 'non_object_json'
            - 'invalid_project_name'
          - `message` string, required
          - `issues` object[]
            - `code` string, required
            - `message` string, required
            - `path` union[], required
              - …
      - `createdBy` string, uuid, required
      - `createdAt` string, date-time, required
      - `updatedAt` string, date-time, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Default Response
- `404` — Not Found
- `500` — Internal Server Error

## Changes

- **2026-09-15** `d50a02b79ad3` — 2 breaking, 2 info
  - the response's body type changed from `object` to no type for status `403`
  - removed the required property `error` from the response with the `403` status
  - added `subschema #1, subschema #2` to the response body `anyOf` list for the response status `403`
  - added the optional property `data/items/attributes/lastScheduleSyncResult/anyOf[subschema #1]/anyOf[subschema #2]/omittedFailures` to the response with the `200` status
- **2026-09-15** `050f3217cf2c` — 3 info
  - added the required property `data/items/attributes/lastScheduleSyncAt` to the response with the `200` status
  - added the required property `data/items/attributes/lastScheduleSyncOk` to the response with the `200` status
  - added the required property `data/items/attributes/lastScheduleSyncResult` to the response with the `200` status

[Change history](https://skmtc.dev/tessl/apis/tessl-api/changes/v1/projects/get.md)

---

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