= Gerrit Code Review - /config/ REST API

This page describes the config related REST endpoints.
Please also take note of the general information on the
link:rest-api.html[REST API].

[[config-endpoints]]
Config Endpoints
---------------

[[get-version]]
=== Get Version
--
'GET /config/server/version'
--

Returns the version of the Gerrit server.

.Request
----
  GET /config/server/version HTTP/1.0
----

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

  )]}'
  "2.7"
----

The `verbose` option can be used to provide a verbose version output as
link:#version-info[VersionInfo].

.Request
----
  GET /config/server/version?verbose HTTP/1.0
----

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

  )]}'
  {
    "gerrit_version": "3.8.0",
    "note_db_version": 185,
    "change_index_version": 83,
    "account_index_version": 13,
    "project_index_version": 6,
    "group_index_version": 10
  }
----



[[get-info]]
=== Get Server Info
--
'GET /config/server/info'
--

Returns the information about the Gerrit server configuration.

.Request
----
  GET /config/server/info HTTP/1.0
----

As result a link:#server-info[ServerInfo] entity is returned.

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

  )]}'
  {
    "accounts": {
      "visibility": "ALL"
    },
    "auth": {
      "auth_type": "LDAP",
      "use_contributor_agreements": true,
      "contributor_agreements": [
        {
          "name": "Individual",
          "description": "If you are going to be contributing code on your own, this is the one you want. You can sign this one online.",
          "url": "static/cla_individual.html"
        }
      ],
      "editable_account_fields": [
        "FULL_NAME",
        "REGISTER_NEW_EMAIL"
      ]
    },
    "download": {
      "schemes": {
        "anonymous http": {
          "url": "http://gerrithost:8080/${project}",
          "commands": {
            "Checkout": "git fetch http://gerrithost:8080/${project} ${ref} \u0026\u0026 git checkout FETCH_HEAD",
            "Format Patch": "git fetch http://gerrithost:8080/${project} ${ref} \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD",
            "Pull": "git pull http://gerrithost:8080/${project} ${ref}",
            "Cherry Pick": "git fetch http://gerrithost:8080/${project} ${ref} \u0026\u0026 git cherry-pick FETCH_HEAD"
          },
          "clone_commands": {
            "Clone": "git clone http://gerrithost:8080/${project}",
            "Clone with commit-msg hook": "git clone http://gerrithost:8080/${project} \u0026\u0026 scp -p -P 29418 jdoe@gerrithost:hooks/commit-msg ${project}/.git/hooks/"
          }
        },
        "http": {
          "url": "http://jdoe@gerrithost:8080/${project}",
          "is_auth_required": true,
          "is_auth_supported": true,
          "commands": {
            "Checkout": "git fetch http://jdoe@gerrithost:8080/${project} ${ref} \u0026\u0026 git checkout FETCH_HEAD",
            "Format Patch": "git fetch http://jdoe@gerrithost:8080/${project} ${ref} \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD",
            "Pull": "git pull http://jdoe@gerrithost:8080/${project} ${ref}",
            "Cherry Pick": "git fetch http://jdoe@gerrithost:8080/${project} ${ref} \u0026\u0026 git cherry-pick FETCH_HEAD"
          },
          "clone_commands": {
            "Clone": "git clone http://jdoe@gerrithost:8080/${project}",
            "Clone with commit-msg hook": "git clone http://jdoe@gerrithost:8080/${project} \u0026\u0026 scp -p -P 29418 jdoe@gerrithost:hooks/commit-msg ${project}/.git/hooks/"
          }
        },
        "ssh": {
          "url": "ssh://jdoe@gerrithost:29418/${project}",
          "is_auth_required": true,
          "is_auth_supported": true,
          "commands": {
            "Checkout": "git fetch ssh://jdoe@gerrithost:29418/${project} ${ref} \u0026\u0026 git checkout FETCH_HEAD",
            "Format Patch": "git fetch ssh://jdoe@gerrithost:29418/${project} ${ref} \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD",
            "Pull": "git pull ssh://jdoe@gerrithost:29418/${project} ${ref}",
            "Cherry Pick": "git fetch ssh://jdoe@gerrithost:29418/${project} ${ref} \u0026\u0026 git cherry-pick FETCH_HEAD"
          },
          "clone_commands": {
            "Clone": "git clone ssh://jdoe@gerrithost:29418/${project}",
            "Clone with commit-msg hook": "git clone ssh://jdoe@gerrithost:29418/${project} \u0026\u0026 scp -p -P 29418 jdoe@gerrithost:hooks/commit-msg ${project}/.git/hooks/"
          }
        }
      },
      "archives": [
        "tgz",
        "tar",
        "tbz2",
        "txz"
      ]
    },
    "gerrit": {
      "all_projects": "All-Projects",
      "all_users": "All-Users"
      "doc_search": true,
      "project_state_predicate_enabled": true
    },
    "sshd": {},
    "suggest": {
      "from": 0
    },
    "user": {
      "anonymous_coward_name": "Name of user not set"
    }
  }
----

[[account-deactivation]]
=== AccountDeactivation
--
'POST /config/server/deactivate.stale.accounts'
--
Queues the link:config-gerrit.html#accountDeactivation[account deactivator] task.

.Request
----
  POST /config/server/deactivate.stale.accounts HTTP/1.0
----

.Response
----
  HTTP/1.1 202 Accepted
  Content-Type: application/json; charset=UTF-8

  )]}'
  "Account deactivator task added to work queue."
----

[[check-consistency]]
=== Check Consistency
--
'POST /config/server/check.consistency'
--

Runs consistency checks and returns detected problems.

Input for the consistency checks that should be run must be provided in
the request body inside a
link:#consistency-check-input[ConsistencyCheckInput] entity.

.Request
----
  POST /config/server/check.consistency HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "check_accounts": {},
    "check_account_external_ids": {}
  }
----

As result a link:#consistency-check-info[ConsistencyCheckInfo] entity
is returned that contains detected consistency problems.

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

  )]}'
  {
    "check_accounts_result": {
      "problems": [
        {
          "status": "ERROR",
          "message": "Account \u00271000024\u0027 has no external ID for its preferred email \u0027foo.bar@example.com\u0027"
        }
      ]
    }
    "check_account_external_ids_result": {
      "problems": [
        {
          "status": "ERROR",
          "message": "External ID \u0027uuid:ccb8d323-1361-45aa-8874-41987a660c46\u0027 belongs to account that doesn\u0027t exist: 1000012"
        }
      ]
    }
  }
----


[[reload-config]]
=== Reload Config
--
'POST /config/server/reload'
--

Reloads the gerrit.config configuration.

Not all configuration value can be picked up by this command. Which config
sections and values that are supported is documented here:
link:config-gerrit.html[Configuration]

_The output shows only modified config values that are picked up by Gerrit
and applied._

If a config entry is added or removed from gerrit.config, but still brings
no effect due to a matching default value, no output for this entry is shown.

.Request
----
  POST /config/server/reload HTTP/1.0
----

As result a link:#config-update-info[ConfigUpdateInfo] entity is returned that
contains information about how the updated config entries were handled.

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

  )]}'
  {
    "rejected": [],
    "applied": [
      {
        "config_key": "addreviewer.maxAllowed",
        "old_value": "20",
        "new_value": "15"
      }
    ]
  }
----


[[confirm-email]]
=== Confirm Email
--
'PUT /config/server/email.confirm'
--

Confirms that the user owns an email address.

The email token must be provided in the request body inside
an link:#email-confirmation-input[EmailConfirmationInput] entity.

.Request
----
  PUT /config/server/email.confirm HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "token": "Enim+QNbAo6TV8Hur8WwoUypI6apG7qBPvF+bw==$MTAwMDAwNDp0ZXN0QHRlc3QuZGU="
  }
----

The response is "`204 No Content`".

If the token is invalid or if it's the token of another user the
request fails and the response is "`422 Unprocessable Entity`".


[[list-caches]]
=== List Caches
--
'GET /config/server/caches/'
--

Lists the caches of the server. Caches defined by plugins are included.

The caller must be a member of a group that is granted one of the
following capabilities:

* link:access-control.html#capability_viewCaches[View Caches]
* link:access-control.html#capability_maintainServer[Maintain Server]
* link:access-control.html#capability_administrateServer[Administrate Server]

As result a map of link:#cache-info[CacheInfo] entities is returned.

The entries in the map are sorted by cache name.

.Request
----
  GET /config/server/caches/ HTTP/1.0
