title: " Gerrit Code Review - /projects/ REST API" sidebar: restapi_sidebar permalink: rest-api-projects.html

This page describes the project related REST endpoints. Please also take note of the general information on the REST API.

Project Endpoints

List Projects

GET /projects/

Lists the projects accessible by the caller. This is the same as using the ls-projects command over SSH, and accepts the same options as query parameters.

As result a map is returned that maps the project names to ProjectInfo entries. The entries in the map are sorted by project name.

Request.

  GET /projects/?d HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "external/bison": {
      "id": "external%2Fbison",
      "description": "GNU parser generator"
    },
    "external/gcc": {
      "id": "external%2Fgcc"
    },
    "external/openssl": {
      "id": "external%2Fopenssl",
      "description": "encryption\ncrypto routines"
    },
    "test": {
      "id": "test",
      "description": "\u003chtml\u003e is escaped"
    }
  }

Project Options

  • Branch(b)
    Limit the results to the projects having the specified branch and include the sha1 of the branch in the results.

    Get projects that have a master branch:

    Request.

    GET /projects/?b=master HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "some-project": {
          "id": "some-project",
          "branches": {
            "master": "c5ed9dfcbf002ca0e432d788dab6ca2387829ca7"
          }
        },
        "some-other-project": {
          "id": "some-other-project",
          "branches": {
            "master": "ef1c270142f9581ecf768f4193fc8f8a81102ec2"
          }
        },
      }
    
  • Description(d)
    Include project description in the results.

    Get all the projects with their description:

    Request.

    GET /projects/?d HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "some-project": {
          "id": "some-project",
          "description": "Description of some project."
        },
        "some-other-project": {
          "id": "some-other-project",
           "description": "Description of some other project."
          }
        },
      }
    
  • Limit(n)
    Limit the number of projects to be included in the results.

    Query the first project in the project list:

    Request.

      GET /projects/?n=1 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "some-project": {
          "id": "some-project"
        }
      }
    
  • Prefix(p)
    Limit the results to those projects that start with the specified prefix.

    The match is case sensitive. May not be used together with m or r.

    List all projects that start with platform/:

    Request.

      GET /projects/?p=platform%2F HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "platform/drivers": {
          "id": "platform%2Fdrivers"
        },
        "platform/tools": {
          "id": "platform%2Ftools"
        }
      }
    

    E.g. this feature can be used by suggestion client UI’s to limit results.

  • Regex(r)
    Limit the results to those projects that match the specified regex.

    Boundary matchers ^ and $ are implicit. For example: the regex test.* will match any projects that start with test and regex .*test will match any project that end with test.

    The match is case sensitive. May not be used together with m or p.

    List all projects that match regex test.*project:

    Request.

      GET /projects/?r=test.*project HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "test/some-project": {
          "id": "test%2Fsome-project"
        },
        "test/some-other-project": {
          "id": "test%2Fsome-other-project"
        }
      }
    
  • Skip(S)
    Skip the given number of projects from the beginning of the list.

    Query the second project in the project list:

    Request.

      GET /projects/?n=1&S=1 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "some-other-project": {
          "id": "some-other-project"
        }
      }
    
  • Substring(m)
    Limit the results to those projects that match the specified substring.

    The match is case insensitive. May not be used together with r or p.

    List all projects that match substring test/:

    Request.

      GET /projects/?m=test%2F HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "test/some-project": {
          "id": "test%2Fsome-project"
        },
        "some-path/test/some-other-project": {
          "id": "some-path%2Ftest%2Fsome-other-project"
        }
      }
    
  • Tree(t)
    Get projects inheritance in a tree-like format. This option does not work together with the branch option.

    Get all the projects with tree option:

    Request.

    GET /projects/?t HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "All-Projects" {
          "id": "All-Projects"
        },
        "child-project": {
          "id": "child-project",
          "parent":"parent-project"
        },
        "parent-project": {
          "id": "parent-project",
          "parent":"All-Projects"
        }
      }
    
  • Type(type)
    Get projects with specified type: ALL, CODE, PERMISSIONS.

    Get all the projects of type PERMISSIONS:

    Request.

    GET /projects/?type=PERMISSIONS HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      {
        "All-Projects" {
          "id": "All-Projects"
        },
        "some-parent-project": {
          "id": "some-parent-project"
        }
      }
    

Get Project

GET /projects/{project-name}

Retrieves a project.

Request.

  GET /projects/plugins%2Freplication HTTP/1.0

As response a ProjectInfo entity is returned that describes the project.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "plugins%2Freplication",
    "name": "plugins/replication",
    "parent": "Public-Plugins",
    "description": "Copies to other servers using the Git protocol",
    "state": "ACTIVE",
    "labels": {
      "Code-Review": {
        "values": {
          " 0": "No score",
          "+1": "Approved"
        },
        "default_value": 0
      }
    }
  }

Create Project

PUT /projects/{project-name}

Creates a new project.

In the request body additional data for the project can be provided as ProjectInput.

Request.

  PUT /projects/MyProject HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "description": "This is a demo project.",
    "submit_type": "CHERRY_PICK",
    "owners": [
      "MyProject-Owners"
    ]
  }

As response the ProjectInfo entity is returned that describes the created project.

Response.

  HTTP/1.1 201 Created
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "MyProject",
    "name": "MyProject",
    "parent": "All-Projects",
    "description": "This is a demo project.",
    "labels": {
      "Code-Review": {
        "values": {
          " 0": "No score",
          "+1": "Approved"
        },
        "default_value": 0
      }
    }
  }

Get Project Description

GET /projects/{project-name}/description

Retrieves the description of a project.

Request.

  GET /projects/plugins%2Freplication/description HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  "Copies to other servers using the Git protocol"

If the project does not have a description an empty string is returned.

Set Project Description

PUT /projects/{project-name}/description

Sets the description of a project.

The new project description must be provided in the request body inside a ProjectDescriptionInput entity.

Request.

  PUT /projects/plugins%2Freplication/description HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "description": "Plugin for Gerrit that handles the replication.",
    "commit_message": "Update the project description"
  }

