Analytics
Report Runs
Every time a report is run, a full copy of the report with all its components is saved. Each report run is saved as a separate URL and it is possible to see a complete history of all the runs for any given report in Mode.
You can use the runs
resource to trigger a new run of a report or retrieve history of all runs for a single report.
Report Run object
Properties | |
token required |
string |
state required |
string enum: pending enqueued cancelled failed succeeded completed running_notebook |
parameters |
|
created_at required |
string |
updated_at required |
string |
completed_at required |
string |
purge_started_at required |
string |
purge_completed_at required |
string |
python_state |
string enum: none pending failed submitted succeeded |
form_fields |
array |
is_latest_report_run required |
string |
is_latest_successful_report_run required |
string |
report_has_failures_since_last_success required |
string |
pusher_channel_name |
string |
_links required |
object |
Links
All resource responses contain a set of links that describe other
related resources or actions that you can take on this resource.
A link is comprised of two main pieces:
its name (which describes its relationship to this resource)
and its href (the URL of the related action or resource).
All resources have at least a _self
link which is the URL
that will return a representation of this resource.
- account
- clone
- content
- embed
- executed_by
- latest_successful_report_run_api_url
- pdf_export
- preview
- python_cell_runs
- query_runs
- report
- report_schedule
- self
- share
- web_clone
- web_edit_dataset
- web_external_url
{
"token": "f2lkg3hwjj9",
"state": "enqueued",
"parameters": {},
"created_at": "YYYY-MM-DDTHH:MM:SS.msZ",
"updated_at": "YYYY-MM-DDTHH:MM:SS.msZ",
"completed_at": "YYYY-MM-DDTHH:MM:SS.msZ",
"purge_started_at": "YYYY-MM-DDTHH:MM:SS.msZ",
"purge_completed_at": "YYYY-MM-DDTHH:MM:SS.msZ",
"python_state": "none",
"form_fields": [],
"_links": {
"self": {
"href": "occaecat eiusmod",
"templated": false
},
"preview": {
"href": "nisi veniam",
"templated": false
},
"account": {
"href": "in culpa Duis sit Ut",
"templated": false
},
"report_schedule": {
"href": "aliqua d",
"templated": false
},
"executed_by": {
"href": "ut",
"templated": false
},
"report": {
"href": "ad nulla",
"templated": false
},
"clone": {
"href": "fugiat velit est ex commodo",
"templated": false
},
"query_runs": {
"href": "minim deserunt",
"templated": false
},
"python_cell_runs": {
"href": "eu Lorem en",
"templated": false
},
"pdf_export": {
"href": "tempor",
"templated": false
},
"content": {
"href": "eiusmod ipsum consectetur magna",
"templated": false
},
"share": {
"href": "",
"templated": false
},
"embed": {
"href": "adipisicing ullamco ",
"templated": false
},
"web_clone": {
"href": "elit",
"templated": false
},
"web_external_url": {
"href": "anim irure fugiat qui",
"templated": false
}
},
"_embedded": {}
}
Get a report run
To retrieve a representation of a report run, send a GET request to the runs
resource.
URL Params | ||
account required |
string |
Account (Workspace or User ) username
|
report required |
string |
Report token
|
run required |
string |
ReportRun token
|
Responses | |
200 |
ReportRun response |
401 |
Unauthorized |
404 |
ReportRun not found |
GET
/{account}
curl --include \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs'
require 'http'
username = 'your_api_key'
password = 'your_api_secret'
headers = {
content_type: 'application/json',
accept: 'application/hal+json'
}
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.get('https://app.mode.com/api/{account}/reports/{report}/runs')
puts response
from urllib2 import Request, urlopen
headers = {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs', headers=headers)
response_body = urlopen(request).read()
print(response_body)
var request = new XMLHttpRequest();
request.open('GET', 'https://app.mode.com/api/{account}/reports/{report}/runs');
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Accept', 'application/hal+json');
request.onreadystatechange = function () {
if (this.readyState === 4) {
console.log('Status:', this.status);
console.log('Headers:', this.getAllResponseHeaders());
console.log('Body:', this.responseText);
}
};
request.send();
Get report run duplication status
To retrieve the status of a report run duplication operation, send a GET request to the report run duplicate
resource passing through the report run duplicate
token. Returns a representation of the report run duplicate
.
URL Params | ||
account required |
string |
Account (Workspace or User ) username
|
report required |
string |
Report token
|
run required |
string |
ReportRun token
|
duplicate required |
string |
ReportRunDuplicate token
|
Responses | |
200 |
ReportRunDuplicate response |
401 |
Unauthorized |
404 |
ReportRunDuplicate not found |
GET
/{account}
curl --include \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates/{duplicate}'
require 'http'
username = 'your_api_key'
password = 'your_api_secret'
headers = {
content_type: 'application/json',
accept: 'application/hal+json'
}
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.get('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates/{duplicate}')
puts response
from urllib2 import Request, urlopen
headers = {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates/{duplicate}', headers=headers)
response_body = urlopen(request).read()
print(response_body)
var request = new XMLHttpRequest();
request.open('GET', 'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates/{duplicate}');
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Accept', 'application/hal+json');
request.onreadystatechange = function () {
if (this.readyState === 4) {
console.log('Status:', this.status);
console.log('Headers:', this.getAllResponseHeaders());
console.log('Body:', this.responseText);
}
};
request.send();
List report runs
To get a list of all runs for a given report, send a GET request to the runs
resource.
URL Params | ||
account required |
string |
Account (Workspace or User ) username
|
report required |
string |
Report token
|
Query Params | ||
filter |
string |
Returns a filtered list of Runs s for a Report filtered by whether their created_at or updated_at timestamps are gt (greater than) or lt (less than) the datetime passed in (ISO8601 format). Example: ?filter=updated_at.lt.2019-10-23T06:23:01Z returns all Runs in a space created before that date.
|
order |
string |
With the order param, returns all ReportRun s for a Report ordered by their created_at or updated_at timestamps
|
order_by |
string |
With the order_by param, returns all ReportRun s for a Report ordered in asc or desc order
|
Responses | |
200 |
ReportRun collection response |
401 |
Unauthorized |
404 |
ReportRun not found |
GET
/{account}
curl --include \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs'
# Optional Query Params:
# Filter runs by when they were created or updated
# '?filter={created_at|updated_at}.{gt|lt}.{YYYY-MM-DDTHH:MM:SSZ}'
curl --include \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs?filter=created_at.gt.2019-12-19T10:21:12Z'
# Order runs by when they were created or updated
# '?order={asc|desc}&order_by={created_at|updated_at}'
curl --include \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs?order=asc&order_by=created_at'
require 'http'
username = 'your_api_key'
password = 'your_api_secret'
headers = {
content_type: 'application/json',
accept: 'application/hal+json'
}
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.get('https://app.mode.com/api/{account}/reports/{report}/runs')
puts response
# Optional Query Params:
# Filter runs by when they were created or updated
# '?filter={created_at|updated_at}.{gt|lt}.{YYYY-MM-DDTHH:MM:SSZ}'
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.get('https://app.mode.com/api/{account}/reports/{report}/runs?filter=created_at.gt.2019-12-19T10:21:12Z')
# Order runs by when they were created or updated
# '?order={asc|desc}&order_by={created_at|updated_at}'
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.get('https://app.mode.com/api/{account}/reports/{report}/runs?order=asc&order_by=created_at')
from urllib2 import Request, urlopen
headers = {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs', headers=headers)
response_body = urlopen(request).read()
print(response_body)
# Optional Query Params:
# Filter runs by when they were created or updated
# '?filter={created_at|updated_at}.{gt|lt}.{YYYY-MM-DDTHH:MM:SSZ}'
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs?filter=created_at.gt.2019-12-19T10:21:12Z')
# Order runs by when they were created or updated
# '?order={asc|desc}&order_by={created_at|updated_at}'
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs?order=asc&order_by=created_at')
var request = new XMLHttpRequest();
request.open('GET', 'https://app.mode.com/api/{account}/reports/{report}/runs');
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Accept', 'application/hal+json');
request.onreadystatechange = function () {
if (this.readyState === 4) {
console.log('Status:', this.status);
console.log('Headers:', this.getAllResponseHeaders());
console.log('Body:', this.responseText);
}
};
request.send();
// Optional Query Params:
// Filter reports by when they were created or updated
// '?filter={created_at|updated_at}.{gt|lt}.{YYYY-MM-DDTHH:MM:SSZ}'
request.open('GET', 'https://app.mode.com/api/{account}/reports/{report}/runs?filter=created_at.gt.2019-12-19T10:21:12Z');
// Order reports by when they were created or updated
// '?order={asc|desc}&order_by={created_at|updated_at}'
request.open('GET', 'https://app.mode.com/api/{account}/reports/{report}/runs?order=asc&order_by=created_at');
Clone a report run
To clone a report run, send a POST request to the reports
resource at clone
, and specify the report run token.
Cloning is not currently supported with Workspace API keys. See help documentation for more information.
URL Params | ||
account required |
string |
Account (Workspace or User ) username
|
report required |
string |
Report token
|
run required |
string |
ReportRun token
|
Responses | |
200 |
Report response |
400 |
Bad request |
401 |
Unauthorized |
404 |
ReportRun not found |
POST
/{account}
curl --include \
--request POST \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/clone'
require 'http'
username = 'your_api_key'
password = 'your_api_secret'
headers = {
content_type: 'application/json',
accept: 'application/hal+json'
}
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.post('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/clone')
puts response
from urllib2 import Request, urlopen
headers = {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/clone', headers=headers)
response_body = urlopen(request).read()
print(response_body)
var request = require('request');
request({
method: 'POST',
url: 'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/clone',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}}, function (error, response, body) {
console.log('Status:', response.statusCode);
console.log('Headers:', JSON.stringify(response.headers));
console.log('Response:', body);
});
Duplicate a report run
To duplicate a report run asynchronously, send a POST request to the report run duplicate
resource specifying both the report and the report run tokens.
To check the status of a report run duplication request and get the duplicated report token, see the documentation for GET report run duplication status.
URL Params | ||
account required |
string |
Account (Workspace or User ) username
|
report required |
string |
Report token
|
run required |
string |
ReportRun token
|
Query Params | ||
collection_id |
string | The token of a collection. Example: collection_id=875a93v22b93 |
Responses | |
200 |
ReportRunDuplicate response |
400 |
Bad request |
401 |
Unauthorized |
404 |
ReportRun not found |
POST
/{account}
curl --include \
--request POST \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates'
# Optional Query Params:
# Move to a specific collection
# `?collection_id={collection}`
curl --include \
--request POST \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates?collection_id={collection}'
require 'http'
username = 'your_api_key'
password = 'your_api_secret'
headers = {
content_type: 'application/json',
accept: 'application/hal+json'
}
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.post('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates')
puts response
# Optional Query Params:
# Move to a specific collection
# `?collection_id={collection}`
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.post('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates?collection_id={collection}')
from urllib2 import Request, urlopen
headers = {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates', headers=headers)
response_body = urlopen(request).read()
print(response_body)
# Optional Query Params:
# Move to a specific collection
# `?collection_id={collection}`
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates?collection_id={collection}', headers=headers)
var request = require('request');
request({
method: 'POST',
url: 'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}}, function (error, response, body) {
console.log('Status:', response.statusCode);
console.log('Headers:', JSON.stringify(response.headers));
console.log('Response:', body);
});
// Optional Query Params:
// Move to a specific collection
// `?collection_id={collection}`
request({
method: 'POST',
url: 'https://app.mode.com/api/{account}/reports/{report}/runs/{run}/duplicates?collection_id={collection}',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}}, function (error, response, body) {
console.log('Status:', response.statusCode);
console.log('Headers:', JSON.stringify(response.headers));
console.log('Response:', body);
});
Create a report run
To trigger a report run, send a POST request to the runs
resource, specifying the report token. This call returns a representation of the resulting report run.
URL Params | ||
account required |
string |
Account (Workspace or User ) username
|
report required |
string |
Report token
|
POST Body Params
Object: |
||
parameters |
Custom parameter attributes |
Responses | |
202 |
ReportRun Accepted |
400 |
Bad request |
401 |
Unauthorized |
404 |
Report not found |
POST
/{account}
curl --include \
--request POST \
--header "Content-Type: application/json" \
--header "Accept: application/hal+json" \
--data-binary "{
\"parameters\": {
\"user_id\": 123,
\"location\": \"San Francisco\"
}
}" \
'https://app.mode.com/api/{account}/reports/{report}/runs'
require 'http'
values = {
parameters: {
user_id: 123,
location: 'San Francisco'
}
}
headers = {
content_type: 'application/json',
accept: 'application/hal+json'
}
response = HTTP.basic_auth(user: username, pass: password)
.headers(headers)
.post('https://app.mode.com/api/{account}/reports/{report}/runs', json: values)
puts response
from urllib2 import Request, urlopen
values = """
{
"parameters": {
"user_id": 123,
"location": "San Francisco"
}
}
"""
headers = {
'Content-Type': 'application/json',
'Accept': 'application/hal+json'
}
request = Request('https://app.mode.com/api/{account}/reports/{report}/runs', data=values, headers=headers)
response_body = urlopen(request).read()
print(response_body)
var request = new XMLHttpRequest();
request.open('POST', 'https://app.mode.com/api/{account}/reports/{report}/runs');
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Accept', 'application/hal+json');
request.onreadystatechange = function () {
if (this.readyState === 4) {
console.log('Status:', this.status);
console.log('Headers:', this.getAllResponseHeaders());
console.log('Body:', this.responseText);
}
};
var body = {
'parameters': {
'user_id': 123,
'location': 'San Francisco'
}
};
request.send(JSON.stringify(body));