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 attribute | Alternative |
---|---|
tag_list | topics attribute |
marked_for_deletion_at | marked_for_deletion_on . Premium and Ultimate tier only. |
approvals_before_merge | Merge 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
license | boolean | No | Include project license data. |
statistics | boolean | No | Include project statistics. Available only to users with at least the Reporter role. |
with_custom_attributes | boolean | No | Includecustom 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_passed
parameters 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
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:
Attribute | Type | Required | Description |
---|---|---|---|
archived | boolean | No | Limit by archived status. |
id_after | integer | No | Limit results to projects with IDs greater than the specified ID. |
id_before | integer | No | Limit results to projects with IDs less than the specified ID. |
imported | boolean | No | Limit results to projects which were imported from external systems by current user. |
include_hidden | boolean | No | Include hidden projects.(administrators only) Premium and Ultimate only. |
include_pending_delete | boolean | No | Include projects pending deletion.(administrators only) |
last_activity_after | datetime | No | Limit results to projects with last activity after specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ ) |
last_activity_before | datetime | No | Limit results to projects with last activity before specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ ) |
membership | boolean | No | Limit by projects that the current user is a member of. |
min_access_level | integer | No | Limit by current user minimalrole (access_level ). |
order_by | string | No | Return 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 . |
owned | boolean | No | Limit by projects explicitly owned by the current user. |
repository_checksum_failed | boolean | No | Limit projects where the repository checksum calculation has failed. Premium and Ultimate only. |
repository_storage | string | No | Limit results to projects stored onrepository_storage .(administrators only) |
search_namespaces | boolean | No | Include ancestor namespaces when matching search criteria. Default isfalse . |
search | string | No | Return 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). |
simple | boolean | No | Return only limited fields for each project. This operation is a no-op without authentication where only simple fields are returned. |
sort | string | No | Return projects sorted inasc ordesc order. Default isdesc . |
starred | boolean | No | Limit by projects starred by the current user. |
statistics | boolean | No | Include project statistics. Available only to users with at least the Reporter role. |
topic_id | integer | No | Limit results to projects with the assigned topic given by the topic ID. |
topic | string | No | Comma-separated topic names. Limit results to projects that match all of given topics. Seetopics attribute. |
updated_after | datetime | No | Limit 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_before | datetime | No | Limit 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. |
visibility | string | No | Limit by visibilitypublic ,internal , orprivate . |
wiki_checksum_failed | boolean | No | Limit projects where the wiki checksum calculation has failed. Premium and Ultimate only. |
with_custom_attributes | boolean | No | Includecustom attributes in response.(administrator only) |
with_issues_enabled | boolean | No | Limit by enabled issues feature. |
with_merge_requests_enabled | boolean | No | Limit by enabled merge requests feature. |
with_programming_language | string | No | Limit by projects which use the given programming language. |
marked_for_deletion_on | date | No | Filter by date when project was marked for deletion.Introduced in GitLab 17.1. Premium and Ultimate only. |
active | boolean | No | Limit 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:
Attribute | Type | Required | Description |
---|---|---|---|
user_id | string | Yes | The ID or username of the user. |
archived | boolean | No | Limit by archived status. |
id_after | integer | No | Limit results to projects with IDs greater than the specified ID. |
id_before | integer | No | Limit results to projects with IDs less than the specified ID. |
membership | boolean | No | Limit by projects that the current user is a member of. |
min_access_level | integer | No | Limit by current user minimalrole (access_level ). |
order_by | string | No | Return projects ordered byid ,name ,path ,created_at ,updated_at ,star_count , orlast_activity_at fields. Default iscreated_at . |
owned | boolean | No | Limit by projects explicitly owned by the current user. |
search | string | No | Return list of projects matching the search criteria. |
simple | boolean | No | Return only limited fields for each project. Without authentication, this operation is a no-op; only simple fields are returned. |
sort | string | No | Return projects sorted inasc ordesc order. Default isdesc . |
starred | boolean | No | Limit by projects starred by the current user. |
statistics | boolean | No | Include project statistics. Available only to users with at least the Reporter role. |
updated_after | datetime | No | Limit results to projects last updated after the specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ ).Introduced in GitLab 15.10. |
updated_before | datetime | No | Limit results to projects last updated before the specified time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ ).Introduced in GitLab 15.10. |
visibility | string | No | Limit by visibilitypublic ,internal , orprivate . |
with_custom_attributes | boolean | No | Includecustom attributes in response.(administrator only) |
with_issues_enabled | boolean | No | Limit by enabled issues feature. |
with_merge_requests_enabled | boolean | No | Limit by enabled merge requests feature. |
with_programming_language | string | No | Limit 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:
Attribute | Type | Required | Description |
---|---|---|---|
user_id | string | Yes | The ID or username of the user. |
order_by | string | No | Return projects ordered byid ,name ,path ,created_at ,updated_at ,star_count , orlast_activity_at fields. Default iscreated_at . |
simple | boolean | No | Return only limited fields for each project. Without authentication, this operation is a no-op; only simple fields are returned. |
sort | string | No | Return 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:
Attribute | Type | Required | Description |
---|---|---|---|
search | string | Yes | A string contained in the project name. |
order_by | string | No | Return requests ordered byid ,name ,created_at ,star_count , orlast_activity_at fields. |
sort | string | No | Return 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
search | string | No | Search for specific users. |
skip_users | integer array | No | Filter 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
search | string | No | Search for specific groups. |
shared_min_access_level | integer | No | Limit to shared groups with at least thisrole (access_level ). |
shared_visible_only | boolean | No | Limit to shared groups user has access to. |
skip_groups | array of integers | No | Skip the group IDs passed. |
with_shared | boolean | No | Include 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
search | string | No | Search 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer/string | yes | The ID orURL-encoded path of the group |
search | string | no | Return the list of authorized groups matching the search criteria |
min_access_level | integer | no | Limit to groups where current user has at least the specifiedrole (access_level ) |
relation | array of strings | no | Filter the groups by relation (direct or inherited) |
with_custom_attributes | boolean | no | Includecustom 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The 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
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 theapi
scope enabled.
POST /projects
Supported general project attributes:
Attribute | Type | Required | Description |
---|---|---|---|
name | string | Yes (ifpath isn’t provided) | The name of the new project. Equals path if not provided. |
path | string | Yes (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_pipeline | boolean | No | Set whether or not merge requests can be merged with skipped jobs. |
approvals_before_merge | integer | No | How 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_pipelines | string | No | Auto-cancel pending pipelines. This action toggles between an enabled state and a disabled state; it is not a boolean. |
auto_devops_deploy_strategy | string | No | Auto Deploy strategy (continuous ,manual ortimed_incremental ). |
auto_devops_enabled | boolean | No | Enable Auto DevOps for this project. |
autoclose_referenced_issues | boolean | No | Set whether auto-closing referenced issues on default branch. |
avatar | mixed | No | Image file for avatar of the project. |
build_git_strategy | string | No | The Git strategy. Defaults tofetch . |
build_timeout | integer | No | The maximum amount of time, in seconds, that a job can run. |
ci_config_path | string | No | The path to CI configuration file. |
container_expiration_policy_attributes | hash | No | Update 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_enabled | boolean | No | (Deprecated) Enable container registry for this project. Usecontainer_registry_access_level instead. |
default_branch | string | No | Thedefault branch name. Requiresinitialize_with_readme to betrue . |
description | string | No | Short project description. |
emails_disabled | boolean | No | (Deprecated) Disable email notifications. Useemails_enabled instead |
emails_enabled | boolean | No | Enable email notifications. |
external_authorization_classification_label | string | No | The classification label for the project. Premium and Ultimate only. |
group_runners_enabled | boolean | No | Enable group runners for this project. |
group_with_project_templates_id | integer | No | For 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_url | string | No | URL 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_readme | boolean | No | Whether 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_enabled | boolean | No | (Deprecated) Enable issues for this project. Useissues_access_level instead. |
jobs_enabled | boolean | No | (Deprecated) Enable jobs for this project. Usebuilds_access_level instead. |
lfs_enabled | boolean | No | Enable LFS. |
merge_method | string | No | Set the project’smerge method. Can bemerge (merge commit),rebase_merge (merge commit with semi-linear history), orff (fast-forward merge). |
merge_pipelines_enabled | boolean | No | Enable or disable merged results pipelines. |
merge_requests_enabled | boolean | No | (Deprecated) Enable merge requests for this project. Usemerge_requests_access_level instead. |
merge_trains_enabled | boolean | No | Enable or disable merge trains. |
merge_trains_skip_train_allowed | boolean | No | Allows merge train merge requests to be merged without waiting for pipelines to finish. |
mirror_trigger_builds | boolean | No | Pull mirroring triggers builds. Premium and Ultimate only. |
mirror | boolean | No | Enables pull mirroring in a project. Premium and Ultimate only. |
namespace_id | integer | No | Namespace 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_resolved | boolean | No | Set whether merge requests can only be merged when all the discussions are resolved. |
only_allow_merge_if_all_status_checks_passed | boolean | No | Indicates 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_succeeds | boolean | No | Set whether merge requests can only be merged with successful pipelines. This setting is namedPipelines must succeed in the project settings. |
packages_enabled | boolean | No | Enable or disable packages repository feature. |
printing_merge_request_link_enabled | boolean | No | Show link to create/view merge request when pushing from the command line. |
public_builds | boolean | No | (Deprecated) Iftrue , jobs can be viewed by non-project members. Usepublic_jobs instead. |
public_jobs | boolean | No | Iftrue , jobs can be viewed by non-project members. |
repository_object_format | string | No | Repository object format. Defaults tosha1 .Introduced in GitLab 16.9. |
remove_source_branch_after_merge | boolean | No | EnableDelete source branch option by default for all new merge requests. |
repository_storage | string | No | Which storage shard the repository is on.(administrator only) |
request_access_enabled | boolean | No | Allow users to request member access. |
resolve_outdated_diff_discussions | boolean | No | Automatically resolve merge request diffs discussions on lines changed with a push. |
shared_runners_enabled | boolean | No | Enable instance runners for this project. |
show_default_award_emojis | boolean | No | Show default emoji reactions. |
snippets_enabled | boolean | No | (Deprecated) Enable snippets for this project. Usesnippets_access_level instead. |
squash_option | string | No | One ofnever ,always ,default_on , ordefault_off . |
tag_list | array | No | The 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_name | string | No | When used withoutuse_custom_template , name of abuilt-in project template. When used withuse_custom_template , name of a custom project template. |
template_project_id | integer | No | When 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. |
topics | array | No | The list of topics for a project; put array of topics, that should be finally assigned to a project. |
use_custom_template | boolean | No | Use either custominstance orgroup (withgroup_with_project_templates_id ) project template. Premium and Ultimate only. |
visibility | string | No | Seeproject visibility level. |
warn_about_potentially_unwanted_characters | boolean | No | Enable warnings about usage of potentially unwanted characters in this project. |
wiki_enabled | boolean | No | (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
.
Attribute | Type | Required | Description |
---|---|---|---|
analytics_access_level | string | No | Set visibility ofanalytics. |
builds_access_level | string | No | Set visibility ofpipelines. |
container_registry_access_level | string | No | Set visibility ofcontainer registry. |
environments_access_level | string | No | Set visibility ofenvironments. |
feature_flags_access_level | string | No | Set visibility offeature flags. |
forking_access_level | string | No | Set visibility offorks. |
infrastructure_access_level | string | No | Set visibility ofinfrastructure management. |
issues_access_level | string | No | Set visibility ofissues. |
merge_requests_access_level | string | No | Set visibility ofmerge requests. |
model_experiments_access_level | string | No | Set visibility ofmachine learning model experiments. |
model_registry_access_level | string | No | Set visibility ofmachine learning model registry. |
monitor_access_level | string | No | Set visibility ofapplication performance monitoring. |
pages_access_level | string | No | Set visibility ofGitLab Pages. |
releases_access_level | string | No | Set visibility ofreleases. |
repository_access_level | string | No | Set visibility ofrepository. |
requirements_access_level | string | No | Set visibility ofrequirements management. |
security_and_compliance_access_level | string | No | Set visibility ofsecurity and compliance. |
snippets_access_level | string | No | Set visibility ofsnippets. |
wiki_access_level | string | No | Set 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
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 theapi
scope enabled.
POST /projects/user/:user_id
Supported general project attributes:
Attribute | Type | Required | Description |
---|---|---|---|
name | string | Yes | The name of the new project. |
user_id | integer | Yes | The user ID of the project owner. |
allow_merge_on_skipped_pipeline | boolean | No | Set whether or not merge requests can be merged with skipped jobs. |
approvals_before_merge | integer | No | How 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_pipelines | string | No | Auto-cancel pending pipelines. This action toggles between an enabled state and a disabled state; it is not a boolean. |
auto_devops_deploy_strategy | string | No | Auto Deploy strategy (continuous ,manual ortimed_incremental ). |
auto_devops_enabled | boolean | No | Enable Auto DevOps for this project. |
autoclose_referenced_issues | boolean | No | Set whether auto-closing referenced issues on default branch. |
avatar | mixed | No | Image file for avatar of the project. |
build_git_strategy | string | No | The Git strategy. Defaults tofetch . |
build_timeout | integer | No | The maximum amount of time, in seconds, that a job can run. |
ci_config_path | string | No | The path to CI configuration file. |
container_registry_enabled | boolean | No | (Deprecated) Enable container registry for this project. Usecontainer_registry_access_level instead. |
default_branch | string | No | Thedefault branch name. Requiresinitialize_with_readme to betrue . |
description | string | No | Short project description. |
emails_disabled | boolean | No | (Deprecated) Disable email notifications. Useemails_enabled instead |
emails_enabled | boolean | No | Enable email notifications. |
enforce_auth_checks_on_uploads | boolean | No | Enforceauth checks on uploads. |
external_authorization_classification_label | string | No | The classification label for the project. Premium and Ultimate only. |
group_runners_enabled | boolean | No | Enable group runners for this project. |
group_with_project_templates_id | integer | No | For 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_url | string | No | URL to import repository from. |
initialize_with_readme | boolean | No | false by default. |
issue_branch_template | string | No | Template used to suggest names forbranches created from issues.(Introduced in GitLab 15.6.) |
issues_enabled | boolean | No | (Deprecated) Enable issues for this project. Useissues_access_level instead. |
jobs_enabled | boolean | No | (Deprecated) Enable jobs for this project. Usebuilds_access_level instead. |
lfs_enabled | boolean | No | Enable LFS. |
merge_commit_template | string | No | Template used to create merge commit message in merge requests. |
merge_method | string | No | Set the project’smerge method. Can bemerge (merge commit),rebase_merge (merge commit with semi-linear history), orff (fast-forward merge). |
merge_requests_enabled | boolean | No | (Deprecated) Enable merge requests for this project. Usemerge_requests_access_level instead. |
mirror_trigger_builds | boolean | No | Pull mirroring triggers builds. Premium and Ultimate only. |
mirror | boolean | No | Enables pull mirroring in a project. Premium and Ultimate only. |
namespace_id | integer | No | Namespace for the new project (defaults to the current user’s namespace). |
only_allow_merge_if_all_discussions_are_resolved | boolean | No | Set whether merge requests can only be merged when all the discussions are resolved. |
only_allow_merge_if_all_status_checks_passed | boolean | No | Indicates 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_succeeds | boolean | No | Set whether merge requests can only be merged with successful jobs. |
packages_enabled | boolean | No | Enable or disable packages repository feature. |
path | string | No | Custom repository name for new project. By default generated based on name. |
printing_merge_request_link_enabled | boolean | No | Show link to create/view merge request when pushing from the command line. |
public_builds | boolean | No | (Deprecated) Iftrue , jobs can be viewed by non-project members. Usepublic_jobs instead. |
public_jobs | boolean | No | Iftrue , jobs can be viewed by non-project members. |
repository_object_format | string | No | Repository object format. Defaults tosha1 .Introduced in GitLab 16.9. |
remove_source_branch_after_merge | boolean | No | EnableDelete source branch option by default for all new merge requests. |
repository_storage | string | No | Which storage shard the repository is on.(administrators only) |
request_access_enabled | boolean | No | Allow users to request member access. |
resolve_outdated_diff_discussions | boolean | No | Automatically resolve merge request diffs discussions on lines changed with a push. |
shared_runners_enabled | boolean | No | Enable instance runners for this project. |
show_default_award_emojis | boolean | No | Show default emoji reactions. |
snippets_enabled | boolean | No | (Deprecated) Enable snippets for this project. Usesnippets_access_level instead. |
squash_commit_template | string | No | Template used to create squash commit message in merge requests. |
squash_option | string | No | One ofnever ,always ,default_on , ordefault_off . |
suggestion_commit_message | string | No | The commit message used to apply merge requestsuggestions. |
tag_list | array | No | (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_name | string | No | When used withoutuse_custom_template , name of abuilt-in project template. When used withuse_custom_template , name of a custom project template. |
topics | array | No | The list of topics for the project. |
use_custom_template | boolean | No | Use either custominstance orgroup (withgroup_with_project_templates_id ) project template. Premium and Ultimate only. |
visibility | string | No | Seeproject visibility level. |
warn_about_potentially_unwanted_characters | boolean | No | Enable warnings about usage of potentially unwanted characters in this project. |
wiki_enabled | boolean | No | (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
.
Attribute | Type | Required | Description |
---|---|---|---|
analytics_access_level | string | No | Set visibility ofanalytics. |
builds_access_level | string | No | Set visibility ofpipelines. |
container_registry_access_level | string | No | Set visibility ofcontainer registry. |
environments_access_level | string | No | Set visibility ofenvironments. |
feature_flags_access_level | string | No | Set visibility offeature flags. |
forking_access_level | string | No | Set visibility offorks. |
infrastructure_access_level | string | No | Set visibility ofinfrastructure management. |
issues_access_level | string | No | Set visibility ofissues. |
merge_requests_access_level | string | No | Set visibility ofmerge requests. |
model_experiments_access_level | string | No | Set visibility ofmachine learning model experiments. |
model_registry_access_level | string | No | Set visibility ofmachine learning model registry. |
monitor_access_level | string | No | Set visibility ofapplication performance monitoring. |
pages_access_level | string | No | Set visibility ofGitLab Pages. |
releases_access_level | string | No | Set visibility ofreleases. |
repository_access_level | string | No | Set visibility ofrepository. |
requirements_access_level | string | No | Set visibility ofrequirements management. |
security_and_compliance_access_level | string | No | Set visibility ofsecurity and compliance. |
snippets_access_level | string | No | Set visibility ofsnippets. |
wiki_access_level | string | No | Set visibility ofwiki. |
Edit a project
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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
allow_merge_on_skipped_pipeline | boolean | No | Set whether or not merge requests can be merged with skipped jobs. |
allow_pipeline_trigger_approve_deployment | boolean | No | Set whether or not a pipeline triggerer is allowed to approve deployments. Premium and Ultimate only. |
only_allow_merge_if_all_status_checks_passed | boolean | No | Indicates that merges of merge requests should be blocked unless all status checks have passed. Defaults to false. Introduced in GitLab 15.5 with feature flag only_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_merge | integer | No | How 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_pipelines | string | No | Auto-cancel pending pipelines. This action toggles between an enabled state and a disabled state; it is not a boolean. |
auto_devops_deploy_strategy | string | No | Auto Deploy strategy (continuous ,manual , ortimed_incremental ). |
auto_devops_enabled | boolean | No | Enable Auto DevOps for this project. |
auto_duo_code_review_enabled | boolean | No | Enable automatic reviews by GitLab Duo on merge requests. SeeDuo in merge requests. Ultimate only. |
autoclose_referenced_issues | boolean | No | Set whether auto-closing referenced issues on default branch. |
avatar | mixed | No | Image file for avatar of the project. |
build_git_strategy | string | No | The Git strategy. Defaults tofetch . |
build_timeout | integer | No | The maximum amount of time, in seconds, that a job can run. |
ci_config_path | string | No | The path to CI configuration file. |
ci_default_git_depth | integer | No | Default number of revisions forshallow cloning. |
ci_delete_pipelines_in_seconds | integer | No | Pipelines older than the configured time are deleted. |
ci_forward_deployment_enabled | boolean | No | Enable or disableprevent outdated deployment jobs. |
ci_forward_deployment_rollback_allowed | boolean | No | Enable or disableallow job retries for rollback deployments. |
ci_allow_fork_pipelines_to_run_in_parent_project | boolean | No | Enable or disablerunning pipelines in the parent project for merge requests from forks.(Introduced in GitLab 15.3.) |
ci_id_token_sub_claim_components | array | No | Fields 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_caches | boolean | No | Set whether or not caches should beseparated by branch protection status. |
ci_restrict_pipeline_cancellation_role | string | No | Set 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_role | string | No | You 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_allowed | boolean | No | Enable or disable the ability to push to the project repository using job token.Introduced in GitLab 17.2. |
container_expiration_policy_attributes | hash | No | Update 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_enabled | boolean | No | (Deprecated) Enable container registry for this project. Usecontainer_registry_access_level instead. |
default_branch | string | No | Thedefault branch name. |
description | string | No | Short project description. |
emails_disabled | boolean | No | (Deprecated) Disable email notifications. Useemails_enabled instead |
emails_enabled | boolean | No | Enable email notifications. |
enforce_auth_checks_on_uploads | boolean | No | Enforceauth checks on uploads. |
external_authorization_classification_label | string | No | The classification label for the project. Premium and Ultimate only. |
group_runners_enabled | boolean | No | Enable group runners for this project. |
import_url | string | No | URL the repository was imported from. |
issues_enabled | boolean | No | (Deprecated) Enable issues for this project. Useissues_access_level instead. |
issues_template | string | No | Default description for Issues. Description is parsed with GitLab Flavored Markdown. SeeTemplates for issues and merge requests. Premium and Ultimate only. |
jobs_enabled | boolean | No | (Deprecated) Enable jobs for this project. Usebuilds_access_level instead. |
keep_latest_artifact | boolean | No | Disable or enable the ability to keep the latest artifact for this project. |
lfs_enabled | boolean | No | Enable LFS. |
max_artifacts_size | integer | No | The maximum file size in megabytes for individual job artifacts. |
merge_commit_template | string | No | Template used to create merge commit message in merge requests. |
merge_method | string | No | Set the project’smerge method. Can bemerge (merge commit),rebase_merge (merge commit with semi-linear history), orff (fast-forward merge). |
merge_pipelines_enabled | boolean | No | Enable or disable merged results pipelines. |
merge_requests_enabled | boolean | No | (Deprecated) Enable merge requests for this project. Usemerge_requests_access_level instead. |
merge_requests_template | string | No | Default description for merge requests. Description is parsed with GitLab Flavored Markdown. SeeTemplates for issues and merge requests. Premium and Ultimate only. |
merge_trains_enabled | boolean | No | Enable or disable merge trains. |
merge_trains_skip_train_allowed | boolean | No | Allows merge train merge requests to be merged without waiting for pipelines to finish. |
mirror_overwrites_diverged_branches | boolean | No | Pull mirror overwrites diverged branches. Premium and Ultimate only. |
mirror_trigger_builds | boolean | No | Pull mirroring triggers builds. Premium and Ultimate only. |
mirror_user_id | integer | No | User responsible for all the activity surrounding a pull mirror event.(administrators only) Premium and Ultimate only. |
mirror | boolean | No | Enables pull mirroring in a project. Premium and Ultimate only. |
mr_default_target_self | boolean | No | For forked projects, target merge requests to this project. Iffalse , the target is the upstream project. |
name | string | No | The name of the project. |
only_allow_merge_if_all_discussions_are_resolved | boolean | No | Set whether merge requests can only be merged when all the discussions are resolved. |
only_allow_merge_if_pipeline_succeeds | boolean | No | Set whether merge requests can only be merged with successful jobs. |
only_mirror_protected_branches | boolean | No | Only mirror protected branches. Premium and Ultimate only. |
packages_enabled | boolean | No | Enable or disable packages repository feature. |
path | string | No | Custom repository name for the project. By default generated based on name. |
prevent_merge_without_jira_issue | boolean | No | Set whether merge requests require an associated issue from Jira. Ultimate only. |
printing_merge_request_link_enabled | boolean | No | Show link to create/view merge request when pushing from the command line. |
public_builds | boolean | No | (Deprecated) Iftrue , jobs can be viewed by non-project members. Usepublic_jobs instead. |
public_jobs | boolean | No | Iftrue , jobs can be viewed by non-project members. |
remove_source_branch_after_merge | boolean | No | EnableDelete source branch option by default for all new merge requests. |
repository_storage | string | No | Which storage shard the repository is on.(administrators only) |
request_access_enabled | boolean | No | Allow users to request member access. |
resolve_outdated_diff_discussions | boolean | No | Automatically resolve merge request diffs discussions on lines changed with a push. |
restrict_user_defined_variables | boolean | No | (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_enabled | boolean | No | Enable or disable Service Desk feature. |
shared_runners_enabled | boolean | No | Enable instance runners for this project. |
show_default_award_emojis | boolean | No | Show default emoji reactions. |
snippets_enabled | boolean | No | (Deprecated) Enable snippets for this project. Usesnippets_access_level instead. |
issue_branch_template | string | No | Template used to suggest names forbranches created from issues.(Introduced in GitLab 15.6.) |
spp_repository_pipeline_access | boolean | No | Allow 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_template | string | No | Template used to create squash commit message in merge requests. |
squash_option | string | No | One ofnever ,always ,default_on , ordefault_off . |
suggestion_commit_message | string | No | The commit message used to apply merge request suggestions. |
tag_list | array | No | (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. |
topics | array | No | The list of topics for the project. This replaces any existing topics that are already added to the project. |
visibility | string | No | Seeproject visibility level. |
warn_about_potentially_unwanted_characters | boolean | No | Enable warnings about usage of potentially unwanted characters in this project. |
wiki_enabled | boolean | No | (Deprecated) Enable wiki for this project. Usewiki_access_level instead. |
web_based_commit_signing_enabled | boolean | No | Enables 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:
Attribute | Type | Required | Description |
---|---|---|---|
analytics_access_level | string | No | Set visibility ofanalytics. |
builds_access_level | string | No | Set visibility ofpipelines. |
container_registry_access_level | string | No | Set visibility ofcontainer registry. |
environments_access_level | string | No | Set visibility ofenvironments. |
feature_flags_access_level | string | No | Set visibility offeature flags. |
forking_access_level | string | No | Set visibility offorks. |
infrastructure_access_level | string | No | Set visibility ofinfrastructure management. |
issues_access_level | string | No | Set visibility ofissues. |
merge_requests_access_level | string | No | Set visibility ofmerge requests. |
model_experiments_access_level | string | No | Set visibility ofmachine learning model experiments. |
model_registry_access_level | string | No | Set visibility ofmachine learning model registry. |
monitor_access_level | string | No | Set visibility ofapplication performance monitoring. |
pages_access_level | string | No | Set visibility ofGitLab Pages. |
releases_access_level | string | No | Set visibility ofreleases. |
repository_access_level | string | No | Set visibility ofrepository. |
requirements_access_level | string | No | Set visibility ofrequirements management. |
security_and_compliance_access_level | string | No | Set visibility ofsecurity and compliance. |
snippets_access_level | string | No | Set visibility ofsnippets. |
wiki_access_level | string | No | Set 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the target project to receive the members. |
project_id | integer or string | Yes | The 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The 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
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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
full_path | string | no | Full 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_remove | boolean/string | no | Immediately 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
namespace | integer or string | Yes | The 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
Retrieve a list of groups to which the user can transfer a project.
GET /projects/:id/transfer_locations
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
search | string | No | The 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:
Attribute | Type | Required | Description |
---|---|---|---|
avatar | string | Yes | The file to be uploaded. |
id | integer or string | Yes | The 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
Download a project avatar. You can access this endpoint without authentication if the project is publicly accessible.
GET /projects/:id/avatar
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | yes | ID 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
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:
Attribute | Type | Required | Description |
---|---|---|---|
group_access | integer | Yes | Therole (access_level ) to grant the group. |
group_id | integer | Yes | The ID of the group to share with. |
id | integer or string | Yes | The ID orURL-encoded path of the project. |
expires_at | string | No | Share expiration date in ISO 8601 format. For example,2016-09-26 . |
Delete a shared project link in a group
Unshare the project from the group. Returns204
and no content on success.
DELETE /projects/:id/share/:group_id
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
group_id | integer | Yes | The ID of the group. |
id | integer or string | Yes | The 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
task | string | No | prune to trigger manual prune of unreachable objects oreager to trigger eager housekeeping. |
Real-time security scan
- Tier: Ultimate
- Offering: GitLab.com
- Status: Experiment
Returns SAST scan results for a single file in real-time.
POST /projects/:id/security_scans/sast/scan
Supported attributes:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | The ID orURL-encoded path of the project. |
wiki | boolean | No | Whether 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:
Attribute | Type | Required | Description |
---|---|---|---|
id | integer or string | Yes | ID 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
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_role
setting has higher priority.
For example, if you:
- Set
restrict_user_defined_variables
totrue
andci_pipeline_variables_minimum_override_role
todeveloper
,the response returnsrestrict_user_defined_variables: false
. Settingci_pipeline_variables_minimum_override_role
todeveloper
takes precedence and variables are not restricted. - Set
restrict_user_defined_variables
tofalse
andci_pipeline_variables_minimum_override_role
tomaintainer
,The response returnsrestrict_user_defined_variables: true
because settingci_pipeline_variables_minimum_override_role
tomaintainer
takes precedence and variables are restricted.