----

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

  )]}'
  {
    "accounts": {
      "type": "MEM",
      "entries": {
        "mem": 4
      },
      "average_get": "2.5ms",
      "hit_ratio": {
        "mem": 94
      }
    },
    "adv_bases": {
      "type": "MEM",
      "entries": {},
      "hit_ratio": {}
    },
    "change_kind": {
      "type": "DISK",
      "entries": {
        "space": "0.00k"
      },
      "hit_ratio": {}
    },
    "changes": {
      "type": "MEM",
      "entries": {},
      "hit_ratio": {}
    },
    "conflicts": {
      "type": "DISK",
      "entries": {
        "mem": 2,
        "disk": 3,
        "space": "2.75k"
      },
      "hit_ratio": {
        "mem": 0,
        "disk": 100
      }
    },
    "diff": {
      "type": "DISK",
      "entries": {
        "mem": 177,
        "disk": 253,
        "space": "170.97k"
      },
      "average_get": "1.1ms",
      "hit_ratio": {
        "mem": 67,
        "disk": 100
      }
    },
    "diff_intraline": {
      "type": "DISK",
      "entries": {
        "mem": 1,
        "disk": 1,
        "space": "0.37k"
      },
      "average_get": "6.8ms",
      "hit_ratio": {
        "mem": 0
      }
    },
    "git_tags": {
      "type": "DISK",
      "entries": {
        "space": "0.00k"
      },
      "hit_ratio": {}
    },
    groups": {
      "type": "MEM",
      "entries": {
        "mem": 27
      },
      "average_get": "183.2us",
      "hit_ratio": {
        "mem": 12
      }
    },
    "groups_bymember": {
      "type": "MEM",
      "entries": {},
      "hit_ratio": {}
    },
    "groups_byname": {
      "type": "MEM",
      "entries": {},
      "hit_ratio": {}
    },
    "groups_bysubgroup": {
      "type": "MEM",
      "entries": {},
      "hit_ratio": {}
    },
    "groups_byuuid": {
      "type": "MEM",
      "entries": {
        "mem": 25
      },
      "average_get": "173.4us",
      "hit_ratio": {
        "mem": 13
      }
    },
    "groups_external": {
      "type": "MEM",
      "entries": {},
      "hit_ratio": {}
    },
    "permission_sort": {
      "type": "MEM",
      "entries": {
        "mem": 16
      },
      "hit_ratio": {
        "mem": 96
      }
    },
    "plugin_resources": {
      "type": "MEM",
      "entries": {
        "mem": 2
      },
      "hit_ratio": {
        "mem": 83
      }
    },
    "project_list": {
      "type": "MEM",
      "entries": {
        "mem": 1
      },
      "average_get": "18.6ms",
      "hit_ratio": {
        "mem": 0
      }
    },
    "projects": {
      "type": "MEM",
      "entries": {
        "mem": 35
      },
      "average_get": "8.6ms",
      "hit_ratio": {
        "mem": 99
      }
    },
    "prolog_rules": {
      "type": "MEM",
      "entries": {
        "mem": 35
      },
      "average_get": "103.0ms",
      "hit_ratio": {
        "mem": 99
      }
    },
    "quota-repo_size": {
      "type": "DISK",
      "entries": {
        "space": "0.00k"
      },
      "hit_ratio": {}
    },
    "sshkeys": {
      "type": "MEM",
      "entries": {
        "mem": 1
      },
      "average_get": "3.2ms",
      "hit_ratio": {
        "mem": 50
      }
    },
    "web_sessions": {
      "type": "DISK",
      "entries": {
        "mem": 1,
        "disk": 2,
        "space": "0.78k"
      },
      "hit_ratio": {
        "mem": 82
      }
    }
  }
----

It is possible to get different output formats by specifying the
`format` option:

* `LIST`:
+
Returns the cache names as JSON list.
+
The cache names are lexicographically sorted.
+
.Request
----
  GET /config/server/caches/?format=LIST HTTP/1.0
----
+
.Response
----
  HTTP/1.1 200 OK
  Content-Type: application/json; charset=UTF-8

  )]}'
  [
    "accounts",
    "adv_bases",
    "change_kind",
    "changes",
    "conflicts",
    "diff",
    "diff_intraline",
    "git_tags",
    "groups",
    "groups_bymember",
    "groups_byname",
    "groups_bysubgroup",
    "groups_byuuid",
    "groups_external",
    "permission_sort",
    "plugin_resources",
    "project_list",
    "projects",
    "prolog_rules",
    "quota-repo_size",
    "sshkeys",
    "web_sessions"
  ]
----

* `TEXT_LIST`:
+
Returns the cache names as a UTF-8 list that is base64 encoded. The
cache names are delimited by '\n'.
+
The cache names are lexicographically sorted.
+
.Request
----
  GET /config/server/caches/?format=TEXT_LIST HTTP/1.0
----
+
.Response
----
  HTTP/1.1 200 OK
  Content-Type: text/plain; charset=UTF-8

  YWNjb3VudHMKYW...ViX3Nlc3Npb25z
----
+
E.g. this could be used to flush all caches:
+
----
  for c in $(curl --user jdoe:TNAuLkXsIV7w http://gerrit/a/config/server/caches/?format=TEXT_LIST | base64 -D)
  do
    curl --user jdoe:TNAuLkXsIV7w -X POST http://gerrit/a/config/server/caches/$c/flush
  done
----

[[cache-operations]]
=== Cache Operations
--
'POST /config/server/caches/'
--

Executes a cache operation that is specified in the request body in a
link:#cache-operation-input[CacheOperationInput] entity.

[[flush-all-caches]]
==== Flush All Caches

.Request
----
  POST /config/server/caches/ HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "operation": "FLUSH_ALL"
  }
----

.Response
----
  HTTP/1.1 200 OK
----

[[flush-several-caches]]
==== Flush Several Caches At Once

.Request
----
  POST /config/server/caches/ HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "operation": "FLUSH",
    "caches": [
      "projects",
      "project_list"
    ]
  }
----

.Response
----
  HTTP/1.1 200 OK
----

[[get-cache]]
=== Get Cache
--
'GET /config/server/caches/link:#cache-name[\{cache-name\}]'
--

Retrieves information about a cache.

The caller must be a member of a group that is granted one of the
following capabilities:

* link:access-control.html#capability_viewCaches[View Caches]
* link:access-control.html#capability_maintainServer[Maintain Server]
* link:access-control.html#capability_administrateServer[Administrate Server]

As result a link:#cache-info[CacheInfo] entity is returned.

.Request
----
  GET /config/server/caches/projects HTTP/1.0
----

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

  )]}'
  {
    "name": "projects",
    "type": "MEM",
    "entries": {
      "mem": 35
    },
    "average_get": " 8.6ms",
    "hit_ratio": {
      "mem": 99
    }
  }
----

[[flush-cache]]
=== Flush Cache
--
'POST /config/server/caches/link:#cache-name[\{cache-name\}]/flush'
--

Flushes a cache.

The caller must be a member of a group that is granted one of the
following capabilities:

* link:access-control.html#capability_flushCaches[Flush Caches] (any cache
  except "web_sessions")
* link:access-control.html#capability_maintainServer[Maintain Server] (any cache
  including "web_sessions")
* link:access-control.html#capability_administrateServer[Administrate Server]
  (any cache including "web_sessions")

.Request
----
  POST /config/server/caches/projects/flush HTTP/1.0
----

.Response
----
  HTTP/1.1 200 OK
----

[[get-summary]]
=== Get Summary
--
'GET /config/server/summary'
--

Retrieves a summary of the current server state.

The caller must be a member of a group that is granted the
link:access-control.html#capability_administrateServer[Administrate
Server] capability.

The following options are supported:

* `jvm`:
+
Includes a JVM summary.

.Request
----
  GET /config/server/summary?jvm HTTP/1.0
----

As result a link:#summary-info[SummaryInfo] entity is returned.

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

  )]}'
  {
    "task_summary": {
      "total": 2,
      "sleeping": 2
    },
    "mem_summary": {
      "total": "341.06m",
      "used": "57.16m",
      "free": "283.90m",
      "buffers": "0.00k",
      "max": "1.67g",
    }
    "thread_summary": {
      "cpus": 8,
      "threads": 44,
      "counts": {
        "HTTP": {
          "RUNNABLE": 3,
          "TIMED_WAITING": 2
        },
        "SSH-Interactive-Worker": {
          "WAITING": 1
        },
        "Other": {
          "WAITING": 10,
          "RUNNABLE": 2,
          "TIMED_WAITING": 25
        },
        "SshCommandStart": {
          "WAITING": 1
        }
      }
    },
    "jvm_summary": {
      "vm_vendor": "Oracle Corporation",
      "vm_name": "Java HotSpot(TM) 64-Bit Server VM",
      "vm_version": "23.25-b01",
      "os_name": "Mac OS X",
      "os_version": "10.8.5",
      "os_arch": "x86_64",
      "user": "gerrit",
      "host": "GERRIT",
      "current_working_directory": "/Users/gerrit/site",
      "site": "/Users/gerrit/site"
    }
  }
----

[[list-capabilities]]
=== List Capabilities
--
'GET /config/server/capabilities'
--

Lists the capabilities that are available in the system. There are two
kinds of capabilities: core and plugin-owned capabilities.

