Appearance
Issues API
Issues are the core work items in kendo. Each issue belongs to a project and has a unique key (e.g., KD-42).
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /api/projects/{projectId}/issues | List all issues |
POST | /api/projects/{projectId}/issues | Create an issue |
GET | /api/projects/{projectId}/issues/{issueId} | Get an issue |
PUT | /api/projects/{projectId}/issues/{issueId} | Update an issue |
DELETE | /api/projects/{projectId}/issues/{issueId} | Delete an issue |
GET | /api/projects/{projectId}/issues/search?q= | Search issues |
Create Issue
POST /api/projects/{projectId}/issues
Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Issue title, max 255 characters |
description | string | Yes | Markdown description, max 65,535 characters |
lane_id | integer | Yes | Board lane ID (must belong to the project) |
priority | integer | Yes | 0 Highest, 1 High, 2 Medium, 3 Low, 4 Lowest |
type | integer | Yes | 0 Feature, 1 Bug |
order | integer | Yes | Position within the lane |
assignee_id | integer | No | User ID (must be a project member) |
sprint_id | integer | No | Sprint ID (must belong to the project) |
epic_id | integer | No | Epic ID (must belong to the project) |
estimated_minutes | integer | No | Time estimate in minutes, min 0 |
blocked_by_ids | integer[] | No | Issue IDs that block this issue |
blocks_ids | integer[] | No | Issue IDs that this issue blocks |
prompt | string | No | AI prompt context, max 10,000 characters |
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/issues \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"title": "Add pagination to issues list",
"description": "The issues overview needs cursor-based pagination for large projects.",
"lane_id": 1,
"priority": 2,
"type": 0,
"order": 0,
"assignee_id": 3,
"estimated_minutes": 240
}'json
{
"id": 42,
"key": "KD-42",
"title": "Add pagination to issues list",
"description": "The issues overview needs cursor-based pagination for large projects.",
"prompt": null,
"user_id": 1,
"assignee_id": 3,
"project_id": 1,
"lane_id": 1,
"sprint_id": null,
"epic_id": null,
"comment_ids": [],
"priority": 2,
"type": 0,
"order": 0,
"estimated_minutes": 240,
"blocked_by_ids": [],
"blocks_ids": [],
"branch_link_statuses": [],
"created_at": "2026-03-13T10:30:00.000000Z"
}Update Issue
PUT /api/projects/{projectId}/issues/{issueId}
Accepts the same fields as create. All required fields must be included in every update.
bash
curl -X PUT https://{tenant}.kendo.dev/api/projects/1/issues/42 \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"title": "Add pagination to issues list",
"description": "The issues overview needs cursor-based pagination for large projects.",
"lane_id": 2,
"priority": 1,
"type": 0,
"order": 0,
"sprint_id": 5,
"blocked_by_ids": [38, 40]
}'json
{
"id": 42,
"key": "KD-42",
"title": "Add pagination to issues list",
"description": "The issues overview needs cursor-based pagination for large projects.",
"prompt": null,
"user_id": 1,
"assignee_id": 3,
"project_id": 1,
"lane_id": 2,
"sprint_id": 5,
"epic_id": null,
"comment_ids": [],
"priority": 1,
"type": 0,
"order": 0,
"estimated_minutes": 240,
"blocked_by_ids": [38, 40],
"blocks_ids": [],
"branch_link_statuses": [],
"created_at": "2026-03-13T10:30:00.000000Z"
}Get Issue
GET /api/projects/{projectId}/issues/{issueId}
bash
curl https://{tenant}.kendo.dev/api/projects/1/issues/42 \
-H "Authorization: Bearer your-token"json
{
"id": 42,
"key": "KD-42",
"title": "Add pagination to issues list",
"description": "The issues overview needs cursor-based pagination for large projects.",
"prompt": null,
"user_id": 1,
"assignee_id": 3,
"project_id": 1,
"lane_id": 2,
"sprint_id": 5,
"epic_id": null,
"comment_ids": [10, 11],
"priority": 1,
"type": 0,
"order": 0,
"estimated_minutes": 240,
"blocked_by_ids": [38, 40],
"blocks_ids": [],
"branch_link_statuses": [1],
"created_at": "2026-03-13T10:30:00.000000Z"
}Delete Issue
DELETE /api/projects/{projectId}/issues/{issueId}
Returns 204 No Content on success.
bash
curl -X DELETE https://{tenant}.kendo.dev/api/projects/1/issues/42 \
-H "Authorization: Bearer your-token"List Issues
GET /api/projects/{projectId}/issues
Returns an array of all issues in the project.
bash
curl https://{tenant}.kendo.dev/api/projects/1/issues \
-H "Authorization: Bearer your-token"json
[
{
"id": 42,
"key": "KD-42",
"title": "Add pagination to issues list",
"priority": 1,
"type": 0,
"lane_id": 2,
"assignee_id": 3,
"sprint_id": 5,
"...": "..."
},
{
"id": 43,
"key": "KD-43",
"title": "Fix email validation on login form",
"priority": 0,
"type": 1,
"lane_id": 1,
"assignee_id": null,
"sprint_id": null,
"...": "..."
}
]Enums
Priority
| Value | Label |
|---|---|
0 | Highest |
1 | High |
2 | Medium |
3 | Low |
4 | Lowest |
Type
| Value | Label |
|---|---|
0 | Feature |
1 | Bug |
See Also
- Comments API — Add comments to issues
- Time Entries API — Log time against issues
- Sprints API — Assign issues to sprints
- Issues & Board guide — Working with issues in the UI