Get Query Record
Returns one query record in full: the query, the retrieval depth, who ran it, and the pipeline steps in execution order with their metadata. The query.generate step’s metadata embeds every retrieved chunk, so the response can be large (up to 2 MiB).
Chunks from documents deleted since the run show as unavailable. For paginated views of the same chunks, use List Query Chunks, List Query Conflicts, and List Missing Chunks.
For the models and index versions the run used, read profile in List Query Records.
For how to read a run’s chunks, conflicts, and missing chunks together, see Investigate an Answer.
curl --request GET \
--url https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}', 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://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}"
req, _ := http.NewRequest("GET", 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.get("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"created_at": "2026-09-06T08:00:01.840000Z",
"evidence_bundle_id": "7d1f4c2e-8b3a-4e6d-9f0a-2b3c4d5e6f70",
"id": "3c9e3b1a-2f0a-4b7d-9d3e-1f2a3b4c5d6e",
"knowledge_space_id": "9b2e5b7a-3c1d-4e2f-8a9b-1c2d3e4f5a6b",
"mode": "fast",
"query": "What is the refund window?",
"source": "service_api",
"steps": [
{
"ended_at": "2026-09-06T08:00:00.050000Z",
"metadata": {
"degraded": false,
"durationMs": 0,
"requestedMode": "fast",
"resolvedMode": "fast",
"resolver": "explicit",
"selectionSource": "request"
},
"name": "query.route",
"started_at": "2026-09-06T08:00:00Z",
"status": "ok"
},
{
"ended_at": "2026-09-06T08:00:00.900000Z",
"metadata": {
"itemCount": 1
},
"name": "query.retrieve",
"started_at": "2026-09-06T08:00:00.050000Z",
"status": "ok"
},
{
"ended_at": "2026-09-06T08:00:01.840000Z",
"metadata": {
"eventCount": 5,
"evidenceBundle": {
"createdAt": "2026-09-06T08:00:00.900Z",
"id": "7d1f4c2e-8b3a-4e6d-9f0a-2b3c4d5e6f70",
"items": [
{
"citations": [
{
"documentAssetId": "6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b",
"documentVersion": 1,
"sectionPath": [
"Policies",
"Refunds"
]
}
],
"conflicts": [],
"freshness": {
"observedAt": "2026-09-05T10:00:00.000Z",
"sourceUpdatedAt": "2026-08-30T12:00:00.000Z",
"status": "fresh"
},
"metadata": {},
"nodeId": "a1f3c5e7-9b2d-4f6a-8c0e-1d2f3a4b5c6d",
"score": 0.82,
"scores": {
"final": 0.82,
"freshness": 0.9,
"rerank": 0.85,
"retrieval": 0.71
},
"text": "Refunds are issued within 14 days of purchase."
}
],
"missingEvidence": [],
"query": "What is the refund window?",
"state": "answerable"
},
"finishReason": "retrieval-evidence",
"queryOutcome": "answered"
},
"name": "query.generate",
"started_at": "2026-09-06T08:00:01.840000Z",
"status": "ok"
}
]
}Authorizations
Every request authenticates with an API key: Authorization: Bearer {API_KEY}. App endpoints take an app API key; knowledge endpoints take a knowledge base API key (Get Started).
Keep keys server-side; never embed them in client code. Requests with a missing or invalid key fail with HTTP 401 (unauthorized).
Path Parameters
Knowledge base ID: the last segment of the Service API endpoint shown in the knowledge base's API Access dialog (…/knowledge-fs/spaces/<knowledge base ID>), and the segment after /datasets/new/ in the address bar.
Query record ID: the x-query-run-id response header of Run Query, or id from List Query Records.
Response
The query record.
When the run was recorded, ISO 8601.
ID of the set of retrieved chunks the record refers to. No operation takes this ID. The chunks themselves are embedded in the query.generate step. null when the run recorded none.
Query record ID.
Internal ID of the knowledge base. Not the knowledge base ID in the path.
Retrieval depth of the run: fast, deep, or research.
The query text.
Images used in the original query, when present. Omitted for text-only queries.
Show child attributes
Show child attributes
Who produced the record: service_api, workflow, agent, mcp, or retrieval_test.
Steps of the run, in execution order.
Show child attributes
Show child attributes
Was this page helpful?
curl --request GET \
--url https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}', 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://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}"
req, _ := http.NewRequest("GET", 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.get("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{api_base_url}/knowledge-fs/spaces/{knowledge_base_id}/traces/{query_record_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"created_at": "2026-09-06T08:00:01.840000Z",
"evidence_bundle_id": "7d1f4c2e-8b3a-4e6d-9f0a-2b3c4d5e6f70",
"id": "3c9e3b1a-2f0a-4b7d-9d3e-1f2a3b4c5d6e",
"knowledge_space_id": "9b2e5b7a-3c1d-4e2f-8a9b-1c2d3e4f5a6b",
"mode": "fast",
"query": "What is the refund window?",
"source": "service_api",
"steps": [
{
"ended_at": "2026-09-06T08:00:00.050000Z",
"metadata": {
"degraded": false,
"durationMs": 0,
"requestedMode": "fast",
"resolvedMode": "fast",
"resolver": "explicit",
"selectionSource": "request"
},
"name": "query.route",
"started_at": "2026-09-06T08:00:00Z",
"status": "ok"
},
{
"ended_at": "2026-09-06T08:00:00.900000Z",
"metadata": {
"itemCount": 1
},
"name": "query.retrieve",
"started_at": "2026-09-06T08:00:00.050000Z",
"status": "ok"
},
{
"ended_at": "2026-09-06T08:00:01.840000Z",
"metadata": {
"eventCount": 5,
"evidenceBundle": {
"createdAt": "2026-09-06T08:00:00.900Z",
"id": "7d1f4c2e-8b3a-4e6d-9f0a-2b3c4d5e6f70",
"items": [
{
"citations": [
{
"documentAssetId": "6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b",
"documentVersion": 1,
"sectionPath": [
"Policies",
"Refunds"
]
}
],
"conflicts": [],
"freshness": {
"observedAt": "2026-09-05T10:00:00.000Z",
"sourceUpdatedAt": "2026-08-30T12:00:00.000Z",
"status": "fresh"
},
"metadata": {},
"nodeId": "a1f3c5e7-9b2d-4f6a-8c0e-1d2f3a4b5c6d",
"score": 0.82,
"scores": {
"final": 0.82,
"freshness": 0.9,
"rerank": 0.85,
"retrieval": 0.71
},
"text": "Refunds are issued within 14 days of purchase."
}
],
"missingEvidence": [],
"query": "What is the refund window?",
"state": "answerable"
},
"finishReason": "retrieval-evidence",
"queryOutcome": "answered"
},
"name": "query.generate",
"started_at": "2026-09-06T08:00:01.840000Z",
"status": "ok"
}
]
}