curl --request GET \
--url https://{host}/api/contexts/{slug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{host}/api/contexts/{slug}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/api/contexts/{slug}', 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/contexts/{slug}",
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://{host}/api/contexts/{slug}"
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://{host}/api/contexts/{slug}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/contexts/{slug}")
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{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"kind": "search",
"created_by": "<string>",
"description": "<string>",
"is_optimizing": true,
"has_sources": true,
"is_curating": true,
"is_importing": true,
"is_exploring": true,
"is_restoring": true,
"is_grooming": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"workspace": "<string>",
"guide": "<string>",
"manifest": {
"curate": {
"chunks": {
"enabled": true,
"embedding_model": "multilingual-e5-large",
"chunking": {
"strategy": "markdown_heading",
"target_size": 512,
"overlap": 64,
"respect_sections": true
},
"keyword": {
"enabled": true
}
},
"artifacts": {
"enabled": false,
"artifact_model": "lite",
"artifact_types": [
{
"name": "<string>",
"kind": "topic",
"scope": "corpus",
"icon": "<string>",
"description": "<string>",
"coverage": [
"<string>"
],
"sections": [
"<string>"
],
"min_doc_count": 1,
"format": "markdown",
"columns": [
{
"name": "<string>",
"type": "TEXT",
"description": "<string>"
}
],
"natural_key": [
"<string>"
]
}
],
"edge_types": [
{
"name": "<string>",
"from": "<string>",
"to": "<string>",
"description": "<string>",
"attributes": [
"<string>"
]
}
],
"min_doc_count": 1,
"max_tokens": 1500,
"max_doc_chars": 60000,
"extraction_window_chars": 0,
"mention_max_chars": 400,
"max_mentions_per_artifact": 40,
"mention_context_chars": 8000,
"max_artifacts_per_type": 10000
}
},
"optimize": {
"schedule": "0 * * * *",
"latency_threshold_ms": 60000,
"min_group_size": 2,
"eval_pass_rate_threshold": 1,
"max_iterations": 20
},
"search": {
"instructions": "<string>"
}
},
"semantic_index": "<string>",
"keyword_index": "<string>",
"optimize_task_id": "<string>",
"optimize_score": 123,
"optimize_iterations": 123,
"last_optimized_at": "2023-11-07T05:31:56Z",
"last_curated_at": "2023-11-07T05:31:56Z",
"last_source_import_at": "2023-11-07T05:31:56Z",
"curate_task_id": "<string>",
"import_task_id": "<string>",
"explore_task_id": "<string>",
"restore_task_id": "<string>",
"manifest_suggestion": {
"matches": [
{
"template_id": "<string>",
"rationale": "<string>",
"confidence": 123
}
],
"none": true,
"explored_at": "2023-11-07T05:31:56Z",
"task_id": "<string>"
},
"sample_queries": [
"<string>"
],
"groom_task_id": "<string>",
"groom_artifact_count": 123,
"last_groomed_at": "2023-11-07T05:31:56Z",
"stats": {
"tasks_total": 123,
"tasks_active": 123,
"tasks_completed": 123,
"tasks_failed": 123,
"tasks_cancelled": 123,
"tokens_total": 123,
"runtime_seconds": 123
}
}{
"message": "<string>",
"code": "<string>"
}Get a context
One context and its derived lifecycle flags.
curl --request GET \
--url https://{host}/api/contexts/{slug} \
--header 'Authorization: Bearer <token>'import requests
url = "https://{host}/api/contexts/{slug}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/api/contexts/{slug}', 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/contexts/{slug}",
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://{host}/api/contexts/{slug}"
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://{host}/api/contexts/{slug}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/api/contexts/{slug}")
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{
"id": "<string>",
"slug": "<string>",
"name": "<string>",
"kind": "search",
"created_by": "<string>",
"description": "<string>",
"is_optimizing": true,
"has_sources": true,
"is_curating": true,
"is_importing": true,
"is_exploring": true,
"is_restoring": true,
"is_grooming": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"workspace": "<string>",
"guide": "<string>",
"manifest": {
"curate": {
"chunks": {
"enabled": true,
"embedding_model": "multilingual-e5-large",
"chunking": {
"strategy": "markdown_heading",
"target_size": 512,
"overlap": 64,
"respect_sections": true
},
"keyword": {
"enabled": true
}
},
"artifacts": {
"enabled": false,
"artifact_model": "lite",
"artifact_types": [
{
"name": "<string>",
"kind": "topic",
"scope": "corpus",
"icon": "<string>",
"description": "<string>",
"coverage": [
"<string>"
],
"sections": [
"<string>"
],
"min_doc_count": 1,
"format": "markdown",
"columns": [
{
"name": "<string>",
"type": "TEXT",
"description": "<string>"
}
],
"natural_key": [
"<string>"
]
}
],
"edge_types": [
{
"name": "<string>",
"from": "<string>",
"to": "<string>",
"description": "<string>",
"attributes": [
"<string>"
]
}
],
"min_doc_count": 1,
"max_tokens": 1500,
"max_doc_chars": 60000,
"extraction_window_chars": 0,
"mention_max_chars": 400,
"max_mentions_per_artifact": 40,
"mention_context_chars": 8000,
"max_artifacts_per_type": 10000
}
},
"optimize": {
"schedule": "0 * * * *",
"latency_threshold_ms": 60000,
"min_group_size": 2,
"eval_pass_rate_threshold": 1,
"max_iterations": 20
},
"search": {
"instructions": "<string>"
}
},
"semantic_index": "<string>",
"keyword_index": "<string>",
"optimize_task_id": "<string>",
"optimize_score": 123,
"optimize_iterations": 123,
"last_optimized_at": "2023-11-07T05:31:56Z",
"last_curated_at": "2023-11-07T05:31:56Z",
"last_source_import_at": "2023-11-07T05:31:56Z",
"curate_task_id": "<string>",
"import_task_id": "<string>",
"explore_task_id": "<string>",
"restore_task_id": "<string>",
"manifest_suggestion": {
"matches": [
{
"template_id": "<string>",
"rationale": "<string>",
"confidence": 123
}
],
"none": true,
"explored_at": "2023-11-07T05:31:56Z",
"task_id": "<string>"
},
"sample_queries": [
"<string>"
],
"groom_task_id": "<string>",
"groom_artifact_count": 123,
"last_groomed_at": "2023-11-07T05:31:56Z",
"stats": {
"tasks_total": 123,
"tasks_active": 123,
"tasks_completed": 123,
"tasks_failed": 123,
"tasks_cancelled": 123,
"tokens_total": 123,
"runtime_seconds": 123
}
}{
"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
Context slug or UUID.
Response
The context
What context endpoints return — the stored context plus the lifecycle flags derived from its in-flight tasks.
Stable UUID. Accepted anywhere {slug} is.
URL-safe name, unique within the project. Mutable via PUT.
Human-readable display name.
How the context is built. search — built from source documents, and must be curated before it can be queried. work — built from traces of work done, queryable immediately, consolidated by groom rather than curate.
Principal that created the context.
Free-text summary of what the context holds.
An optimize task is in flight.
The source tree holds at least one file. False blocks curate.
A curate task is in flight.
An import task is in flight.
An explore task is in flight.
A restore task is in flight.
A groom task is in flight. Work contexts only.
When the context was created.
When the context last changed.
Owning workspace. Absent off a workspace-enabled cluster.
High-level standing instructions the query runtime reads on every turn.
Pinned manifest document. Absent when the context runs on validator defaults.
Show child attributes
Show child attributes
Host of the index backing this context's vector retrieval. Null until a curate resolves one.
Host of the index backing keyword retrieval. The same host as semantic_index today — the two names are separate seams over one index.
The optimize task — the running one, or the last to finish.
Eval pass rate the last optimize's best iteration scored.
How many candidate manifests the last run tried.
When an optimize last persisted a tuned manifest.
When a curate last flipped a new index version live.
When sources were last staged by an upload or import.
The curate task — the running one, or the last to finish.
The import task — the running one, or the last to finish.
The explore task — the running one, or the last to finish.
The restore task — the running one, or the last to finish.
Outcome of the last explore run, pinned to the context row. A proposal only — apply it by writing the manifest and forcing a curate.
Show child attributes
Show child attributes
Example questions the curated corpus can answer, written by the last curate.
One example question.
The groom task — the running one, or the last to finish.
Artifacts the last groom left in the work context.
When a groom last consolidated the work context.
Aggregate task counters. Populated only on the list endpoint.
Show child attributes
Show child attributes
Was this page helpful?