As response the new project description is returned.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  "Plugin for Gerrit that handles the replication."

If the description was deleted the response is “204 No Content”.

Delete Project Description

DELETE /projects/{project-name}/description

Deletes the description of a project.

The request body does not need to include a ProjectDescriptionInput entity if no commit message is specified.

Please note that some proxies prohibit request bodies for DELETE requests. In this case, if you want to specify a commit message, use PUT to delete the description.

Request.

  DELETE /projects/plugins%2Freplication/description HTTP/1.0

Response.

  HTTP/1.1 204 No Content

Get Project Parent

GET /projects/{project-name}/parent

Retrieves the name of a project’s parent project. For the All-Projects root project an empty string is returned.

Request.

  GET /projects/plugins%2Freplication/parent HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  "All-Projects"

Set Project Parent

PUT /projects/{project-name}/parent

Sets the parent project for a project.

The new name of the parent project must be provided in the request body inside a ProjectParentInput entity.

Request.

  PUT /projects/plugins%2Freplication/parent HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "parent": "Public-Plugins",
    "commit_message": "Update the project parent"
  }

As response the new parent project name is returned.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  "Public-Plugins"

Get HEAD

GET /projects/{project-name}/HEAD

Retrieves for a project the name of the branch to which HEAD points.

Request.

  GET /projects/plugins%2Freplication/HEAD HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  "refs/heads/master"

Set HEAD

PUT /projects/{project-name}/HEAD

Sets HEAD for a project.

The new ref to which HEAD should point must be provided in the request body inside a HeadInput entity.

Request.

  PUT /projects/plugins%2Freplication/HEAD HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "ref": "refs/heads/stable"
  }

As response the new ref to which HEAD points is returned.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  "refs/heads/stable"

Get Repository Statistics

GET /projects/{project-name}/statistics.git

Return statistics for the repository of a project.

Request.

  GET /projects/plugins%2Freplication/statistics.git HTTP/1.0

The repository statistics are returned as a RepositoryStatisticsInfo entity.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "number_of_loose_objects": 127,
    "number_of_loose_refs": 15,
    "number_of_pack_files": 15,
    "number_of_packed_objects": 67,
    "number_of_packed_refs": 0,
    "size_of_loose_objects": 29466,
    "size_of_packed_objects": 9646
  }

Get Config

GET /projects/{project-name}/config

Gets some configuration information about a project. Note that this config info is not simply the contents of project.config; it generally contains fields that may have been inherited from parent projects.

Request.

  GET /projects/myproject/config

A ConfigInfo entity is returned that describes the project configuration. Some fields are only visible to users that have read access to refs/meta/config.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "description": "demo project",
    "use_contributor_agreements": {
      "value": true,
      "configured_value": "TRUE",
      "inherited_value": false
    },
    "use_content_merge": {
      "value": true,
      "configured_value": "INHERIT",
      "inherited_value": true
    },
    "use_signed_off_by": {
      "value": false,
      "configured_value": "INHERIT",
      "inherited_value": false
    },
    "create_new_change_for_all_not_in_target": {
      "value": false,
      "configured_value": "INHERIT",
      "inherited_value": false
    },
    "require_change_id": {
      "value": false,
      "configured_value": "FALSE",
      "inherited_value": true
    },
    "max_object_size_limit": {
      "value": "15m",
      "configured_value": "15m",
      "inherited_value": "20m"
    },
    "submit_type": "MERGE_IF_NECESSARY",
    "state": "ACTIVE",
    "commentlinks": {},
    "plugin_config": {
      "helloworld": {
        "language": {
          "display_name": "Preferred Language",
          "type": "STRING",
          "value": "en"
        }
      }
    },
    "actions": {
      "cookbook~hello-project": {
        "method": "POST",
        "label": "Say hello",
        "title": "Say hello in different languages",
        "enabled": true
      }
    }
  }

Set Config

PUT /projects/{project-name}/config

Sets the configuration of a project.

The new configuration must be provided in the request body as a ConfigInput entity.

Request.

  PUT /projects/myproject/config HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "description": "demo project",
    "use_contributor_agreements": "FALSE",
    "use_content_merge": "INHERIT",
    "use_signed_off_by": "INHERIT",
    "create_new_change_for_all_not_in_target": "INHERIT",
    "enable_signed_push": "INHERIT",
    "require_signed_push": "INHERIT",
    "reject_implicit_merges": "INHERIT",
    "require_change_id": "TRUE",
    "max_object_size_limit": "10m",
    "submit_type": "REBASE_IF_NECESSARY",
    "state": "ACTIVE"
  }

As response the new configuration is returned as a ConfigInfo entity.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "use_contributor_agreements": {
      "value": false,
      "configured_value": "FALSE",
      "inherited_value": false
    },
    "use_content_merge": {
      "value": true,
      "configured_value": "INHERIT",
      "inherited_value": true
    },
    "use_signed_off_by": {
      "value": false,
      "configured_value": "INHERIT",
      "inherited_value": false
    },
    "create_new_change_for_all_not_in_target": {
      "value": true,
      "configured_value": "INHERIT",
      "inherited_value": false
    },
    "require_change_id": {
      "value": true,
      "configured_value": "TRUE",
      "inherited_value": true
    },
    "enable_signed_push": {
      "value": true,
      "configured_value": "INHERIT",
      "inherited_value": false
    },
    "require_signed_push": {
      "value": false,
      "configured_value": "INHERIT",
      "inherited_value": false
    },
    "reject_implicit_merges": {
      "value": false,
      "configured_value": "INHERIT",
      "inherited_value": false
    },
    "max_object_size_limit": {
      "value": "10m",
      "configured_value": "10m",
      "inherited_value": "20m"
    },
    "submit_type": "REBASE_IF_NECESSARY",
    "state": "ACTIVE",
    "commentlinks": {}
  }

Run GC

POST /projects/{project-name}/gc

Run the Git garbage collection for the repository of a project.

