Replaces the dashboard's name and charts. This is a full replacement: send the whole chart list, since charts you leave out are removed. Set position to move the tab; the other dashboards are renumbered around it.
Request#
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | Dashboard ID, for example dash_6e1a9c3f5b7d2e4a8c0f1b3d. |
Body:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | 1 to 60 characters. |
charts |
object[] | No | Up to 24 charts. Default []. |
position |
integer | No | Tab position, 0 or more. |
Each chart:
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | No | Chart ID. Default chart_ plus 10 hex characters. |
title |
string | Yes | 1 to 80 characters. |
type |
string | Yes | line, bar, pie, number, table, column or donut. |
query |
object | Yes | A chart query as in Query analytics, without from and to. The dashboard picks the date range when it renders. |
layout |
object | No | Grid position { x, y, w, h }. x and y are 0 or more; w and h are 1 to 12. Default { "x": 0, "y": 0, "w": 6, "h": 4 }. |
Example request#
curl -X PUT https://api.tried.com.au/dashboards/dash_6e1a9c3f5b7d2e4a8c0f1b3d \
-H "Authorization: Bearer $TRIED_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Inbound overview",
"position": 0,
"charts": [
{
"id": "chart_a1b2c3d4e5",
"title": "Calls per day",
"type": "bar",
"query": {
"metric": "call_count",
"breakdowns": [
"agent"
]
}
}
]
}'const res = await fetch("https://api.tried.com.au/dashboards/dash_6e1a9c3f5b7d2e4a8c0f1b3d", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.TRIED_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Inbound overview",
"position": 0,
"charts": [
{
"id": "chart_a1b2c3d4e5",
"title": "Calls per day",
"type": "bar",
"query": {
"metric": "call_count",
"breakdowns": [
"agent"
]
}
}
]
}),
});
const dashboard = await res.json();import os, requests
res = requests.put(
"https://api.tried.com.au/dashboards/dash_6e1a9c3f5b7d2e4a8c0f1b3d",
headers={"Authorization": f"Bearer {os.environ['TRIED_API_KEY']}"},
json={
"name": "Inbound overview",
"position": 0,
"charts": [
{
"id": "chart_a1b2c3d4e5",
"title": "Calls per day",
"type": "bar",
"query": {
"metric": "call_count",
"breakdowns": [
"agent",
],
},
},
],
},
)
dashboard = res.json()Response#
200 OK
{
"dashboard_id": "dash_6e1a9c3f5b7d2e4a8c0f1b3d",
"name": "Inbound overview",
"charts": [
{
"id": "chart_a1b2c3d4e5",
"title": "Calls per day",
"type": "bar",
"query": {
"metric": "call_count",
"measurement": "count",
"breakdown": "none",
"breakdowns": [
"agent"
],
"tz": "Australia/Sydney",
"filters": {
"agent_ids": [],
"call_type": [],
"direction": [],
"disconnection_reason": [],
"user_sentiment": [],
"call_successful": null,
"fields": []
},
"compare_previous": false
},
"layout": {
"x": 0,
"y": 0,
"w": 6,
"h": 4
}
}
],
"position": 0,
"last_modification_timestamp": 1792398600000
}| Field | Type | Description |
|---|---|---|
dashboard_id |
string | Dashboard ID, prefixed dash_. |
charts |
object[] | Stored charts with every query default filled in. |
position |
integer | Tab order, starting at 0. |
last_modification_timestamp |
integer | Unix ms of the last change. |
Errors#
| Status | When |
|---|---|
400 |
Body validation failed, for example name: Required. |
401 |
Missing or invalid API key. |
403 |
The key's IP allowlist or scopes reject the request. This route needs the analytics scope. Dashboard users with the member role get The member role is read-only. |
404 |
No dashboard with that ID in the workspace: Dashboard not found. |
429 |
Rate limit exceeded. See Rate limits. |
See Errors for the body format.
Retell compatibility#
Retell's public API reference has no analytics endpoints, so this route has no Retell SDK equivalent.