= Gerrit Code Review - REST API

Gerrit Code Review comes with a REST like API available over HTTP.
The API is suitable for automated tools to build upon, as well as
supporting some ad-hoc scripting use cases.

See also: link:dev-rest-api.html[REST API Developers' Notes].

== Endpoints
link:rest-api-access.html[/access/]::
  Access Right related REST endpoints
link:rest-api-accounts.html[/accounts/]::
  Account related REST endpoints
link:rest-api-changes.html[/changes/]::
  Change related REST endpoints
link:rest-api-config.html[/config/]::
  Config related REST endpoints
link:rest-api-groups.html[/groups/]::
  Group related REST endpoints
link:rest-api-plugins.html[/plugins/]::
  Plugin related REST endpoints
link:rest-api-projects.html[/projects/]::
  Project related REST endpoints
link:rest-api-documentation.html[/Documentation/]::
  Documentation related REST endpoints

== Protocol Details

[[authentication]]
=== Authentication
By default all REST endpoints assume anonymous access and filter
results to correspond to what anonymous users can read (which may
be nothing at all).

Users (and programs) may authenticate by prefixing the endpoint URL with
`/a/`. For example to authenticate to `/projects/`, request the URL
`/a/projects/`.

By default Gerrit uses HTTP digest authentication with the HTTP password
from the user's account settings page. HTTP basic authentication is used
if link:config-gerrit.html#auth.gitBasicAuth[`auth.gitBasicAuth`] is set
to true in the Gerrit configuration.

[[preconditions]]
=== Preconditions
Clients can request PUT to create a new resource and not overwrite
an existing one by adding `If-None-Match: *` to the request HTTP
headers. If the named resource already exists the server will respond
with HTTP 412 Precondition Failed.

[[output]]
=== Output Format
JSON responses are encoded using UTF-8 and use content type
`application/json`.

By default most APIs return pretty-printed JSON, which uses extra
whitespace to make the output more readable for humans.

Compact JSON can be requested by setting the `pp=0` query parameter,
or by setting the `Accept` HTTP request header to include `application/json`:

----
  GET /projects/ HTTP/1.0
  Accept: application/json
----

Producing (and parsing) the non-pretty compact format is more efficient,
so tools should request it whenever possible.

To prevent against Cross Site Script Inclusion (XSSI) attacks, the JSON
response body starts with a magic prefix line that must be stripped before
feeding the rest of the response body to a JSON parser:

----
  )]}'
  [ ... valid JSON ... ]
----

Responses will be gzip compressed by the server if the HTTP
`Accept-Encoding` request header is set to `gzip`. This may
save on network transfer time for larger responses.

[[timestamp]]
=== Timestamp
Timestamps are given in UTC and have the format
"'yyyy-mm-dd hh:mm:ss.fffffffff'" where "'ffffffffff'" represents
nanoseconds.

[[encoding]]
=== Encoding
All IDs that appear in the URL of a REST call (e.g. project name, group name)
must be URL encoded.

[[response-codes]]
=== Response Codes
The Gerrit REST endpoints use HTTP status codes as described
in the link:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html[
HTTP specification].

Here are examples that show how HTTP status codes are used in the
context of the Gerrit REST API.

==== 400 Bad Request
"`400 Bad Request`" is returned if the request is not understood by the
server due to malformed syntax.

E.g. "`400 Bad Request`" is returned if JSON input is expected but the
'Content-Type' of the request is not 'application/json' or the request
body doesn't contain valid JSON.

"`400 Bad Request`" is also returned if required input fields are not set or
if options are set which cannot be used together.

==== 403 Forbidden
"`403 Forbidden`" is returned if the operation is not allowed because the
calling user does not have sufficient permissions.

E.g. some REST endpoints require that the calling user has certain
link:access-control.html#global_capabilities[global capabilities]
assigned.

"`403 Forbidden`" is also returned if `self` is used as account ID and the
REST call was done without authentication.

==== 404 Not Found
"`404 Not Found`" is returned if the resource that is specified by the
URL is not found or is not visible to the calling user. A resource
cannot be found if the URL contains a non-existing ID or view.

==== 405 Method Not Allowed
"`405 Method Not Allowed`" is returned if the resource exists but doesn't
support the operation.

E.g. some of the `/groups/` endpoints are only supported for Gerrit
internal groups; if they are invoked for an external group the response
is "`405 Method Not Allowed`".

==== 409 Conflict
"`409 Conflict`" is returned if the request cannot be completed because the
current state of the resource doesn't allow the operation.

E.g. if you try to submit a change that is abandoned, this fails with
"`409 Conflict`" because the state of the change doesn't allow the submit
operation.

"`409 Conflict`" is also returned if you try to create a resource but the
name is already occupied by an existing resource.

==== 412 Precondition Failed
"`412 Precondition Failed`" is returned if a precondition from the request
header fields is not fulfilled, as described in the link:#preconditions[
Preconditions] section.

==== 422 Unprocessable Entity
"`422 Unprocessable Entity`" is returned if the ID of a resource that is
specified in the request body cannot be resolved.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