Options for the Git garbage collection can be specified in the request body as a GCInput entity.

Request.

  POST /projects/plugins%2Freplication/gc HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "show_progress": true
  }

The response is the streamed output of the garbage collection.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: text/plain; charset=UTF-8

  collecting garbage for "plugins/replication":
  Pack refs:              100% (21/21)
  Counting objects:       20
  Finding sources:        100% (20/20)
  Getting sizes:          100% (13/13)
  Compressing objects:     83% (5/6)
  Writing objects:        100% (20/20)
  Selecting commits:      100% (7/7)
  Building bitmaps:       100% (7/7)
  Finding sources:        100% (41/41)
  Getting sizes:          100% (25/25)
  Compressing objects:     52% (12/23)
  Writing objects:        100% (41/41)
  Prune loose objects also found in pack files: 100% (36/36)
  Prune loose, unreferenced objects: 100% (36/36)
  done.

Asynchronous Execution

The option async allows to schedule a background task that asynchronously executes a Git garbage collection.

The Location header of the response refers to the background task which allows to inspect the progress of its execution. In case of asynchronous execution the show_progress option is ignored.

Request.

  POST /projects/plugins%2Freplication/gc HTTP/1.0
  Content-Type: application/json;charset=UTF-8

  {
    "async": true
  }

The response is empty.

Response.

  HTTP/1.1 202 Accepted
  Content-Disposition: attachment
  Location: https:<host>/a/config/server/tasks/383a0602

Ban Commit

PUT /projects/{project-name}/ban

Marks commits as banned for the project. If a commit is banned Gerrit rejects every push that includes this commit with contains banned commit ….

Note

This REST endpoint only marks the commits as banned, but it does not remove the commits from the history of any central branch. This needs to be done manually.

The commits to be banned must be specified in the request body as a BanInput entity.

The caller must be project owner.

Request.

  PUT /projects/plugins%2Freplication/ban HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "commits": [
      "a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96",
      "cf5b56541f84b8b57e16810b18daca9c3adc377b"
    ],
    "reason": "Violates IP"
  }

As response a BanResultInfo entity is returned.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "newly_banned": [
      "a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96",
      "cf5b56541f84b8b57e16810b18daca9c3adc377b"
    ]
  }

List Access Rights for Project

GET /projects/{project-name}/access

Lists the access rights for a single project.

As result a ProjectAccessInfo entity is returned.

Request.

  GET /projects/MyProject/access HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "revision": "61157ed63e14d261b6dca40650472a9b0bd88474",
    "inherits_from": {
      "id": "All-Projects",
      "name": "All-Projects",
      "description": "Access inherited by all other projects."
    },
    "local": {
        "refs/*": {
          "permissions": {
            "read": {
              "rules": {
                "c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
                  "action": "ALLOW",
                  "force": false
                },
                "global:Anonymous-Users": {
                  "action": "ALLOW",
                  "force": false
                }
              }
            }
          }
        }
    },
    "is_owner": true,
    "owner_of": [
      "refs/*"
    ],
    "can_upload": true,
    "can_add": true,
    "config_visible": true,
    "groups": {
      "c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
        "url": "#/admin/groups/uuid-c2ce4749a32ceb82cd6adcce65b8216e12afb41c",
        "options": {},
        "description": "Users who perform batch actions on Gerrit",
        "group_id": 2,
        "owner": "Administrators",
        "owner_id": "d5b7124af4de52924ed397913e2c3b37bf186948",
        "created_on": "2009-06-08 23:31:00.000000000",
        "name": "Non-Interactive Users"
      },
      "global:Anonymous-Users": {
        "options": {},
        "name": "Anonymous Users"
      }
    }
  }

Add, Update and Delete Access Rights for Project

POST /projects/{project-name}/access

Sets access rights for the project using the diff schema provided by ProjectAccessInput. Deductions are used to remove access sections, permissions or permission rules. The backend will remove the entity with the finest granularity in the request, meaning that if an access section without permissions is posted, the access section will be removed; if an access section with a permission but no permission rules is posted, the permission will be removed; if an access section with a permission and a permission rule is posted, the permission rule will be removed.

Additionally, access sections and permissions will be cleaned up after applying the deductions by removing items that have no child elements.

After removals have been applied, additions will be applied.

As result a ProjectAccessInfo entity is returned.

Request.

  POST /projects/MyProject/access HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "remove": [
      "refs/*": {
        "permissions": {
          "read": {
            "rules": {
              "c2ce4749a32ceb82cd6adcce65b8216e12afb41c": {
                "action": "ALLOW"
              }
            }
          }
        }
      }
    ]
  }

Response.

  HTTP/1.1 200 OK
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "revision": "61157ed63e14d261b6dca40650472a9b0bd88474",
    "inherits_from": {
      "id": "All-Projects",
      "name": "All-Projects",
      "description": "Access inherited by all other projects."
    },
    "local": {
        "refs/*": {
          "permissions": {
            "read": {
              "rules": {
                "global:Anonymous-Users": {
                  "action": "ALLOW",
                  "force": false
                }
              }
            }
          }
        }
    },
    "is_owner": true,
    "owner_of": [
      "refs/*"
    ],
    "can_upload": true,
    "can_add": true,
    "config_visible": true,
    "groups": {
      "global:Anonymous-Users": {
        "options": {},
        "name": "Anonymous Users"
      }
    }
  }

Create Access Rights Change for review.

'PUT /projects/{project-name}/access:review

Sets access rights for the project using the diff schema provided by ProjectAccessInput

This takes the same input as Update Access Rights, but creates a pending change for review. Like Create Change, it returns a ChangeInfo entity describing the resulting change.

Request.

  PUT /projects/MyProject/access:review HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "add":{
      "refs/heads/*":{
        "permissions":{
          "read":{
            "rules":{
              "global:Anonymous-Users": {
                "action":"DENY",
                "force":false
              }
            }
          }
        }
      }
    }
  }

