Search (JQL)
The part of the tracker’s query language Kaiku understands — and, as plainly, the part it does not.
A subset, on purpose
Kaiku reads the query language of the tracker it is compatible with, but not all of it. This page lists what is understood. Read the last section before relying on a query in a script: on the REST API a query is never refused, and a part it did not understand does not narrow the result.
Fields
| Field | Compared against |
|---|---|
project | the project key |
status, statusCategory | the status name; the category as "To Do", "In Progress" or Done |
issuetype (or type), priority, resolution | the name |
assignee, reporter (or creator) | the username — not the display name, not the email |
key (or issuekey, id) | the issue key, such as ABC-12 |
summary, description, text | the text; text searches the summary, the description and every comment |
labels | any single label |
sprint | the sprint name |
parent | the parent key — direct children only |
epic | the epic key — the epic itself, its issues and their sub-tasks |
created, updated, duedate | a date |
archived | Kaiku’s own: mentioning it is what brings archived issues into the result |
| a project’s own column | by its name (Segment = AI), or as cf[20003] / customfield_20003 |
Field names are not case-sensitive, and a name with a space in it goes in quotes.
Operators and combining
=and!=— exact match, ignoring case.~and!~— contains: a plain substring, ignoring case. There is no word stemming, no wildcards and no relevance order.IN (…)andNOT IN (…).IS EMPTYandIS NOT EMPTY(also spelledIS NULL,IS NOT NULL). Writeassignee IS EMPTY, notassignee = EMPTY— the second matches nothing.>,>=,<,<=— oncreated,updatedandduedateonly.AND,ORand parentheses.ANDbinds tighter thanOR.- One function:
currentUser(), forassignee,reporterandcreator. ORDER BYa field,ASCorDESC, several fields separated by commas. Sortable:created,updated,priority,status,key,summary,duedate. Without it, the newest issues come first.
Dates
A date is written in full: created >= 2026-09-01, or updated < "2026-09-01 10:00". To ask for «the last week», compute the date yourself.
Relative dates — -7d, startOfDay(), now() — are not understood, and a clause with one matches every issue. created = 2026-09-01 matches nothing: compare a date with >= and <.
What is not there
- History operators:
WAS,CHANGED. - A
NOTin front of a clause. Use!=,!~orNOT IN. - Functions other than
currentUser():membersOf(),openSprints(),startOfWeek()and the rest. - Fields not in the table above:
component,fixVersion,watcher,worklogDateand the rest. ANDandORmust have a single space on each side: a query split over several lines is not read as intended.
A query is not refused
The REST search answers every query. A clause it cannot read, or one naming a field it does not know, is left out — it does not narrow the result. A misspelt field name therefore returns more issues, not an error.
!=andNOT INinclude the issues where the field is empty. The tracker you may know leaves them out.- A quoted value containing the words
in,not inor an operator sign (summary ~ "sign in page") is misread and matches every issue. Search for a shorter piece of the phrase instead.
The search tool of Kaiku’s own MCP server is stricter: it refuses a query with an unknown field or an unreadable clause, names what it could not read, and runs nothing. See MCP servers.
Something missing, or not as described here? Write to hello@kaiku.tech