Skip to content
GET /dashboard/{id}/page/{pageKey}/data

Path Parameters

idstring
required·

Resource id

pageKeystring
required·

Resource id

Query Parameters

draftstring

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.

Possible values:
1true
tzstring

IANA time zone for date presets. An invalid zone falls back to UTC.

f.KEYstring

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

dashboardobject
access_summary
access_viastring
agent_edit_blocked_bystring,null
Possible values:
assistant_disabledllm_not_configurednot_permittednull
can_agent_editboolean,null
can_discard_draftboolean

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_manageboolean
can_publishboolean

can_manage and there is a draft to publish.

can_revoke_shareboolean
can_see_sharesboolean
can_shareboolean
can_transferboolean
created_atstring
definition
descriptionstring
draftobject,null

The pending draft, present only for a caller with can_manage; everyone else sees the published definition.

8 properties
definition
descriptionstring
draft_revisioninteger
namestring
updated_atstring
updated_by_namestring,null
updated_clientstring,null

The AI client's display name, as on the dashboard itself.

updated_viastring,null
draft_changesobject
4 properties
countinteger
ever_publishedboolean
itemsarray
moreinteger
draft_revisioninteger

The guard on PUT /dashboard/{id}/draft. Moves on every draft save, publish and discard.

ever_publishedboolean
has_draftboolean

A pending draft exists. Only a caller with can_manage is ever shown the draft itself.

idstring
labelsobject
1 property
widgets
live_changed_since_draftboolean

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.

namestring
owner_avatar_urlstring,null

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.

owner_display_namestring,null
owner_user_idstring
page_countinteger
provenance
public_links
publish_blocked_reasonstring,null

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.

revisioninteger
source_previewobject[]

At most three sources the caller can read. The total is source_summary; the full set is sources on the detail.

4 properties
logostring,null
namestring
resource_typestring
Possible values:
collectiontoolboxautomation
slugstring,null

The connector slug when the source has exactly one; null otherwise, never guessed.

source_summaryobject
2 properties
collection_idsstring[]
toolbox_idsstring[]
sourcesobject[]
5 properties
caller_can_readboolean
namestring,null
resource_idstring
resource_typestring
widget_countinteger
statusstring

draft_only: never published, so only editors can open it. published_with_changes: live, with a pending draft.

Possible values:
publisheddraft_onlypublished_with_changes
updated_atstring
updated_bystring,null
updated_by_namestring,null
updated_clientstring,null

The connected AI client's display name ("Claude") when updated_via is mcp; null when that client is unknown. Never an internal id.

updated_viastring,null

How the last edit was made; null for edits that predate the draft layer.

Possible values:
consoleagentmcpapinull
widget_countinteger
filtersobject[]

Each declared filter, resolved for this read (defaults, presets in the viewer zone, me).

coverageobject,null

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
earlieststring,null
lateststring,null
keystring
rangeobject
4 properties
end_at_exclusivestring,null
end_datestring,null
start_atstring,null
start_datestring,null
typestring
Possible values:
date_rangeselectmulti_selectmembertext
value

The value in force, or null when unset.

value_labelstring,null
issuesobject[]

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).

fieldstring
messagestring
severitystring
stepstring,null
page_keystring
showing_draftboolean

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).

widgetsobject[]
cachedboolean
data
disclosureobject,null
errorobject,null
expires_atstring,null
fetched_atstring,null
kindstring
Possible values:
metriccharttablemarkdown
row_visibilitystring,null
staleboolean
statestring
Possible values:
okemptyno_accesssource_error
table_pageobject,null
throttledboolean
widget_keystring
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())