# /changes/`id`/revisions/`id`/checks/ REST API

This page describes the check-related REST endpoints that are added by the
@PLUGIN@ plugin.

Please also take note of the general information on the
[REST API](../../../Documentation/rest-api.html).

## <a id="check-endpoints"> Check Endpoints

### <a id="list-checks"> List Checks
_'GET /changes/[\{change-id\}](../../../Documentation/rest-api-changes.html#change-id)/revisions/[\{revision-id\}](../../../Documentation/rest-api-changes.html#revision-id)/checks'_

Retrieves all checks for a given revision and change.

Additional fields can be obtained by adding [`o` parameters](#query-options).

#### Request

```
  GET /changes/1/revisions/1/checks HTTP/1.0
```

As response a list of [CheckInfo](#check-info) entities is returned.
Returns checks for checkers regardless of their state (also for `DISABLED`
checkers).

#### Response

```
  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8
  )]}'
  [
    {
      "repository": "test-repo",
      "change_number": 1,
      "patch_set_id": 1,
      "checker_uuid": "test:my-checker",
      "state": "NOT_STARTED",
      "url": "https://foo.corp.com/test-checker/results/123",
      "created": "2019-01-31 09:59:32.126000000",
      "updated": "2019-01-31 09:59:32.126000000"
    },
    {
      "repository": "test-repo",
      "change_number": 1,
      "patch_set_id": 1,
      "checker_uuid": "foo:foo-checker",
      "state": "FINISHED",
      "created": "2019-01-31 09:59:32.126000000",
      "updated": "2019-01-31 09:59:32.126000000"
    }
   ]
```

### <a id="get-check"> Get Check
_'GET /changes/[\{change-id\}](../../../Documentation/rest-api-changes.html#change-id)/revisions/[\{revision-id\}](../../../Documentation/rest-api-changes.html#revision-id)/checks/[\{checker-id\}](./rest-api-checkers.md#checker-id)'_

Retrieves a check.

Returns a check regardless of the state that the checker is in (also for
`DISABLED` checkers).

Additional fields can be obtained by adding [`o` parameters](#query-options).

#### Request

```
  GET /changes/1/revisions/1/checks/test:my-checker HTTP/1.0
```

As response a [CheckInfo](#check-info) entity is returned that describes the
check.

#### Response

```
  HTTP/1.1 200 OK
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8
  )]}'
  {
    "repository": "test-repo",
    "change_number": 1,
    "patch_set_id": 1,
    "checker_uuid": "test:my-checker",
    "state": "NOT_STARTED",
    "url": "https://foo.corp.com/test-checker/results/123",
    "created": "2019-01-31 09:59:32.126000000",
    "updated": "2019-01-31 09:59:32.126000000"
  }
```

### <a id="create-check"> Create Check
_'POST /changes/1/revisions/1/checks/'_

Creates a new check.

In the request body the data for the checker must be provided as a
[CheckInput](#check-input) entity.

Note that only users with the [Administrate
Checkers](./rest-api-checkers.md#access-control.md#capability_administrateCheckers)
global capability are permitted to create check.

#### Request

```
  POST /changes/1/revisions/1/checks/ HTTP/1.0
  Content-Type: application/json; charset=UTF-8
  {
    "checker_uuid": "test:my-checker",
    "state": "RUNNING",
    "url": "https://foo.corp.com/test-checker/results/123",
    "started": "2019-01-31 09:59:32.126000000"
  }
```

As response the [CheckInfo](#check-info) entity is returned that describes
the created check.

#### Response

```
  HTTP/1.1 201 CREATED
  Content-Disposition: attachment
  Content-Type: application/json; charset=UTF-8
  )]}'
  {
    "repository": "test-repo",
    "change_number": 1,
    "patch_set_id": 1,
    "checker_uuid": "test:my-checker",
    "state": "RUNNING",
    "url": "https://foo.corp.com/test-checker/results/123",
    "started": "2019-01-31 09:59:32.126000000",
    "created": "2019-01-31 09:59:32.126000000",
    "updated": "2019-01-31 09:59:32.126000000"
  }
```

### <a id="update-check"> Update Check
_'POST /changes/1/revisions/1/checks/'_

_'POST /changes/1/revisions/1/checks/test:my-checker'_

Updates a check. The semantics are the same as for [CreateCheck](#create-check).

This REST endpoint supports partial updates of the checker property set. Only
properties that are set in the [CheckInput](#check-input) entity are updated.
Properties that are not set in the input (or that have `null` as value) are not
touched.

If the [checker-id](./rest-api-checkers.md#checker-id) is provided as part of
the URL, it must either match the value provided in the request body via
[CheckInput](#check-input) or the value in the request body is omitted.

### <a id="rerun-check"> Rerun Check

_'POST /changes/1/revisions/1/checks/test:my-checker/rerun'_

Reruns a check. As response the [CheckInfo](#check-info) entity is returned that
describes the created check.

Notification options may be specified as [RerunInput](#rerun-input) entity in
the request body.

This REST endpoint supports rerunning a check. It also resets all relevant check
fields such as `message`, `url`, `started` and `finished`.

## <a id="json-entities"> JSON Entities

### <a id="check-info"> CheckInfo
The `CheckInfo` entity describes a check.

| Field Name            |          | Description |
| --------------------- | -------- | ----------- |
| `repository`          |          | The repository name that this check applies to.
| `change_number`       |          | The change number that this check applies to.
| `patch_set_id`        |          | The patch set that this check applies to.
| `checker_uuid`        |          | The [UUID](./rest-api-checkers.md#checker-id) of the checker that reported this check.
| `state`               |          | The state as string-serialized form of [CheckState](#check-state)
| `message`             | optional | Short message explaining the check state. Size limit is 10k by default, configured via plugin.checks.messageSizeLimit.
| `url`                 | optional | A fully-qualified URL pointing to the result of the check on the checker's infrastructure.
| `started`             | optional | The [timestamp](../../../Documentation/rest-api.html#timestamp) of when the check started processing.
| `finished`            | optional | The [timestamp](../../../Documentation/rest-api.html#timestamp) of when the check finished processing.
| `created`             |          | The [timestamp](../../../Documentation/rest-api.html#timestamp) of when the check was created.
| `updated`             |          | The [timestamp](../../../Documentation/rest-api.html#timestamp) of when the check was last updated.
| `checker_name`        | optional | The name of the checker that produced this check.<br />Only set if [checker details](#option-checker) are requested.
| `checker_status`      | optional | The [status](rest-api-checkers.md#checker-info) of the checker that produced this check.<br />Only set if [checker details](#option-checker) are requested.
| `blocking`            | optional | Set of [blocking conditions](rest-api-checkers.md#blocking-conditions) that apply to this checker.<br />Only set if [checker details](#option-checker) are requested.
| `checker_description` | optional | The description of the checker that reported this check.
| `submit_impact`       | optional | The [CheckSubmitImpactInfo](#check-submit-impact-info) that describes a check's impact on the submission of the change.<br />Only set if [checker details](#option-checker) are requested.

### <a id="check-input"> CheckInput
The `CheckInput` entity contains information for creating or updating a check.

| Field Name      |          | Description |
| --------------- | -------- | ----------- |
| `checker_uuid`  | optional | The [UUID](#checker-id) of the checker. Must be specified for check creation. Optional only if updating a check and referencing the checker using the [UUID](./rest-api-checkers.md#checker-id) in the URL.
| `state`         | optional | The state as string-serialized form of [CheckState](#check-state)
| `message`       | optional | Short message explaining the check state.
| `url`           | optional | A fully-qualified URL pointing to the result of the check on the checker's infrastructure.
| `started`       | optional | The [timestamp](../../../Documentation/rest-api.html#timestamp) of when the check started processing.
| `finished`      | optional | The [timestamp](../../../Documentation/rest-api.html#timestamp) of when the check finished processing.
| `notify`        | optional | Notify handling that defines to whom email notifications should be sent when the combined check state changes due to posting this check. Allowed values are `NONE`, `OWNER`, `OWNER_REVIEWERS` and `ALL`. If not set, the default is `ALL` if the combined check state is updated to either `SUCCESSFUL` or `NOT_RELEVANT`, otherwise the default is `OWNER`. Regardless of this setting there are no email notifications for posting checks on non-current patch sets.
| `notify_details`| optional | Additional information about whom to notify when the combined check state changes due to posting this check as a map of recipient type to [NotifyInfo](../../../Documentation/rest-api-changes.html#notify-info) entity. Regardless of this setting there are no email notifications for posting checks on non-current patch sets.

### <a id="check-submit-impact-info"> CheckSubmitImpactInfo
The `CheckSubmitImpactInfo` entity describes a check's impact on the submission of the change.

| Field Name            |          | Description |
| --------------------- | -------- | ----------- |
| `required`            |          | When set, that check blocks change submission until it's in appropriate non-blocking state.

### <a id="rerun-input"> RerunInput
The `RerunInput` entity contains information for rerunning a check.

| Field Name      |          | Description |
| --------------- | -------- | ----------- |
| `notify`        | optional | Notify handling that defines to whom email notifications should be sent when the combined check state changes due to rerunning this check. Allowed values are `NONE`, `OWNER`, `OWNER_REVIEWERS` and `ALL`. If not set, the default is `OWNER`. Regardless of this setting there are no email notifications for rerunning checks on non-current patch sets.
| `notify_details`| optional | Additional information about whom to notify when the combined check state changes due to rerunning this check as a map of recipient type to [NotifyInfo](../../../Documentation/rest-api-changes.html#notify-info) entity. Regardless of this setting there are no email notifications for rerunning checks on non-current patch sets.

### <a id="check-state"> CheckState (enum)
The `CheckState` enum can have the following values: `NOT_STARTED`, `FAILED`,
`SCHEDULED`, `RUNNING`, `SUCCESSFUL` and `NOT_RELEVANT`.

## <a id="query-options"> Options

The following query options are supported in the `o` field of certain requests:

* <a id="option-checker"></a> `CHECKER`: Include details from the configuration of
  the checker that produced this check.