Response.

  HTTP/1.1 200 OK
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "testproj~refs%2Fmeta%2Fconfig~Ieaf185bf90a1fc3b58461e399385e158a20b31a2",
    "project": "testproj",
    "branch": "refs/meta/config",
    "hashtags": [],
    "change_id": "Ieaf185bf90a1fc3b58461e399385e158a20b31a2",
    "subject": "Review access change",
    "status": "NEW",
    "created": "2017-09-07 14:31:11.852000000",
    "updated": "2017-09-07 14:31:11.852000000",
    "submit_type": "CHERRY_PICK",
    "mergeable": true,
    "insertions": 2,
    "deletions": 0,
    "unresolved_comment_count": 0,
    "has_review_started": true,
    "_number": 7,
    "owner": {
      "_account_id": 1000000
    }
  }

Check Access

POST /projects/MyProject/check.access

Runs access checks for other users. This requires the Administrate Server global capability.

Input for the access checks that should be run must be provided in the request body inside a AccessCheckInput entity.

Request.

  POST /projects/MyProject/check.access HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "account": "Kristen.Burns@gerritcodereview.com",
    "ref": "refs/heads/secret/bla"
  }

The result is a AccessCheckInfo entity detailing the read access of the given user for the given project (or project-ref combination).

Response.

  HTTP/1.1 200 OK
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "message": "user Kristen Burns \u003cKristen.Burns@gerritcodereview.com\u003e (1000098) cannot see ref refs/heads/secret/bla in project MyProject",
    "status": 403
  }

Index all changes in a project

Adds or updates all the changes belonging to a project in the secondary index. The indexing task is executed asynchronously in background, so this command returns immediately.

Request.

  POST /projects/MyProject/index HTTP/1.0

Response.

HTTP/1.1 202 Accepted
Content-Disposition: attachment

Branch Endpoints

List Branches

GET /projects/{project-name}/branches/

List the branches of a project.

As result a list of BranchInfo entries is returned.

Request.

  GET /projects/work%2Fmy-project/branches/ HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "ref": "HEAD",
      "revision": "master"
    },
    {
      "ref": "refs/meta/config",
      "revision": "76016386a0d8ecc7b6be212424978bb45959d668"
    },
    {
      "ref": "refs/heads/master",
      "revision": "67ebf73496383c6777035e374d2d664009e2aa5c"
    },
    {
      "ref": "refs/heads/stable",
      "revision": "64ca533bd0eb5252d2fee83f63da67caae9b4674",
      "can_delete": true
    }
  ]

Branch Options

  • Limit(n)
    Limit the number of branches to be included in the results.

    Request.

      GET /projects/testproject/branches?n=1 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      [
        {
          "ref": "HEAD",
          "revision": "master",
          "can_delete": false
        }
      ]
    
  • Skip(S)
    Skip the given number of branches from the beginning of the list.

    Request.

      GET /projects/testproject/branches?n=1&s=0 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      [
        {
          "ref": "HEAD",
          "revision": "master",
          "can_delete": false
        }
      ]
    
  • Substring(m)
    Limit the results to those branches that match the specified substring.

    The match is case insensitive. May not be used together with r.

    List all branches that match substring test:

    Request.

      GET /projects/testproject/branches?m=test HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      [
        {
          "ref": "refs/heads/test1",
          "revision": "9c9d08a438e55e52f33b608415e6dddd9b18550d",
          "can_delete": true
        }
      ]
    
  • Regex(r)
    Limit the results to those branches that match the specified regex. Boundary matchers ^ and $ are implicit. For example: the regex t* will match any branches that start with t and regex *t will match any branches that end with t.

    The match is case sensitive. May not be used together with m.

    List all branches that match regex t.*1:

    Request.

      GET /projects/testproject/branches?r=t.*1 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      [
        {
          "ref": "refs/heads/test1",
          "revision": "9c9d08a438e55e52f33b608415e6dddd9b18550d",
          "can_delete": true
        }
      ]
    

Get Branch

GET /projects/{project-name}/branches/{branch-id}

Retrieves a branch of a project.

Request.

  GET /projects/work%2Fmy-project/branches/master HTTP/1.0

As response a BranchInfo entity is returned that describes the branch.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "ref": "refs/heads/master",
    "revision": "67ebf73496383c6777035e374d2d664009e2aa5c"
  }

Create Branch

PUT /projects/{project-name}/branches/{branch-id}

Creates a new branch.

In the request body additional data for the branch can be provided as BranchInput.

Request.

  PUT /projects/MyProject/branches/stable HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "revision": "76016386a0d8ecc7b6be212424978bb45959d668"
  }

As response a BranchInfo entity is returned that describes the created branch.

Response.

  HTTP/1.1 201 Created
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "ref": "refs/heads/stable",
    "revision": "76016386a0d8ecc7b6be212424978bb45959d668",
    "can_delete": true
  }

Delete Branch

DELETE /projects/{project-name}/branches/{branch-id}

Deletes a branch.

Request.

  DELETE /projects/MyProject/branches/stable HTTP/1.0

Response.

  HTTP/1.1 204 No Content

Delete Branches

POST /projects/{project-name}/branches:delete

Delete one or more branches.

The branches to be deleted must be provided in the request body as a DeleteBranchesInput entity.

Request.

  POST /projects/MyProject/branches:delete HTTP/1.0
  Content-Type: application/json;charset=UTF-8

  {
    "branches": [
      "stable-1.0",
      "stable-2.0"
    ]
  }

Response.

  HTTP/1.1 204 No Content

If some branches could not be deleted, the response is “409 Conflict” and the error message is contained in the response body.

Get Content

GET /projects/{project-name}/branches/{branch-id}/files/{file-id}/content

Gets the content of a file from the HEAD revision of a certain branch.

Request.

  GET /projects/gerrit/branches/master/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/content HTTP/1.0

The content is returned as base64 encoded string.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: text/plain; charset=UTF-8

  Ly8gQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY...

Get Mergeable Information

GET /projects/{project-name}/branches/{branch-id}/mergeable

Gets whether the source is mergeable with the target branch.

