Synthesized concept layer — list, get, related, coverage, synthesize.
Understanding
Understanding is the synthesized concept layer: LLM-extracted concepts, themes, and relationships about a scope. Built async; the responses carry _partial: true until the synthesizer ships fully.
Stability: beta for reads; experimental for POST /v1/understanding/synthesize.
GET /v1/understanding
GET /v1/understanding
?scope=org:acme/dept:eng
&topic=B2B+SaaS
&depth=2
&limit=50
Response
{
"items": [
{
"concept_id": "cn_01HX...",
"scope": "org:acme/dept:eng",
"name": "Q3 renewal motion",
"topic": "sales_process",
"version": 7,
"summary": "Multi-touch renewal cycle starting with POC extension at quarter mark...",
"supports": ["fact_01HX...", "ep_01HX..."],
"related": [{ "concept_id": "cn_01HY...", "relation": "specializes" }],
"confidence": 0.74,
"valid_from": "2026-05-10T00:00:00Z"
}
],
"_partial": true
}
GET /v1/understanding/
Returns the full concept record.
GET /v1/understanding//related
Walks the relation graph from a concept.
GET /v1/understanding/{concept_id}/related
?relation=specializes
&depth=2
&limit=50
relation ∈ { specializes, generalizes, contrasts, co_occurs, causes }.
GET /v1/understanding/coverage
A snapshot of synthesis coverage across topics in a scope.
GET /v1/understanding/coverage?scope=org:acme/dept:eng
Response
{
"scope": "org:acme/dept:eng",
"concept_count": 421,
"by_topic": [
{ "topic": "sales_process", "concepts": 38, "avg_confidence": 0.74 },
{ "topic": "product_features", "concepts": 92, "avg_confidence": 0.81 },
{ "topic": "customer_personas", "concepts": 24, "avg_confidence": 0.62 }
],
"synthesis_lag": "P2D",
"_partial": true
}
POST /v1/understanding/synthesize
Capability: understanding.synthesize
Trigger an on-demand synthesis pass for a scope. Returns 202 with a lifecycle stream URL. Stability: experimental.
{
"scope": "org:acme/dept:eng",
"topics": ["sales_process"],
"force": false
}
Response
{
"job_id": "synth_01HX...",
"status": "running",
"lifecycle_stream": "/v1/lifecycle/stream?job_id=synth_01HX..."
}
If the synthesizer isn't configured, returns 503 with SYNTHESIZER_UNCONFIGURED.