# REST API endpoints for Projects

Use the REST API to manage Projects

> [!NOTE]
> Most endpoints use `Authorization: Bearer <YOUR-TOKEN>` and `Accept: application/vnd.github+json` headers, plus `X-GitHub-Api-Version: 2022-11-28`. Curl examples below omit these standard headers for brevity.

## List projects for organization

```
GET /orgs/{org}/projectsV2
```

List all projects owned by a specific organization accessible by the authenticated user.

### Parameters

#### Headers

- **`accept`** (string)
  Setting to `application/vnd.github+json` is recommended.

#### Path and query parameters

- **`org`** (string) (required)
  The organization name. The name is not case sensitive.

- **`q`** (string)
  Limit results to projects of the specified type.

- **`before`** (string)
  A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see "Using pagination in the REST API."

- **`after`** (string)
  A cursor, as given in the Link header. If specified, the query only searches for results after this cursor. For more information, see "Using pagination in the REST API."

- **`per_page`** (integer)
  The number of results per page (max 100). For more information, see "Using pagination in the REST API."
  Default: `30`

### HTTP response status codes

- **200** - OK

- **304** - Not modified

- **401** - Requires authentication

- **403** - Forbidden

### Code examples

#### Example

**Request:**

```curl
curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/projectsV2
```

**Response schema (Status: 200):**

Array of `Projects v2 Project`:
  * `id`: required, number
  * `node_id`: required, string
  * `owner`: required, `Simple User`:
    * `name`: string or null
    * `email`: string or null
    * `login`: required, string
    * `id`: required, integer, format: int64
    * `node_id`: required, string
    * `avatar_url`: required, string, format: uri
    * `gravatar_id`: required, string or null
    * `url`: required, string, format: uri
    * `html_url`: required, string, format: uri
    * `followers_url`: required, string, format: uri
    * `following_url`: required, string
    * `gists_url`: required, string
    * `starred_url`: required, string
    * `subscriptions_url`: required, string, format: uri
    * `organizations_url`: required, string, format: uri
    * `repos_url`: required, string, format: uri
    * `events_url`: required, string
    * `received_events_url`: required, string, format: uri
    * `type`: required, string
    * `site_admin`: required, boolean
    * `starred_at`: string
    * `user_view_type`: string
  * `creator`: required, `Simple User` (see above)
  * `title`: required, string
  * `description`: required, string or null
  * `public`: required, boolean
  * `closed_at`: required, string or null, format: date-time
  * `created_at`: required, string, format: date-time
  * `updated_at`: required, string, format: date-time
  * `number`: required, integer
  * `short_description`: required, string or null
  * `deleted_at`: required, string or null, format: date-time
  * `deleted_by`: required, any of:
    * **null**
    * **Simple User** (see above)
  * `state`: string, enum: `open`, `closed`
  * `latest_status_update`: any of:
    * **null**
    * **Projects v2 Status Update**
      * `id`: required, number
      * `node_id`: required, string
      * `project_node_id`: string
      * `creator`: `Simple User` (see above)
      * `created_at`: required, string, format: date-time
      * `updated_at`: required, string, format: date-time
      * `status`: string or null, enum: `INACTIVE`, `ON_TRACK`, `AT_RISK`, `OFF_TRACK`, `COMPLETE`, `null`
      * `start_date`: string, format: date
      * `target_date`: string, format: date
      * `body`: string or null
  * `is_template`: boolean

## Get project for organization

```
GET /orgs/{org}/projectsV2/{project_number}
```

Get a specific organization-owned project.

### Parameters

#### Headers

- **`accept`** (string)
  Setting to `application/vnd.github+json` is recommended.

#### Path and query parameters

- **`project_number`** (integer) (required)
  The project's number.

- **`org`** (string) (required)
  The organization name. The name is not case sensitive.

### HTTP response status codes

- **200** - OK

- **304** - Not modified

- **401** - Requires authentication

- **403** - Forbidden

### Code examples

#### Example

**Request:**

