2020-10-26 17:08:22 -04:00
---
2020-11-17 10:09:28 -05:00
stage: Plan
group: Product Planning
2020-11-26 01:09:20 -05:00
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
2020-10-26 17:08:22 -04:00
---
2019-07-08 04:50:38 -04:00
# Epic Links API **(ULTIMATE)**
2019-05-18 17:27:41 -04:00
2020-07-23 14:10:06 -04:00
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/9188) in GitLab 11.8.
2019-05-18 17:27:41 -04:00
2021-05-17 11:10:15 -04:00
Manages parent-child [epic relationships ](../user/group/epics/manage_epics.md#multi-level-child-epics ).
2019-05-18 17:27:41 -04:00
Every API call to `epic_links` must be authenticated.
2021-01-21 07:09:05 -05:00
If a user is not a member of a private group, a `GET` request on that
group results in a `404` status code.
2019-05-18 17:27:41 -04:00
2021-09-08 05:09:10 -04:00
Multi-level Epics are available only in [GitLab Ultimate ](https://about.gitlab.com/pricing/ ).
2020-12-11 04:09:48 -05:00
If the Multi-level Epics feature is not available, a `403` status code is returned.
2019-05-18 17:27:41 -04:00
## List epics related to a given epic
2019-05-29 23:52:46 -04:00
2019-05-18 17:27:41 -04:00
Gets all child epics of an epic.
2020-02-27 19:09:08 -05:00
```plaintext
2019-05-18 17:27:41 -04:00
GET /groups/:id/epics/:epic_iid/epics
```
| Attribute | Type | Required | Description |
| ---------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------- |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the group ](index.md#namespaced-path-encoding ) owned by the authenticated user |
2019-05-18 17:27:41 -04:00
| `epic_iid` | integer | yes | The internal ID of the epic. |
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1/epics/5/epics/"
2019-05-18 17:27:41 -04:00
```
Example response:
```json
[
{
"id": 29,
"iid": 6,
"group_id": 1,
"parent_id": 5,
"title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
"description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
"author": {
"id": 10,
"name": "Lu Mayer",
"username": "kam",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80& d=identicon",
"web_url": "http://localhost:3001/kam"
},
"start_date": null,
"start_date_is_fixed": false,
"start_date_fixed": null,
2019-10-23 08:06:18 -04:00
"start_date_from_milestones": null, //deprecated in favor of start_date_from_inherited_source
"start_date_from_inherited_source": null,
"end_date": "2018-07-31", //deprecated in favor of due_date
2019-05-18 17:27:41 -04:00
"due_date": "2018-07-31",
"due_date_is_fixed": false,
"due_date_fixed": null,
2019-10-23 08:06:18 -04:00
"due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
"due_date_from_inherited_source": "2018-07-31",
2019-05-18 17:27:41 -04:00
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
"labels": []
}
]
```
## Assign a child epic
Creates an association between two epics, designating one as the parent epic and the other as the child epic. A parent epic can have multiple child epics. If the new child epic already belonged to another epic, it is unassigned from that previous parent.
2020-02-27 19:09:08 -05:00
```plaintext
2021-01-14 13:10:59 -05:00
POST /groups/:id/epics/:epic_iid/epics/:child_epic_id
2019-05-18 17:27:41 -04:00
```
| Attribute | Type | Required | Description |
| --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the group ](index.md#namespaced-path-encoding ) owned by the authenticated user |
2019-05-18 17:27:41 -04:00
| `epic_iid` | integer | yes | The internal ID of the epic. |
| `child_epic_id` | integer | yes | The global ID of the child epic. Internal ID can't be used because they can conflict with epics from other groups. |
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1/epics/5/epics/6"
2019-05-18 17:27:41 -04:00
```
Example response:
```json
{
"id": 6,
"iid": 38,
"group_id": 1,
2021-04-29 08:09:58 -04:00
"parent_id": 5,
2019-05-18 17:27:41 -04:00
"title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
"description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
"author": {
"id": 10,
"name": "Lu Mayer",
"username": "kam",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80& d=identicon",
"web_url": "http://localhost:3001/kam"
},
"start_date": null,
"start_date_is_fixed": false,
"start_date_fixed": null,
2019-10-23 08:06:18 -04:00
"start_date_from_milestones": null, //deprecated in favor of start_date_from_inherited_source
"start_date_from_inherited_source": null,
"end_date": "2018-07-31", //deprecated in favor of due_date
2019-05-18 17:27:41 -04:00
"due_date": "2018-07-31",
"due_date_is_fixed": false,
"due_date_fixed": null,
2019-10-23 08:06:18 -04:00
"due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
"due_date_from_inherited_source": "2018-07-31",
2019-05-18 17:27:41 -04:00
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
"labels": []
}
```
## Create and assign a child epic
2020-04-08 02:09:54 -04:00
Creates a new epic and associates it with provided parent epic. The response is LinkedEpic object.
2019-05-18 17:27:41 -04:00
2020-02-27 19:09:08 -05:00
```plaintext
2019-05-18 17:27:41 -04:00
POST /groups/:id/epics/:epic_iid/epics
```
| Attribute | Type | Required | Description |
| --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the group ](index.md#namespaced-path-encoding ) owned by the authenticated user |
2020-12-11 04:09:48 -05:00
| `epic_iid` | integer | yes | The internal ID of the (future parent) epic. |
| `title` | string | yes | The title of a newly created epic. |
| `confidential` | boolean | no | Whether the epic should be confidential. Parameter is ignored if `confidential_epics` feature flag is disabled. Defaults to the confidentiality state of the parent epic. |
2019-05-18 17:27:41 -04:00
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1/epics/5/epics?title=Newpic"
2019-05-18 17:27:41 -04:00
```
Example response:
```json
{
"id": 24,
"iid": 2,
"title": "child epic",
"group_id": 49,
"parent_id": 23,
"has_children": false,
2019-05-23 17:52:37 -04:00
"has_issues": false,
2019-05-18 17:27:41 -04:00
"reference": "& 2",
"url": "http://localhost/groups/group16/-/epics/2",
"relation_url": "http://localhost/groups/group16/-/epics/1/links/24"
}
```
## Re-order a child epic
2020-02-27 19:09:08 -05:00
```plaintext
2019-05-18 17:27:41 -04:00
PUT /groups/:id/epics/:epic_iid/epics/:child_epic_id
```
| Attribute | Type | Required | Description |
| ---------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the group ](index.md#namespaced-path-encoding ) owned by the authenticated user. |
2019-05-18 17:27:41 -04:00
| `epic_iid` | integer | yes | The internal ID of the epic. |
| `child_epic_id` | integer | yes | The global ID of the child epic. Internal ID can't be used because they can conflict with epics from other groups. |
| `move_before_id` | integer | no | The global ID of a sibling epic that should be placed before the child epic. |
| `move_after_id` | integer | no | The global ID of a sibling epic that should be placed after the child epic. |
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --request PUT --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1/epics/4/epics/5"
2019-05-18 17:27:41 -04:00
```
Example response:
```json
[
{
"id": 29,
"iid": 6,
"group_id": 1,
"parent_id": 5,
"title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
"description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
"author": {
"id": 10,
"name": "Lu Mayer",
"username": "kam",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80& d=identicon",
"web_url": "http://localhost:3001/kam"
},
"start_date": null,
"start_date_is_fixed": false,
"start_date_fixed": null,
2019-10-23 08:06:18 -04:00
"start_date_from_milestones": null, //deprecated in favor of start_date_from_inherited_source
"start_date_from_inherited_source": null,
"end_date": "2018-07-31", //deprecated in favor of due_date
2019-05-18 17:27:41 -04:00
"due_date": "2018-07-31",
"due_date_is_fixed": false,
"due_date_fixed": null,
2019-10-23 08:06:18 -04:00
"due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
"due_date_from_inherited_source": "2018-07-31",
2019-05-18 17:27:41 -04:00
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
"labels": []
}
]
```
## Unassign a child epic
Unassigns a child epic from a parent epic.
2020-02-27 19:09:08 -05:00
```plaintext
2019-05-18 17:27:41 -04:00
DELETE /groups/:id/epics/:epic_iid/epics/:child_epic_id
```
| Attribute | Type | Required | Description |
| --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------ |
2021-06-28 11:08:03 -04:00
| `id` | integer/string | yes | The ID or [URL-encoded path of the group ](index.md#namespaced-path-encoding ) owned by the authenticated user. |
2019-05-18 17:27:41 -04:00
| `epic_iid` | integer | yes | The internal ID of the epic. |
| `child_epic_id` | integer | yes | The global ID of the child epic. Internal ID can't be used because they can conflict with epics from other groups. |
2020-01-30 10:09:15 -05:00
```shell
2020-05-27 20:08:37 -04:00
curl --request DELETE --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1/epics/4/epics/5"
2019-05-18 17:27:41 -04:00
```
Example response:
```json
{
"id": 5,
"iid": 38,
"group_id": 1,
"parent_id": null,
"title": "Accusamus iste et ullam ratione voluptatem omnis debitis dolor est.",
"description": "Molestias dolorem eos vitae expedita impedit necessitatibus quo voluptatum.",
"author": {
"id": 10,
"name": "Lu Mayer",
"username": "kam",
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/018729e129a6f31c80a6327a30196823?s=80& d=identicon",
"web_url": "http://localhost:3001/kam"
},
"start_date": null,
"start_date_is_fixed": false,
"start_date_fixed": null,
2019-10-23 08:06:18 -04:00
"start_date_from_milestones": null, //deprecated in favor of start_date_from_inherited_source
"start_date_from_inherited_source": null,
"end_date": "2018-07-31", //deprecated in favor of due_date
2019-05-18 17:27:41 -04:00
"due_date": "2018-07-31",
"due_date_is_fixed": false,
"due_date_fixed": null,
2019-10-23 08:06:18 -04:00
"due_date_from_milestones": "2018-07-31", //deprecated in favor of start_date_from_inherited_source
"due_date_from_inherited_source": "2018-07-31",
2019-05-18 17:27:41 -04:00
"created_at": "2018-07-17T13:36:22.770Z",
"updated_at": "2018-07-18T12:22:05.239Z",
"labels": []
}
```