The source query parameter is required, which can be anything that could be resolved to a commit, see examples of the source attribute in MergeInput.

Also takes an optional parameter strategy, which can be recursive, resolve, simple-two-way-in-core, ours or theirs, default will use project settings.

Request.

  GET /projects/test/branches/master/mergeable?source=testbranch&strategy=recursive HTTP/1.0

As response a MergeableInfo entity is returned.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "submit_type": "MERGE_IF_NECESSARY",
    "strategy": "recursive",
    "mergeable": true,
    "commit_merged": false,
    "content_merged": false
  }

or when there were conflicts.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "submit_type": "MERGE_IF_NECESSARY",
    "strategy": "recursive",
    "mergeable": false,
    "conflicts": [
      "common.txt",
      "shared.txt"
    ]
  }

or when the testbranch has been already merged.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "submit_type": "MERGE_IF_NECESSARY",
    "strategy": "recursive",
    "mergeable": true,
    "commit_merged": true,
    "content_merged": true
  }

or when only the content of testbranch has been merged.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "submit_type": "MERGE_IF_NECESSARY",
    "strategy": "recursive",
    "mergeable": true,
    "commit_merged": false,
    "content_merged": true
  }

Get Reflog

GET /projects/{project-name}/branches/{branch-id}/reflog

Gets the reflog of a certain branch.

The caller must be project owner.

Request.

  GET /projects/gerrit/branches/master/reflog HTTP/1.0

As response a list of ReflogEntryInfo entities is returned that describe the reflog entries. The reflog entries are returned in reverse order.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "old_id": "976ced8f4fc0909d7e1584d18455299545881d60",
      "new_id": "2eaa94bac536654eb592c941e33b91f925698d16",
      "who": {
        "name": "Jane Roe",
        "email": "jane.roe@example.com",
        "date": "2014-06-30 11:53:43.000000000",
        "tz": 120
      },
      "comment": "merged: fast forward"
    },
    {
      "old_id": "c271c6a7161b74f85560c5899c8c73ee89ca5e29",
      "new_id": "976ced8f4fc0909d7e1584d18455299545881d60",
      "who": {
        "name": "John Doe",
        "email": "john.doe@example.com",
        "date": "2013-10-02 10:45:26.000000000",
        "tz": 120
      },
      "comment": "merged: fast forward"
    },
    {
      "old_id": "0000000000000000000000000000000000000000",
      "new_id": "c271c6a7161b74f85560c5899c8c73ee89ca5e29",
      "who": {
        "name": "John Doe",
        "email": "john.doe@example.com",
        "date": "2013-09-30 19:08:44.000000000",
        "tz": 120
      },
      "comment": ""
    }
  ]

The get reflog endpoint also accepts a limit integer in the n parameter. This limits the results to show the last n reflog entries.

Query the last 25 reflog entries.

  GET /projects/gerrit/branches/master/reflog?n=25 HTTP/1.0

The reflog can also be filtered by timestamp by specifying the from and to parameters. The timestamp for from and to must be given as UTC in the following format: yyyyMMdd_HHmm.

  GET /projects/gerrit/branches/master/reflog?from=20130101_0000&to=20140101_0000=25 HTTP/1.0

Child Project Endpoints

List Child Projects

GET /projects/{project-name}/children/

List the direct child projects of a project.

Request.

  GET /projects/Public-Plugins/children/ HTTP/1.0

As result a list of ProjectInfo entries is returned that describe the child projects.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "id": "plugins%2Freplication",
      "name": "plugins/replication",
      "parent": "Public-Plugins",
      "description": "Copies to other servers using the Git protocol"
    },
    {
      "id": "plugins%2Freviewnotes",
      "name": "plugins/reviewnotes",
      "parent": "Public-Plugins",
      "description": "Annotates merged commits using notes on refs/notes/review."
    },
    {
      "id": "plugins%2Fsingleusergroup",
      "name": "plugins/singleusergroup",
      "parent": "Public-Plugins",
      "description": "GroupBackend enabling users to be directly added to access rules"
    }
  ]

To resolve the child projects of a project recursively the parameter recursive can be set.

Child projects that are not visible to the calling user are ignored and are not resolved further.

Request.

  GET /projects/Public-Projects/children/?recursive HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "id": "gerrit",
      "name": "gerrit",
      "parent": "Public-Projects",
      "description": "Gerrit Code Review"
    },
    {
      "id": "plugins%2Freplication",
      "name": "plugins/replication",
      "parent": "Public-Plugins",
      "description": "Copies to other servers using the Git protocol"
    },
    {
      "id": "plugins%2Freviewnotes",
      "name": "plugins/reviewnotes",
      "parent": "Public-Plugins",
      "description": "Annotates merged commits using notes on refs/notes/review."
    },
    {
      "id": "plugins%2Fsingleusergroup",
      "name": "plugins/singleusergroup",
      "parent": "Public-Plugins",
      "description": "GroupBackend enabling users to be directly added to access rules"
    },
    {
      "id": "Public-Plugins",
      "name": "Public-Plugins",
      "parent": "Public-Projects",
      "description": "Parent project for plugins/*"
    }
  ]

Get Child Project

GET /projects/{project-name}/children/{project-name}

Retrieves a child project. If a non-direct child project should be retrieved the parameter recursive must be set.

Request.

  GET /projects/Public-Plugins/children/plugins%2Freplication HTTP/1.0

As response a ProjectInfo entity is returned that describes the child project.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "plugins%2Freplication",
    "name": "plugins/replication",
    "parent": "Public-Plugins",
    "description": "Copies to other servers using the Git protocol"
  }

Tag Endpoints

Create Tag

PUT /projects/{project-name}/tags/{tag-id}

Create a new tag on the project.

In the request body additional data for the tag can be provided as TagInput.

If a message is provided in the input, the tag is created as an annotated tag with the current user as tagger. Signed tags are not supported.

Request.

  PUT /projects/MyProject/tags/v1.0 HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "message": "annotation",
    "revision": "c83117624b5b5d8a7f86093824e2f9c1ed309d63"
  }

