---
title: "Global search"
method: GET
path: "/search"
tags: ["Search"]
---

# Global search

`GET /search`

Search across tasks, projects, workspaces, comments, and activities in one workspace. Results are ranked by relevance and returned as a single flat list, each entry tagged with its `type`.

## Query parameters

- `q` string, required
- `type` 'all' | 'tasks' | 'projects' | 'workspaces' | 'comments' | 'activities'
- `workspaceId` string, required
- `projectId` string
- `limit` string
- `userEmail` string, email

## Response `200`

Ranked search results

- SearchResponse
  - `results` SearchResult[], required
    - `id` string, required
    - `type` 'task' | 'project' | 'workspace' | 'comment' | 'activity', required
    - `title` string, required
    - `description` string
    - `content` string — Matched body text, for comment and activity results. Activities get a rendered summary such as `changed status from Todo to In Progress`.
    - `projectId` string
    - `projectName` string
    - `projectSlug` string
    - `workspaceId` string
    - `workspaceName` string
    - `userId` string
    - `userName` string
    - `createdAt` string, date-time, required
    - `relevanceScore` number, required — Higher is a better match. Results are sorted by score, then by createdAt descending.
    - `taskNumber` number
    - `priority` string
    - `status` string
  - `totalCount` number, required — Total matches found before the `limit` slice, so a caller can tell that more exist.
  - `searchQuery` string, required — The query that was run.

## Other responses

- `400` — Invalid query, or workspace ID could not be determined
- `401` — Missing or invalid credentials
- `403` — No access to the workspace

## Changes

- **2026-08-24** `08bbb5bedb5d` — 3 breaking, 5 warning, 7 info
  - the `query` request parameter `workspaceId` became required
  - for the `query` request parameter `limit`, default value was changed from `20` to `20`
  - for the `query` request parameter `workspaceId`, the minLength was increased from `0` to `1`
  - removed the optional property `activities` from the response with the `200` status
  - …11 more
- **2026-07-11** `09053e1c8b21` — 2 breaking
  - for the `query` request parameter `limit`, default value was changed from `20` to `20`
  - for the `query` request parameter `limit`, the type/format was changed from `string`/`` to `integer`/``
- **2026-07-11** `32cece1ebe43` — 9 breaking, 5 info
  - the `activities/items/createdAt` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - the `activities/items/type` response's property type/format changed from ``/`` to `string`/`` for status `200`
  - the `comments/items/createdAt` response's property type/format changed from ``/`` to `string`/`date-time` for status `200`
  - the `comments/items/type` response's property type/format changed from ``/`` to `string`/`` for status `200`
  - …10 more
- …earlier changes not shown

[Full history](https://skmtc.dev/usekaneo/apis/kaneo-api/changes/search/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-service-production.skmtc.workers.dev/v1/apis/usekaneo/kaneo-api/revisions/9d1da42c10ce/schema)
