Runs
A run is one execution of a network. It records the input, the status and output of every node, the models chosen, energy and token metrics, an evaluation summary, and a tamper-evident ledger. Runs are immutable history: you start one by executing a network or rendering a template, then read it back here.
Follow a run by polling Retrieve a run: the run record carries the overall status and each node's status and output, updated as the run proceeds. The other endpoints cover history and review: list and retrieve runs, read node outputs and artifacts, resolve approval gates, leave feedback, and read the run's proof and related runs.
Every endpoint on this page requires an access token. Send it as a bearer token, or rely on the session cookie forwarded by the same-origin /networks-api proxy.
- GET /runs List runs
- GET /runs/{run_id} Retrieve a run
- GET /runs/{run_id}/nodes/{node_id} Retrieve a node output
- GET /runs/{run_id}/artifacts List run artifacts
- GET /runs/{run_id}/feedback Retrieve run feedback
- POST /runs/{run_id}/feedback Submit run feedback
- GET /runs/{run_id}/approvals List run approvals
- POST /runs/{run_id}/approvals/{node_id} Decide a run approval
- GET /runs/{run_id}/hints List run hints
- POST /runs/{run_id}/apply_hints Apply run hints
- GET /runs/{run_id}/proof Retrieve run proof
- GET /runs/{run_id}/related List related runs
Paths are relative to /networks-api
The run object
One execution of a network.
Attributes
-
run_idstringIdentifier of the form
run-<UTC timestamp>-<random>, for examplerun-20260901-093000-a1b2c3. -
network_idstringThe network that was run.
-
network_versionstringThe version of the network that was run.
-
domain_idstringDomain the run executed under.
-
triggered_bystringWhat started the run. Anything unrecognised is recorded as
user.Possible values-
user -
trigger:email -
trigger:teams
-
-
statusstringOverall run status.
partialmeans some nodes degraded but useful output remains.Possible values-
started -
completed -
partial -
failed
-
-
errornullable stringFailure summary when the run did not complete cleanly.
-
started_atstringStart time, ISO 8601 with an explicit offset.
-
completed_atnullable stringCompletion time, ISO 8601, or null while running.
-
inputobjectThe input payload the run was started with.
-
metricsobjectAggregate run metrics.
Show child attributes Hide child attributes
-
total_tokensnullable integerTotal provider tokens across nodes.
-
total_duration_msnullable numberWall-clock duration in milliseconds.
-
total_watts_estimatednullable numberEstimated energy draw.
-
models_usedarray of stringsDistinct model ids used in the run.
-
-
evaluationobjectEvaluation summary for the run.
Show child attributes Hide child attributes
-
enabledbooleanWhether evaluation was enabled.
-
overall_scorenullable numberOverall score in
0–1. -
pass_thresholdnullable numberThreshold the score is compared against.
-
passednullable booleanWhether the run passed.
-
node_scoresobjectPer-node scores keyed by node id.
-
-
nodesobjectPer-node records keyed by node id. Large text fields are truncated here; fetch the full output with Retrieve a node output.
Show child attributes Hide child attributes
-
node_idstringThe node's id.
-
labelnullable stringDisplay label.
-
node_typenullable stringThe node's type.
-
statusstringNode status.
Possible values-
started -
completed -
failed -
partial -
skipped -
awaiting_approval
-
-
model_usednullable stringModel that produced the output, for LLM-backed nodes.
-
tokens_innullable integerPrompt tokens.
-
tokens_outnullable integerCompletion tokens.
-
duration_msnullable numberNode duration in milliseconds.
-
outputnullable objectThe node's result payload (truncated in this view).
-
errornullable stringError message when the node failed.
-
-
memory_graph_statusstringWhether the run has been indexed into the memory graph for related-run and hint lookups.
Possible values-
pending -
ready -
disabled
-
-
feedbacknullable objectFeedback submitted for the run, or null. See Retrieve run feedback.
-
pending_approvalsarray of objectsApproval gates currently waiting, each flagged
actionablewhen a decision can still be recorded. -
multi_agent_summarynullable objectAn additive, per-node card summary for rendering the run. Carries a
version, acardsarray, and asummarywith node counts.Show child attributes Hide child attributes
-
versionstringSchema version of the summary payload.
-
cardsarray of objectsOne card per node with its role, model, body, and status.
-
summaryobjectTotals:
total_nodes,completed,failed,skipped, andmodels_used.
-
{
"run_id": "run-20260901-093000-a1b2c3",
"network_id": "support-triage",
"network_version": "1.2",
"domain_id": "customer-success",
"triggered_by": "user",
"status": "completed",
"error": null,
"started_at": "2026-09-01T09:30:00Z",
"completed_at": "2026-09-01T09:30:12Z",
"input": {
"task": "Classify ticket 4471 and draft a reply."
},
"metrics": {
"total_tokens": 1840,
"total_duration_ms": 11840,
"total_watts_estimated": 2.1,
"models_used": [
"llama-3.3-70b-instruct"
]
},
"evaluation": {
"enabled": true,
"overall_score": 0.82,
"pass_threshold": 0.75,
"passed": true,
"node_scores": {
"draft_reply": 0.82
}
},
"nodes": {
"classify": {
"node_id": "classify",
"label": "Classify the ticket",
"node_type": "LLMAgent",
"status": "completed",
"model_used": "llama-3.3-70b-instruct",
"tokens_in": 320,
"tokens_out": 40,
"duration_ms": 2100,
"output": {
"model_id": "llama-3.3-70b-instruct",
"text": "Category: billing"
},
"error": null
},
"draft_reply": {
"node_id": "draft_reply",
"label": "Draft a reply",
"node_type": "LLMAgent",
"status": "completed",
"model_used": "llama-3.3-70b-instruct",
"tokens_in": 1200,
"tokens_out": 280,
"duration_ms": 9740,
"output": {
"model_id": "llama-3.3-70b-instruct",
"text": "Hello, thanks for reaching out..."
},
"error": null
}
},
"memory_graph_status": "ready",
"feedback": null,
"pending_approvals": [],
"multi_agent_summary": {
"version": "v1",
"cards": [
{
"node_id": "draft_reply",
"label": "Draft a reply",
"node_type": "LLMAgent",
"role": "agent",
"model_id": "llama-3.3-70b-instruct",
"body_format": "text",
"status": "completed",
"score": 0.82
}
],
"summary": {
"total_nodes": 2,
"completed": 2,
"failed": 0,
"skipped": 0,
"models_used": [
"llama-3.3-70b-instruct"
]
}
}
} List runs
GET /networks-api/runs
Returns run summaries, newest first.
Returns a page of lightweight run summaries for execution-history views. Node outputs are omitted by default; set include_nodes=true to include per-node records.
Filter by network_id, domain_id, status, and a started_after/started_before window. Page with limit and offset. Set include_total=false to stop scanning once the requested slice is collected, in which case total is returned as -1.
- Authentication
- Bearer token How it works
Query parameters
-
network_idstringOnly runs of this network.
-
domain_idstringOnly runs in this domain.
-
statusstringOnly runs with this status.
Possible values-
started -
completed -
partial -
failed
-
-
started_afterstringOnly runs started at or after this ISO 8601 time.
-
started_beforestringOnly runs started at or before this ISO 8601 time.
-
limitintegerMaximum runs to return.
0returns all matching runs. -
offsetintegerNumber of matching runs to skip.
-
include_nodesbooleanInclude per-node records in each summary.
-
include_totalbooleanCompute the total match count. When false,
totalis-1.
Returns
Returns a page of run summaries with the total count and the window.
curl "$VDF_BASE_URL/networks-api/runs?network_id=support-triage&limit=2" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs?network_id=support-triage&limit=2`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
params={
"network_id": "support-triage",
"limit": 2,
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"runs": [
{
"run_id": "run-20260901-093000-a1b2c3",
"network_id": "support-triage",
"network_name": "Support triage",
"network_version": "1.2",
"domain_id": "customer-success",
"status": "completed",
"started_at": "2026-09-01T09:30:00Z",
"completed_at": "2026-09-01T09:30:12Z",
"error": null,
"input_preview": "Classify ticket 4471 and draft a reply.",
"memory_graph_status": "ready"
}
],
"total": 1,
"limit": 2,
"offset": 0
} Retrieve a run
GET /networks-api/runs/{run_id}
Retrieves a full run record.
Returns the run object, including per-node records and the multi_agent_summary. Pass view=monitoring to skip the summary computation for a lighter payload while a run is in progress.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Query parameters
-
viewstringmonitoringomitsmulti_agent_summaryfor a lighter payload.Possible values-
full -
monitoring
-
Returns
Returns the run object.
Errors
- 404 No run with this identifier exists.
curl "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"network_id": "support-triage",
"network_version": "1.2",
"domain_id": "customer-success",
"status": "completed",
"started_at": "2026-09-01T09:30:00Z",
"completed_at": "2026-09-01T09:30:12Z",
"input": {
"task": "Classify ticket 4471 and draft a reply."
},
"metrics": {
"total_tokens": 1840,
"total_duration_ms": 11840,
"models_used": [
"llama-3.3-70b-instruct"
]
},
"evaluation": {
"enabled": true,
"overall_score": 0.82,
"pass_threshold": 0.75,
"passed": true,
"node_scores": {
"draft_reply": 0.82
}
},
"nodes": {
"draft_reply": {
"node_id": "draft_reply",
"node_type": "LLMAgent",
"status": "completed",
"model_used": "llama-3.3-70b-instruct",
"output": {
"model_id": "llama-3.3-70b-instruct",
"text": "Hello, thanks for reaching out..."
}
}
},
"memory_graph_status": "ready",
"feedback": null,
"pending_approvals": []
} Retrieve a node output
GET /networks-api/runs/{run_id}/nodes/{node_id}
Returns one node's full output payload.
Returns the full, untruncated output payload for a single node. The shape depends on the node type: LLM nodes return { "model_id", "text" }; tool nodes return { "tool_id", "ok", "result", "error" }.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
-
node_idstring RequiredThe node's identifier.
Returns
Returns the node's output payload.
Errors
- 404 No output exists for this node.
curl "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/nodes/draft_reply" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/nodes/draft_reply`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/nodes/draft_reply",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"model_id": "llama-3.3-70b-instruct",
"text": "Hello, thanks for reaching out..."
} List run artifacts
GET /networks-api/runs/{run_id}/artifacts
Returns the files a run produced.
Returns the artifacts written during the run, each with a relative path and size_bytes.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Returns
Returns the run's artifact list.
Errors
- 404 The run does not exist.
curl "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/artifacts" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/artifacts`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/artifacts",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"artifacts": [
{
"path": "artifacts/reply.md",
"size_bytes": 1842
}
]
} Retrieve run feedback
GET /networks-api/runs/{run_id}/feedback
Returns the feedback recorded for the run, or null if none has been submitted.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Returns
Returns the run's feedback, or null.
Errors
- 404 The run does not exist.
curl "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/feedback" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/feedback`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/feedback",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"feedback": {
"sentiment": "like",
"comment": "Accurate classification.",
"submitted_at": "2026-09-01T10:00:00Z",
"submitted_by_user_id": 42,
"source": "portal_agents_chat"
}
} Submit run feedback
POST /networks-api/runs/{run_id}/feedback
Records like/dislike feedback for a run.
Records a single piece of feedback for the run and feeds the signal into routing and tool-selection learning. Feedback can be submitted once per run.
sentiment must be like or dislike. source must be portal_agents_chat. Comments are trimmed to 2000 characters. The response echoes the stored feedback and how many learning decisions were updated.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Body parameters application/json
-
sentimentstring RequiredThe feedback signal.
Possible values-
like -
dislike
-
-
commentstringOptional free-text comment, trimmed to 2000 characters.
-
sourcestringWhere the feedback originated.
Possible values-
portal_agents_chat
-
-
message_idstringClient message id the feedback relates to.
-
execution_idstringClient execution id the feedback relates to.
Returns
Returns the stored feedback and a count of learning updates by kind.
Errors
- 404 The run does not exist.
- 409 Feedback has already been submitted for this run.
curl -X POST "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/feedback" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"sentiment": "like",
"comment": "Accurate classification."
}' const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/feedback`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
sentiment: 'like',
comment: 'Accurate classification.',
}),
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/feedback",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"sentiment": "like",
"comment": "Accurate classification.",
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"feedback": {
"sentiment": "like",
"comment": "Accurate classification.",
"submitted_at": "2026-09-01T10:00:00Z",
"submitted_by_user_id": 42,
"source": "portal_agents_chat"
},
"learning_updates": {
"model_routing": 2,
"tool_selection": 0,
"tool_backend_routing": 0,
"plan_rewrite": 0
}
} List run approvals
GET /networks-api/runs/{run_id}/approvals
Returns every approval gate the run has opened, pending or decided, along with a pending subset. Each gate carries the rules that matched, an is_open flag, and an actionable flag that is true only when a decision can still be recorded.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Returns
Returns the run's approval gates and the pending subset.
Errors
- 404 The run does not exist.
curl "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/approvals" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/approvals`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/approvals",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"approvals": [
{
"request_id": "apr-1",
"run_id": "run-20260901-093000-a1b2c3",
"node_id": "approve_send",
"node_label": "Approve before sending",
"status": "pending",
"message": "Review the drafted reply before it is sent.",
"matched_rules": [
{
"rule_id": "always",
"kind": "always"
}
],
"requested_at": "2026-09-01T09:30:05Z",
"expires_at": "2026-09-01T09:45:05Z",
"is_open": true,
"actionable": true
}
],
"pending": [
{
"request_id": "apr-1",
"node_id": "approve_send",
"status": "pending",
"is_open": true,
"actionable": true
}
]
} Decide a run approval
POST /networks-api/runs/{run_id}/approvals/{node_id}
Approves or rejects a waiting approval gate.
Records a decision on a waiting approval gate so the run can continue. decision must be approve or reject; an optional comment is trimmed to 2000 characters. A rejected gate follows the node's on-reject behaviour (halt, warn, or branch).
An approval node can be configured so that only an administrator may decide its gate; such a gate rejects any other caller.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
-
node_idstring RequiredThe approval node to decide.
Body parameters application/json
-
decisionstring RequiredThe decision to record.
Possible values-
approve -
reject
-
-
commentstringOptional reviewer comment, trimmed to 2000 characters.
Returns
Returns the recorded decision.
Errors
- 403 The caller may not resolve this approval gate.
- 404 The run or the approval request does not exist.
- 409 The gate is already resolved, or the run is no longer waiting for approval.
curl -X POST "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/approvals/approve_send" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"decision": "approve",
"comment": "Reply looks good."
}' const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/approvals/approve_send`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
decision: 'approve',
comment: 'Reply looks good.',
}),
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/approvals/approve_send",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"decision": "approve",
"comment": "Reply looks good.",
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"node_id": "approve_send",
"decision": "approve",
"status": "accepted"
} List run hints
GET /networks-api/runs/{run_id}/hints
Returns suggested improvements for a run.
Returns structured hints derived from the run and its most similar past runs — for example pinning a node to a model that scored better on a highly similar run, or surfacing feedback-loop text. Apply selected hints with Apply run hints.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Returns
Returns the hints for the run and their count.
Errors
- 404 The run does not exist.
curl "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/hints" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/hints`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/hints",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"count": 1,
"hints": [
{
"hint_id": "pin_model:run-20260901-093000-a1b2c3:run-20260830-084500-9f0e11:draft_reply:llama-3.3-70b-instruct",
"type": "pin_model",
"title": "Pin model for `draft_reply`",
"message": "A highly similar past run achieved higher proof. Consider pinning `draft_reply` to `llama-3.3-70b-instruct`.",
"confidence": 0.72,
"target": {
"node_id": "draft_reply"
},
"proposed": {
"strategy": "pinned",
"pinned_model": "llama-3.3-70b-instruct"
}
}
]
} Apply run hints
POST /networks-api/runs/{run_id}/apply_hints
Applies selected hints to produce a revised network.
Applies selected hints. By default (mode: new_network) a derived network is saved at version 1.0 with the changes applied, leaving the original untouched; mode: bump_version writes the changes back onto the original network with the requested bump. Omit hint_ids to apply every available hint. Only pin_model hints change the spec; others are reported as rejected.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Body parameters application/json
-
hint_idsarray of stringsHint ids to apply. Omit to apply all available hints.
-
modestringSave the result as a new derived network or as a new version of the original.
Possible values-
new_network -
bump_version
-
-
bumpstringVersion increment used when
modeisbump_version.Possible values-
none -
minor -
major
-
Returns
Returns which hints were applied or rejected and the resulting network specification.
Errors
- 404 The run or its base network does not exist.
curl -X POST "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/apply_hints" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"hint_ids": [
"pin_model:run-20260901-093000-a1b2c3:run-20260830-084500-9f0e11:draft_reply:llama-3.3-70b-instruct"
],
"mode": "new_network"
}' const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/apply_hints`, {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
hint_ids: [
'pin_model:run-20260901-093000-a1b2c3:run-20260830-084500-9f0e11:draft_reply:llama-3.3-70b-instruct',
],
mode: 'new_network',
}),
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.post(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/apply_hints",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
json={
"hint_ids": [
"pin_model:run-20260901-093000-a1b2c3:run-20260830-084500-9f0e11:draft_reply:llama-3.3-70b-instruct",
],
"mode": "new_network",
},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"status": "ok",
"base_network_id": "support-triage",
"base_network_version": "1.2",
"derived_network_id": "support-triage-derived-20260901-100500",
"derived_network_version": "1.0",
"applied": [
"pin_model:run-20260901-093000-a1b2c3:run-20260830-084500-9f0e11:draft_reply:llama-3.3-70b-instruct"
],
"rejected": [],
"warnings": []
} Retrieve run proof
GET /networks-api/runs/{run_id}/proof
Returns a composite proof score for the run combining evaluation quality, energy efficiency, and replay evidence, together with its provenance (the run's tamper-evident ledger hash and parent hash), cluster label, and any insights.
Proof is computed after the run is indexed into the memory graph. While that is still pending the response has status: pending and null proof fields.
- Authentication
- Bearer token How it works
Path parameters
-
run_idstring RequiredThe run's identifier.
Returns
Returns the run's proof score, components, provenance, cluster, and insights.
curl "$VDF_BASE_URL/networks-api/runs/run-20260901-093000-a1b2c3/proof" \
-H "Authorization: Bearer $VDF_ACCESS_TOKEN" const response = await fetch(`${process.env.VDF_BASE_URL}/networks-api/runs/run-20260901-093000-a1b2c3/proof`, {
headers: {
Authorization: `Bearer ${process.env.VDF_ACCESS_TOKEN}`,
},
});
if (!response.ok) throw new Error(`Request failed with status ${response.status}`);
const data = await response.json(); import os
import requests
response = requests.get(
f"{os.environ['VDF_BASE_URL']}/networks-api/runs/run-20260901-093000-a1b2c3/proof",
headers={"Authorization": f"Bearer {os.environ['VDF_ACCESS_TOKEN']}"},
timeout=30,
)
response.raise_for_status()
data = response.json() {
"run_id": "run-20260901-093000-a1b2c3",
"proof_score": 0.78,
"proof_components": {
"eval_norm": 0.82,
"energy_eff_norm": 0.6,
"determinism_score": 0.9,
"weights": {
"eval": 0.4,
"energy": 0.3,
"determinism": 0.3
}
},
"provenance": {
"ledger_sha256": "6f1e...c2",
"parent_run_hash": "9a3d...44",
"entry_count": 4
},
"cluster": {
"cluster_id": "support-triage:run-20260830-084500-9f0e11",
"attach_threshold": 0.86,
"strong_neighbors": [
"run-20260830-084500-9f0e11"
]
},
"insights": []
}