As result a map of link:#capability-info[CapabilityInfo] entities is
returned.

The entries in the map are sorted by capability ID.

.Request
----
  GET /config/server/capabilities/ HTTP/1.0
----

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

  )]}'
  {
    "accessDatabase": {
      "id": "accessDatabase",
      "name": "Access Database"
    },
    "administrateServer": {
      "id": "administrateServer",
      "name": "Administrate Server"
    },
    "createAccount": {
      "id": "createAccount",
      "name": "Create Account"
    },
    "createGroup": {
      "id": "createGroup",
      "name": "Create Group"
    },
    "createProject": {
      "id": "createProject",
      "name": "Create Project"
    },
    "emailReviewers": {
      "id": "emailReviewers",
      "name": "Email Reviewers"
    },
    "flushCaches": {
      "id": "flushCaches",
      "name": "Flush Caches"
    },
    "killTask": {
      "id": "killTask",
      "name": "Kill Task"
    },
    "priority": {
      "id": "priority",
      "name": "Priority"
    },
    "queryLimit": {
      "id": "queryLimit",
      "name": "Query Limit"
    },
    "runGC": {
      "id": "runGC",
      "name": "Run Garbage Collection"
    },
    "streamEvents": {
      "id": "streamEvents",
      "name": "Stream Events"
    },
    "viewCaches": {
      "id": "viewCaches",
      "name": "View Caches"
    },
    "viewConnections": {
      "id": "viewConnections",
      "name": "View Connections"
    },
    "viewPlugins": {
      "id": "viewPlugins",
      "name": "View Plugins"
    },
    "viewQueue": {
      "id": "viewQueue",
      "name": "View Queue"
    }
  }
----

[[list-experiments]]
=== List Experiments
--
'GET /config/server/experiments'
--

Lists the experiments that are available in the system.

Requires the caller to have the link:access-control.html#capability_administrateServer[
Administrate Server] global capability.

As result a map of experiment names to link:#experiment-info[Experiment] entities is returned.

The entries in the map are sorted by experiment name.

.Request
----
  GET /config/server/experiments/ HTTP/1.0
----

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

  )]}'
  {
    "GerritBackendFeature__allow_fix_suggestions_in_comments": {
      "enabled": false
    },
    "GerritBackendFeature__attach_nonce_to_documentation": {
      "enabled": true
    }
  }
----

It is possible to specify the following options:

[[list-experiments-enabled-only]]
--
* `enabled-only`: If specified only enabled experiments are listed.
--

[[list-global-labels]]
=== List Global Labels
--
'GET /config/server/labels'
--

Lists the globally defined labels (labels that are added programatically via the
link:dev-plugins.html#label-type[LabelType] extension point).

As result a list of labels as link:rest-api-projects.html#label-definition-info[
LabelDefinitionInfo] entities is returned.

The entries in the list are sorted by label name.

.Request
----
  GET /config/server/labels/ HTTP/1.0
----

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

  )]}'
  [
    {
      "name": "Global-Label",
      "function": "NoBlock",
      "values": {
        " 0": "No score",
        "-1": "Rejected",
        "+1": "Approved",
      },
      "default_value": 0,
      "can_override": false,
      "copy_condition": "changekind:NO_CHANGE OR changekind:TRIVIAL_REBASE or is:MIN",
      "allow_post_submit": true
    }
  ]
----

[[list-global-submit-requirements]]
=== List Global Submit Requirements
--
'GET /config/server/submit-requirements'
--

Lists the globally defined submit requirements (submit requirements that are
added programatically via the
link:dev-plugins.html#submit-requirement[SubmitRequirement] extension point).

As result a list of submit-requirements as
link:rest-api-projects.html#submit-requirement-info[ SubmitRequirementInfo]
entities is returned.

The entries in the list are sorted by submit requirement name.

.Request
----
  GET /config/server/submit-requirements/ HTTP/1.0
----

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

  )]}'
  [
    {
      "name": "Global-Submit-Requirement",
      "description": "A global submit requirement",
      "submittability_expression": "label:Global-Label=+2",
      "allow_override_in_child_projects": false
    }
  ]
----

[[list-tasks]]
=== List Tasks
--
'GET /config/server/tasks/'
--

Lists the tasks from the background work queues that the Gerrit daemon
is currently performing, or will perform in the near future.

Gerrit contains an internal scheduler, similar to cron, that it uses to
queue and dispatch both short and long term tasks.

Tasks that are completed or canceled exit the queue very quickly once
they enter this state, but it can be possible to observe tasks in these
states.

End-users may see a task only if they can also see the project the task
is associated with. Tasks operating on other projects, or that do not
have a specific project, are hidden.

The caller must be a member of a group that is granted one of the
following capabilities:

* link:access-control.html#capability_viewQueue[View Queue]
* link:access-control.html#capability_maintainServer[Maintain Server]
* link:access-control.html#capability_administrateServer[Administrate Server]

As result a list of link:#task-info[TaskInfo] entities is returned.

The entries in the list are sorted by task state, remaining delay and
command.

.Request
----
  GET /config/server/tasks/ HTTP/1.0
----

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

  )]}'
  [
    {
      "id": "1e688bea",
      "state": "SLEEPING",
      "start_time": "2014-06-11 12:58:51.991000000",
      "delay": 3453,
      "command": "Reload Submit Queue"
    },
    {
      "id": "3e6d4ffa",
      "state": "SLEEPING",
      "start_time": "2014-06-11 12:58:51.508000000",
      "delay": 3287966,
      "command": "Log File Manager"
    }
  ]
----

[[get-task]]
=== Get Task
--
'GET /config/server/tasks/link:#task-id[\{task-id\}]'
--

Retrieves a task from the background work queue that the Gerrit daemon
is currently performing, or will perform in the near future.

End-users may see a task only if they can also see the project the task
is associated with. Tasks operating on other projects, or that do not
have a specific project, are hidden.

The caller must be a member of a group that is granted one of the
following capabilities:

* link:access-control.html#capability_viewQueue[View Queue]
* link:access-control.html#capability_maintainServer[Maintain Server]
* link:access-control.html#capability_administrateServer[Administrate Server]

As result a link:#task-info[TaskInfo] entity is returned.

.Request
----
  GET /config/server/tasks/1e688bea HTTP/1.0
----

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

  )]}'
  {
    "id": "1e688bea",
    "state": "SLEEPING",
    "start_time": "2014-06-11 12:58:51.991000000",
    "delay": 3453,
    "command": "Reload Submit Queue"
  }
----

[[delete-task]]
=== Delete Task
--
'DELETE /config/server/tasks/link:#task-id[\{task-id\}]'
--

Kills a task from the background work queue that the Gerrit daemon
is currently performing, or will perform in the near future.

The caller must be a member of a group that is granted one of the
following capabilities:

* link:access-control.html#capability_kill[Kill Task]
* link:access-control.html#capability_maintainServer[Maintain Server]
* link:access-control.html#capability_administrateServer[Administrate Server]

End-users may see a task only if they can also see the project the task
is associated with. Tasks operating on other projects, or that do not
have a specific project, are hidden.

Members of a group granted one of the following capabilities may view
all tasks:

* link:access-control.html#capability_viewQueue[View Queue]
* link:access-control.html#capability_maintainServer[Maintain Server]
* link:access-control.html#capability_administrateServer[Administrate Server]

.Request
----
  DELETE /config/server/tasks/1e688bea HTTP/1.0
----

.Response
----
  HTTP/1.1 204 No Content
----

[[get-top-menus]]
=== Get Top Menus
--
'GET /config/server/top-menus'
--

Returns the list of additional top menu entries.

.Request
----
  GET /config/server/top-menus HTTP/1.0
----

As response a list of the additional top menu entries as
link:#top-menu-entry-info[TopMenuEntryInfo] entities is returned.

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

  )]}'
  [
    {
      "name": "Top Menu Entry",
      "items": [
        {
          "url": "http://gerrit.googlecode.com/",
          "name": "Gerrit",
          "target": "_blank"
        }
      ]
    }
  ]
----

[[get-user-preferences]]
=== Get Default User Preferences
--
'GET /config/server/preferences'
--

Returns the default user preferences for the server.

.Request
----
  GET /a/config/server/preferences HTTP/1.0
----

As response a link:rest-api-accounts.html#preferences-info[
PreferencesInfo] is returned.

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

  )]}'
  {
    "changes_per_page": 25,
    "download_command": "CHECKOUT",
    "date_format": "STD",
    "time_format": "HHMM_12",
    "diff_view": "SIDE_BY_SIDE",
    "size_bar_in_change_table": true,
    "mute_common_path_prefixes": true,
    "publish_comments_on_push": true,
    "my": [
      {
        "url": "#/dashboard/self",
        "name": "Changes"
      },
      {
        "url": "#/q/has:draft",
        "name": "Draft Comments"
      },
      {
        "url": "#/q/has:edit",
        "name": "Edits"
      },
      {
        "url": "#/q/is:watched+is:open",
        "name": "Watched Changes"
      },
      {
        "url": "#/q/is:starred",
        "name": "Starred Changes"
      },
      {
        "url": "#/groups/self",
        "name": "Groups"
      }
    ],
    "email_strategy": "ENABLED"
  }
