Reports
Create a report
Create a new blank report for a project. The report is created with no pages or widgets. Use POST /reports//pages to add pages, then POST /pages//widgets to populate them with data widgets. An optional date range (preset or explicit start/end dates) can be configured at creation time and overridden per widget data fetch.
POST
/
v1
/
projects
/
{project_id}
/
reports
Create a report
curl --request POST \
--url https://api.example.com/v1/projects/{project_id}/reports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"date_range_start": "2023-12-25",
"date_range_end": "2023-12-25",
"date_range_preset": "<string>"
}
'import requests
url = "https://api.example.com/v1/projects/{project_id}/reports"
payload = {
"name": "<string>",
"description": "<string>",
"date_range_start": "2023-12-25",
"date_range_end": "2023-12-25",
"date_range_preset": "<string>"
}
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({
name: '<string>',
description: '<string>',
date_range_start: '2023-12-25',
date_range_end: '2023-12-25',
date_range_preset: '<string>'
})
};
fetch('https://api.example.com/v1/projects/{project_id}/reports', 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.example.com/v1/projects/{project_id}/reports",
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([
'name' => '<string>',
'description' => '<string>',
'date_range_start' => '2023-12-25',
'date_range_end' => '2023-12-25',
'date_range_preset' => '<string>'
]),
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.example.com/v1/projects/{project_id}/reports"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"date_range_start\": \"2023-12-25\",\n \"date_range_end\": \"2023-12-25\",\n \"date_range_preset\": \"<string>\"\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.example.com/v1/projects/{project_id}/reports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"date_range_start\": \"2023-12-25\",\n \"date_range_end\": \"2023-12-25\",\n \"date_range_preset\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/projects/{project_id}/reports")
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 \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"date_range_start\": \"2023-12-25\",\n \"date_range_end\": \"2023-12-25\",\n \"date_range_preset\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"is_archived": true,
"pages": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"sort_order": 123,
"layout_columns": 123,
"widgets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"widget_type": "<string>",
"title": "<string>",
"config": {},
"position_x": 123,
"position_y": 123,
"width": 123,
"height": 123,
"created_at": "2023-11-07T05:31:56Z",
"data_source": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"date_range_start": "2023-12-25",
"date_range_end": "2023-12-25",
"date_range_preset": "<string>",
"schedule_enabled": false,
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Path Parameters
Body
application/json
Request body for creating a new report.
Display name for the report.
Required string length:
1 - 255Optional longer description of the report's purpose.
Inclusive start date for the report's data range.
Inclusive end date for the report's data range.
Relative date range shortcut. One of '7d', '30d', '90d'. Takes precedence over explicit start/end dates when set.
⌘I
Create a report
curl --request POST \
--url https://api.example.com/v1/projects/{project_id}/reports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"date_range_start": "2023-12-25",
"date_range_end": "2023-12-25",
"date_range_preset": "<string>"
}
'import requests
url = "https://api.example.com/v1/projects/{project_id}/reports"
payload = {
"name": "<string>",
"description": "<string>",
"date_range_start": "2023-12-25",
"date_range_end": "2023-12-25",
"date_range_preset": "<string>"
}
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({
name: '<string>',
description: '<string>',
date_range_start: '2023-12-25',
date_range_end: '2023-12-25',
date_range_preset: '<string>'
})
};
fetch('https://api.example.com/v1/projects/{project_id}/reports', 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.example.com/v1/projects/{project_id}/reports",
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([
'name' => '<string>',
'description' => '<string>',
'date_range_start' => '2023-12-25',
'date_range_end' => '2023-12-25',
'date_range_preset' => '<string>'
]),
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.example.com/v1/projects/{project_id}/reports"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"date_range_start\": \"2023-12-25\",\n \"date_range_end\": \"2023-12-25\",\n \"date_range_preset\": \"<string>\"\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.example.com/v1/projects/{project_id}/reports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"date_range_start\": \"2023-12-25\",\n \"date_range_end\": \"2023-12-25\",\n \"date_range_preset\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/projects/{project_id}/reports")
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 \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"date_range_start\": \"2023-12-25\",\n \"date_range_end\": \"2023-12-25\",\n \"date_range_preset\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"is_archived": true,
"pages": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"sort_order": 123,
"layout_columns": 123,
"widgets": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"widget_type": "<string>",
"title": "<string>",
"config": {},
"position_x": 123,
"position_y": 123,
"width": 123,
"height": 123,
"created_at": "2023-11-07T05:31:56Z",
"data_source": "<string>"
}
],
"created_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"date_range_start": "2023-12-25",
"date_range_end": "2023-12-25",
"date_range_preset": "<string>",
"schedule_enabled": false,
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}