2017-09-10 17:25:29 +05:30
# Merge requests API
Every API call to merge requests must be authenticated.
2014-09-02 18:07:02 +05:30
## List merge requests
2017-09-10 17:25:29 +05:30
> [Introduced][ce-13060] in GitLab 9.5.
Get all merge requests the authenticated user has access to. By
default it returns only merge requests created by the current user. To
get all merge requests, use parameter `scope=all` .
The `state` parameter can be used to get only merge requests with a
2018-11-08 19:23:39 +05:30
given state (`opened`, `closed` , `locked` , or `merged` ) or all of them (`all`). It should be noted that when searching by `locked` it will mostly return no results as it is a short-lived, transitional state.
2017-09-10 17:25:29 +05:30
The pagination parameters `page` and `per_page` can be used to
restrict the list of merge requests.
```
GET /merge_requests
GET /merge_requests?state=opened
GET /merge_requests?state=all
GET /merge_requests?milestone=release
GET /merge_requests?labels=bug,reproduced
GET /merge_requests?author_id=5
2018-03-17 18:26:18 +05:30
GET /merge_requests?my_reaction_emoji=star
2018-11-08 19:23:39 +05:30
GET /merge_requests?scope=assigned_to_me
2019-03-02 22:35:43 +05:30
GET /merge_requests?search=foo& in=title
2017-09-10 17:25:29 +05:30
```
Parameters:
2018-03-17 18:26:18 +05:30
| Attribute | Type | Required | Description |
| ------------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------------------------- |
2018-12-13 13:39:08 +05:30
| `state` | string | no | Return all merge requests or just those that are `opened` , `closed` , `locked` , or `merged` |
2018-03-17 18:26:18 +05:30
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
2018-12-13 13:39:08 +05:30
| `milestone` | string | no | Return merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. |
2018-03-17 18:26:18 +05:30
| `view` | string | no | If `simple` , returns the `iid` , URL, title, description, and basic state of merge request |
2019-02-15 15:39:39 +05:30
| `labels` | string | no | Return merge requests matching a comma separated list of labels. `None` lists all merge requests with no labels. `Any` lists all merge requests with at least one label. `No+Label` (Deprecated) lists all merge requests with no labels. Predefined names are case-insensitive. |
2018-03-27 19:54:05 +05:30
| `created_after` | datetime | no | Return merge requests created on or after the given time |
| `created_before` | datetime | no | Return merge requests created on or before the given time |
| `updated_after` | datetime | no | Return merge requests updated on or after the given time |
| `updated_before` | datetime | no | Return merge requests updated on or before the given time |
2018-11-08 19:23:39 +05:30
| `scope` | string | no | Return merge requests for the given scope: `created_by_me` , `assigned_to_me` or `all` . Defaults to `created_by_me` < br > For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead. |
| `author_id` | integer | no | Returns merge requests created by the given user `id` . Combine with `scope=all` or `scope=assigned_to_me` |
2018-12-13 13:39:08 +05:30
| `assignee_id` | integer | no | Returns merge requests assigned to the given user `id` . `None` returns unassigned merge requests. `Any` returns merge requests with an assignee. |
| `my_reaction_emoji` | string | no | Return merge requests reacted by the authenticated user by the given `emoji` . `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ |
2018-03-27 19:54:05 +05:30
| `source_branch` | string | no | Return merge requests with the given source branch |
| `target_branch` | string | no | Return merge requests with the given target branch |
2018-03-17 18:26:18 +05:30
| `search` | string | no | Search merge requests against their `title` and `description` |
2019-03-02 22:35:43 +05:30
| `in` | string | no | Modify the scope of the `search` attribute. `title` , `description` , or a string joining them with comma. Default is `title,description` |
2018-12-13 13:39:08 +05:30
| `wip` | string | no | Filter merge requests against their `wip` status. `yes` to return *only* WIP merge requests, `no` to return *non* WIP merge requests |
2017-09-10 17:25:29 +05:30
```json
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
2018-03-17 18:26:18 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
2018-12-05 23:21:45 +05:30
"target_branch": "master",
"source_branch": "test1",
2017-09-10 17:25:29 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2017-09-10 17:25:29 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2017-09-10 17:25:29 +05:30
},
"assignee": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2017-09-10 17:25:29 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2017-09-10 17:25:29 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2017-09-10 17:25:29 +05:30
"source_project_id": 2,
"target_project_id": 3,
2018-12-05 23:21:45 +05:30
"labels": [
"Community contribution",
"Manage"
],
2017-09-10 17:25:29 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 3,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2017-09-10 17:25:29 +05:30
},
"merge_when_pipeline_succeeds": true,
"merge_status": "can_be_merged",
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
"user_notes_count": 1,
2018-12-05 23:21:45 +05:30
"discussion_locked": null,
2017-09-10 17:25:29 +05:30
"should_remove_source_branch": true,
"force_remove_source_branch": false,
2018-12-05 23:21:45 +05:30
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-03-17 18:26:18 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-12-05 23:21:45 +05:30
},
2019-09-04 21:01:54 +05:30
"squash": false,
"task_completion_status":{
"count":0,
"completed_count":0
}
2017-09-10 17:25:29 +05:30
}
]
```
## List project merge requests
2016-04-02 18:10:28 +05:30
Get all merge requests for this project.
2018-11-08 19:23:39 +05:30
The `state` parameter can be used to get only merge requests with a given state (`opened`, `closed` , `locked` , or `merged` ) or all of them (`all`).
2016-01-14 18:37:52 +05:30
The pagination parameters `page` and `per_page` can be used to restrict the list of merge requests.
2014-09-02 18:07:02 +05:30
```
GET /projects/:id/merge_requests
GET /projects/:id/merge_requests?state=opened
GET /projects/:id/merge_requests?state=all
2017-08-17 22:00:37 +05:30
GET /projects/:id/merge_requests?iids[]=42& iids[]=43
GET /projects/:id/merge_requests?milestone=release
GET /projects/:id/merge_requests?labels=bug,reproduced
2018-03-17 18:26:18 +05:30
GET /projects/:id/merge_requests?my_reaction_emoji=star
2014-09-02 18:07:02 +05:30
```
2018-03-17 18:26:18 +05:30
`project_id` represents the ID of the project where the MR resides.
`project_id` will always equal `target_project_id` .
In the case of a merge request from the same project,
`source_project_id` , `target_project_id` and `project_id`
will be the same. In the case of a merge request from a fork,
`target_project_id` and `project_id` will be the same and
`source_project_id` will be the fork project's ID.
2014-09-02 18:07:02 +05:30
Parameters:
2018-03-17 18:26:18 +05:30
| Attribute | Type | Required | Description |
| ------------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `id` | integer | yes | The ID of a project |
| `iids[]` | Array[integer] | no | Return the request having the given `iid` |
2018-12-13 13:39:08 +05:30
| `state` | string | no | Return all merge requests or just those that are `opened` , `closed` , `locked` , or `merged` |
2018-03-17 18:26:18 +05:30
| `order_by` | string | no | Return requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return requests sorted in `asc` or `desc` order. Default is `desc` |
2018-12-13 13:39:08 +05:30
| `milestone` | string | no | Return merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. |
2018-03-17 18:26:18 +05:30
| `view` | string | no | If `simple` , returns the `iid` , URL, title, description, and basic state of merge request |
2019-02-15 15:39:39 +05:30
| `labels` | string | no | Return merge requests matching a comma separated list of labels. `None` lists all merge requests with no labels. `Any` lists all merge requests with at least one label. `No+Label` (Deprecated) lists all merge requests with no labels. Predefined names are case-insensitive. |
2018-03-27 19:54:05 +05:30
| `created_after` | datetime | no | Return merge requests created on or after the given time |
| `created_before` | datetime | no | Return merge requests created on or before the given time |
| `updated_after` | datetime | no | Return merge requests updated on or after the given time |
| `updated_before` | datetime | no | Return merge requests updated on or before the given time |
2018-11-08 19:23:39 +05:30
| `scope` | string | no | Return merge requests for the given scope: `created_by_me` , `assigned_to_me` or `all` .< br > For versions before 11.0, use the now deprecated `created-by-me` or `assigned-to-me` scopes instead.< br > _([Introduced][ce-13060] in GitLab 9.5. [Changed to snake_case][ce-18935] in GitLab 11.0)_ |
2018-03-17 18:26:18 +05:30
| `author_id` | integer | no | Returns merge requests created by the given user `id` _([Introduced][ce-13060] in GitLab 9.5)_ |
2018-12-13 13:39:08 +05:30
| `assignee_id` | integer | no | Returns merge requests assigned to the given user `id` . `None` returns unassigned merge requests. `Any` returns merge requests with an assignee. _([Introduced][ce-13060] in GitLab 9.5)_ |
| `my_reaction_emoji` | string | no | Return merge requests reacted by the authenticated user by the given `emoji` . `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ |
| `source_branch` | string | no | Return merge requests with the given source branch |
| `target_branch` | string | no | Return merge requests with the given target branch |
2018-03-17 18:26:18 +05:30
| `search` | string | no | Search merge requests against their `title` and `description` |
2019-03-02 22:35:43 +05:30
| `wip` | string | no | Filter merge requests against their `wip` status. `yes` to return *only* WIP merge requests, `no` to return *non* WIP merge requests |
2014-09-02 18:07:02 +05:30
```json
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
2018-03-17 18:26:18 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
2018-12-05 23:21:45 +05:30
"target_branch": "master",
"source_branch": "test1",
2014-09-02 18:07:02 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
"assignee": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2018-11-08 19:23:39 +05:30
"source_project_id": 2,
"target_project_id": 3,
2018-12-05 23:21:45 +05:30
"labels": [
"Community contribution",
"Manage"
],
2018-11-08 19:23:39 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 3,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2018-11-08 19:23:39 +05:30
},
"merge_when_pipeline_succeeds": true,
"merge_status": "can_be_merged",
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
"user_notes_count": 1,
2018-12-05 23:21:45 +05:30
"discussion_locked": null,
2018-11-08 19:23:39 +05:30
"should_remove_source_branch": true,
"force_remove_source_branch": false,
2018-12-05 23:21:45 +05:30
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-11-08 19:23:39 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-12-05 23:21:45 +05:30
},
2019-09-04 21:01:54 +05:30
"squash": false,
"task_completion_status":{
"count":0,
"completed_count":0
}
2018-11-08 19:23:39 +05:30
}
]
```
## List group merge requests
Get all merge requests for this group and its subgroups.
The `state` parameter can be used to get only merge requests with a given state (`opened`, `closed` , `locked` , or `merged` ) or all of them (`all`).
The pagination parameters `page` and `per_page` can be used to restrict the list of merge requests.
```
GET /groups/:id/merge_requests
GET /groups/:id/merge_requests?state=opened
GET /groups/:id/merge_requests?state=all
GET /groups/:id/merge_requests?milestone=release
GET /groups/:id/merge_requests?labels=bug,reproduced
GET /groups/:id/merge_requests?my_reaction_emoji=star
```
`group_id` represents the ID of the group which contains the project where the MR resides.
Parameters:
| Attribute | Type | Required | Description |
| ------------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
2018-12-13 13:39:08 +05:30
| `id` | integer | yes | The ID of a group |
| `state` | string | no | Return all merge requests or just those that are `opened` , `closed` , `locked` , or `merged` |
| `order_by` | string | no | Return merge requests ordered by `created_at` or `updated_at` fields. Default is `created_at` |
| `sort` | string | no | Return merge requests sorted in `asc` or `desc` order. Default is `desc` |
| `milestone` | string | no | Return merge requests for a specific milestone. `None` returns merge requests with no milestone. `Any` returns merge requests that have an assigned milestone. |
2018-11-08 19:23:39 +05:30
| `view` | string | no | If `simple` , returns the `iid` , URL, title, description, and basic state of merge request |
2019-02-15 15:39:39 +05:30
| `labels` | string | no | Return merge requests matching a comma separated list of labels. `None` lists all merge requests with no labels. `Any` lists all merge requests with at least one label. `No+Label` (Deprecated) lists all merge requests with no labels. Predefined names are case-insensitive. |
2018-11-08 19:23:39 +05:30
| `created_after` | datetime | no | Return merge requests created on or after the given time |
| `created_before` | datetime | no | Return merge requests created on or before the given time |
| `updated_after` | datetime | no | Return merge requests updated on or after the given time |
| `updated_before` | datetime | no | Return merge requests updated on or before the given time |
| `scope` | string | no | Return merge requests for the given scope: `created_by_me` , `assigned_to_me` or `all` .< br > |
| `author_id` | integer | no | Returns merge requests created by the given user `id` _([Introduced][ce-13060] in GitLab 9.5)_ |
2018-12-13 13:39:08 +05:30
| `assignee_id` | integer | no | Returns merge requests assigned to the given user `id` . `None` returns unassigned merge requests. `Any` returns merge requests with an assignee. _([Introduced][ce-13060] in GitLab 9.5)_ |
| `my_reaction_emoji` | string | no | Return merge requests reacted by the authenticated user by the given `emoji` . `None` returns issues not given a reaction. `Any` returns issues given at least one reaction. _([Introduced][ce-14016] in GitLab 10.0)_ |
| `source_branch` | string | no | Return merge requests with the given source branch |
| `target_branch` | string | no | Return merge requests with the given target branch |
2018-11-08 19:23:39 +05:30
| `search` | string | no | Search merge requests against their `title` and `description` |
```json
[
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
2018-11-08 19:23:39 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
2018-12-05 23:21:45 +05:30
"target_branch": "master",
"source_branch": "test1",
2018-11-08 19:23:39 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2018-11-08 19:23:39 +05:30
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
},
"assignee": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2018-11-08 19:23:39 +05:30
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2016-08-24 12:49:21 +05:30
"source_project_id": 2,
"target_project_id": 3,
2018-12-05 23:21:45 +05:30
"labels": [
"Community contribution",
"Manage"
],
2016-04-02 18:10:28 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 3,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-10-22",
"start_date": "2018-09-08",
"web_url": "gitlab.example.com/my-group/my-project/milestones/1"
2016-04-02 18:10:28 +05:30
},
2017-08-17 22:00:37 +05:30
"merge_when_pipeline_succeeds": true,
2016-06-02 11:05:42 +05:30
"merge_status": "can_be_merged",
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
2016-08-24 12:49:21 +05:30
"user_notes_count": 1,
2018-12-05 23:21:45 +05:30
"discussion_locked": null,
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
2016-09-29 09:46:39 +05:30
"force_remove_source_branch": false,
2018-12-05 23:21:45 +05:30
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-03-17 18:26:18 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-12-05 23:21:45 +05:30
},
2019-09-04 21:01:54 +05:30
"squash": false,
"task_completion_status":{
"count":0,
"completed_count":0
}
2014-09-02 18:07:02 +05:30
}
]
```
## Get single MR
2016-01-14 18:37:52 +05:30
Shows information about a single merge request.
2014-09-02 18:07:02 +05:30
2018-11-18 11:00:15 +05:30
**Note**: the `changes_count` value in the response is a string, not an
integer. This is because when an MR has too many changes to display and store,
it will be capped at 1,000. In that case, the API will return the string
`"1000+"` for the changes count.
2014-09-02 18:07:02 +05:30
```
2017-08-17 22:00:37 +05:30
GET /projects/:id/merge_requests/:merge_request_iid
2014-09-02 18:07:02 +05:30
```
Parameters:
2017-08-17 22:00:37 +05:30
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
- `merge_request_iid` (required) - The internal ID of the merge request
2018-11-08 19:23:39 +05:30
- `render_html` (optional) - If `true` response includes rendered HTML for title and description
2018-11-20 20:47:30 +05:30
- `include_diverged_commits_count` (optional) - If `true` response includes the commits behind the target branch
2019-02-15 15:39:39 +05:30
- `include_rebase_in_progress` (optional) - If `true` response includes whether a rebase operation is in progress
2014-09-02 18:07:02 +05:30
```json
{
"id": 1,
"iid": 1,
"project_id": 3,
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
2018-03-17 18:26:18 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
2018-12-05 23:21:45 +05:30
"target_branch": "master",
"source_branch": "test1",
2014-09-02 18:07:02 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
2018-12-05 23:21:45 +05:30
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
2019-07-07 11:18:12 +05:30
"user" : {
"can_merge" : false
}
2014-09-02 18:07:02 +05:30
"assignee": {
2018-12-05 23:21:45 +05:30
"id": 1,
"name": "Administrator",
"username": "admin",
"state": "active",
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2016-08-24 12:49:21 +05:30
"source_project_id": 2,
"target_project_id": 3,
2018-12-05 23:21:45 +05:30
"labels": [
"Community contribution",
"Manage"
],
2016-04-02 18:10:28 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
"project_id": 3,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2016-04-02 18:10:28 +05:30
},
2017-08-17 22:00:37 +05:30
"merge_when_pipeline_succeeds": true,
2016-06-02 11:05:42 +05:30
"merge_status": "can_be_merged",
2019-02-15 15:39:39 +05:30
"merge_error": null,
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
2018-12-05 23:21:45 +05:30
"merge_commit_sha": null,
2016-08-24 12:49:21 +05:30
"user_notes_count": 1,
2018-12-05 23:21:45 +05:30
"discussion_locked": null,
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
2016-09-29 09:46:39 +05:30
"force_remove_source_branch": false,
2018-12-05 23:21:45 +05:30
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-03-17 18:26:18 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-03-27 19:54:05 +05:30
},
2018-12-05 23:21:45 +05:30
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
2018-03-27 19:54:05 +05:30
"first_deployed_to_production_at": null,
"pipeline": {
2018-12-05 23:21:45 +05:30
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
2018-03-27 19:54:05 +05:30
},
2018-12-05 23:21:45 +05:30
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
2018-11-20 20:47:30 +05:30
},
2019-02-15 15:39:39 +05:30
"diverged_commits_count": 2,
2019-09-04 21:01:54 +05:30
"rebase_in_progress": false,
"task_completion_status":{
"count":0,
"completed_count":0
}
2014-09-02 18:07:02 +05:30
}
```
2018-03-17 18:26:18 +05:30
## Get single MR participants
Get a list of merge request participants.
```
GET /projects/:id/merge_requests/:merge_request_iid/participants
```
Parameters:
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
- `merge_request_iid` (required) - The internal ID of the merge request
```json
[
{
"id": 1,
"name": "John Doe1",
"username": "user1",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80& d=identicon",
"web_url": "http://localhost/user1"
},
{
"id": 2,
"name": "John Doe2",
"username": "user2",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80& d=identicon",
"web_url": "http://localhost/user2"
2019-09-04 21:01:54 +05:30
}
2018-03-17 18:26:18 +05:30
]
```
2015-12-23 02:04:40 +05:30
## Get single MR commits
Get a list of merge request commits.
```
2017-08-17 22:00:37 +05:30
GET /projects/:id/merge_requests/:merge_request_iid/commits
2015-12-23 02:04:40 +05:30
```
Parameters:
2017-08-17 22:00:37 +05:30
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
- `merge_request_iid` (required) - The internal ID of the merge request
2015-12-23 02:04:40 +05:30
```json
[
{
"id": "ed899a2f4b50b4370feeea94676502b42383c746",
"short_id": "ed899a2f4b5",
"title": "Replace sanitize with escape once",
"author_name": "Dmitriy Zaporozhets",
"author_email": "dzaporozhets@sphereconsultinginc.com",
"created_at": "2012-09-20T11:50:22+03:00",
"message": "Replace sanitize with escape once"
},
{
"id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
"short_id": "6104942438c",
"title": "Sanitize for network graph",
"author_name": "randx",
"author_email": "dmitriy.zaporozhets@gmail.com",
"created_at": "2012-09-20T09:06:12+03:00",
"message": "Sanitize for network graph"
}
]
```
2015-04-26 12:48:37 +05:30
## Get single MR changes
2015-11-26 14:37:03 +05:30
Shows information about the merge request including its files and changes.
2015-04-26 12:48:37 +05:30
```
2017-08-17 22:00:37 +05:30
GET /projects/:id/merge_requests/:merge_request_iid/changes
2015-04-26 12:48:37 +05:30
```
Parameters:
2017-08-17 22:00:37 +05:30
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
- `merge_request_iid` (required) - The internal ID of the merge request
2015-04-26 12:48:37 +05:30
```json
{
"id": 21,
"iid": 1,
"project_id": 4,
"title": "Blanditiis beatae suscipit hic assumenda et molestias nisi asperiores repellat et.",
"state": "reopened",
"created_at": "2015-02-02T19:49:39.159Z",
"updated_at": "2015-02-02T20:08:49.959Z",
"target_branch": "secret_token",
"source_branch": "version-1-9",
"upvotes": 0,
"downvotes": 0,
"author": {
"name": "Chad Hamill",
"username": "jarrett",
"id": 5,
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": "http://www.gravatar.com/avatar/b95567800f828948baf5f4160ebb2473?s=40& d=identicon",
"web_url" : "https://gitlab.example.com/jarrett"
2015-04-26 12:48:37 +05:30
},
"assignee": {
"name": "Administrator",
"username": "root",
"id": 1,
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40& d=identicon",
"web_url" : "https://gitlab.example.com/root"
2015-04-26 12:48:37 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2015-04-26 12:48:37 +05:30
"source_project_id": 4,
"target_project_id": 4,
"labels": [ ],
2016-04-02 18:10:28 +05:30
"description": "Qui voluptatibus placeat ipsa alias quasi. Deleniti rem ut sint. Optio velit qui distinctio.",
"work_in_progress": false,
2015-04-26 12:48:37 +05:30
"milestone": {
"id": 5,
"iid": 1,
"project_id": 4,
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
"due_date": null
},
2017-08-17 22:00:37 +05:30
"merge_when_pipeline_succeeds": true,
2016-04-02 18:10:28 +05:30
"merge_status": "can_be_merged",
2016-06-02 11:05:42 +05:30
"subscribed" : true,
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
2016-06-02 11:05:42 +05:30
"user_notes_count": 1,
2018-03-17 18:26:18 +05:30
"changes_count": "1",
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
"force_remove_source_branch": false,
2018-11-08 19:23:39 +05:30
"squash": false,
2016-09-29 09:46:39 +05:30
"web_url": "http://example.com/example/example/merge_requests/1",
2018-03-17 18:26:18 +05:30
"discussion_locked": false,
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2019-09-04 21:01:54 +05:30
},
"task_completion_status":{
"count":0,
"completed_count":0
},
2015-12-23 02:04:40 +05:30
"changes": [
2015-04-26 12:48:37 +05:30
{
"old_path": "VERSION",
"new_path": "VERSION",
"a_mode": "100644",
"b_mode": "100644",
"diff": "--- a/VERSION\ +++ b/VERSION\ @@ -1 +1 @@\ -1.9.7\ +1.9.8",
"new_file": false,
"renamed_file": false,
"deleted_file": false
}
]
}
```
2018-03-17 18:26:18 +05:30
## List MR pipelines
2018-03-27 19:54:05 +05:30
> [Introduced][ce-15454] in GitLab 10.5.0.
2018-03-17 18:26:18 +05:30
Get a list of merge request pipelines.
```
GET /projects/:id/merge_requests/:merge_request_iid/pipelines
```
Parameters:
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
- `merge_request_iid` (required) - The internal ID of the merge request
```json
[
{
"id": 77,
"sha": "959e04d7c7a30600c894bd3c0cd0e1ce7f42c11d",
"ref": "master",
"status": "success"
}
]
```
2014-09-02 18:07:02 +05:30
## Create MR
2016-01-14 18:37:52 +05:30
Creates a new merge request.
2014-09-02 18:07:02 +05:30
```
POST /projects/:id/merge_requests
```
2018-03-27 19:54:05 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `source_branch` | string | yes | The source branch |
| `target_branch` | string | yes | The target branch |
| `title` | string | yes | Title of MR |
| `assignee_id` | integer | no | Assignee user ID |
2019-07-31 22:56:46 +05:30
| `assignee_ids` | Array[integer] | no | The ID of the user(s) to assign the MR to. Set to `0` or provide an empty value to unassign all assignees. |
2019-09-04 21:01:54 +05:30
| `description` | string | no | Description of MR. Limited to 1 000 000 characters. |
2018-03-27 19:54:05 +05:30
| `target_project_id` | integer | no | The target project (numeric id) |
| `labels` | string | no | Labels for MR as a comma-separated list |
2018-11-08 19:23:39 +05:30
| `milestone_id` | integer | no | The global ID of a milestone |
2018-03-27 19:54:05 +05:30
| `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging |
2018-11-08 19:23:39 +05:30
| `allow_collaboration` | boolean | no | Allow commits from members who can merge to the target branch |
| `allow_maintainer_to_push` | boolean | no | Deprecated, see allow_collaboration |
| `squash` | boolean | no | Squash commits into a single commit when merging |
2014-09-02 18:07:02 +05:30
```json
{
"id": 1,
2016-08-24 12:49:21 +05:30
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2014-09-02 18:07:02 +05:30
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
2018-12-05 23:21:45 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "master",
"source_branch": "test1",
2014-09-02 18:07:02 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
"assignee": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
2018-12-05 23:21:45 +05:30
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
2016-04-02 18:10:28 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2016-04-02 18:10:28 +05:30
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2016-04-02 18:10:28 +05:30
},
2017-08-17 22:00:37 +05:30
"merge_when_pipeline_succeeds": true,
2016-06-02 11:05:42 +05:30
"merge_status": "can_be_merged",
2019-02-15 15:39:39 +05:30
"merge_error": null,
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
2018-12-05 23:21:45 +05:30
"user_notes_count": 1,
"discussion_locked": null,
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
2016-09-29 09:46:39 +05:30
"force_remove_source_branch": false,
2018-11-08 19:23:39 +05:30
"allow_collaboration": false,
2018-03-27 19:54:05 +05:30
"allow_maintainer_to_push": false,
2018-12-05 23:21:45 +05:30
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-03-17 18:26:18 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-12-05 23:21:45 +05:30
},
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
"first_deployed_to_production_at": null,
"pipeline": {
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
},
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
},
2019-09-04 21:01:54 +05:30
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
2014-09-02 18:07:02 +05:30
}
```
## Update MR
2016-01-14 18:37:52 +05:30
Updates an existing merge request. You can change the target branch, title, or even close the MR.
2014-09-02 18:07:02 +05:30
```
2017-08-17 22:00:37 +05:30
PUT /projects/:id/merge_requests/:merge_request_iid
2014-09-02 18:07:02 +05:30
```
2018-03-27 19:54:05 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The ID of a merge request |
| `target_branch` | string | no | The target branch |
| `title` | string | no | Title of MR |
| `assignee_id` | integer | no | The ID of the user to assign the merge request to. Set to `0` or provide an empty value to unassign all assignees. |
2019-07-31 22:56:46 +05:30
| `assignee_ids` | Array[integer] | no | The ID of the user(s) to assign the MR to. Set to `0` or provide an empty value to unassign all assignees. |
2018-11-08 19:23:39 +05:30
| `milestone_id` | integer | no | The global ID of a milestone to assign the merge request to. Set to `0` or provide an empty value to unassign a milestone.|
2018-03-27 19:54:05 +05:30
| `labels` | string | no | Comma-separated label names for a merge request. Set to an empty string to unassign all labels. |
2019-09-04 21:01:54 +05:30
| `description` | string | no | Description of MR. Limited to 1 000 000 characters. |
2018-03-27 19:54:05 +05:30
| `state_event` | string | no | New state (close/reopen) |
| `remove_source_branch` | boolean | no | Flag indicating if a merge request should remove the source branch when merging |
2018-11-08 19:23:39 +05:30
| `squash` | boolean | no | Squash commits into a single commit when merging |
2018-03-27 19:54:05 +05:30
| `discussion_locked` | boolean | no | Flag indicating if the merge request's discussion is locked. If the discussion is locked only project members can add, edit or resolve comments. |
2018-11-08 19:23:39 +05:30
| `allow_collaboration` | boolean | no | Allow commits from members who can merge to the target branch |
| `allow_maintainer_to_push` | boolean | no | Deprecated, see allow_collaboration |
2017-08-17 22:00:37 +05:30
Must include at least one non-required attribute from above.
2014-09-02 18:07:02 +05:30
```json
{
"id": 1,
2016-08-24 12:49:21 +05:30
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2014-09-02 18:07:02 +05:30
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
2018-12-05 23:21:45 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "master",
"source_branch": "test1",
2014-09-02 18:07:02 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
"assignee": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2016-04-02 18:10:28 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2018-12-05 23:21:45 +05:30
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
2016-04-02 18:10:28 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2016-04-02 18:10:28 +05:30
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2016-04-02 18:10:28 +05:30
},
2017-08-17 22:00:37 +05:30
"merge_when_pipeline_succeeds": true,
2016-06-02 11:05:42 +05:30
"merge_status": "can_be_merged",
2019-02-15 15:39:39 +05:30
"merge_error": null,
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
2016-08-24 12:49:21 +05:30
"user_notes_count": 1,
2018-12-05 23:21:45 +05:30
"discussion_locked": null,
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
2016-09-29 09:46:39 +05:30
"force_remove_source_branch": false,
2018-11-08 19:23:39 +05:30
"allow_collaboration": false,
2018-03-27 19:54:05 +05:30
"allow_maintainer_to_push": false,
2018-12-05 23:21:45 +05:30
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-03-17 18:26:18 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-12-05 23:21:45 +05:30
},
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
"first_deployed_to_production_at": null,
"pipeline": {
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
},
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
},
2019-09-04 21:01:54 +05:30
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
2014-09-02 18:07:02 +05:30
}
```
2016-06-02 11:05:42 +05:30
## Delete a merge request
Only for admins and project owners. Soft deletes the merge request in question.
```
2017-08-17 22:00:37 +05:30
DELETE /projects/:id/merge_requests/:merge_request_iid
2016-06-02 11:05:42 +05:30
```
2017-08-17 22:00:37 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
2016-06-02 11:05:42 +05:30
```bash
2019-02-15 15:39:39 +05:30
curl --request DELETE --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/4/merge_requests/85
2016-06-02 11:05:42 +05:30
```
2014-09-02 18:07:02 +05:30
## Accept MR
2016-01-14 18:37:52 +05:30
Merge changes submitted with MR using this API.
2014-09-02 18:07:02 +05:30
2019-02-15 15:39:39 +05:30
If merge request is unable to be accepted (ie: Work in Progress, Closed, Pipeline Pending Completion, or Failed while requiring Success) - you'll get a `405` and the error message 'Method Not Allowed'
2014-09-02 18:07:02 +05:30
2019-02-15 15:39:39 +05:30
If it has some conflicts and can not be merged - you'll get a `406` and the error message 'Branch cannot be merged'
2016-06-16 23:09:34 +05:30
2017-08-17 22:00:37 +05:30
If the `sha` parameter is passed and does not match the HEAD of the source - you'll get a `409` and the error message 'SHA does not match HEAD of source branch'
2014-09-02 18:07:02 +05:30
2017-08-17 22:00:37 +05:30
If you don't have permissions to accept this merge request - you'll get a `401`
2014-09-02 18:07:02 +05:30
```
2017-08-17 22:00:37 +05:30
PUT /projects/:id/merge_requests/:merge_request_iid/merge
2014-09-02 18:07:02 +05:30
```
Parameters:
2017-08-17 22:00:37 +05:30
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
- `merge_request_iid` (required) - Internal ID of MR
2015-12-23 02:04:40 +05:30
- `merge_commit_message` (optional) - Custom merge commit message
2019-03-02 22:35:43 +05:30
- `squash_commit_message` (optional) - Custom squash commit message
- `squash` (optional) - if `true` the commits will be squashed into a single commit on merge
2015-12-23 02:04:40 +05:30
- `should_remove_source_branch` (optional) - if `true` removes the source branch
2018-12-05 23:21:45 +05:30
- `merge_when_pipeline_succeeds` (optional) - if `true` the MR is merged when the pipeline succeeds
2016-06-16 23:09:34 +05:30
- `sha` (optional) - if present, then this SHA must match the HEAD of the source branch, otherwise the merge will fail
2015-12-23 02:04:40 +05:30
```json
{
"id": 1,
2016-08-24 12:49:21 +05:30
"iid": 1,
2015-12-23 02:04:40 +05:30
"project_id": 3,
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
2018-12-05 23:21:45 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "master",
"source_branch": "test1",
2015-12-23 02:04:40 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2015-12-23 02:04:40 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2015-12-23 02:04:40 +05:30
},
"assignee": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2015-12-23 02:04:40 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2016-04-02 18:10:28 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2018-12-05 23:21:45 +05:30
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
2016-04-02 18:10:28 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2016-04-02 18:10:28 +05:30
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2016-04-02 18:10:28 +05:30
},
2017-08-17 22:00:37 +05:30
"merge_when_pipeline_succeeds": true,
2016-06-02 11:05:42 +05:30
"merge_status": "can_be_merged",
2019-02-15 15:39:39 +05:30
"merge_error": null,
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
2018-12-05 23:21:45 +05:30
"merge_commit_sha": null,
2016-08-24 12:49:21 +05:30
"user_notes_count": 1,
2018-12-05 23:21:45 +05:30
"discussion_locked": null,
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
2016-09-29 09:46:39 +05:30
"force_remove_source_branch": false,
2018-12-05 23:21:45 +05:30
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-03-17 18:26:18 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-12-05 23:21:45 +05:30
},
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
"first_deployed_to_production_at": null,
"pipeline": {
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
},
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
},
2019-09-04 21:01:54 +05:30
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
2015-12-23 02:04:40 +05:30
}
```
2019-07-07 11:18:12 +05:30
## Merge to default merge ref path
Merge the changes between the merge request source and target branches into `refs/merge-requests/:iid/merge`
ref, of the target project repository. This ref will have the state the target branch would have if
a regular merge action was taken.
This is not a regular merge action given it doesn't change the merge request state in any manner.
This ref (`refs/merge-requests/:iid/merge`) is **always** overwritten when submitting
requests to this API, so none of its state is kept or used in the process.
If the merge request has conflicts, is empty or already merged,
you'll get a `400` and a descriptive error message. If you don't have permissions to do so,
you'll get a `403` .
It returns the HEAD commit of `refs/merge-requests/:iid/merge` in the response body in
case of `200` .
```
PUT /projects/:id/merge_requests/:merge_request_iid/merge_to_ref
```
Parameters:
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
- `merge_request_iid` (required) - Internal ID of MR
- `merge_commit_message` (optional) - Custom merge commit message
```json
{
"commit_id": "854a3a7a17acbcc0bbbea170986df1eb60435f34"
}
```
2017-08-17 22:00:37 +05:30
## Cancel Merge When Pipeline Succeeds
2015-12-23 02:04:40 +05:30
2017-08-17 22:00:37 +05:30
If you don't have permissions to accept this merge request - you'll get a `401`
2015-12-23 02:04:40 +05:30
2017-08-17 22:00:37 +05:30
If the merge request is already merged or closed - you get `405` and error message 'Method Not Allowed'
2015-12-23 02:04:40 +05:30
2017-08-17 22:00:37 +05:30
In case the merge request is not set to be merged when the pipeline succeeds, you'll also get a `406` error.
2015-12-23 02:04:40 +05:30
```
2017-08-17 22:00:37 +05:30
PUT /projects/:id/merge_requests/:merge_request_iid/cancel_merge_when_pipeline_succeeds
2015-12-23 02:04:40 +05:30
```
Parameters:
2017-08-17 22:00:37 +05:30
- `id` (required) - The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user
2018-12-05 23:21:45 +05:30
- `merge_request_iid` (required) - Internal ID of MR
2014-09-02 18:07:02 +05:30
```json
{
"id": 1,
2016-08-24 12:49:21 +05:30
"iid": 1,
2014-09-02 18:07:02 +05:30
"project_id": 3,
"title": "test1",
2018-12-05 23:21:45 +05:30
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
2018-12-05 23:21:45 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "master",
"source_branch": "test1",
2014-09-02 18:07:02 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2014-09-02 18:07:02 +05:30
},
"assignee": {
"id": 1,
"name": "Administrator",
2018-12-05 23:21:45 +05:30
"username": "admin",
2014-09-02 18:07:02 +05:30
"state": "active",
2018-11-08 19:23:39 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2016-04-02 18:10:28 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2018-12-05 23:21:45 +05:30
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
2016-04-02 18:10:28 +05:30
"work_in_progress": false,
"milestone": {
"id": 5,
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2016-04-02 18:10:28 +05:30
"title": "v2.0",
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
"state": "closed",
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
2018-12-05 23:21:45 +05:30
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2016-04-02 18:10:28 +05:30
},
2018-12-05 23:21:45 +05:30
"merge_when_pipeline_succeeds": false,
2016-06-02 11:05:42 +05:30
"merge_status": "can_be_merged",
2019-02-15 15:39:39 +05:30
"merge_error": null,
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
2016-08-24 12:49:21 +05:30
"user_notes_count": 1,
2018-12-05 23:21:45 +05:30
"discussion_locked": null,
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
2016-09-29 09:46:39 +05:30
"force_remove_source_branch": false,
2018-12-05 23:21:45 +05:30
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
2018-03-17 18:26:18 +05:30
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
2018-12-05 23:21:45 +05:30
},
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
"first_deployed_to_production_at": null,
"pipeline": {
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
},
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
},
2019-09-04 21:01:54 +05:30
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
2014-09-02 18:07:02 +05:30
}
```
2019-02-15 15:39:39 +05:30
## Rebase a merge request
Automatically rebase the `source_branch` of the merge request against its
`target_branch` .
If you don't have permissions to push to the merge request's source branch -
you'll get a `403 Forbidden` response.
```
PUT /projects/:id/merge_requests/:merge_request_iid/rebase
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
```bash
curl --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/76/merge_requests/1/rebase
```
This is an asynchronous request. The API will return an empty `202 Accepted`
response if the request is enqueued successfully.
You can poll the [Get single MR ](#get-single-mr ) endpoint with the
`include_rebase_in_progress` parameter to check the status of the
asynchronous request.
If the rebase operation is ongoing, the response will include the following:
```json
{
2019-09-04 21:01:54 +05:30
"rebase_in_progress": true,
2019-02-15 15:39:39 +05:30
"merge_error": null
}
```
Once the rebase operation has completed successfully, the response will include
the following:
```json
{
"rebase_in_progress": false,
2019-09-04 21:01:54 +05:30
"merge_error": null
2019-02-15 15:39:39 +05:30
}
```
If the rebase operation fails, the response will include the following:
```json
{
"rebase_in_progress": false,
2019-09-04 21:01:54 +05:30
"merge_error": "Rebase failed. Please rebase locally"
2019-02-15 15:39:39 +05:30
}
```
2016-06-02 11:05:42 +05:30
## Comments on merge requests
2014-09-02 18:07:02 +05:30
2016-04-02 18:10:28 +05:30
Comments are done via the [notes ](notes.md ) resource.
2014-09-02 18:07:02 +05:30
2016-04-02 18:10:28 +05:30
## List issues that will close on merge
2014-09-02 18:07:02 +05:30
2016-04-02 18:10:28 +05:30
Get all the issues that would be closed by merging the provided merge request.
2014-09-02 18:07:02 +05:30
2016-04-02 18:10:28 +05:30
```
2017-08-17 22:00:37 +05:30
GET /projects/:id/merge_requests/:merge_request_iid/closes_issues
2014-09-02 18:07:02 +05:30
```
2017-08-17 22:00:37 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
2014-09-02 18:07:02 +05:30
2016-04-02 18:10:28 +05:30
```bash
2019-02-15 15:39:39 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/76/merge_requests/1/closes_issues
2014-09-02 18:07:02 +05:30
```
2016-06-16 23:09:34 +05:30
Example response when the GitLab issue tracker is used:
2014-09-02 18:07:02 +05:30
```json
[
2016-04-02 18:10:28 +05:30
{
"state" : "opened",
"description" : "Ratione dolores corrupti mollitia soluta quia.",
"author" : {
"state" : "active",
"id" : 18,
2016-11-03 12:29:30 +05:30
"web_url" : "https://gitlab.example.com/eileen.lowe",
2016-04-02 18:10:28 +05:30
"name" : "Alexandra Bashirian",
"avatar_url" : null,
"username" : "eileen.lowe"
},
"milestone" : {
"project_id" : 1,
"description" : "Ducimus nam enim ex consequatur cumque ratione.",
"state" : "closed",
"due_date" : null,
"iid" : 2,
"created_at" : "2016-01-04T15:31:39.996Z",
"title" : "v4.0",
"id" : 17,
"updated_at" : "2016-01-04T15:31:39.996Z"
},
"project_id" : 1,
"assignee" : {
"state" : "active",
"id" : 1,
"name" : "Administrator",
2016-11-03 12:29:30 +05:30
"web_url" : "https://gitlab.example.com/root",
2016-04-02 18:10:28 +05:30
"avatar_url" : null,
"username" : "root"
},
"updated_at" : "2016-01-04T15:31:51.081Z",
"id" : 76,
"title" : "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
"created_at" : "2016-01-04T15:31:51.081Z",
"iid" : 6,
2016-06-02 11:05:42 +05:30
"labels" : [],
2018-03-17 18:26:18 +05:30
"user_notes_count": 1,
"changes_count": "1"
2018-12-05 23:21:45 +05:30
}
2014-09-02 18:07:02 +05:30
]
```
2016-06-02 11:05:42 +05:30
2016-06-16 23:09:34 +05:30
Example response when an external issue tracker (e.g. JIRA) is used:
```json
[
{
"id" : "PROJECT-123",
"title" : "Title of this issue"
}
]
```
2016-06-02 11:05:42 +05:30
## Subscribe to a merge request
2017-08-17 22:00:37 +05:30
Subscribes the authenticated user to a merge request to receive notification. If the user is already subscribed to the merge request, the
status code `304` is returned.
2016-06-02 11:05:42 +05:30
```
2017-08-17 22:00:37 +05:30
POST /projects/:id/merge_requests/:merge_request_iid/subscribe
2016-06-02 11:05:42 +05:30
```
2017-08-17 22:00:37 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
2016-06-02 11:05:42 +05:30
```bash
2019-02-15 15:39:39 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/17/subscribe
2016-06-02 11:05:42 +05:30
```
Example response:
```json
{
2018-12-05 23:21:45 +05:30
"id": 1,
2016-06-02 11:05:42 +05:30
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
2018-12-05 23:21:45 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "master",
"source_branch": "test1",
2016-06-02 11:05:42 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
2018-12-05 23:21:45 +05:30
"id": 1,
"name": "Administrator",
"username": "admin",
2016-06-02 11:05:42 +05:30
"state": "active",
2018-12-05 23:21:45 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2016-06-02 11:05:42 +05:30
},
"assignee": {
2018-12-05 23:21:45 +05:30
"id": 1,
"name": "Administrator",
"username": "admin",
2016-06-02 11:05:42 +05:30
"state": "active",
2018-12-05 23:21:45 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2016-06-02 11:05:42 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2018-12-05 23:21:45 +05:30
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
2016-06-02 11:05:42 +05:30
"work_in_progress": false,
"milestone": {
2018-12-05 23:21:45 +05:30
"id": 5,
2016-06-02 11:05:42 +05:30
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2016-06-02 11:05:42 +05:30
"title": "v2.0",
2018-12-05 23:21:45 +05:30
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
2016-06-02 11:05:42 +05:30
"state": "closed",
2018-12-05 23:21:45 +05:30
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2016-06-02 11:05:42 +05:30
},
2018-12-05 23:21:45 +05:30
"merge_when_pipeline_succeeds": true,
"merge_status": "can_be_merged",
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
2018-12-05 23:21:45 +05:30
"merge_commit_sha": null,
"user_notes_count": 1,
"discussion_locked": null,
"should_remove_source_branch": true,
"force_remove_source_branch": false,
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
"first_deployed_to_production_at": null,
"pipeline": {
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
},
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
},
2019-09-04 21:01:54 +05:30
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
2016-06-02 11:05:42 +05:30
}
```
## Unsubscribe from a merge request
Unsubscribes the authenticated user from a merge request to not receive
2017-08-17 22:00:37 +05:30
notifications from that merge request. If the user is
not subscribed to the merge request, the status code `304` is returned.
2016-06-02 11:05:42 +05:30
```
2017-08-17 22:00:37 +05:30
POST /projects/:id/merge_requests/:merge_request_iid/unsubscribe
2016-06-02 11:05:42 +05:30
```
2017-08-17 22:00:37 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
2016-06-02 11:05:42 +05:30
```bash
2019-02-15 15:39:39 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/17/unsubscribe
2016-06-02 11:05:42 +05:30
```
Example response:
```json
{
2018-12-05 23:21:45 +05:30
"id": 1,
2016-06-02 11:05:42 +05:30
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
"title": "test1",
"description": "fixed login page css paddings",
2018-12-13 13:39:08 +05:30
"state": "merged",
2018-12-05 23:21:45 +05:30
"created_at": "2017-04-29T08:46:00Z",
"updated_at": "2017-04-29T08:46:00Z",
"target_branch": "master",
"source_branch": "test1",
2016-06-02 11:05:42 +05:30
"upvotes": 0,
"downvotes": 0,
"author": {
2018-12-05 23:21:45 +05:30
"id": 1,
"name": "Administrator",
"username": "admin",
2016-06-02 11:05:42 +05:30
"state": "active",
2018-12-05 23:21:45 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2016-06-02 11:05:42 +05:30
},
"assignee": {
2018-12-05 23:21:45 +05:30
"id": 1,
"name": "Administrator",
"username": "admin",
2016-06-02 11:05:42 +05:30
"state": "active",
2018-12-05 23:21:45 +05:30
"avatar_url": null,
"web_url" : "https://gitlab.example.com/admin"
2016-06-02 11:05:42 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2018-12-05 23:21:45 +05:30
"source_project_id": 2,
"target_project_id": 3,
"labels": [
"Community contribution",
"Manage"
],
2016-06-02 11:05:42 +05:30
"work_in_progress": false,
"milestone": {
2018-12-05 23:21:45 +05:30
"id": 5,
2016-06-02 11:05:42 +05:30
"iid": 1,
2018-12-05 23:21:45 +05:30
"project_id": 3,
2016-06-02 11:05:42 +05:30
"title": "v2.0",
2018-12-05 23:21:45 +05:30
"description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
2016-06-02 11:05:42 +05:30
"state": "closed",
2018-12-05 23:21:45 +05:30
"created_at": "2015-02-02T19:49:26.013Z",
"updated_at": "2015-02-02T19:49:26.013Z",
"due_date": "2018-09-22",
"start_date": "2018-08-08",
"web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
2016-06-02 11:05:42 +05:30
},
2018-12-05 23:21:45 +05:30
"merge_when_pipeline_succeeds": true,
"merge_status": "can_be_merged",
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
2018-12-05 23:21:45 +05:30
"merge_commit_sha": null,
"user_notes_count": 1,
"discussion_locked": null,
"should_remove_source_branch": true,
"force_remove_source_branch": false,
"allow_collaboration": false,
"allow_maintainer_to_push": false,
"web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
"time_stats": {
"time_estimate": 0,
"total_time_spent": 0,
"human_time_estimate": null,
"human_total_time_spent": null
},
"squash": false,
"subscribed": false,
"changes_count": "1",
"merged_by": {
"id": 87854,
"name": "Douwe Maan",
"username": "DouweM",
"state": "active",
"avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
"web_url": "https://gitlab.com/DouweM"
},
"merged_at": "2018-09-07T11:16:17.520Z",
"closed_by": null,
"closed_at": null,
"latest_build_started_at": "2018-09-07T07:27:38.472Z",
"latest_build_finished_at": "2018-09-07T08:07:06.012Z",
"first_deployed_to_production_at": null,
"pipeline": {
"id": 29626725,
"sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"ref": "patch-28",
"status": "success",
"web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
},
"diff_refs": {
"base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
"head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
"start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
},
2019-09-04 21:01:54 +05:30
"diverged_commits_count": 2,
"task_completion_status":{
"count":0,
"completed_count":0
}
2016-06-02 11:05:42 +05:30
}
```
2016-08-24 12:49:21 +05:30
## Create a todo
2017-08-17 22:00:37 +05:30
Manually creates a todo for the current user on a merge request.
If there already exists a todo for the user on that merge request,
2016-08-24 12:49:21 +05:30
status code `304` is returned.
```
2017-08-17 22:00:37 +05:30
POST /projects/:id/merge_requests/:merge_request_iid/todo
2016-08-24 12:49:21 +05:30
```
2017-08-17 22:00:37 +05:30
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
2016-08-24 12:49:21 +05:30
```bash
2019-02-15 15:39:39 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/27/todo
2016-08-24 12:49:21 +05:30
```
Example response:
```json
{
"id": 113,
"project": {
"id": 3,
"name": "Gitlab Ci",
"name_with_namespace": "Gitlab Org / Gitlab Ci",
"path": "gitlab-ci",
"path_with_namespace": "gitlab-org/gitlab-ci"
},
"author": {
"name": "Administrator",
"username": "root",
"id": 1,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80& d=identicon",
2016-11-03 12:29:30 +05:30
"web_url": "https://gitlab.example.com/root"
2016-08-24 12:49:21 +05:30
},
"action_name": "marked",
"target_type": "MergeRequest",
"target": {
"id": 27,
"iid": 7,
"project_id": 3,
"title": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
"description": "Veniam sunt nihil modi earum cumque illum delectus. Nihil ad quis distinctio quia. Autem eligendi at quibusdam repellendus.",
2018-12-13 13:39:08 +05:30
"state": "merged",
2016-08-24 12:49:21 +05:30
"created_at": "2016-06-17T07:48:04.330Z",
"updated_at": "2016-07-01T11:14:15.537Z",
"target_branch": "allow_regex_for_project_skip_ref",
"source_branch": "backup",
"upvotes": 0,
"downvotes": 0,
"author": {
"name": "Jarret O'Keefe",
"username": "francisca",
"id": 14,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/a7fa515d53450023c83d62986d0658a8?s=80& d=identicon",
2018-03-17 18:26:18 +05:30
"web_url": "https://gitlab.example.com/francisca",
"discussion_locked": false
2016-08-24 12:49:21 +05:30
},
"assignee": {
"name": "Dr. Gabrielle Strosin",
"username": "barrett.krajcik",
"id": 4,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/733005fcd7e6df12d2d8580171ccb966?s=80& d=identicon",
2016-11-03 12:29:30 +05:30
"web_url": "https://gitlab.example.com/barrett.krajcik"
2016-08-24 12:49:21 +05:30
},
2019-07-31 22:56:46 +05:30
"assignees": [{
"name": "Miss Monserrate Beier",
"username": "axel.block",
"id": 12,
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80& d=identicon",
"web_url": "https://gitlab.example.com/axel.block"
}],
2016-08-24 12:49:21 +05:30
"source_project_id": 3,
"target_project_id": 3,
"labels": [],
"work_in_progress": false,
"milestone": {
"id": 27,
"iid": 2,
"project_id": 3,
"title": "v1.0",
"description": "Quis ea accusantium animi hic fuga assumenda.",
"state": "active",
"created_at": "2016-06-17T07:47:33.840Z",
"updated_at": "2016-06-17T07:47:33.840Z",
"due_date": null
},
2017-08-17 22:00:37 +05:30
"merge_when_pipeline_succeeds": false,
2016-08-24 12:49:21 +05:30
"merge_status": "unchecked",
"subscribed": true,
2016-09-29 09:46:39 +05:30
"sha": "8888888888888888888888888888888888888888",
"merge_commit_sha": null,
2016-08-24 12:49:21 +05:30
"user_notes_count": 7,
2018-03-17 18:26:18 +05:30
"changes_count": "1",
2016-08-24 12:49:21 +05:30
"should_remove_source_branch": true,
2016-09-29 09:46:39 +05:30
"force_remove_source_branch": false,
2018-11-08 19:23:39 +05:30
"squash": false,
2016-09-29 09:46:39 +05:30
"web_url": "http://example.com/example/example/merge_requests/1"
2016-08-24 12:49:21 +05:30
},
"target_url": "https://gitlab.example.com/gitlab-org/gitlab-ci/merge_requests/7",
"body": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
"state": "pending",
"created_at": "2016-07-01T11:14:15.530Z"
}
```
2016-09-29 09:46:39 +05:30
## Get MR diff versions
Get a list of merge request diff versions.
```
2017-08-17 22:00:37 +05:30
GET /projects/:id/merge_requests/:merge_request_iid/versions
2016-09-29 09:46:39 +05:30
```
2017-08-17 22:00:37 +05:30
| Attribute | Type | Required | Description |
| --------- | ------- | -------- | --------------------- |
| `id` | String | yes | The ID of the project |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
2016-09-29 09:46:39 +05:30
```bash
2019-02-15 15:39:39 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions
2016-09-29 09:46:39 +05:30
```
Example response:
```json
[{
"id": 110,
"head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"created_at": "2016-07-26T14:44:48.926Z",
"merge_request_id": 105,
"state": "collected",
"real_size": "1"
}, {
"id": 108,
"head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24",
"base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"created_at": "2016-07-25T14:21:33.028Z",
"merge_request_id": 105,
"state": "collected",
"real_size": "1"
}]
```
## Get a single MR diff version
Get a single merge request diff version.
```
2017-08-17 22:00:37 +05:30
GET /projects/:id/merge_requests/:merge_request_iid/versions/:version_id
2016-09-29 09:46:39 +05:30
```
2017-08-17 22:00:37 +05:30
| Attribute | Type | Required | Description |
| --------- | ------- | -------- | --------------------- |
| `id` | String | yes | The ID of the project |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
| `version_id` | integer | yes | The ID of the merge request diff version |
2016-09-29 09:46:39 +05:30
```bash
2019-02-15 15:39:39 +05:30
curl --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions/1
2016-09-29 09:46:39 +05:30
```
Example response:
```json
{
"id": 110,
"head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
"created_at": "2016-07-26T14:44:48.926Z",
"merge_request_id": 105,
"state": "collected",
"real_size": "1",
"commits": [{
"id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
"short_id": "33e2ee85",
"title": "Change year to 2018",
"author_name": "Administrator",
"author_email": "admin@example.com",
"created_at": "2016-07-26T17:44:29.000+03:00",
"message": "Change year to 2018"
}, {
"id": "aa24655de48b36335556ac8a3cd8bb521f977cbd",
"short_id": "aa24655d",
"title": "Update LICENSE",
"author_name": "Administrator",
"author_email": "admin@example.com",
"created_at": "2016-07-25T17:21:53.000+03:00",
"message": "Update LICENSE"
}, {
"id": "3eed087b29835c48015768f839d76e5ea8f07a24",
"short_id": "3eed087b",
"title": "Add license",
"author_name": "Administrator",
"author_email": "admin@example.com",
"created_at": "2016-07-25T17:21:20.000+03:00",
"message": "Add license"
}],
"diffs": [{
"old_path": "LICENSE",
"new_path": "LICENSE",
"a_mode": "0",
"b_mode": "100644",
"diff": "--- /dev/null\n+++ b/LICENSE\n@@ -0,0 +1,21 @@\n+The MIT License (MIT)\n+\n+Copyright (c) 2018 Administrator\n+\n+Permission is hereby granted, free of charge, to any person obtaining a copy\n+of this software and associated documentation files (the \"Software\"), to deal\n+in the Software without restriction, including without limitation the rights\n+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n+copies of the Software, and to permit persons to whom the Software is\n+furnished to do so, subject to the following conditions:\n+\n+The above copyright notice and this permission notice shall be included in all\n+copies or substantial portions of the Software.\n+\n+THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+SOFTWARE.\n",
"new_file": true,
"renamed_file": false,
"deleted_file": false
}]
}
```
2017-08-17 22:00:37 +05:30
## Set a time estimate for a merge request
Sets an estimated time of work for this merge request.
```
POST /projects/:id/merge_requests/:merge_request_iid/time_estimate
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
| `duration` | string | yes | The duration in human format. e.g: 3h30m |
```bash
2019-02-15 15:39:39 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_estimate?duration=3h30m
2017-08-17 22:00:37 +05:30
```
Example response:
```json
{
"human_time_estimate": "3h 30m",
"human_total_time_spent": null,
"time_estimate": 12600,
"total_time_spent": 0
}
```
## Reset the time estimate for a merge request
Resets the estimated time for this merge request to 0 seconds.
```
POST /projects/:id/merge_requests/:merge_request_iid/reset_time_estimate
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of a project's merge_request |
```bash
2019-02-15 15:39:39 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_time_estimate
2017-08-17 22:00:37 +05:30
```
Example response:
```json
{
"human_time_estimate": null,
"human_total_time_spent": null,
"time_estimate": 0,
"total_time_spent": 0
}
```
## Add spent time for a merge request
Adds spent time for this merge request
```
POST /projects/:id/merge_requests/:merge_request_iid/add_spent_time
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
| `duration` | string | yes | The duration in human format. e.g: 3h30m |
```bash
2019-02-15 15:39:39 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/93/add_spent_time?duration=1h
2017-08-17 22:00:37 +05:30
```
Example response:
```json
{
"human_time_estimate": null,
"human_total_time_spent": "1h",
"time_estimate": 0,
"total_time_spent": 3600
}
```
## Reset spent time for a merge request
Resets the total spent time for this merge request to 0 seconds.
```
POST /projects/:id/merge_requests/:merge_request_iid/reset_spent_time
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of a project's merge_request |
```bash
2019-02-15 15:39:39 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_spent_time
2017-08-17 22:00:37 +05:30
```
Example response:
```json
{
"human_time_estimate": null,
"human_total_time_spent": null,
"time_estimate": 0,
"total_time_spent": 0
}
```
## Get time tracking stats
```
GET /projects/:id/merge_requests/:merge_request_iid/time_stats
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer/string | yes | The ID or [URL-encoded path of the project ](README.md#namespaced-path-encoding ) owned by the authenticated user |
| `merge_request_iid` | integer | yes | The internal ID of the merge request |
```bash
2019-02-15 15:39:39 +05:30
curl --request GET --header "PRIVATE-TOKEN: < your_access_token > " https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_stats
2017-08-17 22:00:37 +05:30
```
Example response:
```json
{
"human_time_estimate": "2h",
"human_total_time_spent": "1h",
"time_estimate": 7200,
"total_time_spent": 3600
}
```
2017-09-10 17:25:29 +05:30
[ce-13060]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/13060
2018-03-17 18:26:18 +05:30
[ce-14016]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/14016
2018-03-27 19:54:05 +05:30
[ce-15454]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15454
2018-11-08 19:23:39 +05:30
[ce-18935]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/18935