Use the REST API to manage Project fields
Note
Most endpoints use Authorization: Bearer <YOUR-TOKEN> and Accept: application/vnd.github+json headers, plus X-GitHub-Api-Version: 2026-03-10. Curl examples below omit these standard headers for brevity.
GET /orgs/{org}/projectsV2/{project_number}/fields
List all fields for a specific organization-owned project.
accept (string)application/vnd.github+json is recommended.project_number (integer) (required)
The project's number.
org (string) (required)
The organization name. The name is not case sensitive.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
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."
200 - OK
304 - Not modified
401 - Requires authentication
403 - Forbidden
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER/fields
Response schema (Status: 200):
Array of Projects v2 Field:
id: required, integerissue_field_id: integernode_id: stringproject_url: required, stringname: required, stringdata_type: required, string, enum: assignees, linked_pull_requests, reviewers, labels, milestone, repository, title, text, single_select, number, date, iteration, issue_type, parent_issue, sub_issues_progressoptions: array of Projects v2 Single Select Option:
id: required, stringname: required, object:
raw: required, stringhtml: required, stringdescription: required, object:
raw: required, stringhtml: required, stringcolor: required, stringconfiguration: object:
start_day: integerduration: integeriterations: array of Projects v2 Iteration Setting:
id: required, stringstart_date: required, string, format: dateduration: required, integertitle: required, object:
raw: required, stringhtml: required, stringcompleted: required, booleancreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timePOST /orgs/{org}/projectsV2/{project_number}/fields
Add a field to an organization-owned project.
accept (string)application/vnd.github+json is recommended.project_number (integer) (required)
The project's number.
org (string) (required)
The organization name. The name is not case sensitive.
issue_field_id (integer) (required)
The ID of the IssueField to create the field for.
name (string) (required)
The name of the field.
data_type (string) (required)
The field's data type.
Can be one of: iteration
single_select_options (array of objects) (required)
The options available for single select fields. At least one option must be provided when creating a single select field.
name (string)color (string)BLUE, GRAY, GREEN, ORANGE, PINK, PURPLE, RED, YELLOWdescription (string)iteration_configuration (object) (required)
The configuration for iteration fields.
start_date (string) (required)duration (integer) (required)iterations (array of objects)title (string) (required)start_date (string) (required)duration (integer) (required)201 - Response for adding a field to an organization-owned project.
304 - Not modified
401 - Requires authentication
403 - Forbidden
422 - Validation failed, or the endpoint has been spammed.
Request:
curl -L \
-X POST \
https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Team notes",
"data_type": "text"
}'
Response schema (Status: 201):
id: required, integerissue_field_id: integernode_id: stringproject_url: required, stringname: required, stringdata_type: required, string, enum: assignees, linked_pull_requests, reviewers, labels, milestone, repository, title, text, single_select, number, date, iteration, issue_type, parent_issue, sub_issues_progressoptions: array of Projects v2 Single Select Option:
id: required, stringname: required, object:
raw: required, stringhtml: required, stringdescription: required, object:
raw: required, stringhtml: required, stringcolor: required, stringconfiguration: object:
start_day: integerduration: integeriterations: array of Projects v2 Iteration Setting:
id: required, stringstart_date: required, string, format: dateduration: required, integertitle: required, object:
raw: required, stringhtml: required, stringcompleted: required, booleancreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timeRequest:
curl -L \
-X POST \
https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Story points",
"data_type": "number"
}'
Response schema (Status: 201):
id: required, integerissue_field_id: integernode_id: stringproject_url: required, stringname: required, stringdata_type: required, string, enum: assignees, linked_pull_requests, reviewers, labels, milestone, repository, title, text, single_select, number, date, iteration, issue_type, parent_issue, sub_issues_progressoptions: array of Projects v2 Single Select Option:
id: required, stringname: required, object:
raw: required, stringhtml: required, stringdescription: required, object:
raw: required, stringhtml: required, stringcolor: required, stringconfiguration: object:
start_day: integerduration: integeriterations: array of Projects v2 Iteration Setting:
id: required, stringstart_date: required, string, format: dateduration: required, integertitle: required, object:
raw: required, stringhtml: required, stringcompleted: required, booleancreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timeRequest:
curl -L \
-X POST \
https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Due date",
"data_type": "date"
}'
Response schema (Status: 201):
id: required, integerissue_field_id: integernode_id: stringproject_url: required, stringname: required, stringdata_type: required, string, enum: assignees, linked_pull_requests, reviewers, labels, milestone, repository, title, text, single_select, number, date, iteration, issue_type, parent_issue, sub_issues_progressoptions: array of Projects v2 Single Select Option:
id: required, stringname: required, object:
raw: required, stringhtml: required, stringdescription: required, object:
raw: required, stringhtml: required, stringcolor: required, stringconfiguration: object:
start_day: integerduration: integeriterations: array of Projects v2 Iteration Setting:
id: required, stringstart_date: required, string, format: dateduration: required, integertitle: required, object:
raw: required, stringhtml: required, stringcompleted: required, booleancreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timeRequest:
curl -L \
-X POST \
https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Priority",
"data_type": "single_select",
"single_select_options": [
{
"name": {
"raw": "Low",
"html": "Low"
},
"color": "GREEN",
"description": {
"raw": "Low priority items",
"html": "Low priority items"
}
},
{
"name": {
"raw": "Medium",
"html": "Medium"
},
"color": "YELLOW",
"description": {
"raw": "Medium priority items",
"html": "Medium priority items"
}
},
{
"name": {
"raw": "High",
"html": "High"
},
"color": "RED",
"description": {
"raw": "High priority items",
"html": "High priority items"
}
}
]
}'
Response schema (Status: 201):
id: required, integerissue_field_id: integernode_id: stringproject_url: required, stringname: required, stringdata_type: required, string, enum: assignees, linked_pull_requests, reviewers, labels, milestone, repository, title, text, single_select, number, date, iteration, issue_type, parent_issue, sub_issues_progressoptions: array of Projects v2 Single Select Option:
id: required, stringname: required, object:
raw: required, stringhtml: required, stringdescription: required, object:
raw: required, stringhtml: required, stringcolor: required, stringconfiguration: object:
start_day: integerduration: integeriterations: array of Projects v2 Iteration Setting:
id: required, stringstart_date: required, string, format: dateduration: required, integertitle: required, object:
raw: required, stringhtml: required, stringcompleted: required, booleancreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timeRequest:
curl -L \
-X POST \
https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Sprint",
"data_type": "iteration",
"iteration_configuration": {
"start_date": "2022-07-01",
"duration": 14,
"iterations": [
{
"title": "Sprint 1",
"start_date": "2022-07-01",
"duration": 14
},
{
"title": "Sprint 2",
"start_date": "2022-07-15",
"duration": 14
}
]
}
}'
Response schema (Status: 201):
id: required, integerissue_field_id: integernode_id: stringproject_url: required, stringname: required, stringdata_type: required, string, enum: assignees, linked_pull_requests, reviewers, labels, milestone, repository, title, text, single_select, number, date, iteration, issue_type, parent_issue, sub_issues_progressoptions: array of Projects v2 Single Select Option:
id: required, stringname: required, object:
raw: required, stringhtml: required, stringdescription: required, object:
raw: required, stringhtml: required, stringcolor: required, stringconfiguration: object:
start_day: integerduration: integeriterations: array of Projects v2 Iteration Setting:
id: required, stringstart_date: required, string, format: dateduration: required, integertitle: required, object:
raw: required, stringhtml: required, stringcompleted: required, booleancreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timeGET /orgs/{org}/projectsV2/{project_number}/fields/{field_id}
Get a specific field for an organization-owned project.
accept (string)application/vnd.github+json is recommended.project_number (integer) (required)
The project's number.
field_id (integer) (required)
The unique identifier of the field.
org (string) (required)
The organization name. The name is not case sensitive.
200 - OK
304 - Not modified
401 - Requires authentication
403 - Forbidden
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/projectsV2/PROJECT_NUMBER/fields/FIELD_ID
Response schema (Status: 200):
Same response schema as Add a field to an organization-owned project..
GET /users/{username}/projectsV2/{project_number}/fields
List all fields for a specific user-owned project.
accept (string)application/vnd.github+json is recommended.project_number (integer) (required)
The project's number.
username (string) (required)
The handle for the GitHub user account.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
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."
200 - OK
304 - Not modified
401 - Requires authentication
403 - Forbidden
Request:
curl -L \
-X GET \
https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER/fields
Response schema (Status: 200):
Same response schema as List project fields for organization.
POST /users/{username}/projectsV2/{project_number}/fields
Add a field to a specified user owned project.
accept (string)application/vnd.github+json is recommended.username (string) (required)
The handle for the GitHub user account.
project_number (integer) (required)
The project's number.
name (string) (required)
The name of the field.
data_type (string) (required)
The field's data type.
Can be one of: iteration
single_select_options (array of objects) (required)
The options available for single select fields. At least one option must be provided when creating a single select field.
name (string)color (string)BLUE, GRAY, GREEN, ORANGE, PINK, PURPLE, RED, YELLOWdescription (string)iteration_configuration (object) (required)
The configuration for iteration fields.
start_date (string) (required)duration (integer) (required)iterations (array of objects)title (string) (required)start_date (string) (required)duration (integer) (required)201 - Created
304 - Not modified
401 - Requires authentication
403 - Forbidden
422 - Validation failed, or the endpoint has been spammed.
Request:
curl -L \
-X POST \
https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Team notes",
"data_type": "text"
}'
Response schema (Status: 201):
Same response schema as Add a field to an organization-owned project..
Request:
curl -L \
-X POST \
https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Story points",
"data_type": "number"
}'
Response schema (Status: 201):
Same response schema as Add a field to an organization-owned project..
Request:
curl -L \
-X POST \
https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Due date",
"data_type": "date"
}'
Response schema (Status: 201):
Same response schema as Add a field to an organization-owned project..
Request:
curl -L \
-X POST \
https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Priority",
"data_type": "single_select",
"single_select_options": [
{
"name": {
"raw": "Low",
"html": "Low"
},
"color": "GREEN",
"description": {
"raw": "Low priority items",
"html": "Low priority items"
}
},
{
"name": {
"raw": "Medium",
"html": "Medium"
},
"color": "YELLOW",
"description": {
"raw": "Medium priority items",
"html": "Medium priority items"
}
},
{
"name": {
"raw": "High",
"html": "High"
},
"color": "RED",
"description": {
"raw": "High priority items",
"html": "High priority items"
}
}
]
}'
Response schema (Status: 201):
Same response schema as Add a field to an organization-owned project..
Request:
curl -L \
-X POST \
https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER/fields \
-d '{
"name": "Sprint",
"data_type": "iteration",
"iteration_configuration": {
"start_date": "2022-07-01",
"duration": 14,
"iterations": [
{
"title": "Sprint 1",
"start_date": "2022-07-01",
"duration": 14
},
{
"title": "Sprint 2",
"start_date": "2022-07-15",
"duration": 14
}
]
}
}'
Response schema (Status: 201):
Same response schema as Add a field to an organization-owned project..
GET /users/{username}/projectsV2/{project_number}/fields/{field_id}
Get a specific field for a user-owned project.
accept (string)application/vnd.github+json is recommended.project_number (integer) (required)
The project's number.
field_id (integer) (required)
The unique identifier of the field.
username (string) (required)
The handle for the GitHub user account.
200 - OK
304 - Not modified
401 - Requires authentication
403 - Forbidden
Request:
curl -L \
-X GET \
https://api.github.com/users/USERNAME/projectsV2/PROJECT_NUMBER/fields/FIELD_ID
Response schema (Status: 200):
Same response schema as Add a field to an organization-owned project..