Projects API

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

Use this API to manage GitLab projects and their associated settings. A project is a central hub forcollaboration where you store code, track issues, and organize team activities.For more information, seecreate a project.

The Projects API contains endpoints that:

  • Retrieve project information and metadata
  • Create, edit, and remove projects
  • Control project visibility, access permissions, and security settings
  • Manage project features like issue tracking, merge requests, and CI/CD
  • Archive and unarchive projects
  • Transfer projects between namespaces
  • Manage deployment and container registry settings

Permissions

Users with:

  • Anydefault role on a project can read the project’s properties.
  • The Owner or Maintainer role on a project can also edit the project’s properties.

Project visibility level

A project in GitLab can have a visibility level of either:

  • Private
  • Internal
  • Public

The visibility level is determined by thevisibility field in the project.

For more information, seeProject visibility.

The fields returned in responses vary based on thepermissions of the authenticated user.

Deprecated attributes

These attributes are deprecated and could be removed in a future version of the REST API.Use the alternative attributes instead.

Deprecated attributeAlternative
tag_listtopics attribute
marked_for_deletion_atmarked_for_deletion_on. Premium and Ultimate tier only.
approvals_before_mergeMerge request approvals API. Premium and Ultimate tier only.

Get a single project

Get a specific project. This endpoint can be accessed without authentication ifthe project is publicly accessible.

GET /projects/:id

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
licensebooleanNoInclude project license data.
statisticsbooleanNoInclude project statistics. Available only to users with at least the Reporter role.
with_custom_attributesbooleanNoIncludecustom attributes in response.(administrators only)

The responses include attributes related to container registry storage size:

  • container_registry_size: Total storage size in bytes used by all container repositories in the project. Updated whenever container images are pushed or deleted. For GitLab Self-Managed instances, requires thecontainer registry metadata database to be enabled.

Example response:

{"id":3,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","default_branch":"main","visibility":"private","ssh_url_to_repo":"git@example.com:diaspora/diaspora-project-site.git","http_url_to_repo":"http://example.com/diaspora/diaspora-project-site.git","web_url":"http://example.com/diaspora/diaspora-project-site","readme_url":"http://example.com/diaspora/diaspora-project-site/blob/main/README.md","tag_list": [//deprecated, use `topics` instead"example","disapora project"  ],"topics": ["example","disapora project"  ],"owner": {"id":3,"name":"Diaspora","created_at":"2013-09-30T13:46:02Z"  },"name":"Diaspora Project Site","name_with_namespace":"Diaspora / Diaspora Project Site","path":"diaspora-project-site","path_with_namespace":"diaspora/diaspora-project-site","issues_enabled":true,"open_issues_count":1,"merge_requests_enabled":true,"jobs_enabled":true,"wiki_enabled":true,"snippets_enabled":false,"can_create_merge_request_in":true,"resolve_outdated_diff_discussions":false,"container_registry_enabled":false,// deprecated, use container_registry_access_level instead"container_registry_access_level":"disabled","security_and_compliance_access_level":"disabled","container_expiration_policy": {"cadence":"7d","enabled":false,"keep_n":null,"older_than":null,"name_regex":null,// to be deprecated in GitLab 13.0 in favor of `name_regex_delete`"name_regex_delete":null,"name_regex_keep":null,"next_run_at":"2020-01-07T21:42:58.658Z"  },"created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","last_activity_at":"2013-09-30T13:46:02Z","creator_id":3,"namespace": {"id":3,"name":"Diaspora","path":"diaspora","kind":"group","full_path":"diaspora","avatar_url":"http://localhost:3000/uploads/group/avatar/3/foo.jpg","web_url":"http://localhost:3000/groups/diaspora"  },"import_url":null,"import_type":null,"import_status":"none","import_error":null,"permissions": {"project_access": {"access_level":10,"notification_level":3    },"group_access": {"access_level":50,"notification_level":3    }  },"archived":false,"avatar_url":"http://example.com/uploads/project/avatar/3/uploads/avatar.png","license_url":"http://example.com/diaspora/diaspora-client/blob/main/LICENSE","license": {"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","nickname":"GNU LGPLv3","html_url":"http://choosealicense.com/licenses/lgpl-3.0/","source_url":"http://www.gnu.org/licenses/lgpl-3.0.txt"  },"shared_runners_enabled":true,"group_runners_enabled":true,"forks_count":0,"star_count":0,"runners_token":"b8bc4a7a29eb76ea83cf79e4908c2b","ci_default_git_depth":50,"ci_forward_deployment_enabled":true,"ci_forward_deployment_rollback_allowed":true,"ci_allow_fork_pipelines_to_run_in_parent_project":true,"ci_id_token_sub_claim_components": ["project_path","ref_type","ref"],"ci_separated_caches":true,"ci_restrict_pipeline_cancellation_role":"developer","ci_pipeline_variables_minimum_override_role":"maintainer","ci_push_repository_for_job_token_allowed":false,"public_jobs":true,"shared_with_groups": [    {"group_id":4,"group_name":"Twitter","group_full_path":"twitter","group_access_level":30    },    {"group_id":3,"group_name":"Gitlab Org","group_full_path":"gitlab-org","group_access_level":10    }  ],"repository_storage":"default","only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":false,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":false,"printing_merge_requests_link_enabled":true,"request_access_enabled":false,"merge_method":"merge","squash_option":"default_on","auto_devops_enabled":true,"auto_devops_deploy_strategy":"continuous","approvals_before_merge":0,// Deprecated. Use merge request approvals API instead."mirror":false,"mirror_user_id":45,"mirror_trigger_builds":false,"only_mirror_protected_branches":false,"mirror_overwrites_diverged_branches":false,"external_authorization_classification_label":null,"packages_enabled":true,"service_desk_enabled":false,"service_desk_address":null,"autoclose_referenced_issues":true,"suggestion_commit_message":null,"enforce_auth_checks_on_uploads":true,"merge_commit_template":null,"squash_commit_template":null,"issue_branch_template":"gitlab/%{id}-%{title}","marked_for_deletion_at":"2020-04-03",// Deprecated in favor of marked_for_deletion_on. Planned for removal in a future version of the REST API."marked_for_deletion_on":"2020-04-03","compliance_frameworks": ["sox" ],"warn_about_potentially_unwanted_characters":true,"secret_push_protection_enabled":false,"statistics": {"commit_count":37,"storage_size":1038090,"repository_size":1038090,"wiki_size" :0,"lfs_objects_size":0,"job_artifacts_size":0,"pipeline_artifacts_size":0,"packages_size":0,"snippets_size":0,"uploads_size":0,"container_registry_size":0  },"container_registry_image_prefix":"registry.example.com/diaspora/diaspora-client","_links": {"self":"http://example.com/api/v4/projects","issues":"http://example.com/api/v4/projects/1/issues","merge_requests":"http://example.com/api/v4/projects/1/merge_requests","repo_branches":"http://example.com/api/v4/projects/1/repository_branches","labels":"http://example.com/api/v4/projects/1/labels","events":"http://example.com/api/v4/projects/1/events","members":"http://example.com/api/v4/projects/1/members","cluster_agents":"http://example.com/api/v4/projects/1/cluster_agents"  },"spp_repository_pipeline_access":false// Only visible if the security_orchestration_policies feature is available}

Users ofGitLab Ultimatecan also see theonly_allow_merge_if_all_status_checks_passedparameters using GitLab 15.5 and later:

{"id":1,"project_id":3,"only_allow_merge_if_all_status_checks_passed":false,...}

If the project is a fork, theforked_from_project field appears in the response.For this field, if the upstream project is private, a valid token for authentication must be provided.The fieldmr_default_target_self appears as well. If this value isfalse, then all merge requeststarget the upstream project by default.

{"id":3,..."mr_default_target_self":false,"forked_from_project":{"id":13083,"description":"GitLab Community Edition","name":"GitLab Community Edition","name_with_namespace":"GitLab.org / GitLab Community Edition","path":"gitlab-foss","path_with_namespace":"gitlab-org/gitlab-foss","created_at":"2013-09-26T06:02:36.000Z","default_branch":"main","tag_list":[],//deprecated, use `topics` instead"topics":[],"ssh_url_to_repo":"git@gitlab.com:gitlab-org/gitlab-foss.git","http_url_to_repo":"https://gitlab.com/gitlab-org/gitlab-foss.git","web_url":"https://gitlab.com/gitlab-org/gitlab-foss","avatar_url":"https://gitlab.com/uploads/-/system/project/avatar/13083/logo-extra-whitespace.png","license_url":"https://gitlab.com/gitlab-org/gitlab/-/blob/main/LICENSE","license": {"key":"mit","name":"MIT License","nickname":null,"html_url":"http://choosealicense.com/licenses/mit/","source_url":"https://opensource.org/licenses/MIT"      },"star_count":3812,"forks_count":3561,"last_activity_at":"2018-01-02T11:40:26.570Z","namespace": {"id":72,"name":"GitLab.org","path":"gitlab-org","kind":"group","full_path":"gitlab-org","parent_id":null      },"repository_storage":"default"   }...}

Templates for issues and merge requests

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

Users ofGitLab Premium or Ultimatecan also see theissues_template andmerge_requests_template parameters for managingissue and merge request description templates.

{"id":3,"issues_template":null,"merge_requests_template":null,...}

List projects

List projects.

List all projects

History

The availability of theweb_based_commit_signing_enabled attribute is controlled by a feature flag.For more information, see the history.This feature is available for testing, but not ready for production use.

Get a list of all visible projects across GitLab for the authenticated user.When accessed without authentication, only public projects with simple fieldsare returned.

GET /projects

Supported attributes:

AttributeTypeRequiredDescription
archivedbooleanNoLimit by archived status.
id_afterintegerNoLimit results to projects with IDs greater than the specified ID.
id_beforeintegerNoLimit results to projects with IDs less than the specified ID.
importedbooleanNoLimit results to projects which were imported from external systems by current user.
include_hiddenbooleanNoInclude hidden projects.(administrators only) Premium and Ultimate only.
include_pending_deletebooleanNoInclude projects pending deletion.(administrators only)
last_activity_afterdatetimeNoLimit results to projects with last activity after specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ)
last_activity_beforedatetimeNoLimit results to projects with last activity before specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ)
membershipbooleanNoLimit by projects that the current user is a member of.
min_access_levelintegerNoLimit by current user minimalrole (access_level).
order_bystringNoReturn projects ordered byid,name,path,created_at,updated_at,star_count,last_activity_at, orsimilarity fields.repository_size,storage_size,packages_size orwiki_size fields are only allowed for administrators.similarity is only available when searching and is limited to projects that the current user is a member of. Default iscreated_at.
ownedbooleanNoLimit by projects explicitly owned by the current user.
repository_checksum_failedbooleanNoLimit projects where the repository checksum calculation has failed. Premium and Ultimate only.
repository_storagestringNoLimit results to projects stored onrepository_storage.(administrators only)
search_namespacesbooleanNoInclude ancestor namespaces when matching search criteria. Default isfalse.
searchstringNoReturn list of projects with apath,name, ordescription matching the search criteria (case-insensitive, substring match). Multiple terms can be provided, separated by an escaped space, either+ or%20, and will be ANDed together. Example:one+two will match substringsone andtwo (in any order).
simplebooleanNoReturn only limited fields for each project. This operation is a no-op without authentication where only simple fields are returned.
sortstringNoReturn projects sorted inasc ordesc order. Default isdesc.
starredbooleanNoLimit by projects starred by the current user.
statisticsbooleanNoInclude project statistics. Available only to users with at least the Reporter role.
topic_idintegerNoLimit results to projects with the assigned topic given by the topic ID.
topicstringNoComma-separated topic names. Limit results to projects that match all of given topics. Seetopics attribute.
updated_afterdatetimeNoLimit results to projects last updated after the specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ).Introduced in GitLab 15.10. For this filter to work, you must also provideupdated_at as theorder_by attribute.
updated_beforedatetimeNoLimit results to projects last updated before the specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ).Introduced in GitLab 15.10. For this filter to work, you must also provideupdated_at as theorder_by attribute.
visibilitystringNoLimit by visibilitypublic,internal, orprivate.
wiki_checksum_failedbooleanNoLimit projects where the wiki checksum calculation has failed. Premium and Ultimate only.
with_custom_attributesbooleanNoIncludecustom attributes in response.(administrator only)
with_issues_enabledbooleanNoLimit by enabled issues feature.
with_merge_requests_enabledbooleanNoLimit by enabled merge requests feature.
with_programming_languagestringNoLimit by projects which use the given programming language.
marked_for_deletion_ondateNoFilter by date when project was marked for deletion.Introduced in GitLab 17.1. Premium and Ultimate only.
activebooleanNoLimit by projects that are not archived and not marked for deletion.

