Detection
These are the API endpoints for retrieving detection rules, catalogs, detections, detection details, and insight tuning data.
List Detection Rules
Retrieves a paginated list of installed security detection rules, filterable by the specified status, severity, execution type, rule type, source, complexity, new-rule status, and deprecation status. Use this endpoint to list only the rules installed in your account, such as when reviewing installed rules and assessing detection coverage.
Rate limit: 50 requests per minute per account.
OAuth Scope : logs360cloud.detection.READ
Role : Administrator, Operator
Query Parameters
Headers
headers_data = Map();
headers_data.put("account_id", "18XXXXX4");
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://log360cloud.manageengine.com/api/v2/detection/rules"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://log360cloud.manageengine.com/api/v2/detection/rules")
.get()
.addHeader("account_id", "18XXXXX4")
.addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
account_id: '18XXXXX4',
Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://log360cloud.manageengine.com/api/v2/detection/rules', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("log360cloud.manageengine.com")
headers = {
'account_id': "18XXXXX4",
'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
conn.request("GET", "/api/v2/detection/rules", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "log360cloud.manageengine.com",
"port": null,
"path": "/api/v2/detection/rules",
"headers": {
"account_id": "18XXXXX4",
"Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
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.end();
curl --request GET \
--url https://log360cloud.manageengine.com/api/v2/detection/rules \
--header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'account_id: 18XXXXX4'
{
"data": [
{
"rule_id": "10000000000339462",
"severity": "critical",
"complexity": "low",
"unique_name": "CUSTOM_RULE_10000000000339462",
"rule_type": "standard",
"is_new": false,
"is_deprecated": false,
"name": "PGSQL LogOff",
"execution_type": "continuous",
"source": "custom",
"status": "enabled"
},
{
"rule_id": "10000000000342012",
"severity": "critical",
"complexity": "low",
"unique_name": "CUSTOM_RULE_10000000000342012",
"rule_type": "standard",
"is_new": false,
"is_deprecated": false,
"name": "PGSQL Logon",
"execution_type": "continuous",
"source": "custom",
"status": "enabled"
}
],
"meta": {
"limit": 2,
"from": 1,
"total_items": 4
}
}
{
"error": {
"code": "00000107",
"title": "Invalid Parameter",
"detail": "severity value is incorrect"
}
}
{
"code": "00000101",
"title": "Unauthorized",
"detail": "Invalid OAuth Token"
}
{
"error": {
"code": "100010107",
"title": "Forbidden",
"detail": "This feature is not available in your current license plan. Please upgrade your license to access it."
}
}
{
"error": {
"code": "00000109",
"detail": "Request throttling limit reached",
"title": "Too Many Requests"
}
}
{
"error": {
"code": "100010102",
"detail": "Failed to fetch detection rules.",
"title": "Internal Server Error"
}
}
Get MITRE Catalog
Retrieves a paginated MITRE ATT&CK catalog slice. Use the required `type` query parameter to choose whether to retrieve tactics, techniques, or sub-techniques. When `type=technique`, `key_id` is mandatory and pagination is scoped to techniques under that tactic. When `type=sub_technique`, both `key_id` and `value_id` are mandatory and pagination is scoped to sub-techniques under that tactic-technique pair.
Rate limit: 50 requests per minute per account.
OAuth Scope : logs360cloud.detection.READ
Role : Administrator, Operator
Query Parameters
Headers
headers_data = Map();
headers_data.put("account_id", "18XXXXX4");
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://log360cloud.manageengine.com/api/v2/detection/mitre?type=sub_technique"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://log360cloud.manageengine.com/api/v2/detection/mitre?type=sub_technique")
.get()
.addHeader("account_id", "18XXXXX4")
.addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
account_id: '18XXXXX4',
Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://log360cloud.manageengine.com/api/v2/detection/mitre?type=sub_technique', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("log360cloud.manageengine.com")
headers = {
'account_id': "18XXXXX4",
'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
conn.request("GET", "/api/v2/detection/mitre?type=sub_technique", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "log360cloud.manageengine.com",
"port": null,
"path": "/api/v2/detection/mitre?type=sub_technique",
"headers": {
"account_id": "18XXXXX4",
"Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
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.end();
curl --request GET \
--url 'https://log360cloud.manageengine.com/api/v2/detection/mitre?type=sub_technique' \
--header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'account_id: 18XXXXX4'
{
"data": {
"sub_techniques": [
{
"tactic_name": "Reconnaissance",
"key_id": "10000000000337060",
"tactic_id": "TA0043",
"technique_name": "Search Open Websites/Domains",
"sub_technique_name": "Social Media",
"technique_id": "T1593",
"value_id": "10000000000337142",
"sub_technique_id": "T1593.001"
},
{
"tactic_name": "Reconnaissance",
"key_id": "10000000000337060",
"tactic_id": "TA0043",
"technique_name": "Search Open Websites/Domains",
"sub_technique_name": "Search Engines",
"technique_id": "T1593",
"value_id": "10000000000337144",
"sub_technique_id": "T1593.002"
},
{
"tactic_name": "Reconnaissance",
"key_id": "10000000000337060",
"tactic_id": "TA0043",
"technique_name": "Search Open Websites/Domains",
"sub_technique_name": "Code Repositories",
"technique_id": "T1593",
"value_id": "10000000000337146",
"sub_technique_id": "T1593.003"
}
]
},
"meta": {
"from": 1,
"limit": 7,
"total_items": 3
}
}
{
"error": {
"code": "00000107",
"detail": "type value is incorrect",
"title": "Invalid Parameter"
}
}
{
"error": {
"code": "10001013",
"title": "Bad Request",
"detail": "REQUIRED PARAMS ARE MISSING"
}
}
{
"code": "00000101",
"title": "Unauthorized",
"detail": "Invalid OAuth Token"
}
{
"error": {
"code": "100010107",
"title": "Forbidden",
"detail": "This feature is not available in your current license plan. Please upgrade your license to access it."
}
}
{
"error": {
"code": "00000109",
"detail": "Request throttling limit reached",
"title": "Too Many Requests"
}
}
{
"error": {
"code": "100010100",
"title": "Internal Server Error",
"detail": "Failed to fetch MITRE catalog data."
}
}
Get Tags
Retrieves a paginated detection tag catalog slice. Use the required `type` query parameter to choose whether to retrieve tag keys or tag values. When `type=value`, `key_id` is mandatory and pagination is scoped to values under that key.
Rate limit: 50 requests per minute per account.
OAuth Scope : logs360cloud.detection.READ
Role : Administrator, Operator
Query Parameters
Headers
headers_data = Map();
headers_data.put("account_id", "18XXXXX4");
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://log360cloud.manageengine.com/api/v2/detection/tags?type=value"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://log360cloud.manageengine.com/api/v2/detection/tags?type=value")
.get()
.addHeader("account_id", "18XXXXX4")
.addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
account_id: '18XXXXX4',
Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://log360cloud.manageengine.com/api/v2/detection/tags?type=value', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("log360cloud.manageengine.com")
headers = {
'account_id': "18XXXXX4",
'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
conn.request("GET", "/api/v2/detection/tags?type=value", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "log360cloud.manageengine.com",
"port": null,
"path": "/api/v2/detection/tags?type=value",
"headers": {
"account_id": "18XXXXX4",
"Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
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.end();
curl --request GET \
--url 'https://log360cloud.manageengine.com/api/v2/detection/tags?type=value' \
--header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'account_id: 18XXXXX4'
Get Detections
Retrieves a list of detections within the specified time range. Use this endpoint to retrieve detection results, such as when reviewing triggered detections during threat hunting or building a detection activity dashboard. The difference between `start_time` and `end_time` must not exceed 7 days.
Rate limit: 50 requests per minute per account.
OAuth Scope : logs360cloud.detection.READ
Role : Administrator, Operator
Query Parameters
Headers
headers_data = Map();
headers_data.put("account_id", "18XXXXX4");
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://log360cloud.manageengine.com/api/v2/detection/detections?start_time=2026-04-23T05:30:00Z&end_time=2026-04-24T05:30:00Z"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://log360cloud.manageengine.com/api/v2/detection/detections?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z")
.get()
.addHeader("account_id", "18XXXXX4")
.addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
account_id: '18XXXXX4',
Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://log360cloud.manageengine.com/api/v2/detection/detections?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("log360cloud.manageengine.com")
headers = {
'account_id': "18XXXXX4",
'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
conn.request("GET", "/api/v2/detection/detections?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "log360cloud.manageengine.com",
"port": null,
"path": "/api/v2/detection/detections?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z",
"headers": {
"account_id": "18XXXXX4",
"Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
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.end();
curl --request GET \
--url 'https://log360cloud.manageengine.com/api/v2/detection/detections?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z' \
--header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'account_id: 18XXXXX4'
{
"data": [
{
"rule_id": "10000000000339462",
"rule_severity": "critical",
"mitre_mappings": [
{
"sub_technique": "Social Media (T1593.001)",
"technique": "Search Open Websites/Domains (T1593)",
"tactic": "Reconnaissance (TA0043)"
},
{
"technique": "Search Victim-Owned Websites (T1594)",
"tactic": "Reconnaissance (TA0043)"
},
{
"tactic": "Reconnaissance (TA0043)"
}
],
"rule_message": "PGSQL LogOff has been triggered",
"rule_name": "PGSQL LogOff",
"usernames": [
"postgres"
],
"hostnames": [
"pgsql"
],
"time": "2026-04-23T23:59:06+05:30",
"detection_id": "777f7127-3934-4a21-9a61-73e390df184a",
"tags": [
{
"value": "Active Directory",
"key": "Data Source"
},
{
"value": "admin@338",
"key": "Threat Actor"
}
]
},
{
"rule_id": "10000000000339462",
"rule_severity": "critical",
"mitre_mappings": [
{
"sub_technique": "Social Media (T1593.001)",
"technique": "Search Open Websites/Domains (T1593)",
"tactic": "Reconnaissance (TA0043)"
},
{
"technique": "Search Victim-Owned Websites (T1594)",
"tactic": "Reconnaissance (TA0043)"
},
{
"tactic": "Reconnaissance (TA0043)"
}
],
"rule_message": "PGSQL LogOff has been triggered",
"rule_name": "PGSQL LogOff",
"usernames": [
"postgres"
],
"hostnames": [
"pgsql"
],
"time": "2026-04-23T23:56:17+05:30",
"detection_id": "3ac65a46-4813-43f7-94c1-5fbdd9894a36",
"tags": [
{
"value": "Active Directory",
"key": "Data Source"
},
{
"value": "admin@338",
"key": "Threat Actor"
}
]
}
],
"meta": {
"limit": 2,
"from": 1,
"total_items": 1090
}
}
{
"error": {
"code": "00000107",
"detail": "tag_value_id value is incorrect",
"title": "Invalid Parameter"
}
}
{
"error": {
"code": "10001013",
"title": "Bad Request",
"detail": "REQUIRED PARAMS ARE MISSING"
}
}
{
"error": {
"code": "10001057",
"title": "Bad Request",
"detail": "START_TIME must be earlier than END_TIME."
}
}
{
"error": {
"code": "10001058",
"title": "Bad Request",
"detail": "START_TIME and END_TIME values must be in the ISO 8601 date-time format."
}
}
{
"error": {
"code": "10001099",
"title": "Bad Request",
"detail": "Time range should not exceed 7 days."
}
}
{
"code": "00000101",
"title": "Unauthorized",
"detail": "Invalid OAuth Token"
}
{
"error": {
"code": "100010107",
"title": "Forbidden",
"detail": "This feature is not available in your current license plan. Please upgrade your license to access it."
}
}
{
"error": {
"code": "00000109",
"detail": "Request throttling limit reached",
"title": "Too Many Requests"
}
}
{
"error": {
"code": "100010103",
"detail": "Failed to fetch detections.",
"title": "Internal Server Error"
}
}
Get Detection Detail
Retrieves the detailed information for the specified detection record, including timeline and evidence data. Use this endpoint to review the full context of a specific detection, such as during incident investigation.
Rate limit: 50 requests per minute per account.
OAuth Scope : logs360cloud.detection.READ
Role : Administrator, Operator
Query Parameters
Headers
headers_data = Map();
headers_data.put("account_id", "18XXXXX4");
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://log360cloud.manageengine.com/api/v2/detection/detection-detail?detection_id=777f7127-3934-4a21-9a61-73e390df184a&detection_time=2026-04-23T23:59:06+05:30"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://log360cloud.manageengine.com/api/v2/detection/detection-detail?detection_id=777f7127-3934-4a21-9a61-73e390df184a&detection_time=2026-04-23T23%3A59%3A06%2B05%3A30")
.get()
.addHeader("account_id", "18XXXXX4")
.addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
account_id: '18XXXXX4',
Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://log360cloud.manageengine.com/api/v2/detection/detection-detail?detection_id=777f7127-3934-4a21-9a61-73e390df184a&detection_time=2026-04-23T23%3A59%3A06%2B05%3A30', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("log360cloud.manageengine.com")
headers = {
'account_id': "18XXXXX4",
'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
conn.request("GET", "/api/v2/detection/detection-detail?detection_id=777f7127-3934-4a21-9a61-73e390df184a&detection_time=2026-04-23T23%3A59%3A06%2B05%3A30", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "log360cloud.manageengine.com",
"port": null,
"path": "/api/v2/detection/detection-detail?detection_id=777f7127-3934-4a21-9a61-73e390df184a&detection_time=2026-04-23T23%3A59%3A06%2B05%3A30",
"headers": {
"account_id": "18XXXXX4",
"Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
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.end();
curl --request GET \
--url 'https://log360cloud.manageengine.com/api/v2/detection/detection-detail?detection_id=777f7127-3934-4a21-9a61-73e390df184a&detection_time=2026-04-23T23%3A59%3A06%2B05%3A30' \
--header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'account_id: 18XXXXX4'
{
"data": {
"timeline": [
{
"action_id": "10000000000339463",
"action_message": "Test",
"action_name": "Test",
"time": "2026-04-23T23:59:06+05:30",
"action_log": {
"hosttype": "pgsql_logs",
"iename": "pgsql logoff",
"hostname": "pgsql",
"statement": "disconnection: session time: 0:02:48.726 user=postgres database=postgres host=[local]",
"action": "logoff",
"message": "2026-04-23 23:59:06.130614 GMT [3549] user=postgres,db=postgres,client=[local] LOG: disconnection: session time: 0:02:48.726 user=postgres database=postgres host=[local]",
"processid": "3549",
"appid": "10000000000339489",
"databasename": "postgres",
"common_severity": "information",
"username": "postgres",
"status": "success"
}
}
],
"detection_detail": {
"rule_id": "10000000000339462",
"mitigation": "<div>Review whether the PostgreSQL session termination was expected, verify the user and database context, and investigate the source host for unauthorized activity.</div>",
"rule_name": "PGSQL LogOff",
"description": "Detects PostgreSQL user logoff events to help analysts review session termination activity and related account context.",
"mitre": [
{
"sub_technique": "Social Media (T1593.001)",
"technique": "Search Open Websites/Domains (T1593)",
"tactic": "Reconnaissance (TA0043)"
},
{
"technique": "Search Victim-Owned Websites (T1594)",
"tactic": "Reconnaissance (TA0043)"
},
{
"tactic": "Reconnaissance (TA0043)"
}
],
"tag": [
{
"value": "Active Directory",
"key": "Data Source"
},
{
"value": "admin@338",
"key": "Threat Actor"
}
]
}
}
}
{
"error": {
"code": "00000107",
"detail": "detection_time value is incorrect",
"title": "Invalid Parameter"
}
}
{
"error": {
"code": "10001013",
"title": "Bad Request",
"detail": "REQUIRED PARAMS ARE MISSING"
}
}
{
"code": "00000101",
"title": "Unauthorized",
"detail": "Invalid OAuth Token"
}
{
"error": {
"code": "100010107",
"title": "Forbidden",
"detail": "This feature is not available in your current license plan. Please upgrade your license to access it."
}
}
{
"error": {
"code": "00000109",
"detail": "Request throttling limit reached",
"title": "Too Many Requests"
}
}
{
"error": {
"code": "100010104",
"detail": "Failed to fetch detection detail.",
"title": "Internal Server Error"
}
}
Get Detection Rule Tuning Insights
Retrieves insight tuning data and summary for the specified detection rule within the specified time range. Use this endpoint to review tuning insights for a detection rule, such as when analyzing false positive rates or assessing rule performance before adjusting thresholds. The difference between `start_time` and `end_time` must not exceed 7 days.
Rate limit: 50 requests per minute per account.
OAuth Scope : logs360cloud.detection.READ
Role : Administrator, Operator
Path Parameters
Query Parameters
Headers
headers_data = Map();
headers_data.put("account_id", "18XXXXX4");
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://log360cloud.manageengine.com/api/v2/detection/rule/10000000000339462/tuning-insights?start_time=2026-04-23T05:30:00Z&end_time=2026-04-24T05:30:00Z"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://log360cloud.manageengine.com/api/v2/detection/rule/10000000000339462/tuning-insights?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z")
.get()
.addHeader("account_id", "18XXXXX4")
.addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
.build();
Response response = client.newCall(request).execute();
const options = {
method: 'GET',
headers: {
account_id: '18XXXXX4',
Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
}
};
fetch('https://log360cloud.manageengine.com/api/v2/detection/rule/10000000000339462/tuning-insights?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z', options)
.then(response => response.json())
.then(response => console.log(response))
.catch(err => console.error(err));
import http.client
conn = http.client.HTTPSConnection("log360cloud.manageengine.com")
headers = {
'account_id': "18XXXXX4",
'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
conn.request("GET", "/api/v2/detection/rule/10000000000339462/tuning-insights?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
const http = require("https");
const options = {
"method": "GET",
"hostname": "log360cloud.manageengine.com",
"port": null,
"path": "/api/v2/detection/rule/10000000000339462/tuning-insights?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z",
"headers": {
"account_id": "18XXXXX4",
"Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
}
};
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.end();
curl --request GET \
--url 'https://log360cloud.manageengine.com/api/v2/detection/rule/10000000000339462/tuning-insights?start_time=2026-04-23T05%3A30%3A00Z&end_time=2026-04-24T05%3A30%3A00Z' \
--header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
--header 'account_id: 18XXXXX4'
{
"data": {
"tuning_data": [
{
"insights": [
{
"suggestion": "Exclude below fields to minimize execution load",
"tunings": [
{
"action_order": 1,
"field": "HOSTNAME",
"action_name": "Action1",
"message": "hostname : pgsql",
"value": "pgsql",
"status": "APPLIED"
},
{
"action_order": 1,
"field": "IENAME",
"action_name": "Action1",
"message": "iename : pgsql logoff",
"value": "pgsql logoff",
"status": ""
}
],
"tooltip_text": "Exclude unnecessary fields to improve execution efficiency.",
"title": "Action1"
}
],
"type": "Event Based Insights"
}
],
"tuning_summary": [
{
"percentage": 100,
"title": "Action1",
"exclude_field_list": {
"pgsql": 0
}
}
]
}
}
{
"error": {
"code": "00000107",
"detail": "start_time value is incorrect",
"title": "Invalid Parameter"
}
}
{
"error": {
"code": "10001013",
"title": "Bad Request",
"detail": "REQUIRED PARAMS ARE MISSING"
}
}
{
"error": {
"code": "10001057",
"title": "Bad Request",
"detail": "START_TIME must be earlier than END_TIME."
}
}
{
"error": {
"code": "10001058",
"title": "Bad Request",
"detail": "START_TIME and END_TIME values must be in the ISO 8601 date-time format."
}
}
{
"error": {
"code": "10001099",
"title": "Bad Request",
"detail": "Time range should not exceed 7 days."
}
}
{
"code": "00000101",
"title": "Unauthorized",
"detail": "Invalid OAuth Token"
}
{
"error": {
"code": "100010107",
"title": "Forbidden",
"detail": "This feature is not available in your current license plan. Please upgrade your license to access it."
}
}
{
"error": {
"code": "10001098",
"detail": "Detection rule not found.",
"title": "Not Found"
}
}
{
"error": {
"code": "00000109",
"detail": "Request throttling limit reached",
"title": "Too Many Requests"
}
}
{
"error": {
"code": "100010105",
"detail": "Failed to fetch detection tuning insights.",
"title": "Internal Server Error"
}
}