2021-05-26 08:10:41 -04:00
---
stage: Manage
group: Compliance
info: "To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments"
type: reference, api
---
# External Status Checks API **(ULTIMATE)**
2021-07-07 05:08:35 -04:00
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/3869) in GitLab 14.0, disabled behind the `:ff_external_status_checks` feature flag.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/320783) in GitLab 14.1.
2021-05-26 08:10:41 -04:00
## List status checks for a merge request
For a single merge request, list the external status checks that apply to it and their status.
```plaintext
GET /projects/:id/merge_requests/:merge_request_iid/status_checks
```
**Parameters:**
| Attribute | Type | Required | Description |
| ------------------------ | ------- | -------- | -------------------------- |
| `id` | integer | yes | ID of a project |
| `merge_request_iid` | integer | yes | IID of a merge request |
```json
[
{
"id": 2,
"name": "Rule 1",
"external_url": "https://gitlab.com/test-endpoint",
2022-02-01 22:17:34 -05:00
"status": "pass"
2021-05-26 08:10:41 -04:00
},
{
"id": 1,
"name": "Rule 2",
"external_url": "https://gitlab.com/test-endpoint-2",
"status": "pending"
}
]
```
2021-08-23 20:11:18 -04:00
## Set status of an external status check
2021-05-26 08:10:41 -04:00
2022-03-17 05:07:30 -04:00
> - Introduced in GitLab 14.9, `passed` status to pass external status checks. Introduced [with a flag](../administration/feature_flags.md) named `status_checks_add_status_field`. Disabled by default.
> - Introduced in GitLab 14.9, `failed` status to fail external status checks. Introduced [with a flag](../administration/feature_flags.md) named `status_checks_add_status_field`. Disabled by default.
2022-03-15 05:07:33 -04:00
> - `pass` status to pass checks is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/339039) in GitLab 14.9. Replaced with `passed`.
2022-03-17 05:07:30 -04:00
FLAG:
On self-managed GitLab, by default setting `passed` instead of `pass` is unavailable. Also, setting `failed` is unavailable by default. To support
setting `passed` and `failed` instead of only `pass` , ask an administrator to [enable the feature flag ](../administration/feature_flags.md ) named
`status_checks_add_status_field` . On GitLab.com, this feature is not available.
2021-08-23 20:11:18 -04:00
For a single merge request, use the API to inform GitLab that a merge request has passed a check by an external service.
2022-03-17 05:07:30 -04:00
To set the status of an external check, the personal access token used must belong to a user with at least the Developer role on the target project of the merge request.
2021-05-26 08:10:41 -04:00
2022-01-31 19:14:06 -05:00
Execute this API call as any user with rights to approve the merge request itself.
2021-05-26 08:10:41 -04:00
```plaintext
POST /projects/:id/merge_requests/:merge_request_iid/status_check_responses
```
**Parameters:**
2022-03-15 05:07:33 -04:00
| Attribute | Type | Required | Description |
| -------------------------- | ------- | -------- | ---------------------------------------------------------------------------- |
| `id` | integer | yes | ID of a project |
| `merge_request_iid` | integer | yes | IID of a merge request |
| `sha` | string | yes | SHA at `HEAD` of the source branch |
| `external_status_check_id` | integer | yes | ID of an external status check |
2022-03-17 05:07:30 -04:00
| `status` | string | no | Set to `passed` to pass the check or `failed` to fail it (GitLab 14.9 and later with feature flag `status_checks_add_status_field` enabled) |
| `status` | string | no | Set to `pass` to pass the check (GitLab 14.0 to GitLab 14.8, and GitLab 14.9 and later with feature flag `status_checks_add_status_field` disabled) |
2021-05-26 08:10:41 -04:00
NOTE:
`sha` must be the SHA at the `HEAD` of the merge request's source branch.
2021-09-09 08:09:09 -04:00
## Get project external status checks
2021-06-14 14:10:28 -04:00
You can request information about a project's external status checks using the following endpoint:
```plaintext
GET /projects/:id/external_status_checks
```
**Parameters:**
| Attribute | Type | Required | Description |
|---------------------|---------|----------|---------------------|
2021-06-17 05:09:53 -04:00
| `id` | integer | yes | ID of a project |
2021-06-14 14:10:28 -04:00
```json
[
{
"id": 1,
"name": "Compliance Check",
"project_id": 6,
"external_url": "https://gitlab.com/example/test.json",
"protected_branches": [
{
"id": 14,
"project_id": 6,
"name": "master",
"created_at": "2020-10-12T14:04:50.787Z",
"updated_at": "2020-10-12T14:04:50.787Z",
"code_owner_approval_required": false
}
]
}
]
```
2021-09-09 08:09:09 -04:00
## Create external status check
2021-06-14 14:10:28 -04:00
You can create a new external status check for a project using the following endpoint:
```plaintext
POST /projects/:id/external_status_checks
```
2021-06-30 20:08:17 -04:00
WARNING:
External status checks send information about all applicable merge requests to the
defined external service. This includes confidential merge requests.
2021-06-17 05:09:53 -04:00
| Attribute | Type | Required | Description |
|------------------------|------------------|----------|------------------------------------------------|
| `id` | integer | yes | ID of a project |
| `name` | string | yes | Display name of status check |
| `external_url` | string | yes | URL of status check resource |
| `protected_branch_ids` | `array<Integer>` | no | IDs of protected branches to scope the rule by |
2021-06-14 14:10:28 -04:00
2021-09-09 08:09:09 -04:00
## Delete external status check
2021-06-14 14:10:28 -04:00
You can delete an external status check for a project using the following endpoint:
```plaintext
DELETE /projects/:id/external_status_checks/:check_id
```
2021-06-17 05:09:53 -04:00
| Attribute | Type | Required | Description |
|------------------------|----------------|----------|-----------------------|
| `rule_id` | integer | yes | ID of an status check |
| `id` | integer | yes | ID of a project |
2021-06-14 14:10:28 -04:00
2021-09-09 08:09:09 -04:00
## Update external status check
2021-06-14 14:10:28 -04:00
You can update an existing external status check for a project using the following endpoint:
```plaintext
PUT /projects/:id/external_status_checks/:check_id
```
2021-06-17 05:09:53 -04:00
| Attribute | Type | Required | Description |
|------------------------|------------------|----------|------------------------------------------------|
| `id` | integer | yes | ID of a project |
| `rule_id` | integer | yes | ID of an external status check |
| `name` | string | no | Display name of status check |
| `external_url` | string | no | URL of external status check resource |
| `protected_branch_ids` | `array<Integer>` | no | IDs of protected branches to scope the rule by |
2021-06-14 14:10:28 -04:00
2021-12-01 19:17:32 -05:00
## Related topics
2021-06-15 08:10:11 -04:00
2021-06-17 05:09:53 -04:00
- [External status checks ](../user/project/merge_requests/status_checks.md ).