Skip to content

ProjectCanvas

View as Markdown

Saved dashboard canvas layout and manifest drift status.

Field Type Description
project_id * string
environment_id * string or null
scope * project, environment, default
canvas * CanvasLayout
etag * string
managed_by_manifest * boolean
drift * object
warnings * array of CanvasWarning
source api, manifest, default
updated_at string (date-time) or null
updated_by Actor or any or null

* always present

{
"project_id": "string",
"environment_id": "string",
"scope": "project",
"canvas": {
"layout": "manual",
"direction": "LR",
"nodes": {
"services.web": {
"x": 0,
"y": 0
}
},
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
}
},
"etag": "\"1\"",
"managed_by_manifest": false,
"drift": {
"detected": false,
"reason": "none",
"manifest_canvas": {
"layout": "manual",
"direction": "LR",
"nodes": {
"services.web": {
"x": 0,
"y": 0
}
},
"viewport": {
"x": 0,
"y": 0,
"zoom": 1
}
}
},
"warnings": [
{
"path": "/canvas/nodes/services.web",
"code": "canvas_node_unknown",
"message": "Canvas node is not declared.",
"fix": "Remove this canvas node or declare the resource."
}
],
"source": "api",
"updated_at": "2026-10-22T13:05:00Z",
"updated_by": {
"type": "agent",
"id": "tok_01jbx2m9k7q4r8t5v6w3y0z1tk",
"display": "Stewart Webb via agent claude-code-on-stewart-laptop",
"via_agent": {
"id": "tok_01jbx2m9k7q4r8t5v6w3y0z1tk",
"name": "claude-code-on-stewart-laptop"
},
"on_behalf_of": {
"id": "usr_01jbx2m9k7q4r8t5v6w3y0z1us",
"display": "Stewart Webb"
}
}
}