Comment text, max 10,000 characters. Supports Markdown and @mentions.
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/issues/42/comments \ -H "Authorization: Bearer your-token" \ -H "Content-Type: application/json" \ -d '{ "content": "The pagination is working, but we should add a `per_page` parameter. @jasper what do you think?" }'
json
{ "id": 10, "content": "The pagination is working, but we should add a `per_page` parameter. @jasper what do you think?", "is_pinned": false, "user_id": 1, "issue_id": 42, "created_at": "2026-03-13T14:00:00.000000Z"}
curl -X PUT https://{tenant}.kendo.dev/api/projects/1/issues/42/comments/10 \ -H "Authorization: Bearer your-token" \ -H "Content-Type: application/json" \ -d '{ "content": "The pagination is working. Added a `per_page` parameter in the follow-up PR." }'
json
{ "id": 10, "content": "The pagination is working. Added a `per_page` parameter in the follow-up PR.", "is_pinned": false, "user_id": 1, "issue_id": 42, "created_at": "2026-03-13T14:00:00.000000Z"}
Each issue can have at most one pinned comment, surfaced at the top of the comment section regardless of pagination. Pinning a different comment unpins the previous one. Pinning requires Issues: Update permission — it curates the issue, so comment authorship alone does not grant it.
POST /api/projects/{projectId}/issues/{issueId}/comments/{commentId}/pin — pin DELETE /api/projects/{projectId}/issues/{issueId}/comments/{commentId}/pin — unpin
Both return 200 OK with the updated comment (is_pinned reflects the new state).
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/issues/42/comments/10/pin \ -H "Authorization: Bearer your-token"
Comments API
Comments are threaded discussions on issues. Adding a comment notifies the issue assignee and any @mentioned users.
Permissions
Admins and project owners bypass all permission checks for project-scoped resources.
Endpoints
GET/api/projects/{projectId}/issues/{issueId}/commentsPOST/api/projects/{projectId}/issues/{issueId}/commentsPUT/api/projects/{projectId}/issues/{issueId}/comments/{commentId}DELETE/api/projects/{projectId}/issues/{issueId}/comments/{commentId}POST/api/projects/{projectId}/issues/{issueId}/comments/{commentId}/pinDELETE/api/projects/{projectId}/issues/{issueId}/comments/{commentId}/pinCreate Comment
POST /api/projects/{projectId}/issues/{issueId}/commentsRequest Fields
contentUpdate Comment
PUT /api/projects/{projectId}/issues/{issueId}/comments/{commentId}Request Fields
contentDelete Comment
DELETE /api/projects/{projectId}/issues/{issueId}/comments/{commentId}Returns
204 No Contenton success.Pin / Unpin Comment
Each issue can have at most one pinned comment, surfaced at the top of the comment section regardless of pagination. Pinning a different comment unpins the previous one. Pinning requires Issues: Update permission — it curates the issue, so comment authorship alone does not grant it.
POST /api/projects/{projectId}/issues/{issueId}/comments/{commentId}/pin— pinDELETE /api/projects/{projectId}/issues/{issueId}/comments/{commentId}/pin— unpinBoth return
200 OKwith the updated comment (is_pinnedreflects the new state).See Also