Reports
The Reports API is used to retrieve report profiles and data, as well as to create, update, and delete custom reports.
Get report profiles
This API retrieves the details of report profiles. It supports filtering by module name, category name, group name, and report ID.
⚠️ Note: By default, results are sorted in ascending order by module name, followed by category name, group name, and report ID.
OAuth Scope : reports.READ
Arguments
Maximum: 20 module names
Maximum: 20 category names
Maximum: 20 group names
Maximum: 20 report ids
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer REPLACE_BEARER_TOKEN");
response = invokeUrl
[
url: "http://localhost:8400/api/v2/report/profiles"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("http://localhost:8400/api/v2/report/profiles")
.post(body)
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('http://localhost:8400/api/v2/report/profiles', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("localhost:8400")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer REPLACE_BEARER_TOKEN",
'content-type': "application/json"
}
conn.request("POST", "/api/v2/report/profiles", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "POST",
"hostname": "localhost",
"port": "8400",
"path": "/api/v2/report/profiles",
"headers": {
"Authorization": "Bearer REPLACE_BEARER_TOKEN",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
curl --request POST \
--url http://localhost:8400/api/v2/report/profiles \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"module_name": [
"Servers and Workstation"
],
"category_name": [
"Windows"
],
"group_name": [
"Windows Events"
],
"report_id": [
501
],
"from": 1,
"limit": 1000
}
{
"data": {
"module": [
{
"name": "Servers And Workstation",
"id": 301,
"category": [
{
"name": "Windows",
"id": 601,
"group": [
{
"reports": [
{
"annotation": "Showing reports for : All Events",
"report_id": 1531,
"unique_key": "Windows_All_Events",
"report_criteria": "(HOSTTYPE = 'windows')",
"report_type": "normal",
"report_name": "All Events"
}
],
"name": "Windows Events"
}
]
}
]
}
]
},
"meta": {
"total": 1
}
}
{
"code": "07001113",
"title": "Unauthorized",
"detail": "Invalid or missing AuthToken. Check whether the AuthToken is not revoked or expired."
}
{
"error": {
"code": "07001110",
"title": "Bad Request",
"detail": "Something went wrong."
}
}
Get report data
This api used to get report data by specifying its unique report ID which can be obtained via the report profiles API.The first 1,000 logs are shown initially. You can continue requesting the next result set using the cursor provided in the response for a tabular report.
OAuth Scope : reports.READ
Arguments
The value must be ≥ 1970-01-01T00:00:00Z. Time zone offsets are supported.
The value must be ≥ 1970-01-01T00:00:00Z. Time zone offsets are supported.
Maximum: 500 log source IDs
Maximum: 500 log source group IDs
⚠️ Note: The cursor remains valid for 5 minutes if unused.
Path Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer REPLACE_BEARER_TOKEN");
response = invokeUrl
[
url: "http://localhost:8400/api/v2/report/data/300000002100"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("http://localhost:8400/api/v2/report/data/300000002100")
.post(body)
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('http://localhost:8400/api/v2/report/data/300000002100', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("localhost:8400")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer REPLACE_BEARER_TOKEN",
'content-type': "application/json"
}
conn.request("POST", "/api/v2/report/data/300000002100", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "POST",
"hostname": "localhost",
"port": "8400",
"path": "/api/v2/report/data/300000002100",
"headers": {
"Authorization": "Bearer REPLACE_BEARER_TOKEN",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
curl --request POST \
--url http://localhost:8400/api/v2/report/data/300000002100 \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"start_time": "2025-03-27T14:30:00Z",
"end_time": "2025-03-28T14:30:00Z",
"log_source_ids": [
1,
2
],
"log_source_group_ids": [
1,
6
],
"cursor": "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAAABFnB2MXRXOHRZU2UtSm1HT0FTZnRaZlEAAAAAAAAAAhZwdjF0Vzh0WVNlLUptR09BU2Z0WmZR"
}
{
"response": {
"Time": "2025-02-10 13:44:30",
"Display Name": "TestMachine",
"Severity": "information",
"Log Source": "mitre",
"User Name": "test user",
"Event Id": "1234"
},
"meta": {
"cursor": "DnF1ZXJ5VGhlbkZldGNoAgAAAAAAAAABFnB2MXRXOHRZU2UtSm1HT0FTZnRaZlEAAAAAAAAAAhZwdjF0Vzh0WVNlLUptR09BU2Z0WmZR",
"total_items": 6098,
"items_in_current_page": 1000
}
}
{
"code": "07001113",
"title": "Unauthorized",
"detail": "Invalid or missing AuthToken. Check whether the AuthToken is not revoked or expired."
}
{
"error": {
"code": "07001110",
"title": "Bad Request",
"detail": "Something went wrong."
}
}
Create Custom Report
This API creates a new custom report by specifying the report name and type.
OAuth Scope : reports.CREATE
Arguments
Allowed values are tabular, summary, pivot, multi and custom_widget.
Maximum: 500 log source group IDs
Maximum: 500 log source IDs
Meta fields are not allowed. Allowed fields can be retrieved using the log fields API
Criteria should follow this pattern:
  (field_name comparator 'value')
where,
  '()' - represents a group
  'comparator' - represents '=', '!=', 'contains',etc.
Example:
- (SEVERITY = 'Emergency,Critical' and HOSTTYPE = 'Windows') or (SEVERITY = 'Warning,Error' and HOSTTYPE = 'Windows')
- (HOSTTYPE contains 'Windo')
Allowed values are default, dateOfMonth, monthOfYear, dayOfWeek, hourOfDay and year which are used for Time field.
Allowed values are default, dateOfMonth, monthOfYear and dayOfWeek which are used for Time field.
Allowed values are default, dateOfMonth, monthOfYear and dayOfWeek which are used for Time field.
Default value is "Top 5". If column_values param is used, "Custom" will be the default value.
Allowed values are Custom, Top 5, Least 5.
Allowed values are Count, Count Distinct, Average, Sum, First Value, Last Value.
For sum and average, only metric fields are allowed. Metric fields can be retrieved from the log-fields API
Maximum: 10 report IDs
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer REPLACE_BEARER_TOKEN");
response = invokeUrl
[
url: "http://localhost:8400/api/v2/report"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("http://localhost:8400/api/v2/report")
.post(body)
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'POST',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('http://localhost:8400/api/v2/report', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("localhost:8400")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer REPLACE_BEARER_TOKEN",
'content-type': "application/json"
}
conn.request("POST", "/api/v2/report", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "POST",
"hostname": "localhost",
"port": "8400",
"path": "/api/v2/report",
"headers": {
"Authorization": "Bearer REPLACE_BEARER_TOKEN",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
curl --request POST \
--url http://localhost:8400/api/v2/report \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"report_name": "Test report",
"report_group": "Test Group",
"report_type": "tabular",
"log_source_group_ids": [
3000000012292,
3000000013071
],
"log_source_ids": [
30000000251315,
3000000286357
],
"report_criteria": "(HOSTTYPE = 'windows')",
"summary_fields": [
{
"field_name": "severity",
"field_unit": ""
}
],
"pivot_fields": {
"row": {
"field_name": "TIME",
"field_unit": "Default"
},
"column": {
"field_name": "USERNAME",
"field_unit": "",
"type": "Custom",
"column_values": [
"user1",
"user2",
"user3"
]
}
},
"aggregation_fields": {
"agg_type": "First Value",
"field_name": "SEVERITY"
},
"report_ids": [
1538,
1845
],
"widget_id": 201
}
{
"report_id": "2081"
}
{
"code": "07001113",
"title": "Unauthorized",
"detail": "Invalid or missing AuthToken. Check whether the AuthToken is not revoked or expired."
}
{
"error": {
"code": "07001110",
"title": "Bad Request",
"detail": "Something went wrong."
}
}
Delete custom report
This API deletes one or more custom reports by specifying their unique report IDs
OAuth Scope : reports.DELETE
Arguments
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Bearer REPLACE_BEARER_TOKEN");
response = invokeUrl
[
url: "http://localhost:8400/api/v2/report"
type: DELETE
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
.url("http://localhost:8400/api/v2/report")
.delete(body)
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'DELETE',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN',
'content-type': 'application/json'
},
body: '{"field1":"value1","field2":"value2"}'
};
fetch('http://localhost:8400/api/v2/report', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("localhost:8400")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
'Authorization': "Bearer REPLACE_BEARER_TOKEN",
'content-type': "application/json"
}
conn.request("DELETE", "/api/v2/report", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "DELETE",
"hostname": "localhost",
"port": "8400",
"path": "/api/v2/report",
"headers": {
"Authorization": "Bearer REPLACE_BEARER_TOKEN",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
curl --request DELETE \
--url http://localhost:8400/api/v2/report \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'content-type: application/json' \
--data '{"field1":"value1","field2":"value2"}'
{
"report_ids": [
2885,
3091
]
}
{
"data": {
"title": "success"
}
}
{
"code": "07001113",
"title": "Unauthorized",
"detail": "Invalid or missing AuthToken. Check whether the AuthToken is not revoked or expired."
}
{
"error": {
"code": "07001110",
"title": "Bad Request",
"detail": "Something went wrong."
}
}
Update custom report
This API updates an existing custom report by specifying its unique report ID which can be obtained via the report profiles API.
OAuth Scope : reports.UPDATE
Arguments
Allowed values are tabular, summary, pivot, multi and custom_widget.
Maximum: 500 log source group IDs
Maximum: 500 log source IDs
Meta fields are not allowed. Allowed fields can be retrieved using the log fields API
Criteria should follow this pattern:
  (field_name comparator 'value')
where,
  '()' - represents a group
  'comparator' - represents '=', '!=', 'contains',etc.
Example:
- (SEVERITY = 'Emergency,Critical' and HOSTTYPE = 'Windows') or (SEVERITY = 'Warning,Error' and HOSTTYPE = 'Windows')
- (HOSTTYPE contains 'Windo')
Allowed values are default, dateOfMonth, monthOfYear, dayOfWeek, hourOfDay and year which are used for Time field.
Allowed values are default, dateOfMonth, monthOfYear and dayOfWeek which are used for Time field.
Allowed values are default, dateOfMonth, monthOfYear and dayOfWeek which are used for Time field.
Default value is "Top 5". If column_values param is used, "Custom" will be the default value.
Allowed values are Custom, Top 5, Least 5.
Allowed values are Count, Count Distinct, Average, Sum, First Value, Last Value.
For sum and average, only metric fields are allowed. Metric fields can be retrieved from the log-fields API
Maximum: 10 report IDs
Path Parameters
parameters_data='{"report_name":"Test report","report_group":"Test Group","report_type":"tabular","log_source_group_ids":[3000000012292,3000000013071],"log_source_ids":[30000000251315,3000000286357],"report_criteria":"(HOSTTYPE = 'windows')","summary_fields":[{"field_name":"severity","field_unit":""}],"pivot_fields":{"row":{"field_name":"TIME","field_unit":"Default"},"column":{"field_name":"USERNAME","field_unit":"","type":"Custom","column_values":["user1","user2","user3"]}},"aggregation_fields":{"agg_type":"First Value","field_name":"SEVERITY"},"report_ids":[1538,1845],"widget_id":201}';
headers_data = Map();
headers_data.put("Authorization", "Bearer REPLACE_BEARER_TOKEN");
response = invokeUrl
[
url: "http://localhost:8400/api/v2/report/1385"
type: PATCH
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"report_name\":\"Test report\",\"report_group\":\"Test Group\",\"report_type\":\"tabular\",\"log_source_group_ids\":[3000000012292,3000000013071],\"log_source_ids\":[30000000251315,3000000286357],\"report_criteria\":\"(HOSTTYPE = 'windows')\",\"summary_fields\":[{\"field_name\":\"severity\",\"field_unit\":\"\"}],\"pivot_fields\":{\"row\":{\"field_name\":\"TIME\",\"field_unit\":\"Default\"},\"column\":{\"field_name\":\"USERNAME\",\"field_unit\":\"\",\"type\":\"Custom\",\"column_values\":[\"user1\",\"user2\",\"user3\"]}},\"aggregation_fields\":{\"agg_type\":\"First Value\",\"field_name\":\"SEVERITY\"},\"report_ids\":[1538,1845],\"widget_id\":201}");
Request request = new Request.Builder()
.url("http://localhost:8400/api/v2/report/1385")
.patch(body)
.addHeader("Authorization", "Bearer REPLACE_BEARER_TOKEN")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'PATCH',
headers: {
Authorization: 'Bearer REPLACE_BEARER_TOKEN',
'content-type': 'application/json'
},
body: '{"report_name":"Test report","report_group":"Test Group","report_type":"tabular","log_source_group_ids":[3000000012292,3000000013071],"log_source_ids":[30000000251315,3000000286357],"report_criteria":"(HOSTTYPE = \'windows\')","summary_fields":[{"field_name":"severity","field_unit":""}],"pivot_fields":{"row":{"field_name":"TIME","field_unit":"Default"},"column":{"field_name":"USERNAME","field_unit":"","type":"Custom","column_values":["user1","user2","user3"]}},"aggregation_fields":{"agg_type":"First Value","field_name":"SEVERITY"},"report_ids":[1538,1845],"widget_id":201}'
};
fetch('http://localhost:8400/api/v2/report/1385', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPConnection("localhost:8400")
payload = "{\"report_name\":\"Test report\",\"report_group\":\"Test Group\",\"report_type\":\"tabular\",\"log_source_group_ids\":[3000000012292,3000000013071],\"log_source_ids\":[30000000251315,3000000286357],\"report_criteria\":\"(HOSTTYPE = 'windows')\",\"summary_fields\":[{\"field_name\":\"severity\",\"field_unit\":\"\"}],\"pivot_fields\":{\"row\":{\"field_name\":\"TIME\",\"field_unit\":\"Default\"},\"column\":{\"field_name\":\"USERNAME\",\"field_unit\":\"\",\"type\":\"Custom\",\"column_values\":[\"user1\",\"user2\",\"user3\"]}},\"aggregation_fields\":{\"agg_type\":\"First Value\",\"field_name\":\"SEVERITY\"},\"report_ids\":[1538,1845],\"widget_id\":201}"
headers = {
'Authorization': "Bearer REPLACE_BEARER_TOKEN",
'content-type': "application/json"
}
conn.request("PATCH", "/api/v2/report/1385", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("http");
const options = {
"method": "PATCH",
"hostname": "localhost",
"port": "8400",
"path": "/api/v2/report/1385",
"headers": {
"Authorization": "Bearer REPLACE_BEARER_TOKEN",
"content-type": "application/json"
}
};
const req = http.request(options, function (res) {
const chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
const body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.write(JSON.stringify({
report_name: 'Test report',
report_group: 'Test Group',
report_type: 'tabular',
log_source_group_ids: [3000000012292, 3000000013071],
log_source_ids: [30000000251315, 3000000286357],
report_criteria: '(HOSTTYPE = \'windows\')',
summary_fields: [{field_name: 'severity', field_unit: ''}],
pivot_fields: {
row: {field_name: 'TIME', field_unit: 'Default'},
column: {
field_name: 'USERNAME',
field_unit: '',
type: 'Custom',
column_values: ['user1', 'user2', 'user3']
}
},
aggregation_fields: {agg_type: 'First Value', field_name: 'SEVERITY'},
report_ids: [1538, 1845],
widget_id: 201
}));
req.end();
curl --request PATCH \
--url http://localhost:8400/api/v2/report/1385 \
--header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \
--header 'content-type: application/json' \
--data '{"report_name":"Test report","report_group":"Test Group","report_type":"tabular","log_source_group_ids":[3000000012292,3000000013071],"log_source_ids":[30000000251315,3000000286357],"report_criteria":"(HOSTTYPE = '\''windows'\'')","summary_fields":[{"field_name":"severity","field_unit":""}],"pivot_fields":{"row":{"field_name":"TIME","field_unit":"Default"},"column":{"field_name":"USERNAME","field_unit":"","type":"Custom","column_values":["user1","user2","user3"]}},"aggregation_fields":{"agg_type":"First Value","field_name":"SEVERITY"},"report_ids":[1538,1845],"widget_id":201}'
{
"report_name": "Test report",
"report_group": "Test Group",
"report_type": "tabular",
"log_source_group_ids": [
3000000012292,
3000000013071
],
"log_source_ids": [
30000000251315,
3000000286357
],
"report_criteria": "(HOSTTYPE = 'windows')",
"summary_fields": [
{
"field_name": "severity",
"field_unit": ""
}
],
"pivot_fields": {
"row": {
"field_name": "TIME",
"field_unit": "Default"
},
"column": {
"field_name": "USERNAME",
"field_unit": "",
"type": "Custom",
"column_values": [
"user1",
"user2",
"user3"
]
}
},
"aggregation_fields": {
"agg_type": "First Value",
"field_name": "SEVERITY"
},
"report_ids": [
1538,
1845
],
"widget_id": 201
}
{
"report_id": "2081"
}
{
"code": "07001113",
"title": "Unauthorized",
"detail": "Invalid or missing AuthToken. Check whether the AuthToken is not revoked or expired."
}
{
"error": {
"code": "07001110",
"title": "Bad Request",
"detail": "Something went wrong."
}
}