JSON Protocol
This page summarizes the main HTTP payload shapes currently used by the web UI.
Read this page when you want exact backend payload shapes. If you want to understand why those payloads look this way, read Architecture / Pipeline first.
Common Types
Node
{
"id": "method:...",
"kind": "method",
"label": "foo",
"fqname": "MyPkg.foo",
"location": {"file": "src/a.jl", "line": 42, "column": 1},
"metadata": {"external": true, "external_group": "external_package"}
}
metadata.external_group is optional for external method nodes:
base_stdlibexternal_package
Other useful optional metadata fields include:
virtualsyntheticoverload_style
Edge
{
"id": "edge:...",
"kind": "call_possible",
"source": "method:...",
"target": "method:...",
"confidence": "possible",
"evidence": {
"kinds": ["call_possible"],
"engine": "da_source",
"file": "src/a.jl",
"line": 55
}
}
evidence contract:
evidence.kindsis required for every edge.evidence.kindsis an array of edge-kind strings.evidence.kindsalways includes the current top-levelkind.- Aggregated edges may include multiple values in
evidence.kinds. evidence.engine = "da_source"refers to the DepAtlasSource engine id.
confidence enum:
exactinferredpossibledynamic
confidence should be interpreted as evidence class, not certainty.
Endpoints
POST /api/v1/tasks
{
"analysis_path": "/abs/path/project",
"refresh_mode": "full"
}
This endpoint creates a new analysis task.
The normal product request flow only needs analysis_path and refresh_mode. JET runs use the dedicated JET-view endpoints below.
POST /api/v1/snapshots/{snapshot_id}/jet-views
Create or reuse a cached pure-JET graph view for a selected method node.
{
"method_node_id": "method:abc123",
"overload_site": {"file": "src/MyPkg.jl", "line": 42}
}
GET /api/v1/snapshots/{snapshot_id}/jet-views/{jet_view_id}
Fetch the status or completed result of a cached JET view.
GET /api/v1/tasks/{task_id}
This endpoint returns task lifecycle status, normalized config, progress, and any eventual snapshot id.
GET /api/v1/snapshots/{snapshot_id}/summary
This endpoint returns snapshot counts, supported layers, canonical project_modules, and diagnostics.
POST /api/v1/snapshots/{snapshot_id}/graph/query
This endpoint returns filtered nodes, edges, and pagination state for one graph layer.
Response note:
nodesis still the single renderable node list.node_appearanceexplains why each returned node appears in this query result.node_appearance[*].reasonsmay include:edge_endpointscope_matchsearch_match
The request body includes:
layerfilters- optional
page
Common filter fields include:
edge_kindsconfidence_minmodule_prefixshow_overloaded_functionsshow_base_stdlib_callsshow_external_package_calls
nodes is still the single renderable node list. node_appearance is query-context metadata that explains why each returned node is present.
{
"nodes": [{"id": "method:entry", "kind": "method", "label": "entry", "fqname": "Main.entry", "location": {"file": "src/Main.jl", "line": 3, "column": 1}, "metadata": {}}],
"edges": [{"id": "e_call_entry_mid", "kind": "call_inferred", "source": "method:entry", "target": "method:mid", "confidence": "inferred", "evidence": {"kinds": ["call_inferred"], "callee_group": "project", "overload_style": "none"}}],
"node_appearance": {
"method:entry": {"reasons": ["edge_endpoint", "search_match"]},
"method:mid": {"reasons": ["edge_endpoint"]}
},
"page": {"cursor": "1", "limit": 2000, "next_cursor": null, "total_edges": 1}
}
POST /api/v1/snapshots/{snapshot_id}/reachability/query
This endpoint returns a bounded reachability subgraph for one seed node.
Response note:
nodesis still the single renderable node list.node_appearanceexplains why each returned node appears in this reachability result.node_appearance[*].reasonsmay include:edge_endpointreachability_seed
The request body includes:
layernode_id- optional
direction - optional
depth - optional
filters - optional
limits
{
"seed_node_id": "method:entry",
"layer": "method",
"direction": "outgoing",
"depth": 3,
"nodes": [{"id": "method:entry", "kind": "method", "label": "entry", "fqname": "Main.entry", "location": {}, "metadata": {}}],
"edges": [],
"node_appearance": {
"method:entry": {"reasons": ["reachability_seed"]}
},
"reachability": {
"incoming": {"node_depths": {}, "edge_depths": {}},
"outgoing": {"node_depths": {}, "edge_depths": {}}
},
"truncated": false
}
GET /api/v1/snapshots/{snapshot_id}/node?id=<node_id>
This endpoint returns the node plus incoming and outgoing neighborhood information.
GET /api/v1/source?file=<abs-or-rel>&line=<n>&snapshot_id=<optional>
This endpoint returns a source snippet centered around one line.
If snapshot_id is provided, the backend resolves relative paths against that snapshot's project root.
GET /api/v1/fs/list?path=<optional>
This endpoint returns directory entries for the path browser used by the web UI.
Notes
- The web UI currently uses the
/api/v1/...namespace throughout. - Graph export JSON is documented separately in Export JSON.
Related Pages
- Want the backend reasoning behind these payloads? See Architecture / Pipeline.
- Want the Julia-side entrypoints instead of HTTP? See Julia API.