```curl
curl -L \
  -X GET \
  https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER
```

**Response schema (Status: 200):**

* `id`: required, number
* `node_id`: required, string
* `owner`: required, `Simple User`:
  * `name`: string or null
  * `email`: string or null
  * `login`: required, string
  * `id`: required, integer, format: int64
  * `node_id`: required, string
  * `avatar_url`: required, string, format: uri
  * `gravatar_id`: required, string or null
  * `url`: required, string, format: uri
  * `html_url`: required, string, format: uri
  * `followers_url`: required, string, format: uri
  * `following_url`: required, string
  * `gists_url`: required, string
  * `starred_url`: required, string
  * `subscriptions_url`: required, string, format: uri
  * `organizations_url`: required, string, format: uri
  * `repos_url`: required, string, format: uri
  * `events_url`: required, string
  * `received_events_url`: required, string, format: uri
  * `type`: required, string
  * `site_admin`: required, boolean
  * `starred_at`: string
  * `user_view_type`: string
* `creator`: required, `Simple User` (see above)
* `title`: required, string
* `description`: required, string or null
* `public`: required, boolean
* `closed_at`: required, string or null, format: date-time
* `created_at`: required, string, format: date-time
* `updated_at`: required, string, format: date-time
* `number`: required, integer
* `short_description`: required, string or null
* `deleted_at`: required, string or null, format: date-time
* `deleted_by`: required, any of:
  * **null**
  * **Simple User** (see above)
* `state`: string, enum: `open`, `closed`
* `latest_status_update`: any of:
  * **null**
  * **Projects v2 Status Update**
    * `id`: required, number
    * `node_id`: required, string
    * `project_node_id`: string
    * `creator`: `Simple User` (see above)
    * `created_at`: required, string, format: date-time
    * `updated_at`: required, string, format: date-time
    * `status`: string or null, enum: `INACTIVE`, `ON_TRACK`, `AT_RISK`, `OFF_TRACK`, `COMPLETE`, `null`
    * `start_date`: string, format: date
    * `target_date`: string, format: date
    * `body`: string or null
* `is_template`: boolean

## List projects for user

```
GET /users/{username}/projectsV2
```

List all projects owned by a specific user accessible by the authenticated user.

### Parameters

#### Headers

- **`accept`** (string)
  Setting to `application/vnd.github+json` is recommended.

#### Path and query parameters

- **`username`** (string) (required)
  The handle for the GitHub user account.

- **`q`** (string)
  Limit results to projects of the specified type.

- **`before`** (string)
  A cursor, as given in the Link header. If specified, the query only searches for results before this cursor. For more information, see "Using pagination in the REST API."

- **`after`** (string)
  A cursor, as given in the Link header. If specified, the query only searches for results after this cursor. For more information, see "Using pagination in the REST API."

- **`per_page`** (integer)
  The number of results per page (max 100). For more information, see "Using pagination in the REST API."
  Default: `30`

### HTTP response status codes

- **200** - OK

- **304** - Not modified

- **401** - Requires authentication

- **403** - Forbidden

### Code examples

#### Example

**Request:**

```curl
curl -L \
  -X GET \
  https://api.github.com/users/USERNAME/projectsV2
```

**Response schema (Status: 200):**

Same response schema as [List projects for organization](#list-projects-for-organization).

## Get project for user

```
GET /users/{username}/projectsV2/{project_number}
```

Get a specific user-owned project.

### Parameters

#### Headers

- **`accept`** (string)
  Setting to `application/vnd.github+json` is recommended.

#### Path and query parameters

- **`project_number`** (integer) (required)
  The project's number.

- **`username`** (string) (required)
  The handle for the GitHub user account.

### HTTP response status codes

- **200** - OK

- **304** - Not modified

- **401** - Requires authentication

- **403** - Forbidden

### Code examples

#### Example

**Request:**

```curl
curl -L \
  -X GET \
  https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER
```

**Response schema (Status: 200):**

Same response schema as [Get project for organization](#get-project-for-organization).