Appearance
Epics API
Epics group related issues on a timeline. Each epic has a status, color, optional date range, and a set of assigned issues.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /api/projects/{projectId}/epics | List epics |
POST | /api/projects/{projectId}/epics | Create an epic |
PUT | /api/projects/{projectId}/epics/{epicId} | Update an epic |
DELETE | /api/projects/{projectId}/epics/{epicId} | Delete an epic |
Create Epic
POST /api/projects/{projectId}/epics
Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Epic name, max 255 characters |
color | integer | Yes | 0 Grey, 1 Green, 2 Blue, 3 Red, 4 Purple, 5 Yellow |
order | integer | Yes | Position in the epic list, min 0 |
description | string | No | Epic description, max 10,000 characters |
start | date | No | Start date (YYYY-MM-DD), required if end is set |
end | date | No | End date, must be after start, required if start is set |
issue_ids | integer[] | No | Issue IDs to assign (must belong to the project) |
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/epics \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"title": "Authentication Overhaul",
"description": "Replace legacy auth with 2FA support and improved session management.",
"color": 2,
"order": 0,
"start": "2026-03-17",
"end": "2026-04-11",
"issue_ids": [42, 43, 44]
}'json
{
"id": 5,
"project_id": 1,
"issue_ids": [42, 43, 44],
"issues_count": 3,
"title": "Authentication Overhaul",
"description": "Replace legacy auth with 2FA support and improved session management.",
"status": 0,
"color": 2,
"start": "2026-03-17",
"end": "2026-04-11",
"order": 0
}Update Epic
PUT /api/projects/{projectId}/epics/{epicId}
Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Epic name, max 255 characters |
color | integer | Yes | 0 Grey, 1 Green, 2 Blue, 3 Red, 4 Purple, 5 Yellow |
order | integer | Yes | Position in the epic list, min 0 |
status | integer | Yes | 0 Open, 1 In Progress, 2 Completed |
description | string | No | Max 10,000 characters |
start | date | No | Required if end is set |
end | date | No | Must be after start, required if start is set |
issue_ids | integer[] | No | Issue IDs to assign |
bash
curl -X PUT https://{tenant}.kendo.dev/api/projects/1/epics/5 \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"title": "Authentication Overhaul",
"description": "Replace legacy auth with 2FA support and improved session management.",
"status": 1,
"color": 2,
"order": 0,
"start": "2026-03-17",
"end": "2026-04-18",
"issue_ids": [42, 43, 44, 50]
}'json
{
"id": 5,
"project_id": 1,
"issue_ids": [42, 43, 44, 50],
"issues_count": 4,
"title": "Authentication Overhaul",
"description": "Replace legacy auth with 2FA support and improved session management.",
"status": 1,
"color": 2,
"start": "2026-03-17",
"end": "2026-04-18",
"order": 0
}Delete Epic
DELETE /api/projects/{projectId}/epics/{epicId}
Returns 204 No Content. Issues in the epic are unassigned from it (not deleted).
bash
curl -X DELETE https://{tenant}.kendo.dev/api/projects/1/epics/5 \
-H "Authorization: Bearer your-token"Enums
Status
| Value | Label |
|---|---|
0 | Open |
1 | In Progress |
2 | Completed |
Color
| Value | Label |
|---|---|
0 | Grey |
1 | Green |
2 | Blue |
3 | Red |
4 | Purple |
5 | Yellow |
See Also
- Issues API — Assign issues to epics via
epic_id - Projects API — Project that owns the epics
- Projects guide — Working with epics in the UI