Skip to content

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

ActionRequired PermissionScope
ListReports: ReadReports within accessible projects
CreateReports: CreateWithin accessible projects (or via project token)
PromoteReports: UpdateReports within accessible projects
DismissReports: UpdateReports within accessible projects
ReorderReports: UpdateReports within accessible projects
DeleteReports: DeleteReports within accessible projects

Admins and project owners bypass all permission checks for project-scoped resources.

Endpoints

MethodEndpointDescription
GET/api/projects/{projectId}/reportsList reports
POST/api/projects/{projectId}/reportsCreate a report
POST/api/projects/{projectId}/reports/promotePromote reports to an issue
POST/api/projects/{projectId}/reports/{reportId}/dismissDismiss a report
POST/api/projects/{projectId}/reports/reorderReorder 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 write scope) — creates a report with source: 0 (Manual)
  • Project token (with report:create scope) — creates a report with source: 1 (Api). See Project Tokens for setup.

Request Fields

FieldTypeRequiredDescription
titlestringYesReport title, max 255 characters
descriptionstringYesReport description, max 65,535 characters
author_namestringNoName of the external reporter
filesfile[]NoUp 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

FieldTypeRequiredDescription
report_idsint[]YesIDs of reports to promote (min 1)
titlestringYesIssue title, max 255 characters
descriptionstringYesIssue description, max 65,535 characters
lane_idintNoTarget lane for the new issue
priorityintNoPriority: 0=Highest, 1=High, 2=Medium, 3=Low, 4=Lowest
typeintNoType: 0=Feature, 1=Bug
assignee_idintNoUser ID to assign the issue to
sprint_idintNoSprint ID to add the issue to
epic_idintNoEpic ID to link the issue to
estimated_minutesintNoTime estimate in minutes
orderintNoDisplay order within the lane
blocked_by_idsint[]NoIDs of issues that block this issue
blocks_idsint[]NoIDs 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

FieldTypeRequiredDescription
report_idsint[]YesReport 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

ValueNameDescription
0ManualSubmitted by a user through the UI or API with a personal token
1ApiSubmitted by an external system using a project token

See Also