---
title: "Get task by ticket ID"
method: GET
path: "/task/by-ticket-id/{ticketId}"
tags: ["Tasks"]
---

# Get task by ticket ID

`GET /task/by-ticket-id/{ticketId}`

## Request

- Base URL: `https://cloud.kaneo.app/api`
- URL: `https://cloud.kaneo.app/api/task/by-ticket-id/{ticketId}`
- Auth: HTTP bearer

Get a single task by its project key and number, such as KAN-12. Only tasks with current task:read permission and API key scope are considered. A match in an active project takes precedence, then the most recently archived project. If the ticket ID still matches multiple accessible tasks, narrow the lookup to a workspace with workspaceId or workspaceSlug, or to a single project with projectId.

## Path parameters

- `ticketId` string, required: Project key and task number, e.g. KAN-12.

## Query parameters

- `workspaceId` string: Select a workspace if the ticket ID exists in more than one.
- `workspaceSlug` string: Select a workspace by its slug instead of its ID.
- `projectId` string: Select a project if the ticket ID exists more than once.

## Response `200`

Task details

- TaskByTicketId
  - `id` string, required
  - `projectId` string, required
  - `position` number, nullable, required: Order within its column, ascending.
  - `number` number, nullable, required: Per-project counter shown as {projectSlug}-{number}.
  - `userId` string, nullable, required: The assignee, if any.
  - `title` string, required
  - `description` string, nullable, required
  - `descriptionDeferred` boolean: True when the list omits a large description; load the task detail or description pages to read it. Do not replace stored text with this null summary.
  - `status` string, required: The slug of the column the task sits in.
  - `priority` string, required: One of: no-priority, low, medium, high, urgent.
  - `startDate` string, date-time, nullable, required
  - `dueDate` string, date-time, nullable, required
  - `recurrence` TaskRecurrence: When a task with this rule moves into a final column, the next task is created with its dates moved forward by one interval from the completed task's due date.
    - `frequency` 'daily' | 'weekly' | 'monthly' | 'yearly', required
    - `interval` integer, required: Repeat every this many days, weeks, months, or years.
    - `weekdays` integer[]: Weekly rules only: the days to repeat on, 0 for Sunday to 6 for Saturday. Without them, a weekly rule repeats on the due date's weekday.
    - `timeZone` string, required: IANA time zone used to keep the next due date on the same local day and time.
  - `createdAt` string, date-time, required
  - `customFields` object[]
    - `fieldId` string, required
    - `value` string, required
  - `workspaceId` string, required: The workspace that owns the task's project.
  - `columnId` string, nullable, required: The referenced workflow column; null for virtual statuses and legacy tasks without a column reference.
  - `subtaskCounts` object
    - `completed` number, required
    - `total` number, required
  - `parentSubtaskCounts` object[]
    - `taskId` string, required
    - `completed` number, required
    - `total` number, required
  - `assigneeName` string, nullable, required
  - `assigneeId` string, nullable, required

## Other responses

- `400`: Invalid ticket ID
- `401`: Missing or invalid credentials
- `404`: No accessible task has this ticket ID
- `409`: Ticket ID matches multiple accessible tasks
- `429`: The API key exceeded its rate limit or usage quota. Wait the number of seconds in Retry-After before retrying. The X-RateLimit headers are sent only when the rate limit was hit.

## Changes

- **2026-10-26** `a29fbb97c906`: 4 breaking, 1 warning, 1 info
  - the `allOf[#/components/schemas/TaskWithAssignee]/allOf[#/components/schemas/Task]/recurrence` response's property type changed from `object, null` to no type for status `200`
  - removed the required property `allOf[#/components/schemas/TaskWithAssignee]/allOf[#/components/schemas/Task]/recurrence/frequency` from the response with the `200` status
  - removed the required property `allOf[#/components/schemas/TaskWithAssignee]/allOf[#/components/schemas/Task]/recurrence/interval` from the response with the `200` status
  - removed the required property `allOf[#/components/schemas/TaskWithAssignee]/allOf[#/components/schemas/Task]/recurrence/timeZone` from the response with the `200` status
  - …2 more
- **2026-10-26** `d1d37e98039b`: 1 info
  - added the optional property `allOf[#/components/schemas/TaskWithAssignee]/allOf[#/components/schemas/Task]/recurrence` to the response with the `200` status
- **2026-10-25** `e5d8b29270df`: 1 warning
  - removed the optional property `allOf[#/components/schemas/TaskWithAssignee]/allOf[#/components/schemas/Task]/recurrence` from the response with the `200` status
- **2026-10-18** `f46457f9e217`: 1 info
  - added the optional property `allOf[#/components/schemas/TaskWithAssignee]/allOf[#/components/schemas/Task]/recurrence` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/task/by-ticket-id/:ticketId/get.md)

---

[API](https://skmtc.dev/usekaneo/apis/kaneo-api.md) - [All operations](https://skmtc.dev/usekaneo/apis/kaneo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/usekaneo/apis/kaneo-api/revisions/93f78789100c?raw)