----

[[set-user-preferences]]
=== Set Default User Preferences

--
'PUT /config/server/preferences'
--

Sets the default user preferences for the server.

The new user preferences must be provided in the request body as a
link:rest-api-accounts.html#preferences-input[PreferencesInput]
entity.

To be allowed to set default preferences, a user must be a member of
a group that is granted the
link:access-control.html#capability_administrateServer[
Administrate Server] capability.

.Request
----
  PUT /a/config/server/preferences HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "changes_per_page": 50
  }
----

As response a link:rest-api-accounts.html#preferences-info[
PreferencesInfo] is returned.

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

  )]}'
  {
    "changes_per_page": 50,
    "download_command": "CHECKOUT",
    "date_format": "STD",
    "time_format": "HHMM_12",
    "diff_view": "SIDE_BY_SIDE",
    "size_bar_in_change_table": true,
    "mute_common_path_prefixes": true,
    "publish_comments_on_push": true,
    "my": [
      {
        "url": "#/dashboard/self",
        "name": "Changes"
      },
      {
        "url": "#/q/has:draft",
        "name": "Draft Comments"
      },
      {
        "url": "#/q/has:edit",
        "name": "Edits"
      },
      {
        "url": "#/q/is:watched+is:open",
        "name": "Watched Changes"
      },
      {
        "url": "#/q/is:starred",
        "name": "Starred Changes"
      },
      {
        "url": "#/groups/self",
        "name": "Groups"
      }
    ],
    "email_strategy": "ENABLED"
  }
----

[[get-diff-preferences]]
=== Get Default Diff Preferences

--
'GET /config/server/preferences.diff'
--

Returns the default diff preferences for the server.

.Request
----
  GET /a/config/server/preferences.diff HTTP/1.0
----

As response a link:rest-api-accounts.html#diff-preferences-info[
DiffPreferencesInfo] is returned.

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

  )]}'
  {
    "context": 10,
    "tab_size": 8,
    "line_length": 100,
    "cursor_blink_rate": 0,
    "intraline_difference": true,
    "show_line_endings": true,
    "show_tabs": true,
    "show_whitespace_errors": true,
    "syntax_highlighting": true,
    "auto_hide_diff_table_header": true,
    "theme": "DEFAULT",
    "ignore_whitespace": "IGNORE_NONE"
  }
----

[[set-diff-preferences]]
=== Set Default Diff Preferences

--
'PUT /config/server/preferences.diff'
--

Sets the default diff preferences for the server.

The new diff preferences must be provided in the request body as a
link:rest-api-accounts.html#diff-preferences-input[
DiffPreferencesInput] entity.

To be allowed to set default diff preferences, a user must be a member
of a group that is granted the
link:access-control.html#capability_administrateServer[
Administrate Server] capability.

.Request
----
  PUT /a/config/server/preferences.diff HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "context": 10,
    "tab_size": 8,
    "line_length": 80,
    "cursor_blink_rate": 0,
    "intraline_difference": true,
    "show_line_endings": true,
    "show_tabs": true,
    "show_whitespace_errors": true,
    "syntax_highlighting": true,
    "auto_hide_diff_table_header": true,
    "theme": "DEFAULT",
    "ignore_whitespace": "IGNORE_NONE"
  }
----

As response a link:rest-api-accounts.html#diff-preferences-info[
DiffPreferencesInfo] is returned.

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

  )]}'
  {
    "context": 10,
    "tab_size": 8,
    "line_length": 80,
    "cursor_blink_rate": 0,
    "intraline_difference": true,
    "show_line_endings": true,
    "show_tabs": true,
    "show_whitespace_errors": true,
    "syntax_highlighting": true,
    "auto_hide_diff_table_header": true,
    "theme": "DEFAULT",
    "ignore_whitespace": "IGNORE_NONE"
  }
----

[[get-edit-preferences]]
=== Get Default Edit Preferences

--
'GET /config/server/preferences.edit'
--

Returns the default edit preferences for the server.

.Request
----
  GET /a/config/server/preferences.edit HTTP/1.0
----

As response a link:rest-api-accounts.html#edit-preferences-info[
EditPreferencesInfo] is returned.

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

  )]}'
  {
    "tab_size": 8,
    "line_length": 100,
    "indent_unit": 2,
    "cursor_blink_rate": 0,
    "show_tabs": true,
    "syntax_highlighting": true,
    "match_brackets": true,
    "auto_close_brackets": true,
    "theme": "DEFAULT",
    "key_map_type": "DEFAULT"
  }
----

[[set-edit-preferences]]
=== Set Default Edit Preferences

--
'PUT /config/server/preferences.edit'
--

Sets the default edit preferences for the server.

The new edit preferences must be provided in the request body as a
link:rest-api-accounts.html#edit-preferences-input[
EditPreferencesInput] entity.

To be allowed to set default edit preferences, a user must be a member
of a group that is granted the
link:access-control.html#capability_administrateServer[
Administrate Server] capability.

.Request
----
  PUT /a/config/server/preferences.edit HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "tab_size": 8,
    "line_length": 80,
    "indent_unit": 2,
    "cursor_blink_rate": 0,
    "show_tabs": true,
    "syntax_highlighting": true,
    "match_brackets": true,
    "auto_close_brackets": true,
    "theme": "DEFAULT",
    "key_map_type": "DEFAULT"
  }
----

As response a link:rest-api-accounts.html#edit-preferences-info[
EditPreferencesInfo] is returned.

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

  )]}'
  {
    "tab_size": 8,
    "line_length": 80,
    "indent_unit": 2,
    "cursor_blink_rate": 0,
    "show_tabs": true,
    "syntax_highlighting": true,
    "match_brackets": true,
    "auto_close_brackets": true,
    "theme": "DEFAULT",
    "key_map_type": "DEFAULT"
  }
----

[[index.changes]]
=== Index a set of changes

This endpoint allows Gerrit admins to index a set of changes with one request
by providing a link:#index-changes-input[IndexChangesInput] entity.

Using this endpoint Gerrit admins can also index change(s) which are not visible to them.

.Request
----
  POST /config/server/index.changes HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "changes": [
      "foo~101",
      "bar~202",
      "303"
    ],
    "delete_missing": "true"
  }
----

.Response
----
  HTTP/1.1 200 OK
  Content-Disposition: attachment
----

When `delete_missing` is set to `true` changes to be reindexed which are missing in NoteDb
will be deleted in the index.

[[list-indexes]]
=== List Indexes
--
'GET /config/server/indexes'
--

Lists the indexes used by Gerrit. It provides details about the index versions,
which index version is used to search and which versions are written to.

This endpoint requires the
link:access-control.html#capability_maintainServer[Maintain Server]
capability.

.Request
----
  GET /config/server/indexes/ HTTP/1.0
----

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

  )]}'
  [
    {
      "name": "accounts",
      "versions": {
        "13": {
          "is_write": true,
          "is_search": true,
          "num_docs": 3250
        }
      }
    },
    {
      "name": "changes",
      "versions": {
        "83": {
          "is_write": true,
          "is_search": true,
          "num_docs": 250000
        },
        "84": {
          "is_write": true,
          "is_search": false,
          "num_docs": 150000
        }
      }
    },
    {
      "name": "groups",
      "versions": {
        "10": {
          "is_write": true,
          "is_search": true,
          "num_docs": 500
        }
      }
    },
    {
      "name": "projects",
      "versions": {
        "8": {
          "is_write": true,
          "is_search": true,
          "num_docs": 90
        }
      }
    }
  [
----

=== Get Index
--
'GET /config/server/indexes/changes'
--

Get an index used by Gerrit. It provides details about the index versions, which
index version is used to search and which versions are written to.

.Request
----
  'GET /config/server/indexes/changes'
----

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

  )]}'
  {
    "name": "changes",
    "versions": {
      "83": {
        "is_write": true,
        "is_search": true,
        "num_docs": 250000
      },
      "84": {
        "is_write": true,
        "is_search": false,
        "num_docs": 150000
      }
    }
  }
----

=== List Index Versions
--
'GET /config/server/indexes/changes/versions'
--

Lists versions of an index used by Gerrit.

.Request
----
  'GET /config/server/indexes/changes/versions'
----

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

  )]}'
  {
    "83": {
      "is_write": true,
      "is_search": true,
      "num_docs": 250000
    },
    "84": {
      "is_write": true,
      "is_search": false,
      "num_docs": 150000
    }
  }
----

=== Get Index Version
--
'GET /config/server/indexes/changes/versions/85'
--