As response a TagInfo entity is returned that describes the created tag.

Response.

  HTTP/1.1 201 Created
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'

  "object": "d48d304adc4b6674e11dc2c018ea05fcbdda32fd",
  "message": "annotation",
  "tagger": {
    "name": "David Pursehouse",
    "email": "dpursehouse@collab.net",
    "date": "2016-06-06 01:22:03.000000000",
    "tz": 540
  },
  "ref": "refs/tags/v1.0",
  "revision": "c83117624b5b5d8a7f86093824e2f9c1ed309d63"
  }

List Tags

GET /projects/{project-name}/tags/

List the tags of a project.

As result a list of TagInfo entries is returned.

Only includes tags under the refs/tags/ namespace.

Request.

  GET /projects/work%2Fmy-project/tags/ HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "ref": "refs/tags/v1.0",
      "revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
      "object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
      "message": "Annotated tag",
      "tagger": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "date": "2014-10-06 07:35:03.000000000",
        "tz": 540
      }
    },
    {
      "ref": "refs/tags/v2.0",
      "revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
    },
    {
      "ref": "refs/tags/v3.0",
      "revision": "c628685b3c5a3614571ecb5c8fceb85db9112313",
      "object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
      "message": "Signed tag\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\niQEcBAABAgAGBQJUMlqYAAoJEPI2qVPgglptp7MH/j+KFcittFbxfSnZjUl8n5IZ\nveZo7wE+syjD9sUbMH4EGv0WYeVjphNTyViBof+stGTNkB0VQzLWI8+uWmOeiJ4a\nzj0LsbDOxodOEMI5tifo02L7r4Lzj++EbqtKv8IUq2kzYoQ2xjhKfFiGjeYOn008\n9PGnhNblEHZgCHguGR6GsfN8bfA2XNl9B5Ysl5ybX1kAVs/TuLZR4oDMZ/pW2S75\nhuyNnSgcgq7vl2gLGefuPs9lxkg5Fj3GZr7XPZk4pt/x1oiH7yXxV4UzrUwg2CC1\nfHrBlNbQ4uJNY8TFcwof52Z0cagM5Qb/ZSLglHbqEDGA68HPqbwf5z2hQyU2/U4\u003d\n\u003dZtUX\n-----END PGP SIGNATURE-----",
      "tagger": {
        "name": "David Pursehouse",
        "email": "david.pursehouse@sonymobile.com",
        "date": "2014-10-06 09:02:16.000000000",
        "tz": 540
      }
    }
  ]

Tag Options

  • Limit(n)
    Limit the number of tags to be included in the results.

    Request.

      GET /projects/work%2Fmy-project/tags?n=2 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      [
        {
          "ref": "refs/tags/v1.0",
          "revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
          "object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
          "message": "Annotated tag",
          "tagger": {
            "name": "David Pursehouse",
            "email": "david.pursehouse@sonymobile.com",
            "date": "2014-10-06 07:35:03.000000000",
            "tz": 540
          }
        },
        {
          "ref": "refs/tags/v2.0",
          "revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
        }
      ]
    
  • Skip(S)
    Skip the given number of tags from the beginning of the list.

    Request.

      GET /projects/work%2Fmy-project/tags?n=2&s=1 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      [
        {
          "ref": "refs/tags/v2.0",
          "revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
        },
        {
          "ref": "refs/tags/v3.0",
          "revision": "c628685b3c5a3614571ecb5c8fceb85db9112313",
          "object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
          "message": "Signed tag\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\niQEcBAABAgAGBQJUMlqYAAoJEPI2qVPgglptp7MH/j+KFcittFbxfSnZjUl8n5IZ\nveZo7wE+syjD9sUbMH4EGv0WYeVjphNTyViBof+stGTNkB0VQzLWI8+uWmOeiJ4a\nzj0LsbDOxodOEMI5tifo02L7r4Lzj++EbqtKv8IUq2kzYoQ2xjhKfFiGjeYOn008\n9PGnhNblEHZgCHguGR6GsfN8bfA2XNl9B5Ysl5ybX1kAVs/TuLZR4oDMZ/pW2S75\nhuyNnSgcgq7vl2gLGefuPs9lxkg5Fj3GZr7XPZk4pt/x1oiH7yXxV4UzrUwg2CC1\nfHrBlNbQ4uJNY8TFcwof52Z0cagM5Qb/ZSLglHbqEDGA68HPqbwf5z2hQyU2/U4\u003d\n\u003dZtUX\n-----END PGP SIGNATURE-----",
          "tagger": {
            "name": "David Pursehouse",
            "email": "david.pursehouse@sonymobile.com",
            "date": "2014-10-06 09:02:16.000000000",
            "tz": 540
          }
        }
      ]
    
  • Substring(m)
    Limit the results to those tags that match the specified substring.

    The match is case insensitive. May not be used together with r.

    List all tags that match substring v2:

+ .Request

  GET /projects/testproject/tags?m=v2 HTTP/1.0

