curl --request GET \
--url https://app.chatobserver.com/api/v2/reports/canvas/plans/{planId} \
--header 'Authorization: Bearer <token>' \
--header 'x-workspace-id: <x-workspace-id>'const options = {
method: 'GET',
headers: {'x-workspace-id': '<x-workspace-id>', Authorization: 'Bearer <token>'}
};
fetch('https://app.chatobserver.com/api/v2/reports/canvas/plans/{planId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.chatobserver.com/api/v2/reports/canvas/plans/{planId}"
headers = {
"x-workspace-id": "<x-workspace-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"version": 1,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reportId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"changeSetId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"planHash": "<string>",
"documentHash": "<unknown>",
"dependencyHash": "<unknown>",
"base": {
"revision": 1,
"documentHash": "<unknown>"
},
"targetMode": "fixed",
"expiresAt": "2023-11-07T05:31:56Z",
"currentInputsMatch": true,
"requiredContexts": [
{
"id": "<string>",
"surface": "private_view",
"layoutMode": "fixed",
"canvasWidth": 123,
"viewport": {
"width": 123,
"height": 123
},
"scale": 9,
"locale": "<string>",
"timezone": "<string>",
"scenarioId": "<unknown>"
}
],
"assessment": {
"version": 1,
"assessmentId": "<unknown>",
"documentHash": "<unknown>",
"profile": {
"id": "<unknown>",
"version": 1
},
"coverage": {
"requiredPageContexts": 1,
"completedPageContexts": 1,
"unverifiedPageContexts": 1,
"complete": true
},
"structure": {
"status": "valid"
},
"render": {
"status": "valid"
},
"design": {
"status": "assessed",
"advisoryCount": 1,
"coverageGaps": [
"<unknown>"
]
},
"data": {
"status": "ready",
"issueCodes": [
"<unknown>"
]
},
"publication": {
"status": "not_published"
},
"safeToCommit": true,
"findingCount": "<unknown>"
},
"requiredAdvisoryAcknowledgmentCount": "<unknown>",
"pages": [
{
"id": "<string>",
"position": "<unknown>",
"title": "<string>",
"elementCount": "<unknown>"
}
]
},
"placements": {
"pageId": "<string>",
"data": [
{
"id": "<string>",
"type": "<unknown>",
"pageId": "<unknown>",
"parentId": "<unknown>",
"hidden": true,
"fixedPlacement": {
"x": 123,
"y": "<unknown>",
"width": 123,
"height": 123,
"z": 0,
"rotation": 0,
"flipX": true,
"flipY": true,
"anchor": "page",
"aspectLock": true
},
"responsivePlacement": {
"containerLayout": "stack",
"columnStart": 6,
"columnSpan": 6,
"row": 5000,
"order": 0,
"align": "start",
"justify": "start",
"minWidth": 1,
"maxWidth": "<unknown>",
"minHeight": "<unknown>",
"maxHeight": "<unknown>",
"aspectRatio": 1,
"padding": 160,
"gap": 160,
"breakpointOverrides": {
"desktop": {
"containerLayout": "stack",
"containerDirection": "row",
"containerColumns": 6,
"equalHeight": true,
"columnStart": 6,
"columnSpan": 6,
"row": 5000,
"order": 0,
"align": "start",
"justify": "start",
"minWidth": "<unknown>",
"maxWidth": "<unknown>",
"minHeight": "<unknown>",
"maxHeight": "<unknown>",
"aspectRatio": "<unknown>",
"padding": 160,
"gap": 160,
"hidden": true,
"paddingInsets": {
"top": 160,
"right": 160,
"bottom": 160,
"left": 160
},
"containerColumnWeights": [
123
]
},
"tablet": "<unknown>",
"mobile": "<unknown>"
},
"containerDirection": "column",
"containerColumns": 12,
"equalHeight": false,
"keepTogether": true,
"pageBreakBefore": false,
"hidden": true,
"paddingInsets": "<unknown>",
"containerColumnWeights": "<unknown>"
}
}
],
"pageInfo": {
"nextCursor": "<string>",
"total": "<unknown>"
}
},
"findings": {
"data": [
{
"id": "<unknown>",
"ruleId": "<unknown>",
"ruleVersion": 1,
"severity": "required",
"evidenceStatus": "verified",
"validity": "valid",
"pageId": "<unknown>",
"entityIds": [
"<unknown>"
],
"contextId": "<unknown>",
"issueCode": "<unknown>",
"observed": 123,
"expected": "<unknown>",
"unit": "css_px",
"recommendedAction": {
"kind": "increase_region_height"
},
"relationId": "<unknown>"
}
],
"requiredAdvisoryAcknowledgmentIds": [
"<string>"
],
"pageInfo": {
"offset": "<unknown>",
"nextOffset": "<unknown>",
"total": "<unknown>"
}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}Read measured plan and bounded placements/findings
Requires delegated reports:write consent, current native edit permission and workspace authoring availability. Data is independently authorized: composition consumes readable pinned outputs and never executes providers. A sealed stage is composed and measured in its declared fixed or responsive mode; the saved report changes only through atomic measured-plan commit. Read all finding pages and explicitly acknowledge required advisories. Creation streams at most 16 KiB; commit streams at most 32 MiB. Current-input checks and exact revision/hash guards reject moved inputs without rebasing. Identical commit retries return the original receipt after later edits or temporary-plan cleanup. Publication is separate. Workspace service keys are unsupported.
curl --request GET \
--url https://app.chatobserver.com/api/v2/reports/canvas/plans/{planId} \
--header 'Authorization: Bearer <token>' \
--header 'x-workspace-id: <x-workspace-id>'const options = {
method: 'GET',
headers: {'x-workspace-id': '<x-workspace-id>', Authorization: 'Bearer <token>'}
};
fetch('https://app.chatobserver.com/api/v2/reports/canvas/plans/{planId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.chatobserver.com/api/v2/reports/canvas/plans/{planId}"
headers = {
"x-workspace-id": "<x-workspace-id>",
"Authorization": "Bearer <token>"
}
response = requests.get(url, headers=headers)
print(response.text){
"data": {
"version": 1,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"reportId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"changeSetId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"planHash": "<string>",
"documentHash": "<unknown>",
"dependencyHash": "<unknown>",
"base": {
"revision": 1,
"documentHash": "<unknown>"
},
"targetMode": "fixed",
"expiresAt": "2023-11-07T05:31:56Z",
"currentInputsMatch": true,
"requiredContexts": [
{
"id": "<string>",
"surface": "private_view",
"layoutMode": "fixed",
"canvasWidth": 123,
"viewport": {
"width": 123,
"height": 123
},
"scale": 9,
"locale": "<string>",
"timezone": "<string>",
"scenarioId": "<unknown>"
}
],
"assessment": {
"version": 1,
"assessmentId": "<unknown>",
"documentHash": "<unknown>",
"profile": {
"id": "<unknown>",
"version": 1
},
"coverage": {
"requiredPageContexts": 1,
"completedPageContexts": 1,
"unverifiedPageContexts": 1,
"complete": true
},
"structure": {
"status": "valid"
},
"render": {
"status": "valid"
},
"design": {
"status": "assessed",
"advisoryCount": 1,
"coverageGaps": [
"<unknown>"
]
},
"data": {
"status": "ready",
"issueCodes": [
"<unknown>"
]
},
"publication": {
"status": "not_published"
},
"safeToCommit": true,
"findingCount": "<unknown>"
},
"requiredAdvisoryAcknowledgmentCount": "<unknown>",
"pages": [
{
"id": "<string>",
"position": "<unknown>",
"title": "<string>",
"elementCount": "<unknown>"
}
]
},
"placements": {
"pageId": "<string>",
"data": [
{
"id": "<string>",
"type": "<unknown>",
"pageId": "<unknown>",
"parentId": "<unknown>",
"hidden": true,
"fixedPlacement": {
"x": 123,
"y": "<unknown>",
"width": 123,
"height": 123,
"z": 0,
"rotation": 0,
"flipX": true,
"flipY": true,
"anchor": "page",
"aspectLock": true
},
"responsivePlacement": {
"containerLayout": "stack",
"columnStart": 6,
"columnSpan": 6,
"row": 5000,
"order": 0,
"align": "start",
"justify": "start",
"minWidth": 1,
"maxWidth": "<unknown>",
"minHeight": "<unknown>",
"maxHeight": "<unknown>",
"aspectRatio": 1,
"padding": 160,
"gap": 160,
"breakpointOverrides": {
"desktop": {
"containerLayout": "stack",
"containerDirection": "row",
"containerColumns": 6,
"equalHeight": true,
"columnStart": 6,
"columnSpan": 6,
"row": 5000,
"order": 0,
"align": "start",
"justify": "start",
"minWidth": "<unknown>",
"maxWidth": "<unknown>",
"minHeight": "<unknown>",
"maxHeight": "<unknown>",
"aspectRatio": "<unknown>",
"padding": 160,
"gap": 160,
"hidden": true,
"paddingInsets": {
"top": 160,
"right": 160,
"bottom": 160,
"left": 160
},
"containerColumnWeights": [
123
]
},
"tablet": "<unknown>",
"mobile": "<unknown>"
},
"containerDirection": "column",
"containerColumns": 12,
"equalHeight": false,
"keepTogether": true,
"pageBreakBefore": false,
"hidden": true,
"paddingInsets": "<unknown>",
"containerColumnWeights": "<unknown>"
}
}
],
"pageInfo": {
"nextCursor": "<string>",
"total": "<unknown>"
}
},
"findings": {
"data": [
{
"id": "<unknown>",
"ruleId": "<unknown>",
"ruleVersion": 1,
"severity": "required",
"evidenceStatus": "verified",
"validity": "valid",
"pageId": "<unknown>",
"entityIds": [
"<unknown>"
],
"contextId": "<unknown>",
"issueCode": "<unknown>",
"observed": 123,
"expected": "<unknown>",
"unit": "css_px",
"recommendedAction": {
"kind": "increase_region_height"
},
"relationId": "<unknown>"
}
],
"requiredAdvisoryAcknowledgmentIds": [
"<string>"
],
"pageInfo": {
"offset": "<unknown>",
"nextOffset": "<unknown>",
"total": "<unknown>"
}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": "<unknown>"
},
"requestId": "<string>"
}reports:write.Authorizations
Delegated application credential issued after Chatobserver account consent. Restricted to selected workspaces and explicitly supported MCP operations. The MCP server access token is a separate credential and cannot be used here.
Headers
Explicit workspace selected for the delegated account.
^ws_[a-f0-9]{32}$Path Parameters
Query Parameters
25620481 <= x <= 100x >= 0