Get info about one version of an index used by Gerrit.

.Request
----
  'GET /config/server/indexes/changes/versions/84'
----

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

  )]}'
  {
    "is_write": true,
    "is_search": false,
    "num_docs": 150000
  }
----

[[snapshot-index]]
=== Create Index Snapshot

These endpoints allow Gerrit admins to create index snapshots.
Created snapshots can be used as a backup of the index.

It is possible to create a snapshot of all indexes, snapshot of one index or
snapshot of one index version.

The snapshots will be stored on the server at `$SITE/index/snapshots/$ID`.
The `$ID` can be optionally provided in link:#snapshot-index-input[SnapshotIndex.Input]
or will default to the current local time in ISO8601 format.

Only snapshots of indexes that Gerrit currently writes to can be created.

Note, that the creation of multiple snapshots, e.g. of different index
versions, is not atomic. If a consistent state over multiple indexes is
required, the server has to be put into read-only mode before creating
the snapshot.

==== Create Snapshot of All Indexes
--
'POST /config/server/snapshot.indexes HTTP/1.0'
--

.Request
----
  POST /config/server/snapshot.indexes HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "id": "snapshot-1"
  }
----

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

  )]}'
  {
    "id": "snapshot-1"
  }
----

==== Create Snapshot of one Index
--
'POST /config/server/indexes/link:#index-name[\{index-name\}]/snapshot'
--

This creates a snapshot of all write index versions of the specified index.

.Request
----
  POST /config/server/indexes/accounts/snapshot HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "id": "snapshot-1"
  }
----

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

  )]}'
  {
    "id": "snapshot-1"
  }
----

==== Create Snapshot of one Index Version
--
'POST /config/server/indexes/link:#index-name[\{index-name\}]/versions/#index-version[\{index-version\}]/snapshot'
--

This creates a snapshot of one index version of the specified index.

.Request
----
  POST /config/server/indexes/changes/versions/84/snapshot HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "id": "snapshot-1"
  }
----

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

  )]}'
  {
    "id": "snapshot-1"
  }
----

=== Reindex an Index Version
--
'POST /config/server/indexes/link:#index-name[\{index-name\}]/versions/#index-version[\{index-version\}]/reindex'
--

This endpoint allows to trigger background reindexing of an index version.  It is
also supported to specify whether to reuse existing up-to-date (non-stale) index
documents and whether to notifyListeners or not.

.Request
----
  POST /config/server/indexes/changes/versions/84/reindex HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "reuse": "true",
    "notifyListeners": "false"
  }
----

.Response
----
  HTTP/1.1 202 Accepted
  Content-Type: application/json; charset=UTF-8

  )]}'
----

[[cleanup.changes]]
=== Cleanup of stale changes

This endpoint allows Gerrit administrators to abandon changes older than some given
time. This allows to run change cleanup manually outside of the configured schedule or
if change cleanup has been deactivated.

The change cleanup will run asynchronously.

.Request
----
  POST /config/server/cleanup.changes HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "after": "3 months",
    "if_mergeable": true,
    "message": "Abandoning stale changes."
  }
----

.Response
----
  HTTP/1.1 202 Accepted
  Content-Disposition: attachment
----

[[cleanup.draft.comments]]
=== Cleanup of already published draft comments

This endpoint allows Gerrit administrators to cleanup already published draft
comments that were not deleted.

This cleanup task will run asynchronously.

.Request
----
  POST /config/server/cleanup.draft.comments HTTP/1.0
----

.Response
----
  HTTP/1.1 202 Accepted
  Content-Disposition: attachment
----

[[passwords.to.tokens]]
=== Migration of HTTP passwords to authentication tokens

This endpoint allows Gerrit administrators to migrate remaining HTTP passwords
to authentication tokens. For the user the migration is invisible, i.e. the
same credential is still valid.

An optional lifetime for the credential can be set in the
link:#migrate-passwords-to-tokens-input[MigratePasswordsToTokens.Input].

This migration task will run asynchronously.

.Request
----
  POST /config/server/passwords.to.tokens HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "lifetime": "3 months",
  }
----

.Response
----
  HTTP/1.1 202 Accepted
  Content-Disposition: attachment
----

[[reduce.token.lifetime]]
=== Apply maximum lifetime to authentication tokens

This endpoint allows Gerrit administrators to apply a shorter maximum lifetime
to existing authentication tokens. This is required, when a shorter maximum
lifetime is enforced. Changing the configuration will not apply that maximum
to existing tokens. These have to be adapted using this REST API endpoint.

This migration task will run asynchronously.

.Request
----
  POST /config/server/reduce.token.lifetime HTTP/1.0
  Content-Type: application/json; charset=UTF-8

  {
    "lifetime": "3 months",
  }
----

.Response
----
  HTTP/1.1 202 Accepted
  Content-Disposition: attachment
----

[[experiment-endpoints]]
== Experiment Endpoints

[[get-experiment]]
=== Get Experiment
--
'GET /config/server/experiments/link:#experiment-name[\{experiment-name\}]
--

Retrieves the details of the experiment with the given name.

Requires the caller to have the link:access-control.html#capability_administrateServer[
Administrate Server] global capability.

.Request
----
  GET /config/server/experiments/mGerritBackendFeature__attach_nonce_to_documentation HTTP/1.0
----

As response an link:#experiment-info[Experiment] entity is returned that
describes the experiment.

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

  )]}'
  {
    "enabled": true
  }
----

[[ids]]
== IDs

[[cache-name]]
=== \{cache-name\}
The name of the cache.

If the cache is defined by a plugin the cache name must include the
plugin name: "<plugin-name>-<cache-name>".

Gerrit core caches can optionally be prefixed with "gerrit":
"gerrit-<cache-name>".

[[experiment-name]]
=== \{experiment-name\}
The name of the experiment.

[[task-id]]
=== \{task-id\}
The ID of the task (hex string).

[[index-name]]
=== \{index-name\}
The name of the index. Can be any of: "accounts", "changes", "groups", "projects".

[[index-version]]
=== \{index-version\}
The version of the index. This is an integer.

[[json-entities]]
== JSON Entities