+ .Response

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "ref": "refs/tags/v2.0",
      "revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
    },
  ]
  • Regex(r)
    Limit the results to those tags that match the specified regex. Boundary matchers ^ and $ are implicit. For example: the regex t* will match any tags that start with t and regex *t will match any tags that end with t.

    The match is case sensitive. May not be used together with m.

    List all tags that match regex v.*0:

    Request.

      GET /projects/testproject/tags?r=v.*0 HTTP/1.0
    

    Response.

      HTTP/1.1 200 OK
      Content-Disposition: attachment
      Content-Type: application/json; charset=UTF-8
    
      )]}'
      [
        {
          "ref": "refs/tags/v1.0",
          "revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
          "object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
          "message": "Annotated tag",
          "tagger": {
            "name": "David Pursehouse",
            "email": "david.pursehouse@sonymobile.com",
            "date": "2014-10-06 07:35:03.000000000",
            "tz": 540
          }
        },
        {
          "ref": "refs/tags/v2.0",
          "revision": "1624f5af8ae89148d1a3730df8c290413e3dcf30"
        },
        {
          "ref": "refs/tags/v3.0",
          "revision": "c628685b3c5a3614571ecb5c8fceb85db9112313",
          "object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
          "message": "Signed tag\n-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v1.4.11 (GNU/Linux)\n\niQEcBAABAgAGBQJUMlqYAAoJEPI2qVPgglptp7MH/j+KFcittFbxfSnZjUl8n5IZ\nveZo7wE+syjD9sUbMH4EGv0WYeVjphNTyViBof+stGTNkB0VQzLWI8+uWmOeiJ4a\nzj0LsbDOxodOEMI5tifo02L7r4Lzj++EbqtKv8IUq2kzYoQ2xjhKfFiGjeYOn008\n9PGnhNblEHZgCHguGR6GsfN8bfA2XNl9B5Ysl5ybX1kAVs/TuLZR4oDMZ/pW2S75\nhuyNnSgcgq7vl2gLGefuPs9lxkg5Fj3GZr7XPZk4pt/x1oiH7yXxV4UzrUwg2CC1\nfHrBlNbQ4uJNY8TFcwof52Z0cagM5Qb/ZSLglHbqEDGA68HPqbwf5z2hQyU2/U4\u003d\n\u003dZtUX\n-----END PGP SIGNATURE-----",
          "tagger": {
            "name": "David Pursehouse",
            "email": "david.pursehouse@sonymobile.com",
            "date": "2014-10-06 09:02:16.000000000",
            "tz": 540
          }
        }
      ]
    

Get Tag

GET /projects/{project-name}/tags/{tag-id}

Retrieves a tag of a project.

Request.

  GET /projects/work%2Fmy-project/tags/v1.0 HTTP/1.0

As response a TagInfo entity is returned that describes the tag.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "ref": "refs/tags/v1.0",
    "revision": "49ce77fdcfd3398dc0dedbe016d1a425fd52d666",
    "object": "1624f5af8ae89148d1a3730df8c290413e3dcf30",
    "message": "Annotated tag",
    "tagger": {
      "name": "David Pursehouse",
      "email": "david.pursehouse@sonymobile.com",
      "date": "2014-10-06 07:35:03.000000000",
      "tz": 540
    }
  }

Delete Tag

DELETE /projects/{project-name}/tags/{tag-id}

Deletes a tag.

Request.

  DELETE /projects/MyProject/tags/v1.0 HTTP/1.0

Response.

  HTTP/1.1 204 No Content

Delete Tags

POST /projects/{project-name}/tags:delete

Delete one or more tags.

The tags to be deleted must be provided in the request body as a DeleteTagsInput entity.

Request.

  POST /projects/MyProject/tags:delete HTTP/1.0
  Content-Type: application/json;charset=UTF-8

  {
    "tags": [
      "v1.0",
      "v2.0"
    ]
  }

Response.

  HTTP/1.1 204 No Content

If some tags could not be deleted, the response is “409 Conflict” and the error message is contained in the response body.

Commit Endpoints

Get Commit

GET /projects/{project-name}/commits/{commit-id}

Retrieves a commit of a project.

The commit must be visible to the caller.

Request.

  GET /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96 HTTP/1.0

As response a CommitInfo entity is returned that describes the commit.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "commit": "184ebe53805e102605d11f6b143486d15c23a09c",
    "parents": [
      {
        "commit": "1eee2c9d8f352483781e772f35dc586a69ff5646",
        "subject": "Migrate contributor agreements to All-Projects."
      }
    ],
    "author": {
      "name": "Shawn O. Pearce",
      "email": "sop@google.com",
      "date": "2012-04-24 18:08:08.000000000",
      "tz": -420
    },
    "committer": {
      "name": "Shawn O. Pearce",
      "email": "sop@google.com",
      "date": "2012-04-24 18:08:08.000000000",
      "tz": -420
    },
    "subject": "Use an EventBus to manage star icons",
    "message": "Use an EventBus to manage star icons\n\nImage widgets that need to ..."
  }

Get Included In

GET /projects/{project-name}/commits/{commit-id}/in

Retrieves the branches and tags in which a change is included. As result an IncludedInInfo entity is returned.

Request.

  GET /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96/in HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json;charset=UTF-8

  )]}'
  {
    "branches": [
      "master"
    ],
    "tags": []
  }

Get Content

GET /projects/{project-name}/commits/{commit-id}/files/{file-id}/content

Gets the content of a file from a certain commit.

Request.

  GET /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/content HTTP/1.0

The content is returned as base64 encoded string.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: text/plain; charset=UTF-8

  Ly8gQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY...

Cherry Pick Commit

POST /projects/{project-name}/commits/{commit-id}/cherrypick

Cherry-picks a commit of a project to a destination branch.

The destination branch must be provided in the request body inside a CherryPickInput entity. If the commit message is not set, the commit message of the source commit will be used.

Request.

  POST /projects/work%2Fmy-project/commits/a8a477efffbbf3b44169bb9a1d3a334cbbd9aa96/cherrypick HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "message" : "Implementing Feature X",
    "destination" : "release-branch"
  }

As response a ChangeInfo entity is returned that describes the resulting cherry-picked change.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9941",
    "project": "myProject",
    "branch": "release-branch",
    "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9941",
    "subject": "Implementing Feature X",
    "status": "NEW",
    "created": "2013-02-01 09:59:32.126000000",
    "updated": "2013-02-21 11:16:36.775000000",
    "mergeable": true,
    "insertions": 12,
    "deletions": 11,
    "_number": 3965,
    "owner": {
      "name": "John Doe"
    }
  }

Dashboard Endpoints

List Dashboards

GET /projects/{project-name}/dashboards/

List custom dashboards for a project.

As result a list of DashboardInfo entries is returned.

List all dashboards for the work/my-project project:

