GraphSchemaResponse
Introspection of the graph query surface: the node types, edge types, queryable fields, and engine limits available to selectors. Prefer reading it at startup over hardcoding the vocabulary.
Properties
schemaVersionstring requiredThe dated revision of the graph contract this response describes, for example ‘2026-07-29’.- The selectable node types.
- ↳
nameenum requiredThe node type name, usable as anchor.nodeType.Values:resource,stack - ↳
selectableFieldsarray[string] requiredField names usable in anchor match.fields predicates for this node type. This is the widest of the three vocabularies. - ↳
projectableFieldsarray[string] requiredField names usable in return.fields projections, and — for node types that carry a document — in a traverse step’s target.match. Naming a field outside this list returns a 400. - ↳
groupByFieldsarray[string] requiredField names usable in aggregate.groupBy for this node type. Naming a field outside this list returns a 400. Empty for node types that cannot be aggregated. - ↳
identitystring requiredHow a node of this type is identified in a response and how a selector names one. For stacks the two spellings differ, and the field lists cannot say so: they name fields, never formats. - ↳
fieldValuesmap[string]array requiredFor the subset of selectableFields whose values are a fixed, closed set defined in code, the values themselves, keyed by field name. Absence from this map means no fixed set is advertised, not that the field has none; where such a field also appears in groupByFields, aggregate on it to discover its values. - The traversable edge types.
- ↳
namestring requiredThe edge type name, usable in traverse[].edgeTypes. - ↳
fromenum requiredThe node type at the edge’s source.Values:resource,stack - ↳
toenum requiredThe node type at the edge’s destination.Values:resource,stack - ↳
assertsstring requiredWhat the presence of this edge asserts about the two nodes it connects, and which end is which. - ↳
singleHopboolean requiredWhether this edge type is walked in exactly one hop. A traverse step naming one must leave depth unset or set depth.max to 1. - ↳
directionsarray[string] requiredThe traversal directions this edge type can be walked in, listed in the order ‘in’, ‘out’, ‘both’. A traverse step naming a direction absent from this list is rejected. - ↳
basisenum requiredHow edges of this type are produced.Values:declared,inferred metricOpsarray[string] requiredThe aggregate metric operations usable in aggregate.metrics[].op. A selector naming an operation absent from this list is rejected rather than answered with a differently-computed metric.- Engine limits applied to every query.
- ↳
maxDepthinteger requiredMaximum traversal depth per step. A selector limit: a step whose depth.max exceeds it is rejected. - ↳
maxTraverseStepsinteger requiredMaximum number of traversal steps per query. A selector limit: a query with more steps is rejected. - ↳
maxScopeAccountsinteger requiredMaximum number of cloud accounts scope.accounts may list. A selector limit: a longer list is rejected. - ↳
maxScopeStacksinteger requiredMaximum number of stacks scope.stacks may list. A selector limit: a longer list is rejected. - ↳
maxGroupByFieldsinteger requiredMaximum number of fields aggregate.groupBy may name. A selector limit: naming more is rejected. - ↳
maxAnchorNodesinteger requiredMaximum number of anchor nodes one query resolves, and the upper bound on anchor.limit. When more nodes match, the result is clipped and reported as truncated - except under a selector that also traverses, where an engine-imposed clip is rejected instead. Also a selector limit: a match.fields[…].in list longer than this is rejected. - ↳
maxFanoutinteger requiredMaximum new nodes discovered per traversal level. A result limit. - ↳
maxNodesinteger requiredMaximum total nodes held by one query evaluation. A result limit. - ↳
maxPathsinteger requiredMaximum evidence paths returned. A result limit. - ↳
maxRecordedCrossingsinteger requiredMaximum number of edge crossings a traversal step records while walking. A result that reaches this bound is returned with resultMode ’truncated’ rather than rejected. - ↳
maxPageSizeinteger requiredMaximum page size. Applied silently rather than as a rejection or a truncation: a page.pageSize above this value is reduced to it.