[[accounts-config-info]]
=== AccountsConfigInfo
The `AccountsConfigInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#accounts[accounts]
section.

[options="header",cols="1,6"]
|=============================
|Field Name            |Description
|`visibility`          |
link:config-gerrit.html#accounts.visibility[Visibility setting for
accounts].
|`default_display_name`|The default strategy for choosing the display
name in the UI, see also
link:config-gerrit.html#accounts.defaultDisplayName[gerrit.config].
|=============================

[[auth-info]]
=== AuthInfo
The `AuthInfo` entity contains information about the authentication
configuration of the Gerrit server.

[options="header",cols="1,^1,5"]
|==========================================
|Field Name                   ||Description
|`type`                       ||
The link:config-gerrit.html#auth.type[authentication type] that is
configured on the server. Can be `OPENID`, `OPENID_SSO`, `OAUTH`,
`HTTP`, `HTTP_LDAP`, `CLIENT_SSL_CERT_LDAP`, `LDAP`, `LDAP_BIND`,
`CUSTOM_EXTENSION` or `DEVELOPMENT_BECOME_ANY_ACCOUNT`.
|`use_contributor_agreements` |not set if `false`|
Whether link:config-gerrit.html#auth.contributorAgreements[contributor
agreements] are required.
|`contributor_agreements`     |not set if `use_contributor_agreements` is `false`|
List of contributor agreements as link:rest-api-accounts.html#contributor-agreement-info[
ContributorAgreementInfo] entities.
|`editable_account_fields`    ||
List of account fields that are editable. Possible values are
`FULL_NAME`, `USER_NAME` and `REGISTER_NEW_EMAIL`.
|`login_url`                  |optional|
The link:config-gerrit.html#auth.loginUrl[login URL]. Only set if
link:config-gerrit.html#auth.type[authentication type] is `HTTP` or
`HTTP_LDAP`.
|`login_text`                 |optional|
The link:config-gerrit.html#auth.loginText[login text]. Only set if
link:config-gerrit.html#auth.type[authentication type] is `HTTP` or
`HTTP_LDAP`.
|`switch_account_url`         |optional|
The link:config-gerrit.html#auth.switchAccountUrl[URL to switch
accounts].
|`register_url`               |optional|
The link:config-gerrit.html#auth.registerUrl[register URL]. Only set if
link:config-gerrit.html#auth.type[authentication type] is `LDAP`,
`LDAP_BIND` or `CUSTOM_EXTENSION`.
|`register_text`              |optional|
The link:config-gerrit.html#auth.registerText[register text]. Only set
if link:config-gerrit.html#auth.type[authentication type] is `LDAP`,
`LDAP_BIND` or `CUSTOM_EXTENSION`.
|`edit_full_name_url`         |optional|
The link:config-gerrit.html#auth.editFullNameUrl[URL to edit the full
name]. Only set if link:config-gerrit.html#auth.type[authentication
type] is `LDAP`, `LDAP_BIND` or `CUSTOM_EXTENSION`.
|`http_password_url`          |optional|
The link:config-gerrit.html#auth.httpPasswordUrl[URL to obtain an HTTP
password]. Only set if link:config-gerrit.html#auth.type[authentication
type] is `CUSTOM_EXTENSION`.
|`git_basic_auth_policy`      |optional|
The link:config-gerrit.html#auth.gitBasicAuthPolicy[policy] to authenticate
Git over HTTP and REST API requests when
link:config-gerrit.html#auth.type[authentication type] is `LDAP`,
`LDAP_BIND` or `OAUTH`. Can be `HTTP`, `LDAP`, `HTTP_LDAP` or `OAUTH`.
|`max_token_lifetime`         |optional|
The link:config-gerrit.html#auth.maxAuthTokenLifetime[maximum lifetime]
of authentication tokens.
|==========================================

[[cache-info]]
=== CacheInfo
The `CacheInfo` entity contains information about a cache.

[options="header",cols="1,^1,5"]
|==================================
|Field Name           ||Description
|`name`               |
not set if returned in a map where the cache name is used as map key|
The cache name. If the cache is defined by a plugin the cache name
includes the plugin name: "<plugin-name>-<cache-name>".
|`type`               ||
The type of the cache (`MEM`: in memory cache, `DISK`: disk cache).
|`entries`            ||
Information about the entries in the cache as a
link:#entries-info[EntriesInfo] entity.
|`average_get`        |optional|
The average duration of getting one entry from the cache. The value is
returned with a standard time unit abbreviation (`ns`: nanoseconds,
`us`: microseconds, `ms`: milliseconds, `s`: seconds).
|`hit_ratio`          ||
Information about the hit ratio as a link:#hit-ration-info[
HitRatioInfo] entity.
|==================================

[[cache-operation-input]]
=== CacheOperationInput
The `CacheOperationInput` entity contains information about an
operation that should be executed on caches.

[options="header",cols="1,^1,5"]
|==================================
|Field Name           ||Description
|`operation`          ||
The cache operation that should be executed:

`FLUSH_ALL`: Flushes all caches, except the `web_sessions` cache.

`FLUSH`: Flushes the specified caches.
|`caches`             |optional|
A list of cache names. This list defines the caches on which the
specified operation should be executed. Whether this list must be
specified depends on the operation being executed.
|==================================

[[capability-info]]
=== CapabilityInfo
The `CapabilityInfo` entity contains information about a capability.

[options="header",cols="1,6"]
|=================================
|Field Name           |Description
|`id`                 |capability ID
|`name`               |capability name
|=================================

[[change-config-info]]
=== ChangeConfigInfo
The `ChangeConfigInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#change[change]
section.

[options="header",cols="1,^1,5"]
|=============================
|Field Name           ||Description
|`allow_blame`        |not set if `false`|
link:config-gerrit.html#change.allowBlame[Whether blame on side by side diff is
allowed].
|`update_delay`       ||
link:config-gerrit.html#change.updateDelay[How often in seconds the web
interface should poll for updates to the currently open change].
|`submit_whole_topic` |not set if `false`|
link:config-gerrit.html#change.submitWholeTopic[A configuration if
the whole topic is submitted].
|`disable_private_changes` |not set if `false`|
Returns true if private changes are disabled.
|`mergeability_computation_behavior` ||
Value of the link:config-gerrit.html#change.mergeabilityComputationBehavior[
configuration parameter] that controls whether the mergeability bit in
link:rest-api-changes.html#change-info[ChangeInfo] will never be set and if the
bit is indexed.
|`conflicts_predicate_enabled`|not set if `false`|
link:config-gerrit.html#change.conflictsPredicateEnabled[Are conflicts enabled?].
|`allow_markdown_base64_images_in_comments`|not set if `false`|
link:config-gerrit.html#change.allowMarkdownBase64ImagesInComments[Are markdown base64 images in comments allowed?].
|=============================

[[change-index-config-info]]
=== ChangeIndexConfigInfo
The `ChangeIndexConfigInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#index.change[index.change]
section.

[options="header",cols="1,^1,5"]
|=============================
|Field Name           ||Description
|`index_mergeable`        |not set if `false`|
Value of the link:config-gerrit.html#index.change.indexMergeable[
configuration parameter] that controls whether the mergeability bit is
indexed (hence queryable using `is:mergeable`).
|=============================

[[check-account-external-ids-input]]
=== CheckAccountExternalIdsInput
The `CheckAccountExternalIdsInput` entity contains input for the
account external ID consistency check.

Currently this entity contains no fields.

[[check-account-external-ids-result-info]]
=== CheckAccountExternalIdsResultInfo
The `CheckAccountExternalIdsResultInfo` entity contains the result of
running the account external ID consistency check.

[options="header",cols="1,6"]
|======================
|Field Name|Description
|`problems`|A list of link:#consistency-problem-info[
ConsistencyProblemInfo] entities.
|======================

[[check-accounts-input]]
=== CheckAccountsInput
The `CheckAccountsInput` entity contains input for the account consistency
check.

Currently this entity contains no fields.

[[check-accounts-result-info]]
=== CheckAccountsResultInfo
The `CheckAccountsResultInfo` entity contains the result of running the
account consistency check.

[options="header",cols="1,6"]
|======================
|Field Name|Description
|`problems`|A list of link:#consistency-problem-info[
ConsistencyProblemInfo] entities.
|======================

[[check-groups-input]]
=== CheckGroupsInput
The `CheckGroupsInput` entity contains input for the group consistency
check.

Currently this entity contains no fields.

[[check-groups-result-info]]
=== CheckGroupsResultInfo
The `CheckGroupsResultInfo` entity contains the result of running the
group consistency check.

[options="header",cols="1,6"]
|======================
|Field Name|Description
|`problems`|A list of link:#consistency-problem-info[
ConsistencyProblemInfo] entities.
|======================

[[consistency-check-info]]
=== ConsistencyCheckInfo
The `ConsistencyCheckInfo` entity contains the results of running
consistency checks.

[options="header",cols="1,^1,5"]
|================================================
|Field Name                         ||Description
|`check_accounts_result`            |optional|
The result of running the account consistency check as a
link:#check-accounts-result-info[CheckAccountsResultInfo] entity.
|`check_account_external_ids_result`|optional|
The result of running the account external ID consistency check as a
link:#check-account-external-ids-result-info[
CheckAccountExternalIdsResultInfo] entity.
|`check_groups_result`              |optional|
The result of running the group consistency check as a
link:#check-groups-result-info[CheckGroupsResultInfo] entity.
|================================================

[[consistency-check-input]]
=== ConsistencyCheckInput
The `ConsistencyCheckInput` entity contains information about which
consistency checks should be run.

[options="header",cols="1,^1,5"]
|=========================================
|Field Name                  ||Description
|`check_accounts`            |optional|
Input for the account consistency check as
link:#check-accounts-input[CheckAccountsInput] entity.
|`check_account_external_ids`|optional|
Input for the account external ID consistency check as
link:#check-account-external-ids-input[CheckAccountExternalIdsInput]
entity.
|`check_groups`              |optional|
Input for the group consistency check as link:#check-groups-input[
CheckGroupsInput] entity.
|=========================================

[[consistency-problem-info]]
=== ConsistencyProblemInfo
The `ConsistencyProblemInfo` entity contains information about a
consistency problem.

[options="header",cols="1,6"]
|======================
|Field Name|Description
|`status`  |The status of the consistency problem. +
Possible values are `FATAL`, `ERROR` and `WARNING`.
|`message` |Message describing the consistency problem.
|======================

[[config-update-info]]
=== ConfigUpdateInfo
The entity describes the result of a reload of gerrit.config.

If a changed config value is missing from the `applied` and the `rejected`
lists there are no guarantees to whether they have or have not taken effect.

[options="header",cols="1,6"]
|======================
|Field Name|Description
|`applied` |A list of link:#config-update-entry-info[ConfigUpdateEntryInfos]
describing the applied configuration changes. +
Every config value change representation present in this list is guaranteed to
have taken effect.
|`rejected` |A list of link:#config-update-entry-info[ConfigUpdateEntryInfos]
describing the rejected configuration changes.  +
Every config value change representation present in this list is guaranteed not
to have taken effect.
|======================

[[config-update-entry-info]]
=== ConfigUpdateEntryInfo
The entity describes an updated config value.

[options="header",cols="1,6"]
|======================
|Field Name|Description
|`config_key` |The config key that contains the value.
|`old_value`  |The old config value. +
Missing if value was not previously configured.
|`new_value`  |The new config value, picked up after reload.
|======================

[[experiment-info]]
=== ExperimentInfo
The `ExperimentInfo` entity contains information about an experiment.

[options="header",cols="1,6"]
|============================
|Field Name |Description
|`enabled`  |Whether the experiment is enabled.
|============================

[[download-info]]
=== DownloadInfo
The `DownloadInfo` entity contains information about supported download
options.

[options="header",cols="1,6"]
|=======================
|Field Name |Description
|`schemes`  |
The supported download schemes as a map which maps the scheme name to a
of link:#download-scheme-info[DownloadSchemeInfo] entity.
|`archives` |
List of supported archive formats. Possible values are `tgz`, `tar`,
`tbz2` and `txz`.
|=======================

[[download-scheme-info]]
=== DownloadSchemeInfo
The `DownloadSchemeInfo` entity contains information about a supported
download scheme and its commands.

[options="header",cols="1,^1,5"]
|=================================
|Field Name          ||Description
|`url`               ||
The URL of the download scheme, where '${project}' is used as
placeholder for the project name.
|`description`       |optional|
An optional description of how the scheme works and maybe comparing
it to other schemes, explaining the pros and cons of each option.
|`is_auth_required`  |not set if `false`|
Whether this download scheme requires authentication.
|`is_auth_supported` |not set if `false`|
Whether this download scheme supports authentication.
|`commands`          ||
Download commands as a map which maps the command name to the download
command. In the download command '${project}' is used as
placeholder for the project name, and '${ref}' is used as
placeholder for the (change) ref.

Empty, if accessed anonymously and the download scheme requires
authentication.
|`clone_commands`    ||
Clone commands as a map which maps the command name to the clone
command. In the clone command '${project}' is used as
placeholder for the project name and '${project-base-name}' as name
for the project base name (e.g. for a project 'foo/bar' '${project}'
is a placeholder for 'foo/bar' and '${project-base-name}' is a
placeholder for 'bar').

Empty, if accessed anonymously and the download scheme requires
authentication.
|=================================

[[email-confirmation-input]]
=== EmailConfirmationInput
The `EmailConfirmationInput` entity contains information for confirming
an email address.

[options="header",cols="1,6"]
|=======================
|Field Name |Description
|`token`    |
The token that was sent by mail to a newly registered email address.
|=======================

[[entries-info]]
=== EntriesInfo
The `EntriesInfo` entity contains information about the entries in a
cache.

[options="header",cols="1,^1,5"]
|==================================
|Field Name ||Description
|`mem`      |optional|Number of cache entries that are held in memory.
|`disk`     |optional|Number of cache entries on the disk. For non-disk
caches this value is not set; for disk caches it is only set if there
are entries in the cache.
|`space`    |optional|
The space that is consumed by the cache on disk. The value is returned
with a unit abbreviation (`k`: kilobytes, `m`: megabytes,
`g`: gigabytes). Only set for disk caches.
|==================================

[[gerrit-info]]
=== GerritInfo
The `GerritInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#gerrit[gerrit] section.

