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

# List all projects

`GET /projects`

Returns a paginated list of projects. Use the `select` parameter for a simplified dropdown response.

## Query parameters

- `select` string
- `status` 'active' | 'proposed' | 'completed' | 'on hold' | 'archived' | 'canceled'
- `type` 'hourly' | 'fixed' | 'non-billable'
- `client_id` integer
- `search` string
- `sort` 'project_start' | 'project_name' | 'type' | 'project_status' | 'created_at' | 'client_id' | 'hours' | 'collected' | 'cost' | 'profit'
- `direction` 'asc' | 'desc'
- `per_page` integer

## Response `200`

Successful response

- object
  - `data` Project[]
    - `id` integer
    - `team_id` integer
    - `client_id` integer, nullable
    - `name` string
    - `type` 'hourly' | 'fixed' | 'non-billable'
    - `status` 'active' | 'proposed' | 'completed' | 'on hold' | 'archived' | 'canceled' | 'inactive'
    - `start` string, nullable
    - `end` string, nullable
    - `start_date` string, date, nullable
    - `end_date` string, date, nullable
    - `budget` number, nullable
    - `budget_used` number
    - `budget_remaining` number
    - `budget_reset` 'weekly' | 'monthly' | 'quarterly' | 'yearly', nullable
    - `track_unbilled_hours_expected_revenue` boolean
    - `track_unbilled_fixed_expected_revenue` boolean
    - `total_hours_recorded` number
    - `hours` number
    - `hours_budget` string
    - `hours_recorded` string
    - `hours_budget_percentage` number
    - `collected` number
    - `cost` number
    - `profit` number
    - `actual_rate` number
    - `client` object
      - `id` integer, nullable
      - `name` string
    - `users` object[]
      - `id` integer
      - `name` string
      - `avatar` string, nullable
  - `meta` PaginatedResponse — Paginated response wrapper
    - `data` object[]
    - `meta` object
      - `pagination` object
        - `total` integer
        - `count` integer
        - `per_page` integer
        - `current_page` integer
        - `total_pages` integer

## Other responses

- `401` — Unauthenticated

---

[API](https://skmtc.net/harpoonapp/apis/harpoon-api-documentation.md) · [All operations](https://skmtc.net/harpoonapp/apis/harpoon-api-documentation/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/harpoonapp/harpoon-api-documentation/revisions/e8fd192f94c6/schema)
