curl --request POST \
--url https://{host}/api/queries/{id}/cancel \
--header 'Authorization: Bearer <token>'import requests
url = "https://{host}/api/queries/{id}/cancel"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/api/queries/{id}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/api/queries/{id}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{host}/api/queries/{id}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{host}/api/queries/{id}/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/queries/{id}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"object": "<string>",
"session_id": "<string>",
"created": 123,
"status": "<string>",
"input": [
{
"role": "<string>",
"content": "<string>"
}
],
"output": [
{
"role": "<string>",
"content": [
{
"type": "<string>",
"text": "<string>"
}
]
}
],
"citations": [
{
"source": "<string>",
"section_paths": [
[
"<string>"
]
],
"pages": [
123
],
"score": 123,
"grounding": "<string>",
"kind": "<string>",
"source_path": "<string>",
"query_id": "<string>",
"steps": [
"<string>"
],
"artifact_name": "<string>",
"sources": [
"<string>"
]
}
],
"steps": [
{
"step_id": "<string>",
"status": "<string>",
"commentary": "<string>",
"fns": [
"<string>"
],
"strategy": {
"kind": "<string>",
"fns": [
"<string>"
],
"label": "<string>",
"scope": [
"<string>"
]
},
"tool_calls": [
{
"fn": "<string>",
"category": "<string>",
"args": {},
"result": "<unknown>",
"duration_ms": 123,
"ok": true,
"score_space": "<string>",
"error": "<string>"
}
],
"code": "<string>",
"trace_truncated": {
"truncated": true,
"dropped_documents": 123,
"dropped_tool_calls": 123
},
"cost": {
"tokens_in": 123,
"tokens_out": 123,
"decide_ms": 123,
"execute_ms": 123,
"tokens_in_cached": 123,
"tokens_in_cache_write": 123,
"tokens_in_fresh": 123
},
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123,
"cum_input_tokens": 123,
"cum_output_tokens": 123
}
],
"usage": {
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123
},
"runtime_ms": 123,
"model": "<string>",
"error": "<string>",
"previous_query_id": "<string>",
"comparison": [
{
"workflow": "<string>",
"query_id": "<string>",
"model": "<string>"
}
],
"feedback": {
"rating": "<string>",
"comment": "<string>"
},
"output_json": {},
"max_steps": 123,
"thinking_level": "<string>",
"rollup": {
"type": "<string>",
"query_id": "<string>",
"n_steps": 123,
"n_tool_calls": 123,
"by_category": {},
"total_hits": 123,
"duration_ms": 123,
"cache_read_tokens": 123,
"cache_write_tokens": 123
},
"synthesis": {
"type": "<string>",
"query_id": "<string>",
"status": "<string>",
"tokens_in": 123,
"tokens_out": 123,
"ms": 123,
"answer_preview": "<string>",
"tokens_in_cached": 123,
"tokens_in_cache_write": 123,
"tokens_in_fresh": 123
},
"trace_ref": "<string>"
}{
"message": "<string>",
"code": "<string>"
}Cancel an in-progress query turn
Idempotent — an already-terminal query is returned unchanged. On success the turn’s status becomes cancelled.
curl --request POST \
--url https://{host}/api/queries/{id}/cancel \
--header 'Authorization: Bearer <token>'import requests
url = "https://{host}/api/queries/{id}/cancel"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/api/queries/{id}/cancel', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/api/queries/{id}/cancel",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{host}/api/queries/{id}/cancel"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{host}/api/queries/{id}/cancel")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/queries/{id}/cancel")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"object": "<string>",
"session_id": "<string>",
"created": 123,
"status": "<string>",
"input": [
{
"role": "<string>",
"content": "<string>"
}
],
"output": [
{
"role": "<string>",
"content": [
{
"type": "<string>",
"text": "<string>"
}
]
}
],
"citations": [
{
"source": "<string>",
"section_paths": [
[
"<string>"
]
],
"pages": [
123
],
"score": 123,
"grounding": "<string>",
"kind": "<string>",
"source_path": "<string>",
"query_id": "<string>",
"steps": [
"<string>"
],
"artifact_name": "<string>",
"sources": [
"<string>"
]
}
],
"steps": [
{
"step_id": "<string>",
"status": "<string>",
"commentary": "<string>",
"fns": [
"<string>"
],
"strategy": {
"kind": "<string>",
"fns": [
"<string>"
],
"label": "<string>",
"scope": [
"<string>"
]
},
"tool_calls": [
{
"fn": "<string>",
"category": "<string>",
"args": {},
"result": "<unknown>",
"duration_ms": 123,
"ok": true,
"score_space": "<string>",
"error": "<string>"
}
],
"code": "<string>",
"trace_truncated": {
"truncated": true,
"dropped_documents": 123,
"dropped_tool_calls": 123
},
"cost": {
"tokens_in": 123,
"tokens_out": 123,
"decide_ms": 123,
"execute_ms": 123,
"tokens_in_cached": 123,
"tokens_in_cache_write": 123,
"tokens_in_fresh": 123
},
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123,
"cum_input_tokens": 123,
"cum_output_tokens": 123
}
],
"usage": {
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123
},
"runtime_ms": 123,
"model": "<string>",
"error": "<string>",
"previous_query_id": "<string>",
"comparison": [
{
"workflow": "<string>",
"query_id": "<string>",
"model": "<string>"
}
],
"feedback": {
"rating": "<string>",
"comment": "<string>"
},
"output_json": {},
"max_steps": 123,
"thinking_level": "<string>",
"rollup": {
"type": "<string>",
"query_id": "<string>",
"n_steps": 123,
"n_tool_calls": 123,
"by_category": {},
"total_hits": 123,
"duration_ms": 123,
"cache_read_tokens": 123,
"cache_write_tokens": 123
},
"synthesis": {
"type": "<string>",
"query_id": "<string>",
"status": "<string>",
"tokens_in": 123,
"tokens_out": 123,
"ms": 123,
"answer_preview": "<string>",
"tokens_in_cached": 123,
"tokens_in_cache_write": 123,
"tokens_in_fresh": 123
},
"trace_ref": "<string>"
}{
"message": "<string>",
"code": "<string>"
}Authorizations
Session token from POST /auth/login, sent as Authorization: Bearer <token>.
Headers
Date-based contract version, echoed back on the same header. Omit for the default (2026-07); send unstable for the in-development surface. An unrecognized value is rejected with 400 unsupported_api_version.
Path Parameters
Query turn id.
Response
The (now cancelled) query
One query turn. Read the answer from output[].content[].text.
Turn id, qry_<uuid>.
Always query, so a caller can tell this document apart from a session.
The session this turn belongs to. A turn that started a new one names it here.
Unix seconds
Where the turn is in its lifecycle.
The stored message array (plain-text content).
Show child attributes
Show child attributes
Output items; assistant text is {role, content:[{type: output_text, text}]}
Show child attributes
Show child attributes
What the answer was grounded in. Empty on a turn that cited nothing.
Show child attributes
Show child attributes
The turn's reasoning steps, reduced from its response.step events.
Show child attributes
Show child attributes
The turn's token totals. Embed and rerank bill on their own seam and are not counted here.
Show child attributes
Show child attributes
Wall time from turn start to terminal state.
The model that actually answered. Null before the turn resolves one.
Failure detail. Set on a failed turn.
The turn this one continues. Null on a session's first turn.
The sibling turns of the same Compare run. Null on a normal single query.
Show child attributes
Show child attributes
Thumbs-up/down recorded on this turn. Null until a caller submits some.
Show child attributes
Show child attributes
Present when a shape was used, or on a retrieval-only turn
The agentic tool-loop step cap this turn actually ran with, whether the request set it or the deployment default supplied it.
The thinking level this turn actually ran at. Null on the Claude-backed search_cc, which has no equivalent knob.
End-of-turn counters. Null on a turn the runtime never closed.
Show child attributes
Show child attributes
The answer completion's cost. Null on a turn that skipped synthesis, as retrieval-only turns do.
Show child attributes
Show child attributes
Blob key of the persisted trace. Fetch the trace itself from GET /queries/{id}/trace.
Was this page helpful?