Get every widget on one page
/dashboard/{id}/page/{pageKey}/data
Path Parameters
Resource id
Resource id
Query Parameters
Pass 1 to read the DRAFT (a manager previewing their edits). Requires edit access: 403 for anyone else. A dashboard with no draft answers the published one. Never cached.
1true
IANA time zone for date presets. An invalid zone falls back to UTC.
A dashboard filter value, once per value. A YYYY-MM-DD..YYYY-MM-DD range, a preset name or me for the caller. 400 filter_invalid on a bad value.
Response Body
assistant_disabledllm_not_configurednot_permittednull
can_manage, there is a draft, and the dashboard has been published (a never-published dashboard has no live version to go back to).
can_manage and there is a draft to publish.
The pending draft, present only for a caller with can_manage; everyone else sees the published definition.
8 properties
The AI client's display name, as on the dashboard itself.
4 properties
The guard on PUT /dashboard/{id}/draft. Moves on every draft save, publish and discard.
A pending draft exists. Only a caller with can_manage is ever shown the draft itself.
1 property
The live dashboard was saved after the pending draft began, so publishing would replace that save. Only ever true for a caller with can_manage; the Elaichi app warns in words and sends live_revision on publish only after the person confirms.
The person's picture: their stored profile picture, else a Gravatar URL (d=404, 96px) derived from their email (the address itself is not sent), else null. Draw initials when it is null or the image fails to load.
Why publishing would fail right now (a widget that does not validate), else null. A source the publisher cannot read is checked by the publish itself.
At most three sources the caller can read. The total is source_summary; the full set is sources on the detail.
4 properties
collectiontoolboxautomation
The connector slug when the source has exactly one; null otherwise, never guessed.
2 properties
5 properties
draft_only: never published, so only editors can open it. published_with_changes: live, with a pending draft.
publisheddraft_onlypublished_with_changes
The connected AI client's display name ("Claude") when updated_via is mcp; null when that client is unknown. Never an internal id.
How the last edit was made; null for edits that predate the draft layer.
consoleagentmcpapinull
Each declared filter, resolved for this read (defaults, presets in the viewer zone, me).
date_range filters with a value only: the earliest and latest YYYY-MM-DD (viewer zone) of the date fields this page binds the filter to, read as the viewer. Null when a bound field is protected for the viewer, a tool source reads the filter, or no collection source does.
2 properties
4 properties
date_rangeselectmulti_selectmembertext
The value in force, or null when unset.
Only on a ?draft=1 read of a real draft: advice that needs what the run found (a widget that failed, a chart with too many groups).
Only on a ?draft=1 read: whether the page is the draft’s (false when there is no draft and the live page came back).
metriccharttablemarkdown
okemptyno_accesssource_error
curl -X GET 'https://api.elaichi.ai/dashboard/<id>/page/<pageKey>/data' \
-H 'Authorization: Bearer $ELAICHI_API_TOKEN' \
-H 'Content-Type: application/json'const response = await fetch('https://api.elaichi.ai/dashboard/<id>/page/<pageKey>/data', {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + process.env.ELAICHI_API_TOKEN,
'Content-Type': 'application/json',
},
});
const data = await response.json();
console.log(data);import os
import requests
url = "https://api.elaichi.ai/dashboard/<id>/page/<pageKey>/data"
headers = {
"Authorization": f"Bearer {os.environ['ELAICHI_API_TOKEN']}",
"Content-Type": "application/json",
}
response = requests.get(url, headers=headers)
print(response.json())