Request.

  GET /projects/work%2Fmy-project/dashboards/ HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    {
      "id": "main:closed",
      "ref": "main",
      "path": "closed",
      "description": "Merged and abandoned changes in last 7 weeks",
      "url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
      "is_default": true,
      "title": "Closed changes",
      "sections": [
        {
          "name": "Merged",
          "query": "status:merged age:7w"
        },
        {
          "name": "Abandoned",
          "query": "status:abandoned age:7w"
        }
      ]
    }
  ]

get::/projects/All-Projects/dashboards/

Get Dashboard

GET /projects/{project-name}/dashboards/{dashboard-id}

Retrieves a project dashboard. The dashboard can be defined on that project or be inherited from a parent project.

Request.

  GET /projects/work%2Fmy-project/dashboards/main:closed HTTP/1.0

As response a DashboardInfo entity is returned that describes the dashboard.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "main:closed",
    "ref": "main",
    "path": "closed",
    "description": "Merged and abandoned changes in last 7 weeks",
    "url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
    "is_default": true,
    "title": "Closed changes",
    "sections": [
      {
        "name": "Merged",
        "query": "status:merged age:7w"
      },
      {
        "name": "Abandoned",
        "query": "status:abandoned age:7w"
      }
    ]
  }

To retrieve the default dashboard of a project use default as dashboard-id.

Request.

  GET /projects/work%2Fmy-project/dashboards/default HTTP/1.0

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "main:closed",
    "ref": "main",
    "path": "closed",
    "description": "Merged and abandoned changes in last 7 weeks",
    "url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
    "is_default": true,
    "title": "Closed changes",
    "sections": [
      {
        "name": "Merged",
        "query": "status:merged age:7w"
      },
      {
        "name": "Abandoned",
        "query": "status:abandoned age:7w"
      }
    ]
  }

Set Dashboard

PUT /projects/{project-name}/dashboards/{dashboard-id}

Updates/Creates a project dashboard.

Currently only supported for the default dashboard.

The creation/update information for the dashboard must be provided in the request body as a DashboardInput entity.

Request.

  PUT /projects/work%2Fmy-project/dashboards/default HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "id": "main:closed",
    "commit_message": "Define the default dashboard"
  }

As response the new/updated dashboard is returned as a DashboardInfo entity.

Response.

  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8

  )]}'
  {
    "id": "main:closed",
    "ref": "main",
    "path": "closed",
    "description": "Merged and abandoned changes in last 7 weeks",
    "url": "/dashboard/?title\u003dClosed+changes\u0026Merged\u003dstatus:merged+age:7w\u0026Abandoned\u003dstatus:abandoned+age:7w",
    "is_default": true,
    "title": "Closed changes",
    "sections": [
      {
        "name": "Merged",
        "query": "status:merged age:7w"
      },
      {
        "name": "Abandoned",
        "query": "status:abandoned age:7w"
      }
    ]
  }

Delete Dashboard

DELETE /projects/{project-name}/dashboards/{dashboard-id}

Deletes a project dashboard.

Currently only supported for the default dashboard.

The request body does not need to include a DashboardInput entity if no commit message is specified.

Please note that some proxies prohibit request bodies for DELETE requests.

Request.

  DELETE /projects/work%2Fmy-project/dashboards/default HTTP/1.0

Response.

  HTTP/1.1 204 No Content

IDs

{branch-id}

The name of a branch or HEAD. The prefix refs/heads/ can be omitted.

{commit-id}

Commit ID.

{tag-id}

The name of a tag. The prefix refs/tags/ can be omitted.

{dashboard-id}

The ID of a dashboard in the format <ref>:<path>.

A special dashboard ID is default which represents the default dashboard of a project.

{project-name}

The name of the project.

If the name ends with .git, the suffix will be automatically removed.

JSON Entities

AccessCheckInfo

The AccessCheckInfo entity is the result of an access check.

AccessCheckInput

The AccessCheckInput entity is either an account or (account, ref) tuple for which we want to check access.

BanInput

The BanInput entity contains information for banning commits in a project.

BanResultInfo

The BanResultInfo entity describes the result of banning commits.

BranchInfo

The BranchInfo entity contains information about a branch.

BranchInput

The BranchInput entity contains information for the creation of a new branch.

ConfigInfo

The ConfigInfo entity contains information about the effective project configuration.

ConfigInput

The ConfigInput entity describes a new project configuration.

ConfigParameterInfo

The ConfigParameterInfo entity describes a project configuration parameter.

DashboardInfo

The DashboardInfo entity contains information about a project dashboard.

DashboardInput

The DashboardInput entity contains information to create/update a project dashboard.

DashboardSectionInfo

The DashboardSectionInfo entity contains information about a section in a dashboard.

DeleteBranchesInput

The DeleteBranchesInput entity contains information about branches that should be deleted.

DeleteTagsInput

The DeleteTagsInput entity contains information about tags that should be deleted.

GCInput

The GCInput entity contains information to run the Git garbage collection.

HeadInput

The HeadInput entity contains information for setting HEAD for a project.

InheritedBooleanInfo

A boolean value that can also be inherited.

LabelTypeInfo

The LabelTypeInfo entity contains metadata about the labels that a project has.

MaxObjectSizeLimitInfo

The MaxObjectSizeLimitInfo entity contains information about the max object size limit of a project.

ProjectAccessInput

The ProjectAccessInput describes changes that should be applied to a project access config.

ProjectDescriptionInput

The ProjectDescriptionInput entity contains information for setting a project description.

ProjectInfo

The ProjectInfo entity contains information about a project.

ProjectInput

The ProjectInput entity contains information for the creation of a new project.

ProjectParentInput

The ProjectParentInput entity contains information for setting a project parent.

ReflogEntryInfo

The ReflogEntryInfo entity describes an entry in a reflog.

RepositoryStatisticsInfo

The RepositoryStatisticsInfo entity contains information about statistics of a Git repository.

TagInfo

The TagInfo entity contains information about a tag.

TagInput

The TagInput entity contains information for creating a tag.

ThemeInfo

The ThemeInfo entity describes a theme.

GERRIT

Part of Gerrit Code Review

SEARCHBOX