# ProjectCanvas

> Saved dashboard canvas layout and manifest drift status.

Saved dashboard canvas layout and manifest drift status.

## Fields

| Field | Type | Description |
| --- | --- | --- |
| `project_id` * | string |  |
| `environment_id` * | string or null |  |
| `scope` * | `project`, `environment`, `default` |  |
| `canvas` * | [CanvasLayout](/docs/api/objects/canvas-layout/) |  |
| `etag` * | string |  |
| `managed_by_manifest` * | boolean |  |
| `drift` * | object |  |
| `warnings` * | array of [CanvasWarning](/docs/api/objects/canvas-warning/) |  |
| `source` | `api`, `manifest`, `default` |  |
| `updated_at` | string (date-time) or null |  |
| `updated_by` | [Actor](/docs/api/objects/actor/) or any or null |  |

\* always present

## Example

```json
{
  "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"
    }
  }
}
```

## Used by

- [Get a project's saved canvas layout](/docs/api/projects/#get-a-projects-saved-canvas-layout)
- [Save a project's canvas layout](/docs/api/projects/#save-a-projects-canvas-layout)
