curl --request POST \
--url https://api.datalyr.com/v1/dashboards \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dashboard": {
"name": "<string>",
"date_range": {
"from": "<string>",
"to": "<string>"
},
"filters": [
{
"dimension": "<string>",
"value": "<string>"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z"
},
"dry_run": false
}
'import requests
url = "https://api.datalyr.com/v1/dashboards"
payload = {
"dashboard": {
"name": "<string>",
"date_range": {
"from": "<string>",
"to": "<string>"
},
"filters": [
{
"dimension": "<string>",
"value": "<string>"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z"
},
"dry_run": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dashboard: {
name: '<string>',
date_range: {from: '<string>', to: '<string>'},
filters: [{dimension: '<string>', value: '<string>'}],
expected_updated_at: '2023-11-07T05:31:56Z'
},
dry_run: false
})
};
fetch('https://api.datalyr.com/v1/dashboards', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.datalyr.com/v1/dashboards",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dashboard' => [
'name' => '<string>',
'date_range' => [
'from' => '<string>',
'to' => '<string>'
],
'filters' => [
[
'dimension' => '<string>',
'value' => '<string>'
]
],
'expected_updated_at' => '2023-11-07T05:31:56Z'
],
'dry_run' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.datalyr.com/v1/dashboards"
payload := strings.NewReader("{\n \"dashboard\": {\n \"name\": \"<string>\",\n \"date_range\": {\n \"from\": \"<string>\",\n \"to\": \"<string>\"\n },\n \"filters\": [\n {\n \"dimension\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"dry_run\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.datalyr.com/v1/dashboards")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dashboard\": {\n \"name\": \"<string>\",\n \"date_range\": {\n \"from\": \"<string>\",\n \"to\": \"<string>\"\n },\n \"filters\": [\n {\n \"dimension\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"dry_run\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datalyr.com/v1/dashboards")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dashboard\": {\n \"name\": \"<string>\",\n \"date_range\": {\n \"from\": \"<string>\",\n \"to\": \"<string>\"\n },\n \"filters\": [\n {\n \"dimension\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"dry_run\": false\n}"
response = http.request(request)
puts response.read_body{
"dry_run": true,
"applied": true,
"diff": {
"action": "<string>",
"resource": {
"type": "conversion_rule",
"id": "<string>",
"label": "<string>"
},
"prior_state": {},
"new_state": {},
"changes": [
{
"field": "<string>",
"from": "<unknown>",
"to": "<unknown>"
}
],
"effects": [
{
"type": "postback_target",
"summary": "<string>",
"platform": "<string>",
"ad_account_id": "<string>",
"asset_id": "<string>",
"asset_field": "<string>",
"endpoint_url_masked": "<string>",
"trigger_event": "<string>",
"trigger_event_source": "<string>",
"platform_event": "<string>",
"active": true,
"operation": "put",
"key": "<string>",
"path": "<string>",
"requires_approval": true,
"approver_roles": [
"<string>"
],
"review_surface": "<string>",
"supersedes": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
]
},
"audit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"dry_run": true,
"applied": true,
"diff": {
"action": "<string>",
"resource": {
"type": "conversion_rule",
"id": "<string>",
"label": "<string>"
},
"prior_state": {},
"new_state": {},
"changes": [
{
"field": "<string>",
"from": "<unknown>",
"to": "<unknown>"
}
],
"effects": [
{
"type": "postback_target",
"summary": "<string>",
"platform": "<string>",
"ad_account_id": "<string>",
"asset_id": "<string>",
"asset_field": "<string>",
"endpoint_url_masked": "<string>",
"trigger_event": "<string>",
"trigger_event_source": "<string>",
"platform_event": "<string>",
"active": true,
"operation": "put",
"key": "<string>",
"path": "<string>",
"requires_approval": true,
"approver_roles": [
"<string>"
],
"review_surface": "<string>",
"supersedes": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
]
},
"audit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"layout": {
"v": 1,
"cards": [
{
"report_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"size": "sm"
}
]
},
"date_range": {
"from": "<string>",
"to": "<string>"
},
"filters": [
{
"dimension": "<string>",
"op": "eq",
"value": "<string>"
}
],
"created_via": "dashboard",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cards": [
{
"report_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"size": "sm",
"report": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"kind": "metric",
"source": "catalog"
}
}
],
"created_by": {
"type": "user",
"id": "<string>",
"client_id": "<string>"
},
"deleted_at": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>"
}{
"error": "<string>",
"code": "insufficient_scope",
"required_scope": "<string>"
}{
"error": "<string>",
"code": "unknown_report",
"hint": "<string>"
}{
"error": "<string>",
"code": "unknown_report",
"hint": "<string>"
}{
"error": "<string>"
}Create a dashboard
Arrange saved reports on a dashboard with one date range and optional filters. Needs datalyr:write:reports.
Every layout.cards[].report_id must be a live report in the workspace; otherwise the request returns 422 with code: unknown_report. Omit size to get the default for the report’s kind: sm for a metric, lg for a funnel, md otherwise. Filters apply to query reports only; other cards run unfiltered.
Send dry_run: true first. The dry run returns the dashboard with its resolved cards.
curl --request POST \
--url https://api.datalyr.com/v1/dashboards \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dashboard": {
"name": "<string>",
"date_range": {
"from": "<string>",
"to": "<string>"
},
"filters": [
{
"dimension": "<string>",
"value": "<string>"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z"
},
"dry_run": false
}
'import requests
url = "https://api.datalyr.com/v1/dashboards"
payload = {
"dashboard": {
"name": "<string>",
"date_range": {
"from": "<string>",
"to": "<string>"
},
"filters": [
{
"dimension": "<string>",
"value": "<string>"
}
],
"expected_updated_at": "2023-11-07T05:31:56Z"
},
"dry_run": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dashboard: {
name: '<string>',
date_range: {from: '<string>', to: '<string>'},
filters: [{dimension: '<string>', value: '<string>'}],
expected_updated_at: '2023-11-07T05:31:56Z'
},
dry_run: false
})
};
fetch('https://api.datalyr.com/v1/dashboards', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.datalyr.com/v1/dashboards",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dashboard' => [
'name' => '<string>',
'date_range' => [
'from' => '<string>',
'to' => '<string>'
],
'filters' => [
[
'dimension' => '<string>',
'value' => '<string>'
]
],
'expected_updated_at' => '2023-11-07T05:31:56Z'
],
'dry_run' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.datalyr.com/v1/dashboards"
payload := strings.NewReader("{\n \"dashboard\": {\n \"name\": \"<string>\",\n \"date_range\": {\n \"from\": \"<string>\",\n \"to\": \"<string>\"\n },\n \"filters\": [\n {\n \"dimension\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"dry_run\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.datalyr.com/v1/dashboards")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dashboard\": {\n \"name\": \"<string>\",\n \"date_range\": {\n \"from\": \"<string>\",\n \"to\": \"<string>\"\n },\n \"filters\": [\n {\n \"dimension\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"dry_run\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.datalyr.com/v1/dashboards")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dashboard\": {\n \"name\": \"<string>\",\n \"date_range\": {\n \"from\": \"<string>\",\n \"to\": \"<string>\"\n },\n \"filters\": [\n {\n \"dimension\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"expected_updated_at\": \"2023-11-07T05:31:56Z\"\n },\n \"dry_run\": false\n}"
response = http.request(request)
puts response.read_body{
"dry_run": true,
"applied": true,
"diff": {
"action": "<string>",
"resource": {
"type": "conversion_rule",
"id": "<string>",
"label": "<string>"
},
"prior_state": {},
"new_state": {},
"changes": [
{
"field": "<string>",
"from": "<unknown>",
"to": "<unknown>"
}
],
"effects": [
{
"type": "postback_target",
"summary": "<string>",
"platform": "<string>",
"ad_account_id": "<string>",
"asset_id": "<string>",
"asset_field": "<string>",
"endpoint_url_masked": "<string>",
"trigger_event": "<string>",
"trigger_event_source": "<string>",
"platform_event": "<string>",
"active": true,
"operation": "put",
"key": "<string>",
"path": "<string>",
"requires_approval": true,
"approver_roles": [
"<string>"
],
"review_surface": "<string>",
"supersedes": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
]
},
"audit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"dry_run": true,
"applied": true,
"diff": {
"action": "<string>",
"resource": {
"type": "conversion_rule",
"id": "<string>",
"label": "<string>"
},
"prior_state": {},
"new_state": {},
"changes": [
{
"field": "<string>",
"from": "<unknown>",
"to": "<unknown>"
}
],
"effects": [
{
"type": "postback_target",
"summary": "<string>",
"platform": "<string>",
"ad_account_id": "<string>",
"asset_id": "<string>",
"asset_field": "<string>",
"endpoint_url_masked": "<string>",
"trigger_event": "<string>",
"trigger_event_source": "<string>",
"platform_event": "<string>",
"active": true,
"operation": "put",
"key": "<string>",
"path": "<string>",
"requires_approval": true,
"approver_roles": [
"<string>"
],
"review_surface": "<string>",
"supersedes": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
]
},
"audit_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"layout": {
"v": 1,
"cards": [
{
"report_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"size": "sm"
}
]
},
"date_range": {
"from": "<string>",
"to": "<string>"
},
"filters": [
{
"dimension": "<string>",
"op": "eq",
"value": "<string>"
}
],
"created_via": "dashboard",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"workspace_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"cards": [
{
"report_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"size": "sm",
"report": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"kind": "metric",
"source": "catalog"
}
}
],
"created_by": {
"type": "user",
"id": "<string>",
"client_id": "<string>"
},
"deleted_at": "2023-11-07T05:31:56Z"
}
}{
"error": "<string>"
}{
"error": "<string>",
"code": "insufficient_scope",
"required_scope": "<string>"
}{
"error": "<string>",
"code": "unknown_report",
"hint": "<string>"
}{
"error": "<string>",
"code": "unknown_report",
"hint": "<string>"
}{
"error": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Retry-safe token for this create. The first request performed under a given key has its response kept for 24 hours; an identical retry returns that same response with Idempotent-Replay: true instead of creating a second resource. The record covers the request body, so reusing a key with different content is a new request rather than a replay. Ignored on a dry run, which creates nothing to be idempotent about.
255Response
Nothing was written. The body describes the change that would have been made, including every effect beyond the row itself.
False on a dry run and on every error.
The change, in full. A dry run returns the change it WOULD make; an applied write returns the change it DID make, in the same shape, so the two can be compared directly.
Show child attributes
Show child attributes
Present on an applied write. The handle POST /audit/{auditId}/undo takes.
Was this page helpful?