summaryrefslogtreecommitdiffstats
path: root/Documentation/rest-api-changes.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/rest-api-changes.txt')
-rw-r--r--Documentation/rest-api-changes.txt2153
1 files changed, 2153 insertions, 0 deletions
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
new file mode 100644
index 0000000000..696a1746d5
--- /dev/null
+++ b/Documentation/rest-api-changes.txt
@@ -0,0 +1,2153 @@
+Gerrit Code Review - /changes/ REST API
+=======================================
+
+This page describes the change related REST endpoints.
+Please also take note of the general information on the
+link:rest-api.html[REST API].
+
+[[change-endpoints]]
+Change Endpoints
+----------------
+
+[[list-changes]]
+Query Changes
+~~~~~~~~~~~~~
+[verse]
+'GET /changes/'
+
+Queries changes visible to the caller. The query string must be
+provided by the `q` parameter. The `n` parameter can be used to limit
+the returned results.
+
+As result a list of link:#change-info[ChangeInfo] entries is returned.
+The change output is sorted by the last update time, most recently
+updated to oldest updated.
+
+Query for open changes of watched projects:
+
+.Request
+----
+ GET /changes/?q=status:open+is:watched&n=2 HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ [
+ {
+ "kind": "gerritcodereview#change",
+ "id": "demo~master~Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
+ "project": "demo",
+ "branch": "master",
+ "change_id": "Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
+ "subject": "One change",
+ "status": "NEW",
+ "created": "2012-07-17 07:18:30.854000000",
+ "updated": "2012-07-17 07:19:27.766000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "001e7057000006dc",
+ "_number": 1756,
+ "owner": {
+ "name": "John Doe"
+ },
+ },
+ {
+ "kind": "gerritcodereview#change",
+ "id": "demo~master~I09c8041b5867d5b33170316e2abc34b79bbb8501",
+ "project": "demo",
+ "branch": "master",
+ "change_id": "I09c8041b5867d5b33170316e2abc34b79bbb8501",
+ "subject": "Another change",
+ "status": "NEW",
+ "created": "2012-07-17 07:18:30.884000000",
+ "updated": "2012-07-17 07:18:30.885000000",
+ "mergeable": true,
+ "_sortkey": "001e7056000006dd",
+ "_number": 1757,
+ "owner": {
+ "name": "John Doe"
+ },
+ "_more_changes": true
+ }
+ ]
+----
+
+If the `n` query parameter is supplied and additional changes exist
+that match the query beyond the end, the last change object has a
+`_more_changes: true` JSON field set. Callers can resume a query with
+the `N` query parameter, supplying the last change's `_sortkey` field
+as the value. When going in the reverse direction with the `P` query
+parameter a `_more_changes: true` is put in the first change object if
+there are results *before* the first change returned.
+
+Clients are allowed to specify more than one query by setting the `q`
+parameter multiple times. In this case the result is an array of
+arrays, one per query in the same order the queries were given in.
+
+.Query for the 25 most recent open changes of the projects that you watch
+****
+get::/changes/?q=status:open+is:watched&n=25
+****
+
+Query that retrieves changes for a user's dashboard:
+
+.Request
+----
+ GET /changes/?q=is:open+owner:self&q=is:open+reviewer:self+-owner:self&q=is:closed+owner:self+limit:5&o=LABELS HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ [
+ [
+ {
+ "kind": "gerritcodereview#change",
+ "id": "demo~master~Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
+ "project": "demo",
+ "branch": "master",
+ "change_id": "Idaf5e098d70898b7119f6f4af5a6c13343d64b57",
+ "subject": "One change",
+ "status": "NEW",
+ "created": "2012-07-17 07:18:30.854000000",
+ "updated": "2012-07-17 07:19:27.766000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "001e7057000006dc",
+ "_number": 1756,
+ "owner": {
+ "name": "John Doe"
+ },
+ "labels": {
+ "Verified": {},
+ "Code-Review": {}
+ }
+ }
+ ],
+ [],
+ []
+ ]
+----
+
+.Query the changes for your user dashboard
+****
+get::/changes/?q=is:open+owner:self&q=is:open+reviewer:self+-owner:self&q=is:closed+owner:self+limit:5&o=LABELS
+****
+
+Additional fields can be obtained by adding `o` parameters, each
+option requires more database lookups and slows down the query
+response time to the client so they are generally disabled by
+default. Optional fields are:
+
+[[labels]]
+--
+* `LABELS`: a summary of each label required for submit, and
+ approvers that have granted (or rejected) with that label.
+--
+
+[[detailed-labels]]
+--
+* `DETAILED_LABELS`: detailed label information, including numeric
+ values of all existing approvals, recognized label values, values
+ permitted to be set by the current user, and reviewers that may be
+ removed by the current user.
+--
+
+[[current-revision]]
+--
+* `CURRENT_REVISION`: describe the current revision (patch set)
+ of the change, including the commit SHA-1 and URLs to fetch from.
+--
+
+[[all-revisions]]
+--
+* `ALL_REVISIONS`: describe all revisions, not just current.
+--
+
+[[current-commit]]
+--
+* `CURRENT_COMMIT`: parse and output all header fields from the
+ commit object, including message. Only valid when the current
+ revision or all revisions are selected.
+--
+
+[[all-commits]]
+--
+* `ALL_COMMITS`: parse and output all header fields from the
+ output revisions. If only `CURRENT_REVISION` was requested
+ then only the current revision's commit data will be output.
+--
+
+[[current-files]]
+--
+* `CURRENT_FILES`: list files modified by the commit, including
+ basic line counts inserted/deleted per file. Only valid when
+ the current revision or all revisions are selected.
+--
+
+[[all-files]]
+--
+* `ALL_FILES`: list files modified by the commit, including
+ basic line counts inserted/deleted per file. If only the
+ `CURRENT_REVISION` was requested the only that commit's
+ modified files will be output.
+--
+
+[[detailed-accounts]]
+--
+* `DETAILED_ACCOUNTS`: include `_account_id` and `email` fields when
+ referencing accounts.
+--
+
+.Request
+----
+ GET /changes/?q=97&o=CURRENT_REVISION&o=CURRENT_COMMIT&o=CURRENT_FILES HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ [
+ {
+ "kind": "gerritcodereview#change",
+ "id": "demo~master~I7ea46d2e2ee5c64c0d807677859cfb7d90b8966a",
+ "project": "gerrit",
+ "branch": "master",
+ "change_id": "I7ea46d2e2ee5c64c0d807677859cfb7d90b8966a",
+ "subject": "Use an EventBus to manage star icons",
+ "status": "NEW",
+ "created": "2012-04-25 00:52:25.580000000",
+ "updated": "2012-04-25 00:52:25.586000000",
+ "mergeable": true,
+ "_sortkey": "001c9bf400000061",
+ "_number": 97,
+ "owner": {
+ "name": "Shawn Pearce"
+ },
+ "current_revision": "184ebe53805e102605d11f6b143486d15c23a09c",
+ "revisions": {
+ "184ebe53805e102605d11f6b143486d15c23a09c": {
+ "_number": 1,
+ "fetch": {
+ "git": {
+ "url": "git://localhost/gerrit",
+ "ref": "refs/changes/97/97/1"
+ },
+ "http": {
+ "url": "http://127.0.0.1:8080/gerrit",
+ "ref": "refs/changes/97/97/1"
+ }
+ },
+ "commit": {
+ "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 ..."
+ },
+ "files": {
+ "gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeCache.java": {
+ "lines_deleted": 8
+ },
+ "gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeDetailCache.java": {
+ "lines_inserted": 1
+ },
+ "gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeScreen.java": {
+ "lines_inserted": 11,
+ "lines_deleted": 19
+ },
+ "gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/ChangeTable.java": {
+ "lines_inserted": 23,
+ "lines_deleted": 20
+ },
+ "gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/StarCache.java": {
+ "status": "D",
+ "lines_deleted": 139
+ },
+ "gerrit-gwtui/src/main/java/com/google/gerrit/client/changes/StarredChanges.java": {
+ "status": "A",
+ "lines_inserted": 204
+ },
+ "gerrit-gwtui/src/main/java/com/google/gerrit/client/ui/Screen.java": {
+ "lines_deleted": 9
+ }
+ }
+ }
+ }
+ }
+ ]
+----
+
+[[get-change]]
+Get Change
+~~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]'
+
+Retrieves a change.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940 HTTP/1.0
+----
+
+As response a link:#change-info[ChangeInfo] entity is returned that
+describes the change.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#change",
+ "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "project": "myProject",
+ "branch": "master",
+ "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "subject": "Implementing Feature X",
+ "status": "NEW",
+ "created": "2013-02-01 09:59:32.126000000",
+ "updated": "2013-02-21 11:16:36.775000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "0023412400000f7d",
+ "_number": 3965,
+ "owner": {
+ "name": "John Doe"
+ }
+ }
+----
+
+[[get-change-detail]]
+Get Change Detail
+~~~~~~~~~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/detail'
+
+Retrieves a change with link:#labels[labels], link:#detailed-labels[
+detailed labels] and link:#detailed-accounts[detailed accounts].
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/detail HTTP/1.0
+----
+
+As response a link:#change-info[ChangeInfo] entity is returned that
+describes the change.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#change",
+ "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "project": "myProject",
+ "branch": "master",
+ "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "subject": "Implementing Feature X",
+ "status": "NEW",
+ "created": "2013-02-01 09:59:32.126000000",
+ "updated": "2013-02-21 11:16:36.775000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "0023412400000f7d",
+ "_number": 3965,
+ "owner": {
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ "labels": {
+ "Verified": {
+ "all": [
+ {
+ "value": 0,
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ {
+ "value": 0,
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ }
+ ],
+ "values": {
+ "-1": "Fails",
+ " 0": "No score",
+ "+1": "Verified"
+ }
+ },
+ "Code-Review": {
+ "recommended": {
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ },
+ "disliked": {
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ "all": [
+ {
+ "value": -1,
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ {
+ "value": 1,
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ }
+ ]
+ "values": {
+ "-2": "Do not submit",
+ "-1": "I would prefer that you didn\u0027t submit this",
+ " 0": "No score",
+ "+1": "Looks good to me, but someone else must approve",
+ "+2": "Looks good to me, approved"
+ }
+ }
+ },
+ "permitted_labels": {
+ "Verified": [
+ "-1",
+ " 0",
+ "+1"
+ ],
+ "Code-Review": [
+ "-2",
+ "-1",
+ " 0",
+ "+1",
+ "+2"
+ ]
+ },
+ "removable_reviewers": [
+ {
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ {
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ }
+ ]
+ }
+----
+
+[[get-topic]]
+Get Topic
+~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/topic'
+
+Retrieves the topic of a change.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ "Documentation"
+----
+
+If the change does not have a topic an empty string is returned.
+
+[[set-topic]]
+Set Topic
+~~~~~~~~~
+[verse]
+'PUT /changes/link:#change-id[\{change-id\}]/topic'
+
+Sets the topic of a change.
+
+The new topic must be provided in the request body inside a
+link:#topic-input[TopicInput] entity.
+
+.Request
+----
+ PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "topic": "Documentation"
+ }
+----
+
+As response the new topic is returned.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ "Documentation"
+----
+
+If the topic was deleted the response is "`204 No Content`".
+
+[[delete-topic]]
+Delete Topic
+~~~~~~~~~~~~
+[verse]
+'DELETE /changes/link:#change-id[\{change-id\}]/topic'
+
+Deletes the topic of a change.
+
+The request body does not need to include a link:#topic-input[
+TopicInput] entity if no review comment is added.
+
+Please note that some proxies prohibit request bodies for DELETE
+requests. In this case, if you want to specify a commit message, use
+link:#set-topic[PUT] to delete the topic.
+
+.Request
+----
+ DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/topic HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 204 No Content
+----
+
+[[abandon-change]]
+Abandon Change
+~~~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/abandon'
+
+Abandons a change.
+
+The request body does not need to include a link:#abandon-input[
+AbandonInput] entity if no review comment is added.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/abandon HTTP/1.0
+----
+
+As response a link:#change-info[ChangeInfo] entity is returned that
+describes the abandoned change.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#change",
+ "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "project": "myProject",
+ "branch": "master",
+ "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "subject": "Implementing Feature X",
+ "status": "ABANDONED",
+ "created": "2013-02-01 09:59:32.126000000",
+ "updated": "2013-02-21 11:16:36.775000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "0023412400000f7d",
+ "_number": 3965,
+ "owner": {
+ "name": "John Doe"
+ }
+ }
+----
+
+If the change cannot be abandoned because the change state doesn't
+allow abandoning of the change, the response is "`409 Conflict`" and
+the error message is contained in the response body.
+
+.Response
+----
+ HTTP/1.1 409 Conflict
+ Content-Disposition: attachment
+ Content-Type: text/plain;charset=UTF-8
+
+ change is merged
+----
+
+[[restore-change]]
+Restore Change
+~~~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/restore'
+
+Restores a change.
+
+The request body does not need to include a link:#restore-input[
+RestoreInput] entity if no review comment is added.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/restore HTTP/1.0
+----
+
+As response a link:#change-info[ChangeInfo] entity is returned that
+describes the restored change.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#change",
+ "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "project": "myProject",
+ "branch": "master",
+ "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "subject": "Implementing Feature X",
+ "status": "NEW",
+ "created": "2013-02-01 09:59:32.126000000",
+ "updated": "2013-02-21 11:16:36.775000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "0023412400000f7d",
+ "_number": 3965,
+ "owner": {
+ "name": "John Doe"
+ }
+ }
+----
+
+If the change cannot be restored because the change state doesn't
+allow restoring the change, the response is "`409 Conflict`" and
+the error message is contained in the response body.
+
+.Response
+----
+ HTTP/1.1 409 Conflict
+ Content-Disposition: attachment
+ Content-Type: text/plain;charset=UTF-8
+
+ change is new
+----
+
+[[revert-change]]
+Revert Change
+~~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/revert'
+
+Reverts a change.
+
+The request body does not need to include a link:#revert-input[
+RevertInput] entity if no review comment is added.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revert HTTP/1.0
+----
+
+As response a link:#change-info[ChangeInfo] entity is returned that
+describes the reverting change.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#change",
+ "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "project": "myProject",
+ "branch": "master",
+ "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "subject": "Revert \"Implementing Feature X\"",
+ "status": "NEW",
+ "created": "2013-02-01 09:59:32.126000000",
+ "updated": "2013-02-21 11:16:36.775000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "0023412400000f7d",
+ "_number": 3965,
+ "owner": {
+ "name": "John Doe"
+ }
+ }
+----
+
+If the change cannot be reverted because the change state doesn't
+allow reverting the change, the response is "`409 Conflict`" and
+the error message is contained in the response body.
+
+.Response
+----
+ HTTP/1.1 409 Conflict
+ Content-Disposition: attachment
+ Content-Type: text/plain;charset=UTF-8
+
+ change is new
+----
+
+[[submit-change]]
+Submit Change
+~~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/submit'
+
+Submits a change.
+
+The request body only needs to include a link:#submit-input[
+SubmitInput] entity if the request should wait for the merge to
+complete.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/submit HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "wait_for_merge": true
+ }
+----
+
+As response a link:#change-info[ChangeInfo] entity is returned that
+describes the submitted/merged change.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#change",
+ "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "project": "myProject",
+ "branch": "master",
+ "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "subject": "Implementing Feature X",
+ "status": "MERGED",
+ "created": "2013-02-01 09:59:32.126000000",
+ "updated": "2013-02-21 11:16:36.775000000",
+ "reviewed": true,
+ "_sortkey": "0023412400000f7d",
+ "_number": 3965,
+ "owner": {
+ "name": "John Doe"
+ }
+ }
+----
+
+If the change cannot be submitted because the submit rule doesn't allow
+submitting the change, the response is "`409 Conflict`" and the error
+message is contained in the response body.
+
+.Response
+----
+ HTTP/1.1 409 Conflict
+ Content-Disposition: attachment
+ Content-Type: text/plain;charset=UTF-8
+
+ blocked by Verified
+----
+
+[[reviewer-endpoints]]
+Reviewer Endpoints
+------------------
+
+[[list-reviewers]]
+List Reviewers
+~~~~~~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/reviewers/'
+
+Lists the reviewers of a change.
+
+As result a list of link:#reviewer-info[ReviewerInfo] entries is returned.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers/ HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ [
+ {
+ "kind": "gerritcodereview#reviewer",
+ "approvals": {
+ "Verified": "+1",
+ "Code-Review": "+2"
+ },
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ {
+ "kind": "gerritcodereview#reviewer",
+ "approvals": {
+ "Verified": " 0",
+ "Code-Review": "-1"
+ },
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ }
+ ]
+----
+
+[[get-reviewer]]
+Get Reviewer
+~~~~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/reviewers/link:rest-api-accounts.html#account-id[\{account-id\}]'
+
+Retrieves a reviewer of a change.
+
+As response a link:#reviewer-info[ReviewerInfo] entity is returned that
+describes the reviewer.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers/john.doe@example.com HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#reviewer",
+ "approvals": {
+ "Verified": "+1",
+ "Code-Review": "+2"
+ },
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ }
+----
+
+[[add-reviewer]]
+Add Reviewer
+~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/reviewers'
+
+Adds one user or all members of one group as reviewer to the change.
+
+The reviewer to be added to the change must be provided in the request
+body as a link:#reviewer-input[ReviewerInput] entity.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "reviewer": "john.doe@example.com"
+ }
+----
+
+As response an link:#add-reviewer-result[AddReviewerResult] entity is
+returned that describes the newly added reviewers.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "reviewers": [
+ {
+ "kind": "gerritcodereview#reviewer",
+ "approvals": {
+ "Verified": " 0",
+ "Code-Review": " 0"
+ },
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ }
+ ]
+ }
+----
+
+If a group is specified, adding the group members as reviewers is an
+atomic operation. This means if an error is returned, none of the
+members are added as reviewer.
+
+If a group with many members is added as reviewer a confirmation may be
+required.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "reviewer": "MyProjectVerifiers"
+ }
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "error": "The group My Group has 15 members. Do you want to add them all as reviewers?",
+ "confirm": true
+ }
+----
+
+To confirm the addition of the reviewers, resend the request with the
+`confirmed` flag being set.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "reviewer": "MyProjectVerifiers",
+ "confirmed": true
+ }
+----
+
+[[delete-reviewer]]
+Delete Reviewer
+~~~~~~~~~~~~~~~
+[verse]
+'DELETE /changes/link:#change-id[\{change-id\}]/reviewers/link:rest-api-accounts.html#account-id[\{account-id\}]'
+
+Deletes a reviewer from a change.
+
+.Request
+----
+ DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/reviewers/John%20Doe HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 204 No Content
+----
+
+[[revision-endpoints]]
+Revision Endpoints
+------------------
+
+[[get-review]]
+Get Review
+~~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/review'
+
+Retrieves a review of a revision.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/review HTTP/1.0
+----
+
+As response a link:#change-info[ChangeInfo] entity with
+link:#detailed-labels[detailed labels] and link:#detailed-accounts[
+detailed accounts] is returned that describes the review of the
+revision. The revision for which the review is retrieved is contained
+in the `revisions` field. In addition the `current_revision` field is
+set if the revision for which the review is retrieved is the current
+revision of the change. Please note that the returned labels are always
+for the current patch set.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#change",
+ "id": "myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "project": "myProject",
+ "branch": "master",
+ "change_id": "I8473b95934b5732ac55d26311a706c9c2bde9940",
+ "subject": "Implementing Feature X",
+ "status": "NEW",
+ "created": "2013-02-01 09:59:32.126000000",
+ "updated": "2013-02-21 11:16:36.775000000",
+ "reviewed": true,
+ "mergeable": true,
+ "_sortkey": "0023412400000f7d",
+ "_number": 3965,
+ "owner": {
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ "labels": {
+ "Verified": {
+ "all": [
+ {
+ "value": 0,
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ {
+ "value": 0,
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ }
+ ],
+ "values": {
+ "-1": "Fails",
+ " 0": "No score",
+ "+1": "Verified"
+ }
+ },
+ "Code-Review": {
+ "all": [
+ {
+ "value": -1,
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ {
+ "value": 1,
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ }
+ ]
+ "values": {
+ "-2": "Do not submit",
+ "-1": "I would prefer that you didn\u0027t submit this",
+ " 0": "No score",
+ "+1": "Looks good to me, but someone else must approve",
+ "+2": "Looks good to me, approved"
+ }
+ }
+ },
+ "permitted_labels": {
+ "Verified": [
+ "-1",
+ " 0",
+ "+1"
+ ],
+ "Code-Review": [
+ "-2",
+ "-1",
+ " 0",
+ "+1",
+ "+2"
+ ]
+ },
+ "removable_reviewers": [
+ {
+ "_account_id": 1000096,
+ "name": "John Doe",
+ "email": "john.doe@example.com"
+ },
+ {
+ "_account_id": 1000097,
+ "name": "Jane Roe",
+ "email": "jane.roe@example.com"
+ }
+ ],
+ "current_revision": "674ac754f91e64a0efb8087e59a176484bd534d1",
+ "revisions": {
+ "674ac754f91e64a0efb8087e59a176484bd534d1": {
+ "_number": 2,
+ "fetch": {
+ "http": {
+ "url": "http://gerrit/myProject",
+ "ref": "refs/changes/65/3965/2"
+ }
+ }
+ }
+ }
+----
+
+[[set-review]]
+Set Review
+~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/review'
+
+Sets a review on a revision.
+
+The review must be provided in the request body as a
+link:#review-input[ReviewInput] entity.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/review HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "message": "Some nits need to be fixed.",
+ "labels": {
+ "Code-Review": -1
+ },
+ "comments": {
+ "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": [
+ {
+ "line": 23,
+ "message": "[nit] trailing whitespace"
+ },
+ {
+ "line": 49,
+ "message": "[nit] s/conrtol/control"
+ }
+ ]
+ }
+ }
+----
+
+As response a link:#review-info[ReviewInfo] entity is returned that
+describes the applied labels.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "labels": {
+ "Code-Review": -1
+ }
+ }
+----
+
+[[submit-revision]]
+Submit Revision
+~~~~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/submit'
+
+Submits a revision.
+
+The request body only needs to include a link:#submit-input[
+SubmitInput] entity if the request should wait for the merge to
+complete.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/submit HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "wait_for_merge": true
+ }
+----
+
+As response a link:#submit-info[SubmitInfo] entity is returned that
+describes the status of the submitted change.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "status": "MERGED"
+ }
+----
+
+If the revision cannot be submitted, e.g. because the submit rule
+doesn't allow submitting the revision or the revision is not the
+current revision, the response is "`409 Conflict`" and the error
+message is contained in the response body.
+
+.Response
+----
+ HTTP/1.1 409 Conflict
+ Content-Type: text/plain;charset=UTF-8
+
+ "revision 674ac754f91e64a0efb8087e59a176484bd534d1 is not current revision"
+----
+
+[[get-submit-type]]
+Get Submit Type
+~~~~~~~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/submit_type'
+
+Gets the method the server will use to submit (merge) the change.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/submit_type HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ "MERGE_IF_NECESSARY"
+----
+
+[[test-submit-type]]
+Test Submit Type
+~~~~~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/test.submit_type'
+
+Tests the submit_type Prolog rule in the project, or the one given.
+
+Request body may be either the Prolog code as `text/plain` or a
+link:#rule-input[RuleInput] object. The query parameter `filters`
+may be set to `SKIP` to bypass parent project filters while testing
+a project-specific rule.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/test.submit_type HTTP/1.0
+ Content-Type: text/plain;charset-UTF-8
+
+ submit_type(cherry_pick).
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ "cherry_pick"
+----
+
+[[test-submit-rule]]
+Test Submit Rule
+~~~~~~~~~~~~~~~~
+[verse]
+'POST /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/test.submit_rule'
+
+Tests the submit_rule Prolog rule in the project, or the one given.
+
+Request body may be either the Prolog code as `text/plain` or a
+link:#rule-input[RuleInput] object. The query parameter `filters`
+may be set to `SKIP` to bypass parent project filters while testing
+a project-specific rule.
+
+.Request
+----
+ POST /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/current/test.submit_type?filters=SKIP HTTP/1.0
+ Content-Type: text/plain;charset-UTF-8
+
+ submit_rule(submit(R)) :-
+ R = label('Any-Label-Name', reject(_)).
+----
+
+The response is a list of link:#submit-record[SubmitRecord] entries
+describing the permutations that satisfy the tested submit rule.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ [
+ {
+ "status": "NOT_READY",
+ "reject": {
+ "Any-Label-Name": {}
+ }
+ }
+ ]
+----
+
+[[list-drafts]]
+List Drafts
+~~~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/'
+
+Lists the draft comments of a revision that belong to the calling
+user.
+
+As result a map is returned that maps the file path to a list of
+link:#comment-info[CommentInfo] entries. The entries in the map are
+sorted by file path.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/ HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java": [
+ {
+ "kind": "gerritcodereview#comment",
+ "id": "TvcXrmjM",
+ "line": 23,
+ "message": "[nit] trailing whitespace",
+ "updated": "2013-02-26 15:40:43.986000000"
+ },
+ {
+ "kind": "gerritcodereview#comment",
+ "id": "TveXwFiA",
+ "line": 49,
+ "in_reply_to": "TfYX-Iuo",
+ "message": "Done",
+ "updated": "2013-02-26 15:40:45.328000000"
+ }
+ ]
+ }
+----
+
+[[create-draft]]
+Create Draft
+~~~~~~~~~~~~
+[verse]
+'PUT /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts'
+
+Creates a draft comment on a revision.
+
+The new draft comment must be provided in the request body inside a
+link:#comment-input[CommentInput] entity.
+
+.Request
+----
+ PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
+ "line": 23,
+ "message": "[nit] trailing whitespace"
+ }
+----
+
+As response a link:#comment-info[CommentInfo] entity is returned that
+describes the draft comment.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#comment",
+ "id": "TvcXrmjM",
+ "path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
+ "line": 23,
+ "message": "[nit] trailing whitespace",
+ "updated": "2013-02-26 15:40:43.986000000"
+ }
+----
+
+[[get-draft]]
+Get Draft
+~~~~~~~~~
+[verse]
+'GET /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/link:#draft-id[\{draft-id\}]'
+
+Retrieves a draft comment of a revision that belongs to the calling
+user.
+
+.Request
+----
+ GET /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/TvcXrmjM HTTP/1.0
+----
+
+As response a link:#comment-info[CommentInfo] entity is returned that
+describes the draft comment.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#comment",
+ "id": "TvcXrmjM",
+ "path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
+ "line": 23,
+ "message": "[nit] trailing whitespace",
+ "updated": "2013-02-26 15:40:43.986000000"
+ }
+----
+
+[[update-draft]]
+Update Draft
+~~~~~~~~~~~~
+[verse]
+'PUT /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/link:#draft-id[\{draft-id\}]'
+
+Updates a draft comment on a revision.
+
+The new draft comment must be provided in the request body inside a
+link:#comment-input[CommentInput] entity.
+
+.Request
+----
+ PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/TvcXrmjM HTTP/1.0
+ Content-Type: application/json;charset=UTF-8
+
+ {
+ "path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
+ "line": 23,
+ "message": "[nit] trailing whitespace"
+ }
+----
+
+As response a link:#comment-info[CommentInfo] entity is returned that
+describes the draft comment.
+
+.Response
+----
+ HTTP/1.1 200 OK
+ Content-Disposition: attachment
+ Content-Type: application/json;charset=UTF-8
+
+ )]}'
+ {
+ "kind": "gerritcodereview#comment",
+ "id": "TvcXrmjM",
+ "path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
+ "line": 23,
+ "message": "[nit] trailing whitespace",
+ "updated": "2013-02-26 15:40:43.986000000"
+ }
+----
+
+[[delete-draft]]
+Delete Draft
+~~~~~~~~~~~~
+[verse]
+'DELETE /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/drafts/link:#draft-id[\{draft-id\}]'
+
+Deletes a draft comment from a revision.
+
+.Request
+----
+ DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/drafts/TvcXrmjM HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 204 No Content
+----
+
+[[set-reviewed]]
+Set Reviewed
+~~~~~~~~~~~~
+[verse]
+'PUT /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/files/link:#patch-id[\{patch-id\}]/reviewed'
+
+Marks a patch of a revision as reviewed by the calling user.
+
+.Request
+----
+ PUT /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/reviewed HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 201 Created
+----
+
+If the patch was already marked as reviewed by the calling user the
+response is "`200 OK`".
+
+[[delete-reviewed]]
+Delete Reviewed
+~~~~~~~~~~~~~~~
+[verse]
+'DELETE /changes/link:#change-id[\{change-id\}]/revisions/link:#revision-id[\{revision-id\}]/files/link:#patch-id[\{patch-id\}]/reviewed'
+
+Deletes the reviewed flag of the calling user from a patch of a revision.
+
+.Request
+----
+ DELETE /changes/myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940/revisions/674ac754f91e64a0efb8087e59a176484bd534d1/files/gerrit-server%2Fsrc%2Fmain%2Fjava%2Fcom%2Fgoogle%2Fgerrit%2Fserver%2Fproject%2FRefControl.java/reviewed HTTP/1.0
+----
+
+.Response
+----
+ HTTP/1.1 204 No Content
+----
+
+
+[[ids]]
+IDs
+---
+
+[[account-id]]
+link:rest-api-accounts.html#account-id[\{account-id\}]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+--
+--
+
+[[change-id]]
+\{change-id\}
+~~~~~~~~~~~~~
+Identifier that uniquely identifies one change.
+
+This can be:
+
+* an ID of the change in the format "'$$<project>~<branch>~<Change-Id>$$'",
+ where for the branch the `refs/heads/` prefix can be omitted
+ ("$$myProject~master~I8473b95934b5732ac55d26311a706c9c2bde9940$$")
+* a Change-Id if it uniquely identifies one change
+ ("I8473b95934b5732ac55d26311a706c9c2bde9940")
+* a legacy numeric change ID ("4247")
+
+[[draft-id]]
+\{draft-id\}
+~~~~~~~~~~~~
+UUID of a draft comment.
+
+[[patch-id]]
+\{patch-id\}
+~~~~~~~~~~~~
+The file path of the patch.
+
+[[revision-id]]
+\{revision-id\}
+~~~~~~~~~~~~~~~
+Identifier that uniquely identifies one revision of a change.
+
+This can be:
+
+* the literal `current` to name the current patch set/revision
+* a commit ID ("674ac754f91e64a0efb8087e59a176484bd534d1")
+* an abbreviated commit ID that uniquely identifies one revision of the
+ change ("674ac754"), at least 4 digits are required
+* a legacy numeric patch number ("1" for first patch set of the change)
+
+
+[[json-entities]]
+JSON Entities
+-------------
+
+[[abandon-input]]
+AbandonInput
+~~~~~~~~~~~~
+The `AbandonInput` entity contains information for abandoning a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`message` |optional|
+Message to be added as review comment to the change when abandoning the
+change.
+|===========================
+
+[[add-reviewer-result]]
+AddReviewerResult
+~~~~~~~~~~~~~~~~~
+The `AddReviewerResult` entity describes the result of adding a
+reviewer to a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`reviewers` |optional|
+The newly added reviewers as a list of link:#reviewer-info[
+ReviewerInfo] entities.
+|`error` |optional|
+Error message explaining why the reviewer could not be added. +
+If a group was specified in the input and an error is returned, it
+means that none of the members were added as reviewer.
+|`confirm` |`false` if not set|
+Whether adding the reviewer requires confirmation.
+|===========================
+
+[[approval-info]]
+ApprovalInfo
+~~~~~~~~~~~~
+The `ApprovalInfo` entity contains information about an approval from a
+user for a label on a change.
+
+`ApprovalInfo` has the same fields as
+link:rest-api-accounts.html#account-info[AccountInfo].
+In addition `ApprovalInfo` has the following fields:
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`value` |optional|
+The vote that the user has given for the label. If present and zero, the
+user is permitted to vote on the label. If absent, the user is not
+permitted to vote on that label.
+|===========================
+
+[[change-info]]
+ChangeInfo
+~~~~~~~~~~
+The `ChangeInfo` entity contains information about a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|==================================
+|Field Name ||Description
+|`kind` ||`gerritcodereview#change`
+|`id` ||
+The ID of the change in the format "'<project>\~<branch>~<Change-Id>'",
+where 'project', 'branch' and 'Change-Id' are URL encoded. For 'branch' the
+`refs/heads/` prefix is omitted.
+|`project` ||The name of the project.
+|`branch` ||
+The name of the target branch. +
+The `refs/heads/` prefix is omitted.
+|`topic` |optional|The topic to which this change belongs.
+|`change_id` ||The Change-Id of the change.
+|`subject` ||
+The subject of the change (header line of the commit message).
+|`status` ||
+The status of the change (`NEW`, `SUBMITTED`, `MERGED`, `ABANDONED`,
+`DRAFT`).
+|`created` ||
+The link:rest-api.html#timestamp[timestamp] of when the change was
+created.
+|`updated` ||
+The link:rest-api.html#timestamp[timestamp] of when the change was last
+updated.
+|`starred` |not set if `false`|
+Whether the calling user has starred this change.
+|`reviewed` |not set if `false`|
+Whether the change was reviewed by the calling user.
+|`mergeable` |optional|
+Whether the change is mergeable. +
+Not set for merged changes.
+|`_sortkey` ||The sortkey of the change.
+|`_number` ||The legacy numeric ID of the change.
+|`owner` ||
+The owner of the change as an link:rest-api-accounts.html#account-info[
+AccountInfo] entity.
+|`labels` |optional|
+The labels of the change as a map that maps the label names to
+link:#label-info[LabelInfo] entries. +
+Only set if link:#labels[labels] or link:#detailed-labels[detailed
+labels] are requested.
+|`permitted_labels` |optional|
+A map of the permitted labels that maps a label name to the list of
+values that are allowed for that label. +
+Only set if link:#detailed-labels[detailed labels] are requested.
+|`removable_reviewers`|optional|
+The reviewers that can be removed by the calling user as a list of
+link:rest-api-accounts.html#account-info[AccountInfo] entities. +
+Only set if link:#detailed-labels[detailed labels] are requested.
+|`current_revision` |optional|
+The commit ID of the current patch set of this change. +
+Only set if link:#current-revision[the current revision] is requested
+or if link:#all-revisions[all revisions] are requested.
+|`revisions` |optional|
+All patch sets of this change as a map that maps the commit ID of the
+patch set to a link:#revision-info[RevisionInfo] entity. +
+Only set if link:#all-revisions[all revisions] are requested.
+|`_more_changes` |optional, not set if `false`|
+Whether the query would deliver more results if not limited. +
+Only set on either the last or the first change that is returned.
+|==================================
+
+[[comment-info]]
+CommentInfo
+~~~~~~~~~~~
+The `CommentInfo` entity contains information about an inline comment.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`kind` ||`gerritcodereview#comment`
+|`id` ||The URL encoded UUID of the draft comment.
+|`path` |optional|
+The path of the file for which the inline comment was done. +
+Not set if returned in a map where the key is the file path.
+|`side` |optional|
+The side on which the comment was added. +
+Allowed values are `REVISION` and `PARENT`. +
+If not set, the default is `REVISION`.
+|`line` |optional|
+The number of the line for which the comment was done. +
+If not set, it's a file comment.
+|`in_reply_to` |optional|
+The URL encoded UUID of the comment to which this comment is a reply.
+|`message` |optional|The comment message.
+|`updated` ||
+The link:rest-api.html#timestamp[timestamp] of when this comment was
+written.
+|===========================
+
+[[comment-input]]
+CommentInput
+~~~~~~~~~~~~
+The `CommitInput` entity contains information for creating an inline
+comment.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`kind` |optional|
+Must be `gerritcodereview#comment` if provided.
+|`id` |optional|
+The URL encoded UUID of the comment if an existing draft comment should
+be updated.
+|`path` |optional|
+The path of the file for which the inline comment should be added. +
+Doesn't need to be set if contained in a map where the key is the file
+path.
+|`side` |optional|
+The side on which the comment should be added. +
+Allowed values are `REVISION` and `PARENT`. +
+If not set, the default is `REVISION`.
+|`line` |optional|
+The number of the line for which the comment should be added. +
+`0` if it is a file comment. +
+If not set, a file comment is added.
+|`in_reply_to` |optional|
+The URL encoded UUID of the comment to which this comment is a reply.
+|`updated` |optional|
+The link:rest-api.html#timestamp[timestamp] of this comment. +
+Accepted but ignored.
+|`message` |optional|
+The comment message. +
+If not set and an existing draft comment is updated, the existing draft
+comment is deleted.
+|===========================
+
+[[commit-info]]
+CommitInfo
+~~~~~~~~~~
+The `CommitInfo` entity contains information about a commit.
+
+[options="header",width="50%",cols="1,6"]
+|==========================
+|Field Name |Description
+|`commit` |The commit ID.
+|`parent` |
+The parent commits of this commit as a list of
+link:#commit-info[CommitInfo] entities.
+|`author` |The author of the commit as a
+link:#git-person-info[GitPersonInfo] entity.
+|`committer` |The committer of the commit as a
+link:#git-person-info[GitPersonInfo] entity.
+|`subject` |
+The subject of the commit (header line of the commit message).
+|`message` |The commit message.
+|==========================
+
+[[fetch-info]]
+FetchInfo
+~~~~~~~~~
+The `FetchInfo` entity contains information about how to fetch a patch
+set via a certain protocol.
+
+[options="header",width="50%",cols="1,6"]
+|==========================
+|Field Name |Description
+|`url` |The URL of the project.
+|`ref` |The ref of the patch set.
+|==========================
+
+[[file-info]]
+FileInfo
+~~~~~~~~
+The `FileInfo` entity contains information about a file in a patch set.
+
+[options="header",width="50%",cols="1,^1,5"]
+|=============================
+|Field Name ||Description
+|`status` |optional|
+The status of the file ("`A`"=Added, "`D`"=Deleted, "`R`"=Renamed,
+"`C`"=Copied, "`W`"=Rewritten). +
+Not set if the file was Modified ("`M`").
+|`binary` |not set if `false`|Whether the file is binary.
+|`old_path` |optional|
+The old file path. +
+Only set if the file was renamed or copied.
+|`lines_inserted`|optional|
+Number of inserted lines. +
+Not set for binary files or if no lines were inserted.
+|`lines_deleted` |optional|
+Number of deleted lines. +
+Not set for binary files or if no lines were deleted.
+|=============================
+
+[[git-person-info]]
+GitPersonInfo
+~~~~~~~~~~~~~
+The `GitPersonInfo` entity contains information about the
+author/committer of a commit.
+
+[options="header",width="50%",cols="1,6"]
+|==========================
+|Field Name |Description
+|`name` |The name of the author/committer.
+|`email` |The email address of the author/committer.
+|`date` |The link:rest-api.html#timestamp[timestamp] of when
+this identity was constructed.
+|`tz` |The timezone offset from UTC of when this identity was
+constructed.
+|==========================
+
+[[label-info]]
+LabelInfo
+~~~~~~~~~
+The `LabelInfo` entity contains information about a label on a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`approved` |optional|The user who approved this label on the change
+as a link:rest-api-accounts.html#account-info[AccountInfo] entity. +
+Only set if link:#labels[labels] are requested.
+|`rejected` |optional|The user who rejected this label on the change
+as a link:rest-api-accounts.html#account-info[AccountInfo] entity. +
+Only set if link:#labels[labels] are requested.
+|`recommended` |optional|The user who recommended this label on the
+change as a link:rest-api-accounts.html#account-info[AccountInfo] entity. +
+Only set if link:#labels[labels] are requested.
+|`disliked` |optional|The user who disliked this label on the change
+as a link:rest-api-accounts.html#account-info[AccountInfo] entity. +
+Only set if link:#labels[labels] are requested.
+|`value` |optional|The voting value of the user who
+recommended/disliked this label on the change if it is not
+"`+1`"/"`-1`". +
+Only set if link:#labels[labels] are requested.
+|`optional` |not set if `false`|
+Whether the label is optional. Optional means the label may be set, but
+it's neither necessary for submission nor does it block submission if
+set.
+|`all` |optional|List of all approvals for this label as a list
+of link:#approval-info[ApprovalInfo] entities. +
+Only set if link:#detailed-labels[detailed labels] are requested.
+|`values` |optional|A map of all values that are allowed for this
+label. The map maps the values ("`-2`", "`-1`", " `0`", "`+1`", "`+2`")
+to the value descriptions. +
+Only set if link:#detailed-labels[detailed labels] are requested.
+|===========================
+
+[[restore-input]]
+RestoreInput
+~~~~~~~~~~~~
+The `RestoreInput` entity contains information for restoring a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`message` |optional|
+Message to be added as review comment to the change when restoring the
+change.
+|===========================
+
+[[revert-input]]
+RevertInput
+~~~~~~~~~~~
+The `RevertInput` entity contains information for reverting a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`message` |optional|
+Message to be added as review comment to the change when reverting the
+change.
+|===========================
+
+[[review-info]]
+ReviewInfo
+~~~~~~~~~~
+The `ReviewInfo` entity contains information about a review.
+
+[options="header",width="50%",cols="1,6"]
+|===========================
+|Field Name |Description
+|`labels` |
+The labels of the review as a map that maps the label names to the
+voting values.
+|===========================
+
+[[review-input]]
+ReviewInput
+~~~~~~~~~~~
+The `ReviewInput` entity contains information for adding a review to a
+revision.
+
+[options="header",width="50%",cols="1,^1,5"]
+|============================
+|Field Name ||Description
+|`message` |optional|
+The message to be added as review comment.
+|`labels` |optional|
+The votes that should be added to the revision as a map that maps the
+label names to the voting values.
+|`comments` |optional|
+The comments that should be added as a map that maps a file path to a
+list of link:#comment-input[CommentInput] entities.
+|`strict_labels`|`true` if not set|
+Whether all labels are required to be within the user's permitted ranges
+based on access controls. +
+If `true`, attempting to use a label not granted to the user will fail
+the entire modify operation early. +
+If `false`, the operation will execute anyway, but the proposed labels
+will be modified to be the "best" value allowed by the access controls.
+|`drafts` |optional|
+Draft handling that defines how draft comments are handled that are
+already in the database but that were not also described in this
+input. +
+Allowed values are `DELETE`, `PUBLISH` and `KEEP`. +
+If not set, the default is `DELETE`.
+|`notify` |optional|
+Notify handling that defines to whom email notifications should be sent
+after the review is stored. +
+Allowed values are `NONE`, `OWNER`, `OWNER_REVIEWERS` and `ALL`. +
+If not set, the default is `ALL`.
+|============================
+
+[[reviewer-info]]
+ReviewerInfo
+~~~~~~~~~~~~
+The `ReviewerInfo` entity contains information about a reviewer and its
+votes on a change.
+
+`ReviewerInfo` has the same fields as
+link:rest-api-accounts.html#account-info[AccountInfo] and includes
+link:#detailed-accounts[detailed account information].
+In addition `ReviewerInfo` has the following fields:
+
+[options="header",width="50%",cols="1,6"]
+|==========================
+|Field Name |Description
+|`kind` |`gerritcodereview#reviewer`
+|`approvals` |
+The approvals of the reviewer as a map that maps the label names to the
+approval values ("`-2`", "`-1`", " `0`", "`+1`", "`+2`").
+|==========================
+
+[[reviewer-input]]
+ReviewerInput
+~~~~~~~~~~~~~
+The `ReviewerInput` entity contains information for adding a reviewer
+to a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`reviewer` ||
+The link:rest-api-accounts.html#account-id[ID] of one account that
+should be added as reviewer or the link:rest-api-groups.html#group-id[
+ID] of one group for which all members should be added as reviewers. +
+If an ID identifies both an account and a group, only the account is
+added as reviewer to the change.
+|`confirmed` |optional|
+Whether adding the reviewer is confirmed. +
+The Gerrit server may be configured to
+link:config-gerrit.html#addreviewer.maxWithoutConfirmation[require a
+confirmation] when adding a group as reviewer that has many members.
+|===========================
+
+[[revision-info]]
+RevisionInfo
+~~~~~~~~~~~~
+The `RevisionInfo` entity contains information about a patch set.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`draft` |not set if `false`|Whether the patch set is a draft.
+|`_number` ||The patch set number.
+|`fetch` ||
+Information about how to fetch this patch set. The fetch information is
+provided as a map that maps the protocol name ("`git`", "`http`",
+"`ssh`") to link:#fetch-info[FetchInfo] entities.
+|`commit` ||The commit of the patch set as
+link:#commit-info[CommitInfo] entity.
+|`files` ||
+The files of the patch set as a map that maps the file names to
+link:#file-info[FileInfo] entities.
+|===========================
+
+[[rule-input]]
+RuleInput
+~~~~~~~~~
+The `RuleInput` entity contains information to test a Prolog rule.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`rule`||
+Prolog code to execute instead of the code in `refs/meta/config`.
+|`filters`|`RUN` if not set|
+When `RUN` filter rules in the parent projects are called to
+post-process the results of the project specific rule. This
+behavior matches how the rule will execute if installed. +
+If `SKIP` the parent filters are not called, allowing the test
+to return results from the input rule.
+|===========================
+
+[[submit-info]]
+SubmitInfo
+~~~~~~~~~~
+The `SubmitInfo` entity contains information about the change status
+after submitting.
+
+[options="header",width="50%",cols="1,6"]
+|==========================
+|Field Name |Description
+|`status` |
+The status of the change after submitting, can be `MERGED` or
+`SUBMITTED`. +
+If `wait_for_merge` in the link:#submit-input[SubmitInput] was set to
+`false` the returned status is `SUBMITTED` and the caller can't know
+whether the change could be merged successfully.
+|==========================
+
+[[submit-input]]
+SubmitInput
+~~~~~~~~~~~
+The `SubmitInput` entity contains information for submitting a change.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`wait_for_merge`|`false` if not set|
+Whether the request should wait for the merge to complete. +
+If `false` the request returns immediately after the change has been
+added to the merge queue and the caller can't know whether the change
+could be merged successfully.
+|===========================
+
+[[submit-record]]
+SubmitRecord
+~~~~~~~~~~~~
+The `SubmitRecord` entity describes results from a submit_rule.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`status`||
+`OK`, the change can be submitted. +
+`NOT_READY`, additional labels are required before submit. +
+`CLOSED`, closed changes cannot be submitted. +
+`RULE_ERROR`, rule code failed with an error.
+|`ok`|optional|
+Map of labels that are approved; an
+link:rest-api-accounts.html#account-info[AccountInfo] identifies the
+voter chosen by the rule.
+|`reject`|optional|
+Map of labels that are preventing submit;
+link:rest-api-accounts.html#account-info[AccountInfo] identifies voter.
+|`need`|optional|
+Map of labels that need to be given to submit. The value is
+currently an empty object.
+|`may`|optional|
+Map of labels that can be used, but do not affect submit.
+link:rest-api-accounts.html#account-info[AccountInfo] identifies voter,
+if the label has been applied.
+|`impossible`|optional|
+Map of labels that should have been in `need` but cannot be
+used by any user because of access restrictions. The value
+is currently an empty object.
+|`error_message`|optional|
+When status is RULE_ERROR this message provides some text describing
+the failure of the rule predicate.
+|===========================
+
+[[topic-input]]
+TopicInput
+~~~~~~~~~~
+The `TopicInput` entity contains information for setting a topic.
+
+[options="header",width="50%",cols="1,^1,5"]
+|===========================
+|Field Name ||Description
+|`topic` |optional|The topic. +
+The topic will be deleted if not set.
+|`message` |optional|
+Message to be added as review comment to the change when setting the
+topic.
+|===========================
+
+
+GERRIT
+------
+Part of link:index.html[Gerrit Code Review]