[options="header",cols="1,^1,5"]
|=================================
|Field Name          ||Description
|`all_projects_name` ||
Name of the link:config-gerrit.html#gerrit.allProjects[root project].
|`all_users_name`    ||
Name of the link:config-gerrit.html#gerrit.allUsers[project in which
meta data of all users is stored].
|`doc_search`        ||
Whether documentation search is available.
|`doc_url`           |optional|
Custom base URL where Gerrit server documentation is located.
(Documentation may still be available at /Documentation relative to the
Gerrit base path even if this value is unset.)
|`edit_gpg_keys`     |not set if `false`|
Whether to enable the web UI for editing GPG keys.
|`project_state_predicate_enabled` ||
link:config-gerrit.html#gerrit.projectStatePredicateEnabled[Whether the instance supports filtering projects by state].
|`report_bug_url`    |optional|
link:config-gerrit.html#gerrit.reportBugUrl[URL to report bugs].
|`instance_id`       |optional|
link:config-gerrit.html#gerrit.instanceId[Short identifier for this Gerrit installation].
|`default_branch`       |optional|
link:config-gerrit.html#gerrit.defaultBranch[Name of the default branch to use on the project creation].
|=================================

[[groups-config-info]]
=== GroupsConfigInfo
The `GroupsConfigInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#groups[groups]
section.

[options="header",cols="1,6"]
|=============================
|Field Name            |Description
|`enable_delete_group`   |
link:config-gerrit.html#groups.enableDeleteGroup[gerrit.config].
|=============================

[[index-config-info]]
=== IndexConfigInfo
The `IndexConfigInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#index[index]
section.

[options="header",cols="1,^1,5"]
|=============================
|Field Name           ||Description
|`change`                  ||
Information about the configuration from the
link:config-gerrit.html#index.change[index.change] section as
link:#index.change[ChangeIndexConfigInfo] entity.
|=============================

[[hit-ration-info]]
=== HitRatioInfo
The `HitRatioInfo` entity contains information about the hit ratio of a
cache.

[options="header",cols="1,^1,5"]
|==================================
|Field Name ||Description
|`mem`      ||
Hit ratio for cache entries that are held in memory (0 \<= value \<= 100).
|`disk`     |optional|
Hit ratio for cache entries that are held on disk (0 \<= value \<= 100).
Only set for disk caches.
|==================================

[[index-changes-input]]
=== IndexChangesInput
The `IndexChangesInput` contains a list of change numbers of changes to index.

[options="header",cols="1,^2,4"]
|================================
|Field Name         ||Description
|`changes`   ||
List of link:rest-api-changes.html#change-id[change-ids]
|`delete_missing`  |optional|
Delete changes which are missing in NoteDb from the index. This can be used
to get rid of stale index entries. Possible values are `true` and `false`.
By default set to `false`.
|================================

[[jvm-summary-info]]
=== JvmSummaryInfo
The `JvmSummaryInfo` entity contains information about the JVM.

[options="header",cols="1,^1,5"]
|========================================
|Field Name                 ||Description
|`vm_vendor`                ||The vendor of the virtual machine.
|`vm_name`                  ||The name of the virtual machine.
|`vm_version`               ||The version of the virtual machine.
|`os_name`                  ||The name of the operating system.
|`os_version`               ||The version of the operating system.
|`os_arch`                  ||The architecture of the operating system.
|`user`                     ||The user that is running Gerrit.
|`host`                     |optional|
The host on which Gerrit is running.
|`current_working_directory`||The current working directory.
|`site`                     ||The path to the review site.
|========================================

[[mem-summary-info]]
=== MemSummaryInfo
The `MemSummaryInfo` entity contains information about the current
memory usage.

[options="header",cols="1,^1,5"]
|============================
|Field Name     ||Description
|`total`        ||
The total size of the memory. The value is returned with a unit
abbreviation (`k`: kilobytes, `m`: megabytes, `g`: gigabytes).
|`used`         ||
The size of used memory. The value is returned with a unit abbreviation
(`k`: kilobytes, `m`: megabytes, `g`: gigabytes).
|`free`         ||
The size of free memory. The value is returned with a unit abbreviation
(`k`: kilobytes, `m`: megabytes, `g`: gigabytes).
|`buffers`      ||
The size of memory used for JGit buffers. The value is returned with a
unit abbreviation (`k`: kilobytes, `m`: megabytes, `g`: gigabytes).
|`max`          ||
The maximal memory size. The value is returned with a unit abbreviation
(`k`: kilobytes, `m`: megabytes, `g`: gigabytes).
|`open_files`   |optional|
The number of open files.
|============================

[[metadata-info]]
=== MetadataInfo
The `MetadataInfo` entity contains metadata provided by plugins.

[options="header",cols="1,^2,4"]
|==========================
|Field Name   ||Description
|`name`       ||The metadata name. Not guaranteed to be unique, e.g. multiple
metadata entries with the same name may be returned.
|`value`      |optional|The metadata value.
|`description`|optional|A description of the metadata.
|`web_links`  |optional|A list of web links as
link:rest-api-changes.html#web-link-info[WebLinkInfo] entities.
|==========================

[[plugin-config-info]]
=== PluginConfigInfo
The `PluginConfigInfo` entity contains information about Gerrit
extensions by plugins.

[options="header",cols="1,^1,5"]
|===========================
|Field Name    ||Description
|`has_avatars` |not set if `false`|
Whether an avatar provider is registered.
|`js_resource_paths`||
A list of relative paths (strings). Each path points to a frontend plugin that
should be loaded, e.g. `plugins/codemirror_editor/static/codemirror_editor.js`.
|===========================

[[receive-info]]
=== ReceiveInfo
The `ReceiveInfo` entity contains information about the configuration
of git-receive-pack behavior on the server.

[options="header",cols="1,^1,5"]
|=======================================
|Field Name        ||Description
|`enableSignedPush`|optional|
Whether signed push validation support is enabled on the server; see the
link:config-gerrit.html#receive.certNonceSeed[global configuration] for
details.
|=======================================