This endpoint supportskeyset pagination for selectedorder_by options.

Whensimple=true or the user is unauthenticated this returns something like:

Example request:

curl --request GET"https://gitlab.example.com/api/v4/projects?simple=true"

Example response:

[  {"id":4,"description":null,"name":"Diaspora Client","name_with_namespace":"Diaspora / Diaspora Client","path":"diaspora-client","path_with_namespace":"diaspora/diaspora-client","created_at":"2013-09-30T13:46:02Z","default_branch":"main","tag_list": ["example","disapora client"    ],"topics": ["example","disapora client"    ],"ssh_url_to_repo":"git@gitlab.example.com:diaspora/diaspora-client.git","http_url_to_repo":"https://gitlab.example.com/diaspora/diaspora-client.git","web_url":"https://gitlab.example.com/diaspora/diaspora-client","avatar_url":"https://gitlab.example.com/uploads/project/avatar/4/uploads/avatar.png","star_count":0,"last_activity_at":"2013-09-30T13:46:02Z","visibility":"public","namespace": {"id":2,"name":"Diaspora","path":"diaspora","kind":"group","full_path":"diaspora","parent_id":null,"avatar_url":null,"web_url":"https://gitlab.example.com/diaspora"    }  },  {...  }

When the user is authenticated andsimple is not set, this endpoint returns something like:

[  {"id":4,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","name":"Diaspora Client","name_with_namespace":"Diaspora / Diaspora Client","path":"diaspora-client","path_with_namespace":"diaspora/diaspora-client","created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","default_branch":"main","tag_list": [//deprecated, use `topics` instead"example","disapora client"    ],"topics": ["example","disapora client"    ],"ssh_url_to_repo":"git@gitlab.example.com:diaspora/diaspora-client.git","http_url_to_repo":"https://gitlab.example.com/diaspora/diaspora-client.git","web_url":"https://gitlab.example.com/diaspora/diaspora-client","readme_url":"https://gitlab.example.com/diaspora/diaspora-client/blob/main/README.md","avatar_url":"https://gitlab.example.com/uploads/project/avatar/4/uploads/avatar.png","forks_count":0,"star_count":0,"last_activity_at":"2022-06-24T17:11:26.841Z","namespace": {"id":3,"name":"Diaspora","path":"diaspora","kind":"group","full_path":"diaspora","parent_id":null,"avatar_url":"https://gitlab.example.com/uploads/project/avatar/6/uploads/avatar.png","web_url":"https://gitlab.example.com/diaspora"    },"container_registry_image_prefix":"registry.gitlab.example.com/diaspora/diaspora-client","_links": {"self":"https://gitlab.example.com/api/v4/projects/4","issues":"https://gitlab.example.com/api/v4/projects/4/issues","merge_requests":"https://gitlab.example.com/api/v4/projects/4/merge_requests","repo_branches":"https://gitlab.example.com/api/v4/projects/4/repository/branches","labels":"https://gitlab.example.com/api/v4/projects/4/labels","events":"https://gitlab.example.com/api/v4/projects/4/events","members":"https://gitlab.example.com/api/v4/projects/4/members","cluster_agents":"https://gitlab.example.com/api/v4/projects/4/cluster_agents"    },"packages_enabled":true,"empty_repo":false,"archived":false,"visibility":"public","resolve_outdated_diff_discussions":false,"container_expiration_policy": {"cadence":"1month","enabled":true,"keep_n":1,"older_than":"14d","name_regex":"","name_regex_keep":".*-main","next_run_at":"2022-06-25T17:11:26.865Z"    },"issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"jobs_enabled":true,"snippets_enabled":true,"container_registry_enabled":true,"service_desk_enabled":true,"can_create_merge_request_in":true,"issues_access_level":"enabled","repository_access_level":"enabled","merge_requests_access_level":"enabled","forking_access_level":"enabled","wiki_access_level":"enabled","builds_access_level":"enabled","snippets_access_level":"enabled","pages_access_level":"enabled","analytics_access_level":"enabled","container_registry_access_level":"enabled","security_and_compliance_access_level":"private","emails_disabled":null,"emails_enabled":null,"shared_runners_enabled":true,"group_runners_enabled":true,"lfs_enabled":true,"creator_id":1,"import_url":null,"import_type":null,"import_status":"none","import_error":null,"open_issues_count":0,"ci_default_git_depth":20,"ci_forward_deployment_enabled":true,"ci_forward_deployment_rollback_allowed":true,"ci_allow_fork_pipelines_to_run_in_parent_project":true,"ci_id_token_sub_claim_components": ["project_path","ref_type","ref"],"ci_job_token_scope_enabled":false,"ci_separated_caches":true,"ci_restrict_pipeline_cancellation_role":"developer","ci_pipeline_variables_minimum_override_role":"maintainer","ci_push_repository_for_job_token_allowed":false,"public_jobs":true,"build_timeout":3600,"auto_cancel_pending_pipelines":"enabled","ci_config_path":"","shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":null,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"request_access_enabled":true,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":true,"printing_merge_request_link_enabled":true,"merge_method":"merge","squash_option":"default_off","enforce_auth_checks_on_uploads":true,"suggestion_commit_message":null,"merge_commit_template":null,"squash_commit_template":null,"issue_branch_template":"gitlab/%{id}-%{title}","auto_devops_enabled":false,"auto_devops_deploy_strategy":"continuous","autoclose_referenced_issues":true,"keep_latest_artifact":true,"runner_token_expiration_interval":null,"external_authorization_classification_label":"","requirements_enabled":false,"requirements_access_level":"enabled","security_and_compliance_enabled":false,"secret_push_protection_enabled":false,"compliance_frameworks": [],"warn_about_potentially_unwanted_characters":true,"permissions": {"project_access":null,"group_access":null    }  },  {...  }]

last_activity_at is updated based onproject activityandproject events.updated_at is updated whenever the project record is changed in the database.

You can filter bycustom attributes with:

GET /projects?custom_attributes[key]=value&custom_attributes[other_key]=other_value

Example request:

curl --globoff --request GET"https://gitlab.example.com/api/v4/projects?custom_attributes[location]=Antarctica&custom_attributes[role]=Developer"

Pagination limits

You can useoffset-based pagination to accessup to 50,000 projects.

Usekeyset pagination to retrieve projects beyond this limit.Keyset pagination supports onlyorder_by=id. Other sorting options aren’t available.

List a user’s projects

Get a list of visible projects owned by the given user. When accessed withoutauthentication, only public projects are returned.

Prerequisites:

  • To viewcertain attributes, you must be an administrator or have the Owner role for the project.

Only the projects in the user’s (specified inuser_id) namespace are returned. Projects owned by the user in any group or subgroups are not returned. An empty list is returned if a profile is set to private.

This endpoint supportskeyset paginationfor selectedorder_by options.

GET /users/:user_id/projects

Supported attributes:

AttributeTypeRequiredDescription
user_idstringYesThe ID or username of the user.
archivedbooleanNoLimit by archived status.
id_afterintegerNoLimit results to projects with IDs greater than the specified ID.
id_beforeintegerNoLimit results to projects with IDs less than the specified ID.
membershipbooleanNoLimit by projects that the current user is a member of.
min_access_levelintegerNoLimit by current user minimalrole (access_level).
order_bystringNoReturn projects ordered byid,name,path,created_at,updated_at,star_count, orlast_activity_at fields. Default iscreated_at.
ownedbooleanNoLimit by projects explicitly owned by the current user.
searchstringNoReturn list of projects matching the search criteria.
simplebooleanNoReturn only limited fields for each project. Without authentication, this operation is a no-op; only simple fields are returned.
sortstringNoReturn projects sorted inasc ordesc order. Default isdesc.
starredbooleanNoLimit by projects starred by the current user.
statisticsbooleanNoInclude project statistics. Available only to users with at least the Reporter role.
updated_afterdatetimeNoLimit results to projects last updated after the specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ).Introduced in GitLab 15.10.
updated_beforedatetimeNoLimit results to projects last updated before the specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ).Introduced in GitLab 15.10.
visibilitystringNoLimit by visibilitypublic,internal, orprivate.
with_custom_attributesbooleanNoIncludecustom attributes in response.(administrator only)
with_issues_enabledbooleanNoLimit by enabled issues feature.
with_merge_requests_enabledbooleanNoLimit by enabled merge requests feature.
with_programming_languagestringNoLimit by projects which use the given programming language.

Example response:

[  {"id":4,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","default_branch":"main","visibility":"private","ssh_url_to_repo":"git@example.com:diaspora/diaspora-client.git","http_url_to_repo":"http://example.com/diaspora/diaspora-client.git","web_url":"http://example.com/diaspora/diaspora-client","readme_url":"http://example.com/diaspora/diaspora-client/blob/main/README.md","tag_list": [//deprecated, use `topics` instead"example","disapora client"    ],"topics": ["example","disapora client"    ],"owner": {"id":3,"name":"Diaspora","created_at":"2013-09-30T13:46:02Z"    },"name":"Diaspora Client","name_with_namespace":"Diaspora / Diaspora Client","path":"diaspora-client","path_with_namespace":"diaspora/diaspora-client","issues_enabled":true,"open_issues_count":1,"merge_requests_enabled":true,"jobs_enabled":true,"wiki_enabled":true,"snippets_enabled":false,"can_create_merge_request_in":true,"resolve_outdated_diff_discussions":false,"container_registry_enabled":false,// deprecated, use container_registry_access_level instead"container_registry_access_level":"disabled","security_and_compliance_access_level":"disabled","created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","last_activity_at":"2013-09-30T13:46:02Z","creator_id":3,"import_url":null,"import_type":null,"import_status":"none","import_error":null,"namespace": {"id":3,"name":"Diaspora","path":"diaspora","kind":"group","full_path":"diaspora"    },"import_status":"none","archived":false,"avatar_url":"http://example.com/uploads/project/avatar/4/uploads/avatar.png","shared_runners_enabled":true,"group_runners_enabled":true,"forks_count":0,"star_count":0,"runners_token":"b8547b1dc37721d05889db52fa2f02","ci_default_git_depth":50,"ci_forward_deployment_enabled":true,"ci_forward_deployment_rollback_allowed":true,"ci_allow_fork_pipelines_to_run_in_parent_project":true,"ci_id_token_sub_claim_components": ["project_path","ref_type","ref"],"ci_separated_caches":true,"ci_restrict_pipeline_cancellation_role":"developer","ci_pipeline_variables_minimum_override_role":"maintainer","ci_push_repository_for_job_token_allowed":false,"public_jobs":true,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":false,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":false,"request_access_enabled":false,"merge_method":"merge","squash_option":"default_on","autoclose_referenced_issues":true,"enforce_auth_checks_on_uploads":true,"suggestion_commit_message":null,"merge_commit_template":null,"squash_commit_template":null,"secret_push_protection_enabled":false,"issue_branch_template":"gitlab/%{id}-%{title}","marked_for_deletion_at":"2020-04-03",// Deprecated in favor of marked_for_deletion_on. Planned for removal in a future version of the REST API."marked_for_deletion_on":"2020-04-03","statistics": {"commit_count":37,"storage_size":1038090,"repository_size":1038090,"wiki_size" :0,"lfs_objects_size":0,"job_artifacts_size":0,"pipeline_artifacts_size":0,"packages_size":0,"snippets_size":0,"uploads_size":0,"container_registry_size":0    },"container_registry_image_prefix":"registry.example.com/diaspora/diaspora-client","_links": {"self":"http://example.com/api/v4/projects","issues":"http://example.com/api/v4/projects/1/issues","merge_requests":"http://example.com/api/v4/projects/1/merge_requests","repo_branches":"http://example.com/api/v4/projects/1/repository_branches","labels":"http://example.com/api/v4/projects/1/labels","events":"http://example.com/api/v4/projects/1/events","members":"http://example.com/api/v4/projects/1/members","cluster_agents":"http://example.com/api/v4/projects/1/cluster_agents"    }  },  {"id":6,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","default_branch":"main","visibility":"private","ssh_url_to_repo":"git@example.com:brightbox/puppet.git","http_url_to_repo":"http://example.com/brightbox/puppet.git","web_url":"http://example.com/brightbox/puppet","readme_url":"http://example.com/brightbox/puppet/blob/main/README.md","tag_list": [//deprecated, use `topics` instead"example","puppet"    ],"topics": ["example","puppet"    ],"owner": {"id":4,"name":"Brightbox","created_at":"2013-09-30T13:46:02Z"    },"name":"Puppet","name_with_namespace":"Brightbox / Puppet","path":"puppet","path_with_namespace":"brightbox/puppet","issues_enabled":true,"open_issues_count":1,"merge_requests_enabled":true,"jobs_enabled":true,"wiki_enabled":true,"snippets_enabled":false,"can_create_merge_request_in":true,"resolve_outdated_diff_discussions":false,"container_registry_enabled":false,// deprecated, use container_registry_access_level instead"container_registry_access_level":"disabled","security_and_compliance_access_level":"disabled","created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","last_activity_at":"2013-09-30T13:46:02Z","creator_id":3,"import_url":null,"import_type":null,"import_status":"none","import_error":null,"namespace": {"id":4,"name":"Brightbox","path":"brightbox","kind":"group","full_path":"brightbox"    },"import_status":"none","import_error":null,"permissions": {"project_access": {"access_level":10,"notification_level":3      },"group_access": {"access_level":50,"notification_level":3      }    },"archived":false,"avatar_url":null,"shared_runners_enabled":true,"group_runners_enabled":true,"forks_count":0,"star_count":0,"runners_token":"b8547b1dc37721d05889db52fa2f02","ci_default_git_depth":0,"ci_forward_deployment_enabled":true,"ci_forward_deployment_rollback_allowed":true,"ci_allow_fork_pipelines_to_run_in_parent_project":true,"ci_id_token_sub_claim_components": ["project_path","ref_type","ref"],"ci_separated_caches":true,"ci_restrict_pipeline_cancellation_role":"developer","ci_pipeline_variables_minimum_override_role":"maintainer","ci_push_repository_for_job_token_allowed":false,"public_jobs":true,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":false,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":false,"request_access_enabled":false,"merge_method":"merge","squash_option":"default_on","auto_devops_enabled":true,"auto_devops_deploy_strategy":"continuous","repository_storage":"default","approvals_before_merge":0,// Deprecated. Use merge request approvals API instead."mirror":false,"mirror_user_id":45,"mirror_trigger_builds":false,"only_mirror_protected_branches":false,"mirror_overwrites_diverged_branches":false,"external_authorization_classification_label":null,"packages_enabled":true,"service_desk_enabled":false,"service_desk_address":null,"autoclose_referenced_issues":true,"enforce_auth_checks_on_uploads":true,"suggestion_commit_message":null,"merge_commit_template":null,"squash_commit_template":null,"secret_push_protection_enabled":false,"issue_branch_template":"gitlab/%{id}-%{title}","statistics": {"commit_count":12,"storage_size":2066080,"repository_size":2066080,"wiki_size" :0,"lfs_objects_size":0,"job_artifacts_size":0,"pipeline_artifacts_size":0,"packages_size":0,"snippets_size":0,"uploads_size":0,"container_registry_size":0    },"container_registry_image_prefix":"registry.example.com/brightbox/puppet","_links": {"self":"http://example.com/api/v4/projects","issues":"http://example.com/api/v4/projects/1/issues","merge_requests":"http://example.com/api/v4/projects/1/merge_requests","repo_branches":"http://example.com/api/v4/projects/1/repository_branches","labels":"http://example.com/api/v4/projects/1/labels","events":"http://example.com/api/v4/projects/1/events","members":"http://example.com/api/v4/projects/1/members","cluster_agents":"http://example.com/api/v4/projects/1/cluster_agents"    }  }]

List projects a user has contributed to

Returns a list of visible projects a given user has contributed to within the past year. For more information about what counts as a contribution,view projects you have contributed to.

GET /users/:user_id/contributed_projects

Supported attributes:

AttributeTypeRequiredDescription
user_idstringYesThe ID or username of the user.
order_bystringNoReturn projects ordered byid,name,path,created_at,updated_at,star_count, orlast_activity_at fields. Default iscreated_at.
simplebooleanNoReturn only limited fields for each project. Without authentication, this operation is a no-op; only simple fields are returned.
sortstringNoReturn projects sorted inasc ordesc order. Default isdesc.

Example request:

curl --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/users/5/contributed_projects"

Example response:

[  {"id":4,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","default_branch":"main","visibility":"private","ssh_url_to_repo":"git@example.com:diaspora/diaspora-client.git","http_url_to_repo":"http://example.com/diaspora/diaspora-client.git","web_url":"http://example.com/diaspora/diaspora-client","readme_url":"http://example.com/diaspora/diaspora-client/blob/main/README.md","tag_list": [//deprecated, use `topics` instead"example","disapora client"    ],"topics": ["example","disapora client"    ],"owner": {"id":3,"name":"Diaspora","created_at":"2013-09-30T13:46:02Z"    },"name":"Diaspora Client","name_with_namespace":"Diaspora / Diaspora Client","path":"diaspora-client","path_with_namespace":"diaspora/diaspora-client","issues_enabled":true,"open_issues_count":1,"merge_requests_enabled":true,"jobs_enabled":true,"wiki_enabled":true,"snippets_enabled":false,"can_create_merge_request_in":true,"resolve_outdated_diff_discussions":false,"container_registry_enabled":false,// deprecated, use container_registry_access_level instead"container_registry_access_level":"disabled","security_and_compliance_access_level":"disabled","created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","last_activity_at":"2013-09-30T13:46:02Z","creator_id":3,"namespace": {"id":3,"name":"Diaspora","path":"diaspora","kind":"group","full_path":"diaspora"    },"import_status":"none","archived":false,"avatar_url":"http://example.com/uploads/project/avatar/4/uploads/avatar.png","shared_runners_enabled":true,"group_runners_enabled":true,"forks_count":0,"star_count":0,"runners_token":"b8547b1dc37721d05889db52fa2f02","public_jobs":true,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":false,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":false,"request_access_enabled":false,"merge_method":"merge","squash_option":"default_on","autoclose_referenced_issues":true,"enforce_auth_checks_on_uploads":true,"suggestion_commit_message":null,"merge_commit_template":null,"squash_commit_template":null,"secret_push_protection_enabled":false,"issue_branch_template":"gitlab/%{id}-%{title}","statistics": {"commit_count":37,"storage_size":1038090,"repository_size":1038090,"lfs_objects_size":0,"job_artifacts_size":0,"pipeline_artifacts_size":0,"packages_size":0,"snippets_size":0,"uploads_size":0,"container_registry_size":0    },"container_registry_image_prefix":"registry.example.com/diaspora/diaspora-client","_links": {"self":"http://example.com/api/v4/projects","issues":"http://example.com/api/v4/projects/1/issues","merge_requests":"http://example.com/api/v4/projects/1/merge_requests","repo_branches":"http://example.com/api/v4/projects/1/repository_branches","labels":"http://example.com/api/v4/projects/1/labels","events":"http://example.com/api/v4/projects/1/events","members":"http://example.com/api/v4/projects/1/members","cluster_agents":"http://example.com/api/v4/projects/1/cluster_agents"    }  },  {"id":6,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","default_branch":"main","visibility":"private","ssh_url_to_repo":"git@example.com:brightbox/puppet.git","http_url_to_repo":"http://example.com/brightbox/puppet.git","web_url":"http://example.com/brightbox/puppet","readme_url":"http://example.com/brightbox/puppet/blob/main/README.md","tag_list": [//deprecated, use `topics` instead"example","puppet"    ],"topics": ["example","puppet"    ],"owner": {"id":4,"name":"Brightbox","created_at":"2013-09-30T13:46:02Z"    },"name":"Puppet","name_with_namespace":"Brightbox / Puppet","path":"puppet","path_with_namespace":"brightbox/puppet","issues_enabled":true,"open_issues_count":1,"merge_requests_enabled":true,"jobs_enabled":true,"wiki_enabled":true,"snippets_enabled":false,"can_create_merge_request_in":true,"resolve_outdated_diff_discussions":false,"container_registry_enabled":false,// deprecated, use container_registry_access_level instead"container_registry_access_level":"disabled","security_and_compliance_access_level":"disabled","created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","last_activity_at":"2013-09-30T13:46:02Z","creator_id":3,"namespace": {"id":4,"name":"Brightbox","path":"brightbox","kind":"group","full_path":"brightbox"    },"import_status":"none","import_error":null,"permissions": {"project_access": {"access_level":10,"notification_level":3      },"group_access": {"access_level":50,"notification_level":3      }    },"archived":false,"avatar_url":null,"shared_runners_enabled":true,"group_runners_enabled":true,"forks_count":0,"star_count":0,"runners_token":"b8547b1dc37721d05889db52fa2f02","public_jobs":true,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":false,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":false,"request_access_enabled":false,"merge_method":"merge","squash_option":"default_on","auto_devops_enabled":true,"auto_devops_deploy_strategy":"continuous","repository_storage":"default","approvals_before_merge":0,// Deprecated. Use merge request approvals API instead."mirror":false,"mirror_user_id":45,"mirror_trigger_builds":false,"only_mirror_protected_branches":false,"mirror_overwrites_diverged_branches":false,"external_authorization_classification_label":null,"packages_enabled":true,"service_desk_enabled":false,"service_desk_address":null,"autoclose_referenced_issues":true,"enforce_auth_checks_on_uploads":true,"suggestion_commit_message":null,"merge_commit_template":null,"squash_commit_template":null,"secret_push_protection_enabled":false,"issue_branch_template":"gitlab/%{id}-%{title}","statistics": {"commit_count":12,"storage_size":2066080,"repository_size":2066080,"lfs_objects_size":0,"job_artifacts_size":0,"pipeline_artifacts_size":0,"packages_size":0,"snippets_size":0,"uploads_size":0,"container_registry_size":0    },"container_registry_image_prefix":"registry.example.com/brightbox/puppet","_links": {"self":"http://example.com/api/v4/projects","issues":"http://example.com/api/v4/projects/1/issues","merge_requests":"http://example.com/api/v4/projects/1/merge_requests","repo_branches":"http://example.com/api/v4/projects/1/repository_branches","labels":"http://example.com/api/v4/projects/1/labels","events":"http://example.com/api/v4/projects/1/events","members":"http://example.com/api/v4/projects/1/members","cluster_agents":"http://example.com/api/v4/projects/1/cluster_agents"    }  }]

Search for projects by name

Search for projects by name that are accessible to the authenticated user. If this endpoint is accessed withoutauthentication, it lists projects that are publicly accessible.

GET /projects

Example attributes:

AttributeTypeRequiredDescription
searchstringYesA string contained in the project name.
order_bystringNoReturn requests ordered byid,name,created_at,star_count, orlast_activity_at fields.
sortstringNoReturn requests sorted inasc ordesc order.

Example request:

curl --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects?search=test"

List attributes

List attributes of a project.

List users

Get the users list of a project.

GET /projects/:id/users

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
searchstringNoSearch for specific users.
skip_usersinteger arrayNoFilter out users with the specified IDs.

Example response:

[  {"id":1,"username":"john_smith","name":"John Smith","state":"active","avatar_url":"http://localhost:3000/uploads/user/avatar/1/cd8.jpeg","web_url":"http://localhost:3000/john_smith"  },  {"id":2,"username":"jack_smith","name":"Jack Smith","state":"blocked","avatar_url":"http://gravatar.com/../e32131cd8.jpeg","web_url":"http://localhost:3000/jack_smith"  }]

List groups

Get a list of ancestor groups for this project.

GET /projects/:id/groups

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
searchstringNoSearch for specific groups.
shared_min_access_levelintegerNoLimit to shared groups with at least thisrole (access_level).
shared_visible_onlybooleanNoLimit to shared groups user has access to.
skip_groupsarray of integersNoSkip the group IDs passed.
with_sharedbooleanNoInclude projects shared with this group. Default isfalse.

Example response:

[  {"id":1,"name":"Foobar Group","avatar_url":"http://localhost:3000/uploads/group/avatar/1/foo.jpg","web_url":"http://localhost:3000/groups/foo-bar","full_name":"Foobar Group","full_path":"foo-bar"  },  {"id":2,"name":"Shared Group","avatar_url":"http://gitlab.example.com/uploads/group/avatar/1/bar.jpg","web_url":"http://gitlab.example.com/groups/foo/bar","full_name":"Shared Group","full_path":"foo/shared"  }]

List shareable groups

Get a list of groups that can be shared with a project

GET /projects/:id/share_locations

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
searchstringNoSearch for specific groups.

Example response:

[  {"id":22,"web_url":"http://127.0.0.1:3000/groups/gitlab-org","name":"Gitlab Org","avatar_url":null,"full_name":"Gitlab Org","full_path":"gitlab-org"  },  {"id":25,"web_url":"http://127.0.0.1:3000/groups/gnuwget","name":"Gnuwget","avatar_url":null,"full_name":"Gnuwget","full_path":"gnuwget"  }]

List a project’s invited groups

Get a list of invited groups in a project. When accessed without authentication, only public invited groups are returned.This endpoint is rate-limited to 60 requests per minute per:

  • User for authenticated users.
  • IP address for unauthenticated users.

By default, this request returns 20 results at a time because the API resultsare paginated.

GET /projects/:id/invited_groups

Supported attributes:

AttributeTypeRequiredDescription
idinteger/stringyesThe ID orURL-encoded path of the group
searchstringnoReturn the list of authorized groups matching the search criteria
min_access_levelintegernoLimit to groups where current user has at least the specifiedrole (access_level)
relationarray of stringsnoFilter the groups by relation (direct or inherited)
with_custom_attributesbooleannoIncludecustom attributes in response (administrators only)

Example response:

[  {"id":35,"web_url":"https://gitlab.example.com/groups/twitter","name":"Twitter","avatar_url":null,"full_name":"Twitter","full_path":"twitter"  }]

List programming languages used

Get the list and usage percentage of programming languages used in a project.

GET /projects/:id/languages

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.

Example request:

curl --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects/5/languages"

Example response:

{"Ruby":66.69,"JavaScript":22.98,"HTML":7.91,"CoffeeScript":2.42}

Manage projects

Manage a project, including creation, deletion, and archival.

Create a project

History

Creates a new project owned by the authenticated user.

If your HTTP repository isn’t publicly accessible, add authentication information to the URLhttps://username:password@gitlab.company.com/group/project.git, wherepassword is a public access key with theapiscope enabled.

POST /projects

Supported general project attributes:

AttributeTypeRequiredDescription
namestringYes (ifpath isn’t provided)The name of the new project. Equals path if not provided.
pathstringYes (ifname isn’t provided)Repository name for new project. Generated based on name if not provided (generated as lowercase with dashes). The path must not start or end with a special character and must not contain consecutive special characters.
allow_merge_on_skipped_pipelinebooleanNoSet whether or not merge requests can be merged with skipped jobs.
approvals_before_mergeintegerNoHow many approvers should approve merge requests by default. To configure approval rules, seeMerge request approvals API.Deprecated in GitLab 16.0. Premium and Ultimate only.
auto_cancel_pending_pipelinesstringNoAuto-cancel pending pipelines. This action toggles between an enabled state and a disabled state; it is not a boolean.
auto_devops_deploy_strategystringNoAuto Deploy strategy (continuous,manual ortimed_incremental).
auto_devops_enabledbooleanNoEnable Auto DevOps for this project.
autoclose_referenced_issuesbooleanNoSet whether auto-closing referenced issues on default branch.
avatarmixedNoImage file for avatar of the project.
build_git_strategystringNoThe Git strategy. Defaults tofetch.
build_timeoutintegerNoThe maximum amount of time, in seconds, that a job can run.
ci_config_pathstringNoThe path to CI configuration file.
container_expiration_policy_attributeshashNoUpdate the image cleanup policy for this project. Accepts:cadence (string),keep_n (integer),older_than (string),name_regex (string),name_regex_delete (string),name_regex_keep (string),enabled (boolean). See thecontainer registry documentation for more information oncadence,keep_n andolder_than values.
container_registry_enabledbooleanNo(Deprecated) Enable container registry for this project. Usecontainer_registry_access_level instead.
default_branchstringNoThedefault branch name. Requiresinitialize_with_readme to betrue.
descriptionstringNoShort project description.
emails_disabledbooleanNo(Deprecated) Disable email notifications. Useemails_enabled instead
emails_enabledbooleanNoEnable email notifications.
external_authorization_classification_labelstringNoThe classification label for the project. Premium and Ultimate only.
group_runners_enabledbooleanNoEnable group runners for this project.
group_with_project_templates_idintegerNoFor group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requiresuse_custom_template to be true. Premium and Ultimate only.
import_urlstringNoURL to import repository from. When the URL value isn’t empty, you must not setinitialize_with_readme totrue. Doing so might result in thefollowing error:not a git repository.
initialize_with_readmebooleanNoWhether to create a Git repository with just aREADME.md file. Default isfalse. When this boolean is true, you must not passimport_url or other attributes of this endpoint which specify alternative contents for the repository. Doing so might result in thefollowing error:not a git repository.
issues_enabledbooleanNo(Deprecated) Enable issues for this project. Useissues_access_level instead.
jobs_enabledbooleanNo(Deprecated) Enable jobs for this project. Usebuilds_access_level instead.
lfs_enabledbooleanNoEnable LFS.
merge_methodstringNoSet the project’smerge method. Can bemerge (merge commit),rebase_merge (merge commit with semi-linear history), orff (fast-forward merge).
merge_pipelines_enabledbooleanNoEnable or disable merged results pipelines.
merge_requests_enabledbooleanNo(Deprecated) Enable merge requests for this project. Usemerge_requests_access_level instead.
merge_trains_enabledbooleanNoEnable or disable merge trains.
merge_trains_skip_train_allowedbooleanNoAllows merge train merge requests to be merged without waiting for pipelines to finish.
mirror_trigger_buildsbooleanNoPull mirroring triggers builds. Premium and Ultimate only.
mirrorbooleanNoEnables pull mirroring in a project. Premium and Ultimate only.
namespace_idintegerNoNamespace for the new project. Specify a group ID or subgroup ID. If not provided, defaults to the current user’s personal namespace.
only_allow_merge_if_all_discussions_are_resolvedbooleanNoSet whether merge requests can only be merged when all the discussions are resolved.
only_allow_merge_if_all_status_checks_passedbooleanNoIndicates that merges of merge requests should be blocked unless all status checks have passed. Defaults to false.Introduced in GitLab 15.5 with feature flagonly_allow_merge_if_all_status_checks_passed disabled by default. Ultimate only.
only_allow_merge_if_pipeline_succeedsbooleanNoSet whether merge requests can only be merged with successful pipelines. This setting is namedPipelines must succeed in the project settings.
packages_enabledbooleanNoEnable or disable packages repository feature.
printing_merge_request_link_enabledbooleanNoShow link to create/view merge request when pushing from the command line.
public_buildsbooleanNo(Deprecated) Iftrue, jobs can be viewed by non-project members. Usepublic_jobs instead.
public_jobsbooleanNoIftrue, jobs can be viewed by non-project members.
repository_object_formatstringNoRepository object format. Defaults tosha1.Introduced in GitLab 16.9.
remove_source_branch_after_mergebooleanNoEnableDelete source branch option by default for all new merge requests.
repository_storagestringNoWhich storage shard the repository is on.(administrator only)
request_access_enabledbooleanNoAllow users to request member access.
resolve_outdated_diff_discussionsbooleanNoAutomatically resolve merge request diffs discussions on lines changed with a push.
shared_runners_enabledbooleanNoEnable instance runners for this project.
show_default_award_emojisbooleanNoShow default emoji reactions.
snippets_enabledbooleanNo(Deprecated) Enable snippets for this project. Usesnippets_access_level instead.
squash_optionstringNoOne ofnever,always,default_on, ordefault_off.
tag_listarrayNoThe list of tags for a project; put array of tags, that should be finally assigned to a project.Deprecated in GitLab 14.0. Usetopics instead.
template_namestringNoWhen used withoutuse_custom_template, name of abuilt-in project template. When used withuse_custom_template, name of a custom project template.
template_project_idintegerNoWhen used withuse_custom_template, project ID of a custom project template. Using a project ID is preferable to usingtemplate_name becausetemplate_name can be ambiguous. Premium and Ultimate only.
topicsarrayNoThe list of topics for a project; put array of topics, that should be finally assigned to a project.
use_custom_templatebooleanNoUse either custominstance orgroup (withgroup_with_project_templates_id) project template. Premium and Ultimate only.
visibilitystringNoSeeproject visibility level.
warn_about_potentially_unwanted_charactersbooleanNoEnable warnings about usage of potentially unwanted characters in this project.
wiki_enabledbooleanNo(Deprecated) Enable wiki for this project. Usewiki_access_level instead.

Project feature visibilitysettings with access control options can be one of:

  • disabled: Disable the feature.
  • private: Enable and set the feature toOnly project members.
  • enabled: Enable and set the feature toEveryone with access.
  • public: Enable and set the feature toEveryone. Only available forpages_access_level.
AttributeTypeRequiredDescription
analytics_access_levelstringNoSet visibility ofanalytics.
builds_access_levelstringNoSet visibility ofpipelines.
container_registry_access_levelstringNoSet visibility ofcontainer registry.
environments_access_levelstringNoSet visibility ofenvironments.
feature_flags_access_levelstringNoSet visibility offeature flags.
forking_access_levelstringNoSet visibility offorks.
infrastructure_access_levelstringNoSet visibility ofinfrastructure management.
issues_access_levelstringNoSet visibility ofissues.
merge_requests_access_levelstringNoSet visibility ofmerge requests.
model_experiments_access_levelstringNoSet visibility ofmachine learning model experiments.
model_registry_access_levelstringNoSet visibility ofmachine learning model registry.
monitor_access_levelstringNoSet visibility ofapplication performance monitoring.
pages_access_levelstringNoSet visibility ofGitLab Pages.
releases_access_levelstringNoSet visibility ofreleases.
repository_access_levelstringNoSet visibility ofrepository.
requirements_access_levelstringNoSet visibility ofrequirements management.
security_and_compliance_access_levelstringNoSet visibility ofsecurity and compliance.
snippets_access_levelstringNoSet visibility ofsnippets.
wiki_access_levelstringNoSet visibility ofwiki.

Example request:

curl --request POST --header"PRIVATE-TOKEN: <your-token>"\     --header"Content-Type: application/json" --data'{        "name": "new_project", "description": "New Project", "path": "new_project",        "namespace_id": "42", "initialize_with_readme": "true"}'\     --url"https://gitlab.example.com/api/v4/projects/"

Create a project for a user

History

Create a project for a user.

Prerequisites:

  • You must be an administrator.

If your HTTP repository isn’t publicly accessible, add authentication information to the URL. For example,https://username:password@gitlab.company.com/group/project.git wherepassword is a public access key with theapiscope enabled.

POST /projects/user/:user_id

Supported general project attributes:

AttributeTypeRequiredDescription
namestringYesThe name of the new project.
user_idintegerYesThe user ID of the project owner.
allow_merge_on_skipped_pipelinebooleanNoSet whether or not merge requests can be merged with skipped jobs.
approvals_before_mergeintegerNoHow many approvers should approve merge requests by default.Deprecated in GitLab 16.0. To configure approval rules, seeMerge request approvals API. Premium and Ultimate only.
auto_cancel_pending_pipelinesstringNoAuto-cancel pending pipelines. This action toggles between an enabled state and a disabled state; it is not a boolean.
auto_devops_deploy_strategystringNoAuto Deploy strategy (continuous,manual ortimed_incremental).
auto_devops_enabledbooleanNoEnable Auto DevOps for this project.
autoclose_referenced_issuesbooleanNoSet whether auto-closing referenced issues on default branch.
avatarmixedNoImage file for avatar of the project.
build_git_strategystringNoThe Git strategy. Defaults tofetch.
build_timeoutintegerNoThe maximum amount of time, in seconds, that a job can run.
ci_config_pathstringNoThe path to CI configuration file.
container_registry_enabledbooleanNo(Deprecated) Enable container registry for this project. Usecontainer_registry_access_level instead.
default_branchstringNoThedefault branch name. Requiresinitialize_with_readme to betrue.
descriptionstringNoShort project description.
emails_disabledbooleanNo(Deprecated) Disable email notifications. Useemails_enabled instead
emails_enabledbooleanNoEnable email notifications.
enforce_auth_checks_on_uploadsbooleanNoEnforceauth checks on uploads.
external_authorization_classification_labelstringNoThe classification label for the project. Premium and Ultimate only.
group_runners_enabledbooleanNoEnable group runners for this project.
group_with_project_templates_idintegerNoFor group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requiresuse_custom_template to be true. Premium and Ultimate only.
import_urlstringNoURL to import repository from.
initialize_with_readmebooleanNofalse by default.
issue_branch_templatestringNoTemplate used to suggest names forbranches created from issues.(Introduced in GitLab 15.6.)
issues_enabledbooleanNo(Deprecated) Enable issues for this project. Useissues_access_level instead.
jobs_enabledbooleanNo(Deprecated) Enable jobs for this project. Usebuilds_access_level instead.
lfs_enabledbooleanNoEnable LFS.
merge_commit_templatestringNoTemplate used to create merge commit message in merge requests.
merge_methodstringNoSet the project’smerge method. Can bemerge (merge commit),rebase_merge (merge commit with semi-linear history), orff (fast-forward merge).
merge_requests_enabledbooleanNo(Deprecated) Enable merge requests for this project. Usemerge_requests_access_level instead.
mirror_trigger_buildsbooleanNoPull mirroring triggers builds. Premium and Ultimate only.
mirrorbooleanNoEnables pull mirroring in a project. Premium and Ultimate only.
namespace_idintegerNoNamespace for the new project (defaults to the current user’s namespace).
only_allow_merge_if_all_discussions_are_resolvedbooleanNoSet whether merge requests can only be merged when all the discussions are resolved.
only_allow_merge_if_all_status_checks_passedbooleanNoIndicates that merges of merge requests should be blocked unless all status checks have passed. Defaults to false.Introduced in GitLab 15.5 with feature flagonly_allow_merge_if_all_status_checks_passed disabled by default. Ultimate only.
only_allow_merge_if_pipeline_succeedsbooleanNoSet whether merge requests can only be merged with successful jobs.
packages_enabledbooleanNoEnable or disable packages repository feature.
pathstringNoCustom repository name for new project. By default generated based on name.
printing_merge_request_link_enabledbooleanNoShow link to create/view merge request when pushing from the command line.
public_buildsbooleanNo(Deprecated) Iftrue, jobs can be viewed by non-project members. Usepublic_jobs instead.
public_jobsbooleanNoIftrue, jobs can be viewed by non-project members.
repository_object_formatstringNoRepository object format. Defaults tosha1.Introduced in GitLab 16.9.
remove_source_branch_after_mergebooleanNoEnableDelete source branch option by default for all new merge requests.
repository_storagestringNoWhich storage shard the repository is on.(administrators only)
request_access_enabledbooleanNoAllow users to request member access.
resolve_outdated_diff_discussionsbooleanNoAutomatically resolve merge request diffs discussions on lines changed with a push.
shared_runners_enabledbooleanNoEnable instance runners for this project.
show_default_award_emojisbooleanNoShow default emoji reactions.
snippets_enabledbooleanNo(Deprecated) Enable snippets for this project. Usesnippets_access_level instead.
squash_commit_templatestringNoTemplate used to create squash commit message in merge requests.
squash_optionstringNoOne ofnever,always,default_on, ordefault_off.
suggestion_commit_messagestringNoThe commit message used to apply merge requestsuggestions.
tag_listarrayNo(Deprecated in GitLab 14.0) The list of tags for a project; put array of tags, that should be finally assigned to a project. Usetopics instead.
template_namestringNoWhen used withoutuse_custom_template, name of abuilt-in project template. When used withuse_custom_template, name of a custom project template.
topicsarrayNoThe list of topics for the project.
use_custom_templatebooleanNoUse either custominstance orgroup (withgroup_with_project_templates_id) project template. Premium and Ultimate only.
visibilitystringNoSeeproject visibility level.
warn_about_potentially_unwanted_charactersbooleanNoEnable warnings about usage of potentially unwanted characters in this project.
wiki_enabledbooleanNo(Deprecated) Enable wiki for this project. Usewiki_access_level instead.

Project feature visibilitysettings with access control options can be one of:

  • disabled: Disable the feature.
  • private: Enable and set the feature toOnly project members.
  • enabled: Enable and set the feature toEveryone with access.
  • public: Enable and set the feature toEveryone. Only available forpages_access_level.
AttributeTypeRequiredDescription
analytics_access_levelstringNoSet visibility ofanalytics.
builds_access_levelstringNoSet visibility ofpipelines.
container_registry_access_levelstringNoSet visibility ofcontainer registry.
environments_access_levelstringNoSet visibility ofenvironments.
feature_flags_access_levelstringNoSet visibility offeature flags.
forking_access_levelstringNoSet visibility offorks.
infrastructure_access_levelstringNoSet visibility ofinfrastructure management.
issues_access_levelstringNoSet visibility ofissues.
merge_requests_access_levelstringNoSet visibility ofmerge requests.
model_experiments_access_levelstringNoSet visibility ofmachine learning model experiments.
model_registry_access_levelstringNoSet visibility ofmachine learning model registry.
monitor_access_levelstringNoSet visibility ofapplication performance monitoring.
pages_access_levelstringNoSet visibility ofGitLab Pages.
releases_access_levelstringNoSet visibility ofreleases.
repository_access_levelstringNoSet visibility ofrepository.
requirements_access_levelstringNoSet visibility ofrequirements management.
security_and_compliance_access_levelstringNoSet visibility ofsecurity and compliance.
snippets_access_levelstringNoSet visibility ofsnippets.
wiki_access_levelstringNoSet visibility ofwiki.

Edit a project

History

Update an existing project.

If your HTTP repository isn’t publicly accessible, add authentication informationto the URLhttps://username:password@gitlab.company.com/group/project.git,wherepassword is a public access key with theapi scope enabled.

PUT /projects/:id

Supported general project attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
allow_merge_on_skipped_pipelinebooleanNoSet whether or not merge requests can be merged with skipped jobs.
allow_pipeline_trigger_approve_deploymentbooleanNoSet whether or not a pipeline triggerer is allowed to approve deployments. Premium and Ultimate only.
only_allow_merge_if_all_status_checks_passedbooleanNoIndicates that merges of merge requests should be blocked unless all status checks have passed. Defaults to false.

Introduced in GitLab 15.5 with feature flagonly_allow_merge_if_all_status_checks_passed disabled by default. The feature flag was enabled by default in GitLab 15.9. Ultimate only.
approvals_before_mergeintegerNoHow many approvers should approve merge requests by default.Deprecated in GitLab 16.0. To configure approval rules, seeMerge request approvals API. Premium and Ultimate only.
auto_cancel_pending_pipelinesstringNoAuto-cancel pending pipelines. This action toggles between an enabled state and a disabled state; it is not a boolean.
auto_devops_deploy_strategystringNoAuto Deploy strategy (continuous,manual, ortimed_incremental).
auto_devops_enabledbooleanNoEnable Auto DevOps for this project.
auto_duo_code_review_enabledbooleanNoEnable automatic reviews by GitLab Duo on merge requests. SeeDuo in merge requests. Ultimate only.
autoclose_referenced_issuesbooleanNoSet whether auto-closing referenced issues on default branch.
avatarmixedNoImage file for avatar of the project.
build_git_strategystringNoThe Git strategy. Defaults tofetch.
build_timeoutintegerNoThe maximum amount of time, in seconds, that a job can run.
ci_config_pathstringNoThe path to CI configuration file.
ci_default_git_depthintegerNoDefault number of revisions forshallow cloning.
ci_delete_pipelines_in_secondsintegerNoPipelines older than the configured time are deleted.
ci_forward_deployment_enabledbooleanNoEnable or disableprevent outdated deployment jobs.
ci_forward_deployment_rollback_allowedbooleanNoEnable or disableallow job retries for rollback deployments.
ci_allow_fork_pipelines_to_run_in_parent_projectbooleanNoEnable or disablerunning pipelines in the parent project for merge requests from forks.(Introduced in GitLab 15.3.)
ci_id_token_sub_claim_componentsarrayNoFields included in thesub claim of theID Token. Accepts an array starting withproject_path. The array might also includeref_type andref. Defaults to["project_path", "ref_type", "ref"].Introduced in GitLab 17.10.
ci_separated_cachesbooleanNoSet whether or not caches should beseparated by branch protection status.
ci_restrict_pipeline_cancellation_rolestringNoSet therole required to cancel a pipeline or job. One ofdeveloper,maintainer, orno_one.Introduced in GitLab 16.8. Premium and Ultimate only.
ci_pipeline_variables_minimum_override_rolestringNoYou can specify which role can override variables. One ofowner,maintainer,developer orno_one_allowed.Introduced in GitLab 17.1. In GitLab 17.1 to 17.7,restrict_user_defined_variables must be enabled.
ci_push_repository_for_job_token_allowedbooleanNoEnable or disable the ability to push to the project repository using job token.Introduced in GitLab 17.2.
container_expiration_policy_attributeshashNoUpdate the image cleanup policy for this project. Accepts:cadence (string),keep_n (integer),older_than (string),name_regex (string),name_regex_delete (string),name_regex_keep (string),enabled (boolean).
container_registry_enabledbooleanNo(Deprecated) Enable container registry for this project. Usecontainer_registry_access_level instead.
default_branchstringNoThedefault branch name.
descriptionstringNoShort project description.
emails_disabledbooleanNo(Deprecated) Disable email notifications. Useemails_enabled instead
emails_enabledbooleanNoEnable email notifications.
enforce_auth_checks_on_uploadsbooleanNoEnforceauth checks on uploads.
external_authorization_classification_labelstringNoThe classification label for the project. Premium and Ultimate only.
group_runners_enabledbooleanNoEnable group runners for this project.
import_urlstringNoURL the repository was imported from.
issues_enabledbooleanNo(Deprecated) Enable issues for this project. Useissues_access_level instead.
issues_templatestringNoDefault description for Issues. Description is parsed with GitLab Flavored Markdown. SeeTemplates for issues and merge requests. Premium and Ultimate only.
jobs_enabledbooleanNo(Deprecated) Enable jobs for this project. Usebuilds_access_level instead.
keep_latest_artifactbooleanNoDisable or enable the ability to keep the latest artifact for this project.
lfs_enabledbooleanNoEnable LFS.
max_artifacts_sizeintegerNoThe maximum file size in megabytes for individual job artifacts.
merge_commit_templatestringNoTemplate used to create merge commit message in merge requests.
merge_methodstringNoSet the project’smerge method. Can bemerge (merge commit),rebase_merge (merge commit with semi-linear history), orff (fast-forward merge).
merge_pipelines_enabledbooleanNoEnable or disable merged results pipelines.
merge_requests_enabledbooleanNo(Deprecated) Enable merge requests for this project. Usemerge_requests_access_level instead.
merge_requests_templatestringNoDefault description for merge requests. Description is parsed with GitLab Flavored Markdown. SeeTemplates for issues and merge requests. Premium and Ultimate only.
merge_trains_enabledbooleanNoEnable or disable merge trains.
merge_trains_skip_train_allowedbooleanNoAllows merge train merge requests to be merged without waiting for pipelines to finish.
mirror_overwrites_diverged_branchesbooleanNoPull mirror overwrites diverged branches. Premium and Ultimate only.
mirror_trigger_buildsbooleanNoPull mirroring triggers builds. Premium and Ultimate only.
mirror_user_idintegerNoUser responsible for all the activity surrounding a pull mirror event.(administrators only) Premium and Ultimate only.
mirrorbooleanNoEnables pull mirroring in a project. Premium and Ultimate only.
mr_default_target_selfbooleanNoFor forked projects, target merge requests to this project. Iffalse, the target is the upstream project.
namestringNoThe name of the project.
only_allow_merge_if_all_discussions_are_resolvedbooleanNoSet whether merge requests can only be merged when all the discussions are resolved.
only_allow_merge_if_pipeline_succeedsbooleanNoSet whether merge requests can only be merged with successful jobs.
only_mirror_protected_branchesbooleanNoOnly mirror protected branches. Premium and Ultimate only.
packages_enabledbooleanNoEnable or disable packages repository feature.
pathstringNoCustom repository name for the project. By default generated based on name.
prevent_merge_without_jira_issuebooleanNoSet whether merge requests require an associated issue from Jira. Ultimate only.
printing_merge_request_link_enabledbooleanNoShow link to create/view merge request when pushing from the command line.
public_buildsbooleanNo(Deprecated) Iftrue, jobs can be viewed by non-project members. Usepublic_jobs instead.
public_jobsbooleanNoIftrue, jobs can be viewed by non-project members.
remove_source_branch_after_mergebooleanNoEnableDelete source branch option by default for all new merge requests.
repository_storagestringNoWhich storage shard the repository is on.(administrators only)
request_access_enabledbooleanNoAllow users to request member access.
resolve_outdated_diff_discussionsbooleanNoAutomatically resolve merge request diffs discussions on lines changed with a push.
restrict_user_defined_variablesbooleanNo(Deprecated in GitLab 17.7 in favour ofci_pipeline_variables_minimum_override_role) Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline. For example when the pipeline is triggered in the UI, with the API, or by a trigger token.
service_desk_enabledbooleanNoEnable or disable Service Desk feature.
shared_runners_enabledbooleanNoEnable instance runners for this project.
show_default_award_emojisbooleanNoShow default emoji reactions.
snippets_enabledbooleanNo(Deprecated) Enable snippets for this project. Usesnippets_access_level instead.
issue_branch_templatestringNoTemplate used to suggest names forbranches created from issues.(Introduced in GitLab 15.6.)
spp_repository_pipeline_accessbooleanNoAllow users and tokens read-only access to fetch security policy configurations from this project. Required for enforcing security policies in projects that use this project as their security policy source. Ultimate only.
squash_commit_templatestringNoTemplate used to create squash commit message in merge requests.
squash_optionstringNoOne ofnever,always,default_on, ordefault_off.
suggestion_commit_messagestringNoThe commit message used to apply merge request suggestions.
tag_listarrayNo(Deprecated in GitLab 14.0) The list of tags for a project; put array of tags, that should be finally assigned to a project. Usetopics instead.
topicsarrayNoThe list of topics for the project. This replaces any existing topics that are already added to the project.
visibilitystringNoSeeproject visibility level.
warn_about_potentially_unwanted_charactersbooleanNoEnable warnings about usage of potentially unwanted characters in this project.
wiki_enabledbooleanNo(Deprecated) Enable wiki for this project. Usewiki_access_level instead.
web_based_commit_signing_enabledbooleanNoEnables web-based commit signing for commits created from the GitLab UI. Available only on GitLab SaaS.

For example, to toggle the setting forinstance runners on a GitLab.com project:

curl --request PUT --header"PRIVATE-TOKEN: <your-token>"\     --url"https://gitlab.com/api/v4/projects/<your-project-ID>"\     --data"shared_runners_enabled=true"# to turn off: "shared_runners_enabled=false"

Project feature visibilitysettings with access control options can be one of:

  • disabled: Disable the feature.
  • private: Enable and set the feature toOnly project members.
  • enabled: Enable and set the feature toEveryone with access.
  • public: Enable and set the feature toEveryone. Only available forpages_access_level.

Supported project visibility attributes:

AttributeTypeRequiredDescription
analytics_access_levelstringNoSet visibility ofanalytics.
builds_access_levelstringNoSet visibility ofpipelines.
container_registry_access_levelstringNoSet visibility ofcontainer registry.
environments_access_levelstringNoSet visibility ofenvironments.
feature_flags_access_levelstringNoSet visibility offeature flags.
forking_access_levelstringNoSet visibility offorks.
infrastructure_access_levelstringNoSet visibility ofinfrastructure management.
issues_access_levelstringNoSet visibility ofissues.
merge_requests_access_levelstringNoSet visibility ofmerge requests.
model_experiments_access_levelstringNoSet visibility ofmachine learning model experiments.
model_registry_access_levelstringNoSet visibility ofmachine learning model registry.
monitor_access_levelstringNoSet visibility ofapplication performance monitoring.
pages_access_levelstringNoSet visibility ofGitLab Pages.
releases_access_levelstringNoSet visibility ofreleases.
repository_access_levelstringNoSet visibility ofrepository.
requirements_access_levelstringNoSet visibility ofrequirements management.
security_and_compliance_access_levelstringNoSet visibility ofsecurity and compliance.
snippets_access_levelstringNoSet visibility ofsnippets.
wiki_access_levelstringNoSet visibility ofwiki.

Import members

Import members from another project.

If the importing member’s role for the target project is:

  • Maintainer, then members with the Owner role for the source project are imported with the Maintainer role.
  • Owner, then members with the Owner role for the source project are imported with the Owner role.
POST /projects/:id/import_project_members/:project_id

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the target project to receive the members.
project_idinteger or stringYesThe ID orURL-encoded path of the source project to import the members from.

Example request:

curl --request POST --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects/5/import_project_members/32"

Returns:

  • 200 OK on success.
  • 404 Project Not Found if the target or source project does not exist or cannot be accessed by the requester.
  • 422 Unprocessable Entity if the import of project members does not complete successfully.

Example responses:

  • When all emails were successfully sent (200 HTTP status code):

    {"status":"success"  }
  • When there was any error importing 1 or more members (200 HTTP status code):

    {"status":"error","message": {"john_smith":"Some individual error message","jane_smith":"Some individual error message"             },"total_members_count":3}
  • When there is a system error (404 and422 HTTP status codes):

{"message":"Import failed"  }

Archive a project

Archive a project.

Prerequisites:

  • You must be an administrator or be assigned the Owner role on the project.

This endpoint is idempotent. Archiving an already-archived project does not change the project.

POST /projects/:id/archive

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.

Example request:

curl --request POST --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects/5/archive"

Example response:

{"id":3,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","default_branch":"main","visibility":"private","ssh_url_to_repo":"git@example.com:diaspora/diaspora-project-site.git","http_url_to_repo":"http://example.com/diaspora/diaspora-project-site.git","web_url":"http://example.com/diaspora/diaspora-project-site","readme_url":"http://example.com/diaspora/diaspora-project-site/blob/main/README.md","tag_list": [//deprecated, use `topics` instead"example","disapora project"  ],"topics": ["example","disapora project"  ],"owner": {"id":3,"name":"Diaspora","created_at":"2013-09-30T13:46:02Z"  },"name":"Diaspora Project Site","name_with_namespace":"Diaspora / Diaspora Project Site","path":"diaspora-project-site","path_with_namespace":"diaspora/diaspora-project-site","repository_object_format":"sha1","issues_enabled":true,"open_issues_count":1,"merge_requests_enabled":true,"jobs_enabled":true,"wiki_enabled":true,"snippets_enabled":false,"can_create_merge_request_in":true,"resolve_outdated_diff_discussions":false,"container_registry_enabled":false,// deprecated, use container_registry_access_level instead"container_registry_access_level":"disabled","security_and_compliance_access_level":"disabled","created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","last_activity_at":"2013-09-30T13:46:02Z","creator_id":3,"namespace": {"id":3,"name":"Diaspora","path":"diaspora","kind":"group","full_path":"diaspora"  },"import_status":"none","import_error":null,"permissions": {"project_access": {"access_level":10,"notification_level":3    },"group_access": {"access_level":50,"notification_level":3    }  },"archived":true,"avatar_url":"http://example.com/uploads/project/avatar/3/uploads/avatar.png","license_url":"http://example.com/diaspora/diaspora-client/blob/main/LICENSE","license": {"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","nickname":"GNU LGPLv3","html_url":"http://choosealicense.com/licenses/lgpl-3.0/","source_url":"http://www.gnu.org/licenses/lgpl-3.0.txt"  },"shared_runners_enabled":true,"group_runners_enabled":true,"forks_count":0,"star_count":0,"runners_token":"b8bc4a7a29eb76ea83cf79e4908c2b","ci_default_git_depth":50,"ci_forward_deployment_enabled":true,"ci_forward_deployment_rollback_allowed":true,"ci_allow_fork_pipelines_to_run_in_parent_project":true,"ci_id_token_sub_claim_components": ["project_path","ref_type","ref"],"ci_separated_caches":true,"ci_restrict_pipeline_cancellation_role":"developer","ci_pipeline_variables_minimum_override_role":"maintainer","ci_push_repository_for_job_token_allowed":false,"public_jobs":true,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":false,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":false,"request_access_enabled":false,"merge_method":"merge","squash_option":"default_on","autoclose_referenced_issues":true,"enforce_auth_checks_on_uploads":true,"suggestion_commit_message":null,"merge_commit_template":null,"secret_push_protection_enabled":false,"container_registry_image_prefix":"registry.example.com/diaspora/diaspora-project-site","_links": {"self":"http://example.com/api/v4/projects","issues":"http://example.com/api/v4/projects/1/issues","merge_requests":"http://example.com/api/v4/projects/1/merge_requests","repo_branches":"http://example.com/api/v4/projects/1/repository_branches","labels":"http://example.com/api/v4/projects/1/labels","events":"http://example.com/api/v4/projects/1/events","members":"http://example.com/api/v4/projects/1/members","cluster_agents":"http://example.com/api/v4/projects/1/cluster_agents"  }}

Unarchive a project

Unarchive a project.

Prerequisites:

  • You must be an administrator or be assigned the Owner role on the project.

This endpoint is idempotent. Unarchiving a project that isn’t archived doesn’t change the project.

POST /projects/:id/unarchive

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.

Example request:

curl --request POST --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects/5/unarchive"

Example response:

{"id":3,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","default_branch":"main","visibility":"private","ssh_url_to_repo":"git@example.com:diaspora/diaspora-project-site.git","http_url_to_repo":"http://example.com/diaspora/diaspora-project-site.git","web_url":"http://example.com/diaspora/diaspora-project-site","readme_url":"http://example.com/diaspora/diaspora-project-site/blob/main/README.md","tag_list": [//deprecated, use `topics` instead"example","disapora project"  ],"topics": ["example","disapora project"  ],"owner": {"id":3,"name":"Diaspora","created_at":"2013-09-30T13:46:02Z"  },"name":"Diaspora Project Site","name_with_namespace":"Diaspora / Diaspora Project Site","path":"diaspora-project-site","path_with_namespace":"diaspora/diaspora-project-site","repository_object_format":"sha1","issues_enabled":true,"open_issues_count":1,"merge_requests_enabled":true,"jobs_enabled":true,"wiki_enabled":true,"snippets_enabled":false,"can_create_merge_request_in":true,"resolve_outdated_diff_discussions":false,"container_registry_enabled":false,// deprecated, use container_registry_access_level instead"container_registry_access_level":"disabled","security_and_compliance_access_level":"disabled","created_at":"2013-09-30T13:46:02Z","updated_at":"2013-09-30T13:46:02Z","last_activity_at":"2013-09-30T13:46:02Z","creator_id":3,"namespace": {"id":3,"name":"Diaspora","path":"diaspora","kind":"group","full_path":"diaspora"  },"import_status":"none","import_error":null,"permissions": {"project_access": {"access_level":10,"notification_level":3    },"group_access": {"access_level":50,"notification_level":3    }  },"archived":false,"avatar_url":"http://example.com/uploads/project/avatar/3/uploads/avatar.png","license_url":"http://example.com/diaspora/diaspora-client/blob/main/LICENSE","license": {"key":"lgpl-3.0","name":"GNU Lesser General Public License v3.0","nickname":"GNU LGPLv3","html_url":"http://choosealicense.com/licenses/lgpl-3.0/","source_url":"http://www.gnu.org/licenses/lgpl-3.0.txt"  },"shared_runners_enabled":true,"group_runners_enabled":true,"forks_count":0,"star_count":0,"runners_token":"b8bc4a7a29eb76ea83cf79e4908c2b","ci_default_git_depth":50,"ci_forward_deployment_enabled":true,"ci_forward_deployment_rollback_allowed":true,"ci_allow_fork_pipelines_to_run_in_parent_project":true,"ci_id_token_sub_claim_components": ["project_path","ref_type","ref"],"ci_separated_caches":true,"ci_restrict_pipeline_cancellation_role":"developer","ci_pipeline_variables_minimum_override_role":"maintainer","ci_push_repository_for_job_token_allowed":false,"public_jobs":true,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":false,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":false,"request_access_enabled":false,"merge_method":"merge","squash_option":"default_on","autoclose_referenced_issues":true,"enforce_auth_checks_on_uploads":true,"suggestion_commit_message":null,"merge_commit_template":null,"container_registry_image_prefix":"registry.example.com/diaspora/diaspora-project-site","secret_push_protection_enabled":false,"_links": {"self":"http://example.com/api/v4/projects","issues":"http://example.com/api/v4/projects/1/issues","merge_requests":"http://example.com/api/v4/projects/1/merge_requests","repo_branches":"http://example.com/api/v4/projects/1/repository_branches","labels":"http://example.com/api/v4/projects/1/labels","events":"http://example.com/api/v4/projects/1/events","members":"http://example.com/api/v4/projects/1/members","cluster_agents":"http://example.com/api/v4/projects/1/cluster_agents"  }}

Delete a project

History

Delete a project. This endpoint:

  • Deletes a project including all associated resources, including issues and merge requests.
  • Marks the project for deletion. The deletion happens 7 days later by default, but you can change the retention period in theinstance settings.
  • Deletes project immediately if the project is marked for deletion (GitLab 15.11 and later).

The option to delete projects immediately from deletion protection settings in theAdmin area wasdeprecated in GitLab 15.9 and removed in GitLab 16.0.

DELETE /projects/:id

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
full_pathstringnoFull path of project to use withpermanently_remove.Introduced in GitLab 15.11 for Premium and Ultimate only and moved to GitLab Free in 18.0. To find the project path, usepath_with_namespace fromget single project. Premium and Ultimate only.
permanently_removeboolean/stringnoImmediately deletes a project if it is marked for deletion.Introduced in GitLab 15.11 for Premium and Ultimate only and moved to GitLab Free in 18.0.

Restore a project marked for deletion

Restore a project that is marked for deletion.

POST /projects/:id/restore

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.

Transfer a project to a new namespace

Transfer a project to a new namespace.

For information on prerequisites for transferring a project, seeTransfer a project to another namespace.

PUT /projects/:id/transfer

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
namespaceinteger or stringYesThe ID or path of the namespace to transfer to project to.

Example request:

curl --request PUT --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects/5/transfer?namespace=14"

Example response:

  {"id":7,"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.","description_html":"<p data-sourcepos=\"1:1-1:56\" dir=\"auto\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>","name":"hello-world","name_with_namespace":"cute-cats / hello-world","path":"hello-world","path_with_namespace":"cute-cats/hello-world","created_at":"2020-10-15T16:25:22.415Z","updated_at":"2020-10-15T16:25:22.415Z","default_branch":"main","tag_list": [],//deprecated, use `topics` instead"topics": [],"ssh_url_to_repo":"git@gitlab.example.com:cute-cats/hello-world.git","http_url_to_repo":"https://gitlab.example.com/cute-cats/hello-world.git","web_url":"https://gitlab.example.com/cute-cats/hello-world","readme_url":"https://gitlab.example.com/cute-cats/hello-world/-/blob/main/README.md","avatar_url":null,"forks_count":0,"star_count":0,"last_activity_at":"2020-10-15T16:25:22.415Z","namespace": {"id":18,"name":"cute-cats","path":"cute-cats","kind":"group","full_path":"cute-cats","parent_id":null,"avatar_url":null,"web_url":"https://gitlab.example.com/groups/cute-cats"  },"container_registry_image_prefix":"registry.example.com/cute-cats/hello-world","_links": {"self":"https://gitlab.example.com/api/v4/projects/7","issues":"https://gitlab.example.com/api/v4/projects/7/issues","merge_requests":"https://gitlab.example.com/api/v4/projects/7/merge_requests","repo_branches":"https://gitlab.example.com/api/v4/projects/7/repository/branches","labels":"https://gitlab.example.com/api/v4/projects/7/labels","events":"https://gitlab.example.com/api/v4/projects/7/events","members":"https://gitlab.example.com/api/v4/projects/7/members"  },"packages_enabled":true,"empty_repo":false,"archived":false,"visibility":"private","resolve_outdated_diff_discussions":false,"container_registry_enabled":true,// deprecated, use container_registry_access_level instead"container_registry_access_level":"enabled","container_expiration_policy": {"cadence":"7d","enabled":false,"keep_n":null,"older_than":null,"name_regex":null,"name_regex_keep":null,"next_run_at":"2020-10-22T16:25:22.746Z"  },"issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"jobs_enabled":true,"snippets_enabled":true,"service_desk_enabled":false,"service_desk_address":null,"can_create_merge_request_in":true,"issues_access_level":"enabled","repository_access_level":"enabled","merge_requests_access_level":"enabled","forking_access_level":"enabled","analytics_access_level":"enabled","wiki_access_level":"enabled","builds_access_level":"enabled","snippets_access_level":"enabled","pages_access_level":"enabled","security_and_compliance_access_level":"enabled","emails_disabled":null,"emails_enabled":null,"shared_runners_enabled":true,"group_runners_enabled":true,"lfs_enabled":true,"creator_id":2,"import_status":"none","open_issues_count":0,"ci_default_git_depth":50,"public_jobs":true,"build_timeout":3600,"auto_cancel_pending_pipelines":"enabled","ci_config_path":null,"shared_with_groups": [],"only_allow_merge_if_pipeline_succeeds":false,"allow_merge_on_skipped_pipeline":null,"allow_pipeline_trigger_approve_deployment":false,"restrict_user_defined_variables":false,"request_access_enabled":true,"only_allow_merge_if_all_discussions_are_resolved":false,"remove_source_branch_after_merge":true,"printing_merge_request_link_enabled":true,"merge_method":"merge","squash_option":"default_on","suggestion_commit_message":null,"merge_commit_template":null,"auto_devops_enabled":true,"auto_devops_deploy_strategy":"continuous","autoclose_referenced_issues":true,"approvals_before_merge":0,// Deprecated. Use merge request approvals API instead."mirror":false,"compliance_frameworks": [],"warn_about_potentially_unwanted_characters":true,"secret_push_protection_enabled":false}

List groups available for project transfer

History

Retrieve a list of groups to which the user can transfer a project.

GET /projects/:id/transfer_locations

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
searchstringNoThe group names to search for.

Example request:

curl --request GET"https://gitlab.example.com/api/v4/projects/1/transfer_locations"

Example response:

[  {"id":27,"web_url":"https://gitlab.example.com/groups/gitlab","name":"GitLab","avatar_url":null,"full_name":"GitLab","full_path":"GitLab"  },  {"id":31,"web_url":"https://gitlab.example.com/groups/foobar","name":"FooBar","avatar_url":null,"full_name":"FooBar","full_path":"FooBar"  }]

Upload a project avatar

Upload an avatar to the specified project.

PUT /projects/:id

Supported attributes:

AttributeTypeRequiredDescription
avatarstringYesThe file to be uploaded.
idinteger or stringYesThe ID orURL-encoded path of the project.

To upload an avatar from your file system, use the--form argument. This causescURL to post data using the headerContent-Type: multipart/form-data. Thefile= parameter must point to an image file on your file system and bepreceded by@. For example:

Example request:

curl --request PUT --header"PRIVATE-TOKEN: <your_access_token>"\     --form"avatar=@dk.png""https://gitlab.example.com/api/v4/projects/5"

Example response:

{"avatar_url":"https://gitlab.example.com/uploads/-/system/project/avatar/2/dk.png"}

Download a project avatar

History

Download a project avatar. You can access this endpoint without authentication if the project is publicly accessible.

GET /projects/:id/avatar

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringyesID orURL-encoded path of the project.

Example request:

curl --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects/4/avatar"

Remove a project avatar

History

To remove a project avatar, use a blank value for theavatar attribute.

Example request:

curl --request PUT --header"PRIVATE-TOKEN: <your_access_token>"\     --data"avatar=""https://gitlab.example.com/api/v4/projects/5"

Share projects

Share a project with a group.

Share a project with a group

Share a project with a group.

POST /projects/:id/share

Supported attributes:

AttributeTypeRequiredDescription
group_accessintegerYesTherole (access_level) to grant the group.
group_idintegerYesThe ID of the group to share with.
idinteger or stringYesThe ID orURL-encoded path of the project.
expires_atstringNoShare expiration date in ISO 8601 format. For example,2016-09-26.

Unshare the project from the group. Returns204 and no content on success.

DELETE /projects/:id/share/:group_id

Supported attributes:

AttributeTypeRequiredDescription
group_idintegerYesThe ID of the group.
idinteger or stringYesThe ID orURL-encoded path of the project.

Example request:

curl --request DELETE --header"PRIVATE-TOKEN: <your_access_token>""https://gitlab.example.com/api/v4/projects/5/share/17"

Start the housekeeping task for a project

Start thehousekeeping task for a project.

POST /projects/:id/housekeeping

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
taskstringNoprune to trigger manual prune of unreachable objects oreager to trigger eager housekeeping.

Real-time security scan

  • Tier: Ultimate
  • Offering: GitLab.com
  • Status: Experiment
History

Returns SAST scan results for a single file in real-time.

POST /projects/:id/security_scans/sast/scan

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.

Example request:

curl --request POST --header"PRIVATE-TOKEN: <your_access_token>"\ --header"Content-Type: application/json"\ --data'{  "file_path":"src/main.c",  "content":"#include<string.h>\nint main(int argc, char **argv) {\n  char buff[128];\n  strcpy(buff, argv[1]);\n  return 0;\n}\n" }'\ --url"https://gitlab.example.com/api/v4/projects/:id/security_scans/sast/scan"

Example response:

{"vulnerabilities": [    {"name":"Insecure string processing function (strcpy)","description":"The `strcpy` family of functions do not provide the ability to limit or check buffer\nsizes before copying to a destination buffer. This can lead to buffer overflows. Consider\nusing more secure alternatives such as `strncpy` and provide the correct limit to the\ndestination buffer and ensure the string is null terminated.\n\nFor more information please see: https://linux.die.net/man/3/strncpy\n\nIf developing for C Runtime Library (CRT), more secure versions of these functions should be\nused, see:\nhttps://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/strncpy-s-strncpy-s-l-wcsncpy-s-wcsncpy-s-l-mbsncpy-s-mbsncpy-s-l?view=msvc-170\n","severity":"High","location": {"file":"src/main.c","start_line":5,"end_line":5,"start_column":3,"end_column":23      }    }  ]}

Download snapshot of a Git repository

This endpoint may only be accessed by an administrative user.

Download a snapshot of the project (or wiki, if requested) Git repository. Thissnapshot is always in uncompressedtarformat.

If a repository is corrupted to the point wheregit clone doesn’t work, thesnapshot may allow some of the data to be retrieved.

GET /projects/:id/snapshot

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesThe ID orURL-encoded path of the project.
wikibooleanNoWhether to download the wiki, rather than project, repository.

Get the path to repository storage

Get the path to repository storage for specified project if Gitaly Cluster is not being used. If Gitaly Cluster is being used, seePraefect-generated replica paths.

Available for administrators only.

GET /projects/:id/storage

Supported attributes:

AttributeTypeRequiredDescription
idinteger or stringYesID orURL-encoded path of the project.
[  {"project_id":1,"disk_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","created_at":"2012-10-12T17:04:47Z","repository_storage":"default"  }]

Secret push protection status

  • Tier: Ultimate
History

If you have at least the Developer role, the following requests could also return thesecret_push_protection_enabled value.Some of these requests have stricter requirements about roles. Refer to the endpoints previously mentioned for clarification.Use this information to determine whether secret push protection is enabled for a project.To modify thesecret_push_protection_enabled value, use theProject Security Settings API.

  • GET /projects
  • GET /projects/:id
  • GET /users/:user_id/projects
  • GET /users/:user_id/contributed_projects
  • PUT /projects/:project_id/transfer?namespace=:namespace_id
  • PUT /projects/:id
  • POST /projects
  • POST /projects/user/:user_id
  • POST /projects/:id/archive
  • POST /projects/:id/unarchive

Example response:

{"id":1,"project_id":3,"secret_push_protection_enabled":true,...}

Troubleshooting

Unexpectedrestrict_user_defined_variables value in response

If you set conflicting values forrestrict_user_defined_variables andci_pipeline_variables_minimum_override_role,the response values might differ from what you expect because thepipeline_variables_minimum_override_rolesetting has higher priority.

For example, if you:

  • Setrestrict_user_defined_variables totrue andci_pipeline_variables_minimum_override_role todeveloper,the response returnsrestrict_user_defined_variables: false. Settingci_pipeline_variables_minimum_override_roletodeveloper takes precedence and variables are not restricted.
  • Setrestrict_user_defined_variables tofalse andci_pipeline_variables_minimum_override_role tomaintainer,The response returnsrestrict_user_defined_variables: true because settingci_pipeline_variables_minimum_override_roletomaintainer takes precedence and variables are restricted.