Appearance
Reports API
Reports are feedback items submitted by users or external systems. Reports can be promoted to issues, dismissed, or reordered on the board. External systems use project tokens to submit reports via the API.
Permissions
| Action | Required Permission | Scope |
|---|---|---|
| List | Reports: Read | Reports within accessible projects |
| Create | Reports: Create | Within accessible projects (or via project token) |
| Promote | Reports: Update | Reports within accessible projects |
| Dismiss | Reports: Update | Reports within accessible projects |
| Reorder | Reports: Update | Reports within accessible projects |
| Delete | Reports: Delete | Reports within accessible projects |
Admins and project owners bypass all permission checks for project-scoped resources.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /api/projects/{projectId}/reports | List reports |
POST | /api/projects/{projectId}/reports | Create a report |
POST | /api/projects/{projectId}/reports/promote | Promote reports to an issue |
POST | /api/projects/{projectId}/reports/{reportId}/dismiss | Dismiss a report |
POST | /api/projects/{projectId}/reports/reorder | Reorder reports |
DELETE | /api/projects/{projectId}/reports/{reportId} | Delete a report |
List Reports
GET /api/projects/{projectId}/reports
Returns all reports for a project, ordered by their display order.
bash
curl https://{tenant}.kendo.dev/api/projects/1/reports \
-H "Authorization: Bearer your-token"json
[
{
"id": 1,
"title": "Login button not working on mobile",
"description": "The login button does not respond to taps on iOS Safari.",
"source": 1,
"author_name": "External CI",
"project_id": 1,
"created_by": null,
"promoted_issue_id": null,
"promoted_at": null,
"dismissed_at": null,
"order": 0,
"created_at": "2026-03-20T10:00:00.000000Z",
"updated_at": "2026-03-20T10:00:00.000000Z"
},
{
"id": 2,
"title": "Typo in onboarding flow",
"description": "Step 3 says 'conifgure' instead of 'configure'.",
"source": 0,
"author_name": null,
"project_id": 1,
"created_by": 4,
"promoted_issue_id": null,
"promoted_at": null,
"dismissed_at": null,
"order": 1,
"created_at": "2026-03-21T08:30:00.000000Z",
"updated_at": "2026-03-21T08:30:00.000000Z"
}
]Create Report
POST /api/projects/{projectId}/reports
Creates a new report. This endpoint supports two authentication methods:
- Bearer token (with
writescope) — creates a report withsource: 0(Manual) - Project token (with
report:createscope) — creates a report withsource: 1(Api). See Project Tokens for setup.
Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Report title, max 255 characters |
description | string | Yes | Report description, max 65,535 characters |
author_name | string | No | Name of the external reporter |
files | file[] | No | Up to 5 image attachments (jpg, png, gif, webp, bmp, tiff; max 3 MB each) |
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/reports \
-H "Authorization: Bearer your-project-token" \
-H "Content-Type: application/json" \
-d '{
"title": "Login button not working on mobile",
"description": "The login button does not respond to taps on iOS Safari.",
"author_name": "External CI"
}'json
{
"id": 1,
"title": "Login button not working on mobile",
"description": "The login button does not respond to taps on iOS Safari.",
"source": 1,
"author_name": "External CI",
"project_id": 1,
"created_by": null,
"promoted_issue_id": null,
"promoted_at": null,
"dismissed_at": null,
"order": 0,
"created_at": "2026-03-20T10:00:00.000000Z",
"updated_at": "2026-03-20T10:00:00.000000Z"
}With File Attachments
When uploading files, use multipart/form-data instead of JSON:
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/reports \
-H "Authorization: Bearer your-token" \
-F "title=Screenshot of the bug" \
-F "description=See attached screenshot for details." \
-F "author_name=External CI" \
-F "files[0][email protected]" \
-F "files[1][email protected]"Promote Reports
POST /api/projects/{projectId}/reports/promote
Promotes one or more reports into a single issue. The reports are marked as promoted and linked to the newly created issue. Returns the updated reports.
Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
report_ids | int[] | Yes | IDs of reports to promote (min 1) |
title | string | Yes | Issue title, max 255 characters |
description | string | Yes | Issue description, max 65,535 characters |
lane_id | int | No | Target lane for the new issue |
priority | int | No | Priority: 0=Highest, 1=High, 2=Medium, 3=Low, 4=Lowest |
type | int | No | Type: 0=Feature, 1=Bug |
assignee_id | int | No | User ID to assign the issue to |
sprint_id | int | No | Sprint ID to add the issue to |
epic_id | int | No | Epic ID to link the issue to |
estimated_minutes | int | No | Time estimate in minutes |
order | int | No | Display order within the lane |
blocked_by_ids | int[] | No | IDs of issues that block this issue |
blocks_ids | int[] | No | IDs of issues that this issue blocks |
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/reports/promote \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"report_ids": [1, 2],
"title": "Mobile login and onboarding fixes",
"description": "Combined report: login button broken on iOS + typo in onboarding.",
"priority": 1,
"type": 1
}'json
[
{
"id": 1,
"title": "Login button not working on mobile",
"description": "The login button does not respond to taps on iOS Safari.",
"source": 1,
"author_name": "External CI",
"project_id": 1,
"created_by": null,
"promoted_issue_id": 42,
"promoted_at": "2026-03-22T09:00:00.000000Z",
"dismissed_at": null,
"order": 0,
"created_at": "2026-03-20T10:00:00.000000Z",
"updated_at": "2026-03-22T09:00:00.000000Z"
},
{
"id": 2,
"title": "Typo in onboarding flow",
"description": "Step 3 says 'conifgure' instead of 'configure'.",
"source": 0,
"author_name": null,
"project_id": 1,
"created_by": 4,
"promoted_issue_id": 42,
"promoted_at": "2026-03-22T09:00:00.000000Z",
"dismissed_at": null,
"order": 1,
"created_at": "2026-03-21T08:30:00.000000Z",
"updated_at": "2026-03-22T09:00:00.000000Z"
}
]Dismiss Report
POST /api/projects/{projectId}/reports/{reportId}/dismiss
Marks a report as dismissed. Dismissed reports are not deleted but are excluded from the active reports view. This operation is idempotent.
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/reports/1/dismiss \
-H "Authorization: Bearer your-token"json
{
"id": 1,
"title": "Login button not working on mobile",
"description": "The login button does not respond to taps on iOS Safari.",
"source": 1,
"author_name": "External CI",
"project_id": 1,
"created_by": null,
"promoted_issue_id": null,
"promoted_at": null,
"dismissed_at": "2026-03-22T10:00:00.000000Z",
"order": 0,
"created_at": "2026-03-20T10:00:00.000000Z",
"updated_at": "2026-03-22T10:00:00.000000Z"
}Reorder Reports
POST /api/projects/{projectId}/reports/reorder
Updates the display order of reports. Each report's position in the array becomes its new order value (index 0 = order 0, index 1 = order 1, etc.). Returns all reports with updated order.
Request Fields
| Field | Type | Required | Description |
|---|---|---|---|
report_ids | int[] | Yes | Report IDs in the desired display order |
bash
curl -X POST https://{tenant}.kendo.dev/api/projects/1/reports/reorder \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"report_ids": [2, 1]
}'json
[
{
"id": 2,
"title": "Typo in onboarding flow",
"description": "Step 3 says 'conifgure' instead of 'configure'.",
"source": 0,
"author_name": null,
"project_id": 1,
"created_by": 4,
"promoted_issue_id": null,
"promoted_at": null,
"dismissed_at": null,
"order": 0,
"created_at": "2026-03-21T08:30:00.000000Z",
"updated_at": "2026-03-22T11:00:00.000000Z"
},
{
"id": 1,
"title": "Login button not working on mobile",
"description": "The login button does not respond to taps on iOS Safari.",
"source": 1,
"author_name": "External CI",
"project_id": 1,
"created_by": null,
"promoted_issue_id": null,
"promoted_at": null,
"dismissed_at": null,
"order": 1,
"created_at": "2026-03-20T10:00:00.000000Z",
"updated_at": "2026-03-22T11:00:00.000000Z"
}
]Delete Report
DELETE /api/projects/{projectId}/reports/{reportId}
Returns 204 No Content on success.
bash
curl -X DELETE https://{tenant}.kendo.dev/api/projects/1/reports/1 \
-H "Authorization: Bearer your-token"Enums
Source
| Value | Name | Description |
|---|---|---|
0 | Manual | Submitted by a user through the UI or API with a personal token |
1 | Api | Submitted by an external system using a project token |
See Also
- Project Tokens API — Create tokens for external report submission
- Tokens API — Manage personal access tokens
- Issues API — Issues that reports can be promoted to
- Projects API — Projects that reports belong to