---
title: "Get a project by ID"
method: GET
path: "/projects/{id}"
tags: ["Projects"]
---

# Get a project by ID

`GET /projects/{id}`

Returns a single project with its frameworks, owner name, members, and approval status.

## Path parameters

- `id` integer, required

## Response `200`

Project found

- object
  - `message` string
  - `data` ProjectDetail
    - `id` integer
    - `uc_id` string, nullable
    - `project_title` string
    - `owner` integer
    - `start_date` string, date-time, nullable
    - `geography` integer, nullable
    - `ai_risk_classification` 'Prohibited' | 'High risk' | 'Limited risk' | 'Minimal risk' | 'GPAI' | 'General Risk' — EU AI Act risk classification level
    - `type_of_high_risk_role` 'Deployer' | 'Provider' — Role of the organization under the EU AI Act for high-risk systems
    - `use_case_category` string, nullable
    - `use_case_purpose` string, nullable
    - `use_case_audience` string, nullable
    - `deployment_context` string, nullable
    - `goal` string, nullable
    - `target_industry` string, nullable
    - `description` string, nullable
    - `status` 'Not started' | 'In progress' | 'Under review' | 'Completed' | 'Closed' | 'On hold' | 'Rejected' — Current lifecycle status of the project
    - `last_updated` string, date-time, nullable
    - `last_updated_by` integer, nullable
    - `created_at` string, date-time
    - `is_organizational` boolean
    - `is_demo` boolean
    - `_source` string, nullable
    - `framework` ProjectFramework[]
      - `project_framework_id` integer
      - `framework_id` integer
      - `name` string
    - `members` integer[]
    - `owner_name` string
    - `has_pending_approval` boolean
    - `approval_status` 'pending' | 'rejected' | 'null', nullable

## Other responses

- `404` — Project not found
- `500` — Internal server error

## Changes

- **2026-08-26** `3b138b306b5b` — 9 breaking, 4 warning, 15 info
  - the response property `data/allOf[#/components/schemas/Project]/geography` became nullable for the status `200`
  - the response property `data/allOf[#/components/schemas/Project]/last_updated` became nullable for the status `200`
  - the response property `data/allOf[#/components/schemas/Project]/last_updated_by` became nullable for the status `200`
  - the response property `data/allOf[#/components/schemas/Project]/start_date` became nullable for the status `200`
  - …24 more
- **2026-04-21** `55cdc040840c` — 4 info
  - added the media type `application/json` for the response with the status `200`
  - added the media type `application/json` for the response with the status `500`
  - added the non-success response with the status `404`
  - removed the non-success response with the status `401`
- **2026-04-05** `c419b1e72a65` — 2 breaking, 5 info
  - for the `path` request parameter `id`, the type/format was changed from `string`/`` to `integer`/``
  - removed the media type `application/json` for the response with the status `200`
  - api operation id `getProjectById` was added
  - the endpoint scheme security `bearerAuth` was added to the API
  - …3 more
- …earlier changes not shown

[Full history](https://skmtc.dev/verifywise-ai/apis/verifywise-api/changes/projects/:id/get.md)

---

[API](https://skmtc.dev/verifywise-ai/apis/verifywise-api.md) · [All operations](https://skmtc.dev/verifywise-ai/apis/verifywise-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/verifywise-ai/verifywise-api/revisions/3b138b306b5b/schema)