[[version-info]]
=== VersionInfo
The `VersionInfo` entity contains information about the version of the
Gerrit server.

[options="header",cols="1,^1,5"]
|=======================================
|Field Name                ||Description
|`gerrit_version`          ||Gerrit server version
|`note_db_version`         ||NoteDb version
|`change_index_version`    ||Change index version
|`account_index_version`   ||Account index version
|`project_index_version`   ||Project index version
|`group_index_version`     ||Group index version
|=======================================

[[server-info]]
=== ServerInfo
The `ServerInfo` entity contains information about the configuration of
the Gerrit server.

[options="header",cols="1,^1,5"]
|=======================================
|Field Name                ||Description
|`accounts`                ||
Information about the configuration from the
link:config-gerrit.html#accounts[accounts] section as
link:#accounts-config-info[AccountsConfigInfo] entity.
|`auth`                    ||
Information about the authentication configuration as
link:#auth-info[AuthInfo] entity.
|`change`                  ||
Information about the configuration from the
link:config-gerrit.html#change[change] section as
link:#change-config-info[ChangeConfigInfo] entity.
|`download`                ||
Information about the configured download options as
link:#download-info[DownloadInfo] entity.
information about Gerrit
|`gerrit`                  ||
Information about the configuration from the
link:config-gerrit.html#gerrit[gerrit] section as link:#gerrit-info[
GerritInfo] entity.
|`groups`                ||
Information about the configuration from the
link:config-gerrit.html#groups[groups] section as
link:#groups-config-info[GroupsConfigInfo] entity.
|`index`                  ||
Information about the configuration from the
link:config-gerrit.html#index[index] section as link:#index[
IndexConfigInfo] entity.
|`note_db_enabled`         |not set if `false`|
Whether the NoteDb storage backend is fully enabled.
|`plugin`                  ||
Information about Gerrit extensions by plugins as
link:#plugin-config-info[PluginConfigInfo] entity.
|`receive`                 |optional|
Information about the receive-pack configuration as a
link:#receive-info[ReceiveInfo] entity.
|`sshd`                    |optional|
Information about the configuration from the
link:config-gerrit.html#sshd[sshd] section as link:#sshd-info[SshdInfo]
entity. Not set if SSHD is disabled.
|`suggest`                 ||
Information about the configuration from the
link:config-gerrit.html#suggest[suggest] section as link:#suggest-info[
SuggestInfo] entity.
|`user`                    ||
Information about the configuration from the
link:config-gerrit.html#user[user] section as link:#user-config-info[
UserConfigInfo] entity.
|`default_theme`           |optional|
URL to a default Gerrit UI theme plugin, if available.
Located in `/static/gerrit-theme.js` by default.
|`submit_requirement_dashboard_columns` ||
The list of submit requirement names that should be displayed as separate
columns in the dashboard. If empty, the default is to display all submit
requirements that are applicable for changes appearing in the dashboard.
|`dashboard_show_all_labels` |not set if `false`|
Whether to show all labels in the dashboard, even if they are not submit
requirements.
|`metadata`                ||
Optional server metadata as a list of link:#metadata-info[MetadataInfo]
entities. If and which metadata is provided depends on the Gerrit setup.
|=======================================

[[snapshot-index-input]]
=== SnapshotIndex.Input
The `SnapshotIndex.Input` entity contains the parameters used to create an
index snapshot.

[options="header",cols="1,^1,5"]
|=======================
|Field Name ||Description
|`id` | optional |
A string ID that will be used as the folder name containing the
snapshots. Defaults to current timestamp.
|=======================

[[sshd-info]]
=== SshdInfo
The `SshdInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#sshd[sshd]
section.

This entity doesn't contain any data, but the presence of this (empty)
entity in the link:#server-info[ServerInfo] entity means that SSHD is
enabled on the server.

[[suggest-info]]
=== SuggestInfo
The `SuggestInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#suggest[suggest]
section.

[options="header",cols="1,6"]
|=======================
|Field Name |Description
|`from`     |
The link:config-gerrit.html#suggest.from[number of characters] that a
user must have typed before suggestions are provided.
|=======================

[[summary-info]]
=== SummaryInfo
The `SummaryInfo` entity contains information about the current state
of the server.

[options="header",cols="1,^1,5"]
|============================
|Field Name     ||Description
|`task_summary` ||
Summary about current tasks as a link:#task-summary-info[
TaskSummaryInfo] entity.
|`mem_summary`  ||
Summary about current memory usage as a link:#mem-summary-info[
MemSummaryInfo] entity.
|`thread_summary`  ||
Summary about current threads as a link:#thread-summary-info[
ThreadSummaryInfo] entity.
|`jvm_summary`  |optional|
Summary about the JVM link:#jvm-summary-info[JvmSummaryInfo] entity.
Only set if the `jvm` option was set.
|============================

[[task-info]]
=== TaskInfo
The `TaskInfo` entity contains information about a task in a background
work queue.

[options="header",cols="1,^1,5"]
|====================================
|Field Name   ||Description
|`id`         ||The ID of the task.
|`state`      ||
The state of the task, can be `DONE`, `CANCELLED`, `RUNNING`, `READY`,
`SLEEPING` and `OTHER`.
|`start_time` ||The start time of the task.
|`delay`      ||The remaining delay of the task.
|`command`    ||The command of the task.
|`queue_name` ||The work queue the task is associated with.
|`remote_name`|optional|
The remote name. May only be set for tasks that are associated with a
project.
|`project_name`    |optional|The project the task is associated with.
|====================================

[[task-summary-info]]
=== TaskSummaryInfo
The `TaskSummaryInfo` entity contains information about the current
tasks.

[options="header",cols="1,^1,5"]
|============================
|Field Name     ||Description
|`total`        |optional|
Total number of current tasks.
|`running`      |optional|
Number of currently running tasks.
|`ready`        |optional|
Number of currently ready tasks.
|`sleeping`     |optional|
Number of currently sleeping tasks.
|============================

[[thread-summary-info]]
=== ThreadSummaryInfo
The `ThreadSummaryInfo` entity contains information about the current
threads.

[options="header",cols="1,6"]
|===========================
|Field Name     |Description
|`cpus`         |
The number of available processors.
|`threads`      |
The total number of current threads.
|`counts`       |
Detailed thread counts as a map that maps a thread kind to a map that
maps a thread state to the thread count. The thread kinds group the
counts by threads that have the same name prefix (`H2`, `HTTP`,
`IntraLineDiff`, `ReceiveCommits`, `SSH git-receive-pack`,
`SSH git-upload-pack`, `SSH-Interactive-Worker`, `SSH-Stream-Worker`,
`SshCommandStart`, `sshd-SshServer`). The counts for other threads are
available under the thread kind `Other`. Counts for the following thread
states can be included: `NEW`, `RUNNABLE`, `BLOCKED`, `WAITING`,
`TIMED_WAITING` and `TERMINATED`.
|===========================

[[top-menu-entry-info]]
=== TopMenuEntryInfo
The `TopMenuEntryInfo` entity contains information about a top menu
entry.

[options="header",cols="1,6"]
|=================================
|Field Name           |Description
|`name`               |Name of the top menu entry.
|`items`              |List of link:#top-menu-item-info[menu items].
|=================================

[[top-menu-item-info]]
=== TopMenuItemInfo
The `TopMenuItemInfo` entity contains information about a menu item in
a top menu entry.

[options="header",cols="1,^1,5"]
|========================
|Field Name ||Description
|`url`      ||The URL of the menu item link.
|`name`     ||The name of the menu item.
|`target`   ||Target attribute of the menu item link.
|`id`       |optional|The `id` attribute of the menu item link.
|========================

[[user-config-info]]
=== UserConfigInfo
The `UserConfigInfo` entity contains information about Gerrit
configuration from the link:config-gerrit.html#user[user] section.

[options="header",cols="1,6"]
|====================================
|Field Name              |Description
|`anonymous_coward_name` |
link:config-gerrit.html#user.anonymousCoward[Username] that is
displayed in the Gerrit Web UI and in e-mail notifications if the full
name of the user is not set.
|====================================

[[clean-changes-input]]
=== CleanChanges.Input
The `CleanChanges.Input` entity is being used to configure a run
of change cleanup.

[options="header",cols="1,^1,5"]
|=============================
|Field Name||Description
|`after`||Abandon all changes that weren't updated in the
timespan given here
|`if_mergeable`|default: `false`|Whether to also abandon changes
that are mergeable
|`message`|optional|Message to post to changes abandoned by the
cleanup
|=============================

[[migrate-passwords-to-tokens-input]]
=== MigratePasswordsToTokens.Input
The `MigratePasswordsToTokens.Input` entity is being used to configure the
migration of HTTP passwords to auth tokens.

[options="header",cols="1,^1,5"]
|=============================
|Field Name||Description
|`lifetime`||Lifetime of the migrated token.
|=============================

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

SEARCHBOX
---------
