CyberProof Platform API v2.21.3
Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.
The CyberProof Platform public API, enabling integration with customer systems.
Base URLs:
-
https://{tenant}.api.cyberproof.io/api/v1
- tenant - The name of the tenant Default: demo
Email: CyberProof API Support
Authentication
-
API Key (ApiKeyHeader)
- Parameter Name: X-API-KEY, in: header.
-
API Key (ApiKeyQuery)
- Parameter Name: apiKey, in: query.
alerts
Alerts APIs
createAlert
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/alerts \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"name":"Email messages containing malware removed after delivery","sourceId":"345ffe9a","severity":"High","description":"message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.","sourceUrl":"http://10.0.0.90/MySIEM/api/alerts/345ffe9a","raw":{"attributeInitializationInProgress":false,"createdTime":{"day":{"numberInt":"18"},"hour":{"numberInt":"16"},"milliSecond":{"numberInt":"711"},"minute":{"numberInt":"10"},"month":{"numberInt":"6"},"second":{"numberInt":"47"},"timezoneID":"Israel","year":{"numberInt":"2017"}},"createdTimestamp":{"numberDouble":"1500383447711"},"deprecated":false,"description":"ACME","disabled":false,"inCache":true,"inactive":false,"initialized":true,"isAdditionalLoaded":false,"localID":{"numberDouble":"30064798760"},"modificationCount":{"numberInt":"1"}},"classification":"Authentication","observables":[{"type":"IPv4 Address","value":"192.168.40.45","tags":["Cloud-Computing","Virus","Phishing"],"extraProperties":{"property1":{"value":"aaa-bbcc","type":"WeakIdentifier"},"property2":{"value":"aaa-bbcc","type":"WeakIdentifier"}},"relatedExtraProperties":{"property1":{"sha":256,"type":"WeakIdentifier"},"property2":{"sha":256,"type":"WeakIdentifier"}}}],"useCase":"UC216 - EPP - Persistent Malware","company":"ACME","tags":["Cloud-Computing","Virus","Phishing"],"categories":["Ransomware","Phishing"],"detectionRule":"WRONG_PASSWORD_3_ATTEMPTS","alertType":"CTI-Landscape","threatType":"Phishing","threatActors":["Cyber Criminals","Anonymous"],"malwareTools":["TrickBot","IcedID","Cobalt Strike"],"ctiSourceUrls":["https://blog.malwarebytes.com/someTopic"],"recommendations":"Implement the attached IOCs in your security systems.","killChain":["Reconnaissance","Weaponization","Delivery"],"mitreAttacks":["T1003","T1001","T1595.001"]}'
fetch("https://test-api.cyberproof.io/api/v1/alerts", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"name\":\"Email messages containing malware removed after delivery\",\"sourceId\":\"345ffe9a\",\"severity\":\"High\",\"description\":\"message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.\",\"sourceUrl\":\"http://10.0.0.90/MySIEM/api/alerts/345ffe9a\",\"raw\":{\"attributeInitializationInProgress\":false,\"createdTime\":{\"day\":{\"numberInt\":\"18\"},\"hour\":{\"numberInt\":\"16\"},\"milliSecond\":{\"numberInt\":\"711\"},\"minute\":{\"numberInt\":\"10\"},\"month\":{\"numberInt\":\"6\"},\"second\":{\"numberInt\":\"47\"},\"timezoneID\":\"Israel\",\"year\":{\"numberInt\":\"2017\"}},\"createdTimestamp\":{\"numberDouble\":\"1500383447711\"},\"deprecated\":false,\"description\":\"ACME\",\"disabled\":false,\"inCache\":true,\"inactive\":false,\"initialized\":true,\"isAdditionalLoaded\":false,\"localID\":{\"numberDouble\":\"30064798760\"},\"modificationCount\":{\"numberInt\":\"1\"}},\"classification\":\"Authentication\",\"observables\":[{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"extraProperties\":{\"property1\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"},\"property2\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"}},\"relatedExtraProperties\":{\"property1\":{\"sha\":256,\"type\":\"WeakIdentifier\"},\"property2\":{\"sha\":256,\"type\":\"WeakIdentifier\"}}}],\"useCase\":\"UC216 - EPP - Persistent Malware\",\"company\":\"ACME\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"categories\":[\"Ransomware\",\"Phishing\"],\"detectionRule\":\"WRONG_PASSWORD_3_ATTEMPTS\",\"alertType\":\"CTI-Landscape\",\"threatType\":\"Phishing\",\"threatActors\":[\"Cyber Criminals\",\"Anonymous\"],\"malwareTools\":[\"TrickBot\",\"IcedID\",\"Cobalt Strike\"],\"ctiSourceUrls\":[\"https://blog.malwarebytes.com/someTopic\"],\"recommendations\":\"Implement the attached IOCs in your security systems.\",\"killChain\":[\"Reconnaissance\",\"Weaponization\",\"Delivery\"],\"mitreAttacks\":[\"T1003\",\"T1001\",\"T1595.001\"]}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"name\":\"Email messages containing malware removed after delivery\",\"sourceId\":\"345ffe9a\",\"severity\":\"High\",\"description\":\"message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.\",\"sourceUrl\":\"http://10.0.0.90/MySIEM/api/alerts/345ffe9a\",\"raw\":{\"attributeInitializationInProgress\":false,\"createdTime\":{\"day\":{\"numberInt\":\"18\"},\"hour\":{\"numberInt\":\"16\"},\"milliSecond\":{\"numberInt\":\"711\"},\"minute\":{\"numberInt\":\"10\"},\"month\":{\"numberInt\":\"6\"},\"second\":{\"numberInt\":\"47\"},\"timezoneID\":\"Israel\",\"year\":{\"numberInt\":\"2017\"}},\"createdTimestamp\":{\"numberDouble\":\"1500383447711\"},\"deprecated\":false,\"description\":\"ACME\",\"disabled\":false,\"inCache\":true,\"inactive\":false,\"initialized\":true,\"isAdditionalLoaded\":false,\"localID\":{\"numberDouble\":\"30064798760\"},\"modificationCount\":{\"numberInt\":\"1\"}},\"classification\":\"Authentication\",\"observables\":[{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"extraProperties\":{\"property1\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"},\"property2\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"}},\"relatedExtraProperties\":{\"property1\":{\"sha\":256,\"type\":\"WeakIdentifier\"},\"property2\":{\"sha\":256,\"type\":\"WeakIdentifier\"}}}],\"useCase\":\"UC216 - EPP - Persistent Malware\",\"company\":\"ACME\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"categories\":[\"Ransomware\",\"Phishing\"],\"detectionRule\":\"WRONG_PASSWORD_3_ATTEMPTS\",\"alertType\":\"CTI-Landscape\",\"threatType\":\"Phishing\",\"threatActors\":[\"Cyber Criminals\",\"Anonymous\"],\"malwareTools\":[\"TrickBot\",\"IcedID\",\"Cobalt Strike\"],\"ctiSourceUrls\":[\"https://blog.malwarebytes.com/someTopic\"],\"recommendations\":\"Implement the attached IOCs in your security systems.\",\"killChain\":[\"Reconnaissance\",\"Weaponization\",\"Delivery\"],\"mitreAttacks\":[\"T1003\",\"T1001\",\"T1595.001\"]}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/alerts", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/alerts"
payload := strings.NewReader("{\"name\":\"Email messages containing malware removed after delivery\",\"sourceId\":\"345ffe9a\",\"severity\":\"High\",\"description\":\"message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.\",\"sourceUrl\":\"http://10.0.0.90/MySIEM/api/alerts/345ffe9a\",\"raw\":{\"attributeInitializationInProgress\":false,\"createdTime\":{\"day\":{\"numberInt\":\"18\"},\"hour\":{\"numberInt\":\"16\"},\"milliSecond\":{\"numberInt\":\"711\"},\"minute\":{\"numberInt\":\"10\"},\"month\":{\"numberInt\":\"6\"},\"second\":{\"numberInt\":\"47\"},\"timezoneID\":\"Israel\",\"year\":{\"numberInt\":\"2017\"}},\"createdTimestamp\":{\"numberDouble\":\"1500383447711\"},\"deprecated\":false,\"description\":\"ACME\",\"disabled\":false,\"inCache\":true,\"inactive\":false,\"initialized\":true,\"isAdditionalLoaded\":false,\"localID\":{\"numberDouble\":\"30064798760\"},\"modificationCount\":{\"numberInt\":\"1\"}},\"classification\":\"Authentication\",\"observables\":[{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"extraProperties\":{\"property1\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"},\"property2\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"}},\"relatedExtraProperties\":{\"property1\":{\"sha\":256,\"type\":\"WeakIdentifier\"},\"property2\":{\"sha\":256,\"type\":\"WeakIdentifier\"}}}],\"useCase\":\"UC216 - EPP - Persistent Malware\",\"company\":\"ACME\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"categories\":[\"Ransomware\",\"Phishing\"],\"detectionRule\":\"WRONG_PASSWORD_3_ATTEMPTS\",\"alertType\":\"CTI-Landscape\",\"threatType\":\"Phishing\",\"threatActors\":[\"Cyber Criminals\",\"Anonymous\"],\"malwareTools\":[\"TrickBot\",\"IcedID\",\"Cobalt Strike\"],\"ctiSourceUrls\":[\"https://blog.malwarebytes.com/someTopic\"],\"recommendations\":\"Implement the attached IOCs in your security systems.\",\"killChain\":[\"Reconnaissance\",\"Weaponization\",\"Delivery\"],\"mitreAttacks\":[\"T1003\",\"T1001\",\"T1595.001\"]}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/alerts"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"name\":\"Email messages containing malware removed after delivery\",\"sourceId\":\"345ffe9a\",\"severity\":\"High\",\"description\":\"message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.\",\"sourceUrl\":\"http://10.0.0.90/MySIEM/api/alerts/345ffe9a\",\"raw\":{\"attributeInitializationInProgress\":false,\"createdTime\":{\"day\":{\"numberInt\":\"18\"},\"hour\":{\"numberInt\":\"16\"},\"milliSecond\":{\"numberInt\":\"711\"},\"minute\":{\"numberInt\":\"10\"},\"month\":{\"numberInt\":\"6\"},\"second\":{\"numberInt\":\"47\"},\"timezoneID\":\"Israel\",\"year\":{\"numberInt\":\"2017\"}},\"createdTimestamp\":{\"numberDouble\":\"1500383447711\"},\"deprecated\":false,\"description\":\"ACME\",\"disabled\":false,\"inCache\":true,\"inactive\":false,\"initialized\":true,\"isAdditionalLoaded\":false,\"localID\":{\"numberDouble\":\"30064798760\"},\"modificationCount\":{\"numberInt\":\"1\"}},\"classification\":\"Authentication\",\"observables\":[{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"extraProperties\":{\"property1\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"},\"property2\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"}},\"relatedExtraProperties\":{\"property1\":{\"sha\":256,\"type\":\"WeakIdentifier\"},\"property2\":{\"sha\":256,\"type\":\"WeakIdentifier\"}}}],\"useCase\":\"UC216 - EPP - Persistent Malware\",\"company\":\"ACME\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"categories\":[\"Ransomware\",\"Phishing\"],\"detectionRule\":\"WRONG_PASSWORD_3_ATTEMPTS\",\"alertType\":\"CTI-Landscape\",\"threatType\":\"Phishing\",\"threatActors\":[\"Cyber Criminals\",\"Anonymous\"],\"malwareTools\":[\"TrickBot\",\"IcedID\",\"Cobalt Strike\"],\"ctiSourceUrls\":[\"https://blog.malwarebytes.com/someTopic\"],\"recommendations\":\"Implement the attached IOCs in your security systems.\",\"killChain\":[\"Reconnaissance\",\"Weaponization\",\"Delivery\"],\"mitreAttacks\":[\"T1003\",\"T1001\",\"T1595.001\"]}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/alerts")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"name\":\"Email messages containing malware removed after delivery\",\"sourceId\":\"345ffe9a\",\"severity\":\"High\",\"description\":\"message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.\",\"sourceUrl\":\"http://10.0.0.90/MySIEM/api/alerts/345ffe9a\",\"raw\":{\"attributeInitializationInProgress\":false,\"createdTime\":{\"day\":{\"numberInt\":\"18\"},\"hour\":{\"numberInt\":\"16\"},\"milliSecond\":{\"numberInt\":\"711\"},\"minute\":{\"numberInt\":\"10\"},\"month\":{\"numberInt\":\"6\"},\"second\":{\"numberInt\":\"47\"},\"timezoneID\":\"Israel\",\"year\":{\"numberInt\":\"2017\"}},\"createdTimestamp\":{\"numberDouble\":\"1500383447711\"},\"deprecated\":false,\"description\":\"ACME\",\"disabled\":false,\"inCache\":true,\"inactive\":false,\"initialized\":true,\"isAdditionalLoaded\":false,\"localID\":{\"numberDouble\":\"30064798760\"},\"modificationCount\":{\"numberInt\":\"1\"}},\"classification\":\"Authentication\",\"observables\":[{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"extraProperties\":{\"property1\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"},\"property2\":{\"value\":\"aaa-bbcc\",\"type\":\"WeakIdentifier\"}},\"relatedExtraProperties\":{\"property1\":{\"sha\":256,\"type\":\"WeakIdentifier\"},\"property2\":{\"sha\":256,\"type\":\"WeakIdentifier\"}}}],\"useCase\":\"UC216 - EPP - Persistent Malware\",\"company\":\"ACME\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"categories\":[\"Ransomware\",\"Phishing\"],\"detectionRule\":\"WRONG_PASSWORD_3_ATTEMPTS\",\"alertType\":\"CTI-Landscape\",\"threatType\":\"Phishing\",\"threatActors\":[\"Cyber Criminals\",\"Anonymous\"],\"malwareTools\":[\"TrickBot\",\"IcedID\",\"Cobalt Strike\"],\"ctiSourceUrls\":[\"https://blog.malwarebytes.com/someTopic\"],\"recommendations\":\"Implement the attached IOCs in your security systems.\",\"killChain\":[\"Reconnaissance\",\"Weaponization\",\"Delivery\"],\"mitreAttacks\":[\"T1003\",\"T1001\",\"T1595.001\"]}")
.asString();
POST /alerts
Creates a new alert
Creates a new alert in CDC.
This operation is idempotent: if the client provides a sourceId which already exists in CDC, then the operation should succeed with UPSERT semantics.br/> NOTE: The maximum request size is 2 MB.
Body parameter
{
"name": "Email messages containing malware removed after delivery",
"sourceId": "345ffe9a",
"severity": "High",
"description": "message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.",
"sourceUrl": "http://10.0.0.90/MySIEM/api/alerts/345ffe9a",
"raw": {
"attributeInitializationInProgress": false,
"createdTime": {
"day": {
"numberInt": "18"
},
"hour": {
"numberInt": "16"
},
"milliSecond": {
"numberInt": "711"
},
"minute": {
"numberInt": "10"
},
"month": {
"numberInt": "6"
},
"second": {
"numberInt": "47"
},
"timezoneID": "Israel",
"year": {
"numberInt": "2017"
}
},
"createdTimestamp": {
"numberDouble": "1500383447711"
},
"deprecated": false,
"description": "ACME",
"disabled": false,
"inCache": true,
"inactive": false,
"initialized": true,
"isAdditionalLoaded": false,
"localID": {
"numberDouble": "30064798760"
},
"modificationCount": {
"numberInt": "1"
}
},
"classification": "Authentication",
"observables": [
{
"type": "IPv4 Address",
"value": "192.168.40.45",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"extraProperties": {
"property1": {
"value": "aaa-bbcc",
"type": "WeakIdentifier"
},
"property2": {
"value": "aaa-bbcc",
"type": "WeakIdentifier"
}
},
"relatedExtraProperties": {
"property1": {
"sha": 256,
"type": "WeakIdentifier"
},
"property2": {
"sha": 256,
"type": "WeakIdentifier"
}
}
}
],
"useCase": "UC216 - EPP - Persistent Malware",
"company": "ACME",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"threatActors": [
"Cyber Criminals",
"Anonymous"
],
"malwareTools": [
"TrickBot",
"IcedID",
"Cobalt Strike"
],
"ctiSourceUrls": [
"https://blog.malwarebytes.com/someTopic"
],
"recommendations": "Implement the attached IOCs in your security systems.",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
]
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | CreateAlertRequest | true | none |
Example responses
201 Response
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
201 | Created | The alert has been created | AlertSummary |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryAlerts
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/alerts \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/alerts", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/alerts", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/alerts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/alerts"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/alerts")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /alerts
*Queries alerts based on filters provided by the client. For synchronization purposes, the updatedAfter
filter option should be used. *
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
updatedBefore | query | string(date-time) | false | Include only those which were updated before the specified timestamp (exclusive) |
updatedAfter | query | string(date-time) | false | Include only those which were updated after or at the specified timestamp (inclusive) |
detectedBefore | query | string(date-time) | false | Include only those which were detected before the specified timestamp (exclusive) |
detectedAfter | query | string(date-time) | false | Include only those which were detected after the specified timestamp (inclusive) |
status | query | array[string] | false | Filter alerts by status |
severity | query | array[string] | false | Filter alerts by severity |
company | query | string | false | Filter alerts by company |
source | query | string | false | Filters alerts by their source system. |
sourceId | query | string | false | When combined with the source parameter - finds an alert by its source ID (the ID as defined by the SIEM). |
useCase | query | string | false | Filters alerts by their use case. |
observableType | query | string | false | Filters alerts by observable: only alerts linked to the specified observable will be returned. |
observableValue | query | string | false | Filters alerts by observable: only alerts linked to the specified observable will be returned. |
alertType | query | array[string] | false | Filter alerts by their type |
threatType | query | array[string] | false | Filter alerts by threat types |
tags | query | array[string] | false | Filters alerts by tags. |
tagsCondition | query | string | false | If tags contains multiple items, determines the query predicate: |
observableTags | query | array[string] | false | Filters alerts by observable tags. |
observableTagsCondition | query | string | false | If observableTags contains multiple items, determines the query predicate: |
threatActors | query | array[string] | false | Filters alerts by threat actors. |
threatActorsCondition | query | string | false | If threatActors contains multiple items, determines the query predicate: |
malwareTools | query | array[string] | false | Filters alerts by maleware and tools. |
malwareToolsCondition | query | string | false | If malwareTools contains multiple items, determines the query predicate: |
Detailed descriptions
source: Filters alerts by their source system. Often combined with the sourceId
parameter, in order to find an alert by its external ID.`
sourceId: When combined with the source
parameter - finds an alert by its source ID (the ID as defined by the SIEM). If sourceId
is specified but source
is not specified, the query will fail and return 400 (Bad Request).
observableType: Filters alerts by observable: only alerts linked to the specified observable will be returned.
This parameter specifies the observable's type, and it must be combined with the observableValue
parameter.
observableValue: Filters alerts by observable: only alerts linked to the specified observable will be returned.
This parameter specifies the observable's value, and it must be combined with the observableType
parameter.
tags: Filters alerts by tags.
Note: if more than one tag is specified, the client must specify the tagsCondition
(otherwise: the server will return 400 Bad Request)
tagsCondition: If tags
contains multiple items, determines the query predicate:
any
: returns results which contain at least one of the specified tagsall
: returns results which contain all of the specified tags
observableTags: Filters alerts by observable tags.
Note: if more than one tag is specified, the client must specify the observableTagsCondition
(otherwise: the server will return 400 Bad Request)
observableTagsCondition: If observableTags
contains multiple items, determines the query predicate:
any
: returns results which contain at least one of the specified tagsall
: returns results which contain all of the specified tags
threatActors: Filters alerts by threat actors. Note: if more than one value is specified, the client must specify the threatActorsCondition
(otherwise: the server will return 400 Bad Request)
threatActorsCondition: If threatActors
contains multiple items, determines the query predicate:
any
: returns results which contain at least one of the specified valuesall
: returns results which contain all of the specified values
malwareTools: Filters alerts by maleware and tools. Note: if more than one value is specified, the client must specify the malwareToolsCondition
(otherwise: the server will return 400 Bad Request)
malwareToolsCondition: If malwareTools
contains multiple items, determines the query predicate:
any
: returns results which contain at least one of the specified valuesall
: returns results which contain all of the specified values
Enumerated Values
Parameter | Value |
---|---|
alertType | General |
alertType | CTI-Assetbased |
alertType | CTI-Landscape |
tagsCondition | any |
tagsCondition | all |
observableTagsCondition | any |
observableTagsCondition | all |
threatActorsCondition | any |
threatActorsCondition | all |
malwareToolsCondition | any |
malwareToolsCondition | all |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the results and additional information | AlertsQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
getAlert
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060 \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/alerts/5a9e19eebdee5a000a8fe060", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /alerts/{alertId}
Returns a single alert
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
alertId | path | string | true | The unique ID of the alert, as defined by CDC |
Example responses
200 Response
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"raw": {
"attributeInitializationInProgress": false,
"createdTime": {
"day": {
"numberInt": "18"
},
"hour": {
"numberInt": "16"
},
"milliSecond": {
"numberInt": "711"
},
"minute": {
"numberInt": "10"
},
"month": {
"numberInt": "6"
},
"second": {
"numberInt": "47"
},
"timezoneID": "Israel",
"year": {
"numberInt": "2017"
}
},
"createdTimestamp": {
"numberDouble": "1500383447711"
},
"deprecated": false,
"description": "ACME",
"disabled": false,
"inCache": true,
"inactive": false,
"initialized": true,
"isAdditionalLoaded": false,
"localID": {
"numberDouble": "30064798760"
},
"modificationCount": {
"numberInt": "1"
}
},
"appendedRaw": [
{}
],
"cdcUrl": "https://acme.cyberproof.io/home/alerts/alert/5e7c6cf54b832e0018f191ad",
"threatActors": [
"Cyber Criminals",
"Anonymous"
],
"malwareTools": [
"TrickBot",
"IcedID",
"Cobalt Strike"
],
"ctiSourceUrls": [
"https://blog.malwarebytes.com/someTopic"
],
"recommendations": "Implement the attached IOCs in your security systems."
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | Alert |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
200 | ETag | string | Includes an identifier for a specific version of a resource. Commonly used as the basis for conditional gets and conditional updates. |
queryAlertEvidence
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /alerts/{alertId}/evidence
Returns information about the evidence associated with this alert.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
alertId | path | string | true | The unique ID of the alert, as defined by CDC |
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
include | query | array[string] | false | Specifies which additional fields to include in the query results: |
Detailed descriptions
include: Specifies which additional fields to include in the query results:
data
: includes the evidence metadata.
Enumerated Values
Parameter | Value |
---|---|
include | data |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"id": "5aa4d8fcbdee5a000a911882",
"type": "MITRE_ATTACK_ADDED",
"reported": "2019-08-24T14:15:22Z",
"created": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"description": "System Admin has changed severity from Low to Medium",
"messageId": "string",
"messageCdcUrl": "https://acme.cyberproof.io/home/incidents/5ea71bb363f6c6001707663b/evidence/5ea71bb363f6c6001707254a",
"externalId": "345ffe9a",
"data": {}
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | EvidenceQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
createAlertEvidence
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"reported":"2019-08-24T14:15:22Z","caption":"Severity changed","messageId":"string","description":"System Admin has changed severity from Low to Medium","externalId":"345ffe9a"}'
fetch("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence"
payload := strings.NewReader("{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/alerts/5a9e19eebdee5a000a8fe060/evidence")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}")
.asString();
POST /alerts/{alertId}/evidence
Creates a new alert evidence
Body parameter
{
"reported": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"messageId": "string",
"description": "System Admin has changed severity from Low to Medium",
"externalId": "345ffe9a"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
alertId | path | string | true | The unique ID of the alert, as defined by CDC |
body | body | CreateEvidenceRequest | true | none |
Example responses
201 Response
{
"id": "5aa4d8fcbdee5a000a911882",
"type": "MITRE_ATTACK_ADDED",
"reported": "2019-08-24T14:15:22Z",
"created": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"description": "System Admin has changed severity from Low to Medium",
"messageId": "string",
"messageCdcUrl": "https://acme.cyberproof.io/home/incidents/5ea71bb363f6c6001707663b/evidence/5ea71bb363f6c6001707254a",
"externalId": "345ffe9a",
"data": {}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
201 | Created | The evidence has been created | Evidence |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
409 | Conflict | The request conflicts with the current state of the resource. | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
incidents
Incidents APIs
queryIncidents
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/incidents \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/incidents", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/incidents")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /incidents
*Queries incidents based on filters provided by the client. For synchronization purposes, the updatedAfter
filter option should be used. *
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
externalId | query | string | false | Filters according to the specified external ID. Used in conjuction with the externalSystem parameter. |
externalSystem | query | string | false | Identifies the external system to which the filter refers. |
include | query | array[string] | false | Specifies which additional fields to include in the query results: |
status | query | array[string] | false | Filter incidents by status |
pendingForGroup | query | string | false | Return only incidents that are pending redirection to the specified group. |
group | query | string | false | filter incidents by the group (tier) which currently owns them (L1, L2, Customer) |
updatedBefore | query | string(date-time) | false | Include only those which were updated before the specified timestamp (exclusive) |
updatedAfter | query | string(date-time) | false | Include only those which were updated after or at the specified timestamp (inclusive) |
observableType | query | string | false | Filters incidents by observable: only incidents linked to the specified observable will be returned. |
observableValue | query | string | false | Filters incidents by observable: only incidents linked to the specified observable will be returned. |
tags | query | array[string] | false | Filters incidents by tags. |
tagsCondition | query | string | false | If tags contains multiple items, determines the query predicate: |
Detailed descriptions
externalId: Filters according to the specified external ID. Used in conjuction with the externalSystem parameter. If specified, then externalSystem
MUST be specified as well.
externalSystem: Identifies the external system to which the filter refers. Used in conjuction with the externalId parameter:
- If
externalId
is also specified, the filter will return only items which have the specifiedexternalId
at the specifiedexternalSystem
. - If
externalId
is not specified, the filter will return all items which have some external ID at the specifiedexternalSystem
include: Specifies which additional fields to include in the query results:
name
: includes the incident name.description
: includes the incident description.tags
: includes the incident tags.externalIds
: includes the external IDs associated with the incident, which the caller has permission to access.company
: includes the company associated with the incident.
observableType: Filters incidents by observable: only incidents linked to the specified observable will be returned. This parameter specifies the observable's type, and it must be combined with the observableValue
parameter.
observableValue: Filters incidents by observable: only incidents linked to the specified observable will be returned. This parameter specifies the observable's value, and it must be combined with the observableType
parameter.
tags: Filters incidents by tags.
Note: if more than one tag is specified, the client must specify the tagsCondition
(otherwise: the server will return 400 Bad Request)
tagsCondition: If tags
contains multiple items, determines the query predicate:
any
: returns results which contain at least one of the specified tagsall
: returns results which contain all of the specified tags
Enumerated Values
Parameter | Value |
---|---|
include | name |
include | description |
include | tags |
include | externalIds |
include | company |
include | redirectionReason |
tagsCondition | any |
tagsCondition | all |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the results and additional information | IncidentsQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
getIncident
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060 \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/incidents/5a9e19eebdee5a000a8fe060", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /incidents/{incidentId}
Returns a single incident
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
Example responses
200 Response
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z",
"closingComment": "string",
"closingReason": "True Positive",
"closed": "2019-08-24T14:15:22Z",
"cdcUrl": "https://acme.cyberproof.io/home/incidents/incident/5ea71bb363f6c6001707663b"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | Incident |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
200 | ETag | string | Includes an identifier for a specific version of a resource. Commonly used as the basis for conditional gets and conditional updates. |
updateIncident
Code samples
curl --request PATCH \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060 \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'If-Match: string' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"priority":"Low","tags":["Cloud-Computing","Virus","Phishing"],"company":"string"}'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060", {
"method": "PATCH",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"If-Match": "string",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"priority\":\"Low\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"company\":\"string\"}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"priority\":\"Low\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"company\":\"string\"}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'If-Match': "string",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("PATCH", "/api/v1/incidents/5a9e19eebdee5a000a8fe060", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060"
payload := strings.NewReader("{\"priority\":\"Low\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"company\":\"string\"}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("If-Match", "string")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Patch,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060"),
Headers =
{
{ "Accept", "application/json" },
{ "If-Match", "string" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"priority\":\"Low\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"company\":\"string\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.patch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("If-Match", "string")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"priority\":\"Low\",\"tags\":[\"Cloud-Computing\",\"Virus\",\"Phishing\"],\"company\":\"string\"}")
.asString();
PATCH /incidents/{incidentId}
Updates an incident
A JSON object with details of the incident.
NOTE: The maximum request size is 100 KB.
NOTE: If tags
is included, existing incident's tags are replaced with the specified ones.
Body parameter
{
"priority": "Low",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
If-Match | header | string | false | Enables conditional modification - the resource will be modified only if its current etag matches the value specified in this header, otherwise - 412 "Precondition Failed" will be returned to the client |
body | body | UpdateIncidentRequest | true | none |
Example responses
200 Response
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z",
"closingComment": "string",
"closingReason": "True Positive",
"closed": "2019-08-24T14:15:22Z",
"cdcUrl": "https://acme.cyberproof.io/home/incidents/incident/5ea71bb363f6c6001707663b"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | The incident was updated | Incident |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
409 | Conflict | The attempted operation conflicts with the current state of the incident | None |
412 | Precondition Failed | A precondition specified by the client was not met. This occurs if an etag was specified in an If-Match header, which doesn't match the etag found in the underlying data store | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
200 | ETag | string | Includes an identifier for a specific version of a resource. Commonly used as the basis for conditional gets and conditional updates. |
createIncidentMessage
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/messages \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"externalId":"345ffe9a","contentType":"text","content":"Requires further investigation","evidence":{"caption":"Severity changed","reported":"2019-08-24T14:15:22Z","description":"System Admin has changed severity from Low to Medium"}}'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/messages", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"externalId\":\"345ffe9a\",\"contentType\":\"text\",\"content\":\"Requires further investigation\",\"evidence\":{\"caption\":\"Severity changed\",\"reported\":\"2019-08-24T14:15:22Z\",\"description\":\"System Admin has changed severity from Low to Medium\"}}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"externalId\":\"345ffe9a\",\"contentType\":\"text\",\"content\":\"Requires further investigation\",\"evidence\":{\"caption\":\"Severity changed\",\"reported\":\"2019-08-24T14:15:22Z\",\"description\":\"System Admin has changed severity from Low to Medium\"}}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/messages", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/messages"
payload := strings.NewReader("{\"externalId\":\"345ffe9a\",\"contentType\":\"text\",\"content\":\"Requires further investigation\",\"evidence\":{\"caption\":\"Severity changed\",\"reported\":\"2019-08-24T14:15:22Z\",\"description\":\"System Admin has changed severity from Low to Medium\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/messages"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"externalId\":\"345ffe9a\",\"contentType\":\"text\",\"content\":\"Requires further investigation\",\"evidence\":{\"caption\":\"Severity changed\",\"reported\":\"2019-08-24T14:15:22Z\",\"description\":\"System Admin has changed severity from Low to Medium\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/messages")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"externalId\":\"345ffe9a\",\"contentType\":\"text\",\"content\":\"Requires further investigation\",\"evidence\":{\"caption\":\"Severity changed\",\"reported\":\"2019-08-24T14:15:22Z\",\"description\":\"System Admin has changed severity from Low to Medium\"}}")
.asString();
POST /incidents/{incidentId}/messages
Creates a new incident message
Creates a new incident message in CDC.
This operation is idempotent: if the client provides an external id which already exists in CDC, then the operation should succeed with UPSERT semantics.
NOTE: The maximum request size is 512 KB.
Body parameter
{
"externalId": "345ffe9a",
"contentType": "text",
"content": "Requires further investigation",
"evidence": {
"caption": "Severity changed",
"reported": "2019-08-24T14:15:22Z",
"description": "System Admin has changed severity from Low to Medium"
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
body | body | CreateIncidentMessageRequest | true | none |
Example responses
201 Response
{
"id": "5e7c6cf54b832e0018f191ad",
"text": "Requires further investigation",
"processedText": "Requires further investigation"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
201 | Created | The message has been created | IncidentMessageSummary |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
closeIncident
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/close \
--header 'Content-Type: application/json' \
--header 'If-Match: string' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"closingComment":"Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached","closingReason":"True Positive","shouldTerminatePlaybooks":true}'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/close", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"If-Match": "string",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"closingComment\":\"Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached\",\"closingReason\":\"True Positive\",\"shouldTerminatePlaybooks\":true}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"closingComment\":\"Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached\",\"closingReason\":\"True Positive\",\"shouldTerminatePlaybooks\":true}"
headers = {
'Content-Type': "application/json",
'If-Match': "string",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/close", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/close"
payload := strings.NewReader("{\"closingComment\":\"Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached\",\"closingReason\":\"True Positive\",\"shouldTerminatePlaybooks\":true}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("If-Match", "string")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/close"),
Headers =
{
{ "If-Match", "string" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"closingComment\":\"Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached\",\"closingReason\":\"True Positive\",\"shouldTerminatePlaybooks\":true}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/close")
.header("Content-Type", "application/json")
.header("If-Match", "string")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"closingComment\":\"Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached\",\"closingReason\":\"True Positive\",\"shouldTerminatePlaybooks\":true}")
.asString();
POST /incidents/{incidentId}/close
Closes an incident
A JSON object with details of the incident
Body parameter
{
"closingComment": "Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached",
"closingReason": "True Positive",
"shouldTerminatePlaybooks": true
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
If-Match | header | string | false | Enables conditional modification - the resource will be modified only if its current etag matches the value specified in this header, otherwise - 412 "Precondition Failed" will be returned to the client |
incidentId | path | string | true | The unique ID of the incident |
body | body | CloseIncidentRequest | true | none |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
204 | No Content | The incident was closed successfully | None |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
409 | Conflict | The attempted operation conflicts with the current state of the incident | None |
412 | Precondition Failed | A precondition specified by the client was not met. This occurs if an etag was specified in an If-Match header, which doesn't match the etag found in the underlying data store | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
204 | ETag | string | Includes an identifier for a specific version of a resource. Commonly used as the basis for conditional gets and conditional updates. |
redirectIncident
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/redirect \
--header 'Content-Type: application/json' \
--header 'If-Match: string' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"targetGroup":"string","reason":"string"}'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/redirect", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"If-Match": "string",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"targetGroup\":\"string\",\"reason\":\"string\"}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"targetGroup\":\"string\",\"reason\":\"string\"}"
headers = {
'Content-Type': "application/json",
'If-Match': "string",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/redirect", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/redirect"
payload := strings.NewReader("{\"targetGroup\":\"string\",\"reason\":\"string\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("If-Match", "string")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/redirect"),
Headers =
{
{ "If-Match", "string" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"targetGroup\":\"string\",\"reason\":\"string\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/redirect")
.header("Content-Type", "application/json")
.header("If-Match", "string")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"targetGroup\":\"string\",\"reason\":\"string\"}")
.asString();
POST /incidents/{incidentId}/redirect
initiate a redirection
Body parameter
{
"targetGroup": "string",
"reason": "string"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
If-Match | header | string | false | Enables conditional modification - the resource will be modified only if its current etag matches the value specified in this header, otherwise - 412 "Precondition Failed" will be returned to the client |
incidentId | path | string | true | The unique ID of the incident |
body | body | RedirectIncidentRequest | true | none |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
204 | No Content | The redirection has been issued | None |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The specified incident was not found | None |
409 | Conflict | The attempted operation conflicts with the current state of the incident | None |
412 | Precondition Failed | A precondition specified by the client was not met. This occurs if an etag was specified in an If-Match header, which doesn't match the etag found in the underlying data store | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
204 | ETag | string | Includes an identifier for a specific version of a resource. Commonly used as the basis for conditional gets and conditional updates. |
acceptIncidentRedirection
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/accept \
--header 'If-Match: string' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/accept", {
"method": "POST",
"headers": {
"If-Match": "string",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'If-Match': "string",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/accept", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/accept"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("If-Match", "string")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/accept"),
Headers =
{
{ "If-Match", "string" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/accept")
.header("If-Match", "string")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
POST /incidents/{incidentId}/accept
accepts a redirection request
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
If-Match | header | string | false | Enables conditional modification - the resource will be modified only if its current etag matches the value specified in this header, otherwise - 412 "Precondition Failed" will be returned to the client |
incidentId | path | string | true | The unique ID of the incident |
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
204 | No Content | The redirection has been successfully accepted | None |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The specified incident was not found | None |
409 | Conflict | There currently isn't any pending redirection for this incident | None |
412 | Precondition Failed | A precondition specified by the client was not met. This occurs if an etag was specified in an If-Match header, which doesn't match the etag found in the underlying data store | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
204 | ETag | string | Includes an identifier for a specific version of a resource. Commonly used as the basis for conditional gets and conditional updates. |
queryIncidentAlerts
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alerts \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alerts", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/alerts", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alerts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alerts"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alerts")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /incidents/{incidentId}/alerts
Returns information about the alerts associated with this incident.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
include | query | array[string] | false | Specifies which additional fields to include in the query results: |
Detailed descriptions
include: Specifies which additional fields to include in the query results:
raw
: includes the raw alert data.company
: includes the company field.
Enumerated Values
Parameter | Value |
---|---|
include | raw |
include | company |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"raw": {
"attributeInitializationInProgress": false,
"createdTime": {
"day": {
"numberInt": "18"
},
"hour": {
"numberInt": "16"
},
"milliSecond": {
"numberInt": "711"
},
"minute": {
"numberInt": "10"
},
"month": {
"numberInt": "6"
},
"second": {
"numberInt": "47"
},
"timezoneID": "Israel",
"year": {
"numberInt": "2017"
}
},
"createdTimestamp": {
"numberDouble": "1500383447711"
},
"deprecated": false,
"description": "ACME",
"disabled": false,
"inCache": true,
"inactive": false,
"initialized": true,
"isAdditionalLoaded": false,
"localID": {
"numberDouble": "30064798760"
},
"modificationCount": {
"numberInt": "1"
}
},
"appendedRaw": [
{}
],
"cdcUrl": "https://acme.cyberproof.io/home/alerts/alert/5e7c6cf54b832e0018f191ad",
"threatActors": [
"Cyber Criminals",
"Anonymous"
],
"malwareTools": [
"TrickBot",
"IcedID",
"Cobalt Strike"
],
"ctiSourceUrls": [
"https://blog.malwarebytes.com/someTopic"
],
"recommendations": "Implement the attached IOCs in your security systems."
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | IncidentAlertsQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryIncidentAlertIds
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alert-ids \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alert-ids", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/alert-ids", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alert-ids"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alert-ids"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/alert-ids")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /incidents/{incidentId}/alert-ids
Returns the IDs of the alerts associated with this incident.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
"string"
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | IncidentAlertIdsQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryIncidentObservables
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /incidents/{incidentId}/observables
Returns information about the observables associated with this incident.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
]
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | IncidentObservablesQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
createIncidentObservable
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"type":"IPv4 Address","value":"192.168.40.45","tags":["Critical-Infrastructure"]}'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Critical-Infrastructure\"]}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Critical-Infrastructure\"]}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables"
payload := strings.NewReader("{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Critical-Infrastructure\"]}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Critical-Infrastructure\"]}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/observables")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"type\":\"IPv4 Address\",\"value\":\"192.168.40.45\",\"tags\":[\"Critical-Infrastructure\"]}")
.asString();
POST /incidents/{incidentId}/observables
Creates a new incident observable
Creates a new incident observable in CDC
This operation is idempotent: if the client provides a type and value which already exist in CDC, then the operation should succeed with UPSERT semantics.
NOTE: The maximum request size is 100 KB.
Body parameter
{
"type": "IPv4 Address",
"value": "192.168.40.45",
"tags": [
"Critical-Infrastructure"
]
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
body | body | CreateIncidentObservableRequest | true | none |
Example responses
201 Response
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
201 | Created | The observable has been created | ObservableSummary |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryIncidentEvidence
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /incidents/{incidentId}/evidence
Returns information about the evidence associated with this incident.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
include | query | array[string] | false | Specifies which additional fields to include in the query results: |
Detailed descriptions
include: Specifies which additional fields to include in the query results:
data
: includes the evidence metadata.
Enumerated Values
Parameter | Value |
---|---|
include | data |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"id": "5aa4d8fcbdee5a000a911882",
"type": "MITRE_ATTACK_ADDED",
"reported": "2019-08-24T14:15:22Z",
"created": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"description": "System Admin has changed severity from Low to Medium",
"messageId": "string",
"messageCdcUrl": "https://acme.cyberproof.io/home/incidents/5ea71bb363f6c6001707663b/evidence/5ea71bb363f6c6001707254a",
"externalId": "345ffe9a",
"data": {}
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | EvidenceQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
createIncidentEvidence
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"reported":"2019-08-24T14:15:22Z","caption":"Severity changed","messageId":"string","description":"System Admin has changed severity from Low to Medium","externalId":"345ffe9a"}'
fetch("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence"
payload := strings.NewReader("{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/incidents/5a9e19eebdee5a000a8fe060/evidence")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"reported\":\"2019-08-24T14:15:22Z\",\"caption\":\"Severity changed\",\"messageId\":\"string\",\"description\":\"System Admin has changed severity from Low to Medium\",\"externalId\":\"345ffe9a\"}")
.asString();
POST /incidents/{incidentId}/evidence
Creates a new incident evidence
Body parameter
{
"reported": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"messageId": "string",
"description": "System Admin has changed severity from Low to Medium",
"externalId": "345ffe9a"
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | The unique ID of the incident |
body | body | CreateEvidenceRequest | true | none |
Example responses
201 Response
{
"id": "5aa4d8fcbdee5a000a911882",
"type": "MITRE_ATTACK_ADDED",
"reported": "2019-08-24T14:15:22Z",
"created": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"description": "System Admin has changed severity from Low to Medium",
"messageId": "string",
"messageCdcUrl": "https://acme.cyberproof.io/home/incidents/5ea71bb363f6c6001707663b/evidence/5ea71bb363f6c6001707254a",
"externalId": "345ffe9a",
"data": {}
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
201 | Created | The evidence has been created | Evidence |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
409 | Conflict | The request conflicts with the current state of the resource. | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
observables
Observables APIs
getObservable
Code samples
curl --request GET \
--url 'https://test-api.cyberproof.io/api/v1/observables?observableType=IPv4%20Address&observableValue=192.168.40.45' \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/observables?observableType=IPv4%20Address&observableValue=192.168.40.45", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/observables?observableType=IPv4%20Address&observableValue=192.168.40.45", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/observables?observableType=IPv4%20Address&observableValue=192.168.40.45"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/observables?observableType=IPv4%20Address&observableValue=192.168.40.45"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/observables?observableType=IPv4%20Address&observableValue=192.168.40.45")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /observables
*Gets the specified observable based on its type and value. *
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
observableType | query | string | true | The type of the observable |
observable_type | query | string | false | The type of the observable. |
observableValue | query | string | true | The value of the observable |
observable_value | query | string | false | The value of the observable. |
Detailed descriptions
observable_type: The type of the observable. Deprecated: please use observableType
instead of observable_type
observable_value: The value of the observable. Deprecated: please use observableValue
instead of observable_value
Example responses
200 Response
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the observable | ObservableSummary |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryObservableAlertIds
Code samples
curl --request GET \
--url 'https://test-api.cyberproof.io/api/v1/observables/alert-ids?observableType=IPv4%20Address&observableValue=192.168.40.45' \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/observables/alert-ids?observableType=IPv4%20Address&observableValue=192.168.40.45", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/observables/alert-ids?observableType=IPv4%20Address&observableValue=192.168.40.45", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/observables/alert-ids?observableType=IPv4%20Address&observableValue=192.168.40.45"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/observables/alert-ids?observableType=IPv4%20Address&observableValue=192.168.40.45"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/observables/alert-ids?observableType=IPv4%20Address&observableValue=192.168.40.45")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /observables/alert-ids
*Queries alert IDs associated with the observable. *
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
observableType | query | string | true | The type of the observable |
observable_type | query | string | false | The type of the observable. |
observableValue | query | string | true | The value of the observable |
observable_value | query | string | false | The value of the observable. |
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
Detailed descriptions
observable_type: The type of the observable. Deprecated: please use observableType
instead of observable_type
observable_value: The value of the observable. Deprecated: please use observableValue
instead of observable_value
Example responses
200 Response
{
"nextMarker": "string",
"results": [
"string"
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the results and additional information | ObservableAlertIdsQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryObservableIncidentIds
Code samples
curl --request GET \
--url 'https://test-api.cyberproof.io/api/v1/observables/incident-ids?observableType=IPv4%20Address&observableValue=192.168.40.45' \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/observables/incident-ids?observableType=IPv4%20Address&observableValue=192.168.40.45", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/observables/incident-ids?observableType=IPv4%20Address&observableValue=192.168.40.45", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/observables/incident-ids?observableType=IPv4%20Address&observableValue=192.168.40.45"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/observables/incident-ids?observableType=IPv4%20Address&observableValue=192.168.40.45"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/observables/incident-ids?observableType=IPv4%20Address&observableValue=192.168.40.45")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /observables/incident-ids
*Queries incident IDs associated with the observable. *
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
observableType | query | string | true | The type of the observable |
observable_type | query | string | false | The type of the observable. |
observableValue | query | string | true | The value of the observable |
observable_value | query | string | false | The value of the observable. |
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
Detailed descriptions
observable_type: The type of the observable. Deprecated: please use observableType
instead of observable_type
observable_value: The value of the observable. Deprecated: please use observableValue
instead of observable_value
Example responses
200 Response
{
"nextMarker": "string",
"results": [
"string"
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the results and additional information | ObservableIncidentIdsQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
files
Files APIs
uploadFile
Code samples
curl --request POST \
--url 'https://test-api.cyberproof.io/api/v1/files/upload?scopeId=5e7c6cf54b832e0018f191ad&scopeType=alert' \
--header 'Accept: application/json' \
--header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--form 'relations=[{"type": "vega", "id": "5e7c6cf54b832e0018f191ad"}]' \
--form password=test123 \
--form file=string
const form = new FormData();
form.append("relations", "[{\"type\": \"vega\", \"id\": \"5e7c6cf54b832e0018f191ad\"}]");
form.append("password", "test123");
form.append("file", "string");
fetch("https://test-api.cyberproof.io/api/v1/files/upload?scopeId=5e7c6cf54b832e0018f191ad&scopeType=alert", {
"method": "POST",
"headers": {
"Content-Type": "multipart/form-data; boundary=---011000010111000001101001",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"relations\"\r\n\r\n[{\"type\": \"vega\", \"id\": \"5e7c6cf54b832e0018f191ad\"}]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\ntest123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001--\r\n"
headers = {
'Content-Type': "multipart/form-data; boundary=---011000010111000001101001",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/files/upload?scopeId=5e7c6cf54b832e0018f191ad&scopeType=alert", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/files/upload?scopeId=5e7c6cf54b832e0018f191ad&scopeType=alert"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"relations\"\r\n\r\n[{\"type\": \"vega\", \"id\": \"5e7c6cf54b832e0018f191ad\"}]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\ntest123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001--\r\n")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/files/upload?scopeId=5e7c6cf54b832e0018f191ad&scopeType=alert"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new MultipartFormDataContent
{
new StringContent("[{\"type\": \"vega\", \"id\": \"5e7c6cf54b832e0018f191ad\"}]")
{
Headers =
{
ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "relations",
}
}
},
new StringContent("test123")
{
Headers =
{
ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "password",
}
}
},
new StringContent("string")
{
Headers =
{
ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
Name = "file",
}
}
},
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/files/upload?scopeId=5e7c6cf54b832e0018f191ad&scopeType=alert")
.header("Content-Type", "multipart/form-data; boundary=---011000010111000001101001")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"relations\"\r\n\r\n[{\"type\": \"vega\", \"id\": \"5e7c6cf54b832e0018f191ad\"}]\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\ntest123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\nstring\r\n-----011000010111000001101001--\r\n")
.asString();
POST /files/upload
Upload a new file
Securely upload a new file to CDC.
Maximum file size = 12 Mb (12,582,912 bytes)
Body parameter
relations: '[{"type": "vega", "id": "5e7c6cf54b832e0018f191ad"}]'
password: test123
file: string
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
scopeId | query | string | true | A unique, machine-oriented ID identifying this scope. must be provided together with scopeType. e.g. if scopeType = alert, then scopeId = [the alert ID] |
scopeType | query | string | true | The type of the entity ( alert / incident / channel / visualization...) |
body | body | UploadFileRequest | true | none |
Detailed descriptions
scopeId: A unique, machine-oriented ID identifying this scope. must be provided together with scopeType. e.g. if scopeType = alert, then scopeId = [the alert ID]
Enumerated Values
Parameter | Value |
---|---|
scopeType | alert |
scopeType | incident |
scopeType | channel |
scopeType | visualization |
Example responses
201 Response
{
"status": "uploaded",
"id": "5e7c6cf54b832e0018f191ad",
"name": "attachment.txt",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"url": "https://someDomain/somePath/attachment.txt",
"size": 2680000,
"mimeType": "text/plain",
"extension": "txt",
"createdAt": "2019-08-24T14:15:22Z",
"createdBy": "8e2c4cf54b832e0018f191ad",
"relations": [
{
"type": "vega",
"id": "8e2c4cf54b832e0018f191ad"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
201 | Created | Listing information for the uploaded file | FileInfo |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
downloadFile
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/files/5e7c6cf54b832e0018f191ad/download \
--header 'Accept: application/octet-stream' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/files/5e7c6cf54b832e0018f191ad/download", {
"method": "GET",
"headers": {
"Accept": "application/octet-stream",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/octet-stream",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/files/5e7c6cf54b832e0018f191ad/download", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/files/5e7c6cf54b832e0018f191ad/download"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/octet-stream")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/files/5e7c6cf54b832e0018f191ad/download"),
Headers =
{
{ "Accept", "application/octet-stream" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/files/5e7c6cf54b832e0018f191ad/download")
.header("Accept", "application/octet-stream")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /files/{fileId}/download
Download a file
Download a file by id
Errors:
- File is still uploading - Expected error code 409 (Conflict)
- File had malicious content so it is not avaliable - Expected error code 410 (Gone)
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
fileId | path | string | true | A unique, machine-oriented ID identifying this file. |
thumbnail | query | boolean | false | Download thumbnail image if exists |
Detailed descriptions
thumbnail: Download thumbnail image if exists A thumbnail is a small image representation of a larger image or a video.
Example responses
200 Response
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Binary file stream with file contents | DownloadFileResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
409 | Conflict | The request conflicts with the current state of the resource. | None |
410 | Gone | The resource requested is no longer available and will not be available again. The resource could have been intentionally removed and should be purged. The client should not request the resource in the future. | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryFiles
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/files \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/files", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/files", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/files"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/files"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/files")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /files
Query files
Query files (files metatata) by different prarms (i.e. scope, id, filenames etc...) Sorting and pagination supported using marker.
- Logic between the filters : AND - i.e All conditions should be satisfied
- Default sorting - Creation time ASC
- Items per page: 30
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
ids | query | array[string] | false | Filter files by id |
status | query | array[string] | false | Filter files by status |
fileName | query | string | false | Filter files by fileName |
scopeType | query | string | false | Filter files by entity scope type. |
scopeId | query | string | false | Filter files by Entity scope ID. |
Detailed descriptions
fileName: Filter files by fileName Partial filename can be provided. i.e. givven filename param = 'ample', the file 'sample.txt' will be found assuming it exists in the system and all other filtes apply.
scopeType: Filter files by entity scope type. This filter is related to scopeId. i.e. if scopeType is provided then scopeId should be provided as well.
scopeId: Filter files by Entity scope ID. e.g. query files only associated with alert with ID 5a9e19eebdee5a000a8fe060. This filter is related to scopeType. i.e. if scopeId is provided then scopeType should be provided as well.
Enumerated Values
Parameter | Value |
---|---|
scopeType | alert |
scopeType | incident |
scopeType | channel |
scopeType | visualization |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"status": "uploaded",
"id": "5e7c6cf54b832e0018f191ad",
"name": "attachment.txt",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"url": "https://someDomain/somePath/attachment.txt",
"size": 2680000,
"mimeType": "text/plain",
"extension": "txt",
"createdAt": "2019-08-24T14:15:22Z",
"createdBy": "8e2c4cf54b832e0018f191ad",
"relations": [
{
"type": "vega",
"id": "8e2c4cf54b832e0018f191ad"
}
]
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the results and additional information | FilesQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
search
Files APIs
search
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/search \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"query":"select from alert where status = '\''New'\''","include":"name,status,severity,description","limit":10,"skip":0,"sort":"created","includeTotal":true}'
fetch("https://test-api.cyberproof.io/api/v1/search", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"query\":\"select from alert where status = 'New'\",\"include\":\"name,status,severity,description\",\"limit\":10,\"skip\":0,\"sort\":\"created\",\"includeTotal\":true}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"query\":\"select from alert where status = 'New'\",\"include\":\"name,status,severity,description\",\"limit\":10,\"skip\":0,\"sort\":\"created\",\"includeTotal\":true}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/search", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/search"
payload := strings.NewReader("{\"query\":\"select from alert where status = 'New'\",\"include\":\"name,status,severity,description\",\"limit\":10,\"skip\":0,\"sort\":\"created\",\"includeTotal\":true}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/search"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"query\":\"select from alert where status = 'New'\",\"include\":\"name,status,severity,description\",\"limit\":10,\"skip\":0,\"sort\":\"created\",\"includeTotal\":true}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/search")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"query\":\"select from alert where status = 'New'\",\"include\":\"name,status,severity,description\",\"limit\":10,\"skip\":0,\"sort\":\"created\",\"includeTotal\":true}")
.asString();
POST /search
Returns result of Search QL
Body parameter
{
"query": "select from alert where status = 'New'",
"include": "name,status,severity,description",
"limit": 10,
"skip": 0,
"sort": "created",
"includeTotal": true
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | object | true | none |
» query | body | string | true | CDC Query string |
» include | body | string(comma-separated-list) | false | List of fields from query subject collection to be populated. |
» limit | body | integer | false | Amount of records to return in query result. (If field is omitted, default value of 20 is used) |
» skip | body | integer | false | Amount of records to skip in query result |
» sort | body | string | false | Sort order for query results to be sorted, if value not provided defaults to created : |
» includeTotal | body | boolean | false | Should we return total count of found records |
Detailed descriptions
» query: CDC Query string
Full query syntax can be derived from CDC Query Language docs
» include: List of fields from query subject collection to be populated.
List of supported fields should be taken from CDC Query Language docs for the appropriate collection. (If some fields are filtered by PAPI but used as include value, they still will not be returned in response)
» sort: Sort order for query results to be sorted, if value not provided defaults to created
:
Alert
- when you query for alerts, you should sort by (:asc/desc possible): >created
- created date, used by defaultname
severity.order
status.order
detected
ownerRef.displayName
source
company
score.value
- this is database relevance score
Incident
- when you query for incidents, you should sort by (:asc/desc possible): >created
modified
name
group
company
key
priority.order
status.value
ownerRef.displayName
key
transition.targetGroup
Observable
- when you query for observables, you should sort by (:asc/desc possible): >created
modified
type
value
suspiciousRate
tags
relatedAlertsLength
relatedIncidentsLength
isIoc
Message
- when you query for messages, you should sort by (:asc/desc possible): >created
» includeTotal: Should we return total count of found records
Lowers performance
Enumerated Values
Parameter | Value |
---|---|
» sort | company |
» sort | company:asc |
» sort | company:desc |
» sort | created |
» sort | created:asc |
» sort | created:desc |
» sort | detected |
» sort | detected:asc |
» sort | detected:desc |
» sort | group |
» sort | group:asc |
» sort | group:desc |
» sort | isIoc |
» sort | isIoc:asc |
» sort | isIoc:desc |
» sort | key |
» sort | key:asc |
» sort | key:desc |
» sort | modified |
» sort | modified:asc |
» sort | modified:desc |
» sort | name |
» sort | name:asc |
» sort | name:desc |
» sort | ownerRef.displayName |
» sort | ownerRef.displayName:asc |
» sort | ownerRef.displayName:desc |
» sort | priority.order |
» sort | priority.order:asc |
» sort | priority.order:desc |
» sort | relatedAlertsLength |
» sort | relatedAlertsLength:asc |
» sort | relatedAlertsLength:desc |
» sort | relatedIncidentsLength |
» sort | relatedIncidentsLength:asc |
» sort | relatedIncidentsLength:desc |
» sort | score.value |
» sort | score.value:asc |
» sort | score.value:desc |
» sort | severity.order |
» sort | severity.order:asc |
» sort | severity.order:desc |
» sort | source |
» sort | source:asc |
» sort | source:desc |
» sort | status.order |
» sort | status.order:asc |
» sort | status.order:desc |
» sort | status.value |
» sort | status.value:asc |
» sort | status.value:desc |
» sort | suspiciousRate |
» sort | suspiciousRate:asc |
» sort | suspiciousRate:desc |
» sort | tags |
» sort | tags:asc |
» sort | tags:desc |
» sort | transition.targetGroup |
» sort | transition.targetGroup:asc |
» sort | transition.targetGroup:desc |
» sort | type |
» sort | type:asc |
» sort | type:desc |
» sort | value |
» sort | value:asc |
» sort | value:desc |
Example responses
200 Response
{
"sort": [
{
"fieldName": "string",
"desc": true
}
],
"limit": 20,
"skip": 0,
"items": [
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"summaryType": "alert",
"incidentId": "string"
}
],
"total": 32
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the observable | CDCQueryResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
422 | Unprocessable Entity | The server understands the content type of the request entity, and the syntax of the request entity is correct, but it was unable to process the contained instructions. The client should not repeat this request without modification. | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Headers
Status | Header | Type | Format | Description |
---|---|---|---|---|
200 | ETag | string | Includes an identifier for a specific version of a resource. Commonly used as the basis for conditional gets and conditional updates. |
autocomplete
Code samples
curl --request GET \
--url 'https://test-api.cyberproof.io/api/v1/search/autocomplete?collection=alert' \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/search/autocomplete?collection=alert", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/search/autocomplete?collection=alert", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/search/autocomplete?collection=alert"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/search/autocomplete?collection=alert"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/search/autocomplete?collection=alert")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /search/autocomplete
Returns result of autocomplete
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
fieldName | query | string | false | Required in case collection is not "alertExtraProperties" or "observableExtraProperties" |
substring | query | string | false | none |
limit | query | number | false | none |
collection | query | string | true | none |
Detailed descriptions
fieldName: Required in case collection is not "alertExtraProperties" or "observableExtraProperties" The value of "fieldName" depends on "collection". Example collection="alert" fieldName="classification"
- message
- text
- alert
- tags
- observableTags
- owner
- mitreAttacks
- type
- closingReason
- name
- description
- source
- sourceId
- sourceUrl
- detectionRule
- killChain
- classification
- threatActors
- malwareTools
- severity
- status
- threatType
- company
- useCase
- observable
- tags
- value
- type
- incident
- tags
- owner
- users
- mitreAttacks
- status
- company
- source
- name
- description
- group
- key
- type
- priority
- closingReason
Enumerated Values
Parameter | Value |
---|---|
collection | alert |
collection | observable |
collection | incident |
collection | alertRawData |
collection | alertExtraProperties |
collection | observableExtraProperties |
collection | message |
Example responses
200 Response
{
"limit": 10,
"items": [
"string"
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the results | AutocompleteSearchResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
422 | Unprocessable Entity | The server understands the content type of the request entity, and the syntax of the request entity is correct, but it was unable to process the contained instructions. The client should not repeat this request without modification. | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
grouping
Grouping APIs
queryGroupingSettings
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/grouping/settings \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/grouping/settings", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/grouping/settings", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/grouping/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/grouping/settings"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/grouping/settings")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /grouping/settings
Returns grouping settings
NOTE: To access Grouping Settings, user should have specific Admin privileges.
Example responses
200 Response
{
"incidentTimeLimit": 86400000,
"maxAlertsPerIncident": 150
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | Inline |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» incidentTimeLimit | number | true | none | time limit in milliseconds. Time within which alerts could be grouped to an incident since it was created. |
» maxAlertsPerIncident | number | true | none | maximum number of alerts which can be attached to one incident. |
queryGroupingRules
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/grouping/rules \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/grouping/rules", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/grouping/rules", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/grouping/rules"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/grouping/rules"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/grouping/rules")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /grouping/rules
Returns a full list of grouping settings
NOTE: To access Grouping Rules, user should have specific Admin privileges
Example responses
200 Response
{
"results": [
{
"id": "5e7c6cf54b832e0018f191ad",
"title": "PhishingRule",
"comment": "5e7c6cf54b832e0018f191ad",
"order": 1,
"enabled": true,
"criteria": [
{
"fieldName": "observables",
"operator": "allOf",
"matchValue": [
{
"type": "IPv4 address"
},
{
"type": "IPv6 address"
}
]
}
]
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | success | Inline |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Response Schema
Status Code 200
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» results | [object] | true | none | none |
»» id | string | true | none | A unique, machine-oriented ID identifying this rule. |
»» title | string | true | none | Rule title |
»» comment | string | false | none | Rule comment |
»» order | number | true | none | Order of rules execution |
»» enabled | boolean | true | none | Defines if rule is enabled |
»» criteria | [object] | true | none | Criteria of the rule |
»»» fieldName | string | true | none | Name of the field to compare |
»»» operator | string | true | none | Comparison operator |
»»» matchValue | any | false | none | Comparison value |
Enumerated Values
Property | Value |
---|---|
operator | equals |
operator | allOf |
operator | oneOf |
alert-extended-properties
getExtendedProperties
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/alerts/string/extended-properties", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /alerts/{alertId}/extended-properties
Query alert extended properties
with support for filters and pagination. Default limit is 1000 docs per request.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
alertId | path | string | true | none |
names | query | array[string] | false | List of the internal field name of the custom-field schema |
ids | query | array[string] | false | List of the db`s document identifier |
marker | query | string | false | none |
Example responses
200 Response
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
],
"nextMarker": "string"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Response for query alert extended properties | QueryAlertExtendedPropertiesResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
setExtendedProperties
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"request":[{"name":"string","value":{}}]}'
fetch("https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"request\":[{\"name\":\"string\",\"value\":{}}]}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"request\":[{\"name\":\"string\",\"value\":{}}]}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/alerts/string/extended-properties", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties"
payload := strings.NewReader("{\"request\":[{\"name\":\"string\",\"value\":{}}]}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"request\":[{\"name\":\"string\",\"value\":{}}]}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/alerts/string/extended-properties")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"request\":[{\"name\":\"string\",\"value\":{}}]}")
.asString();
POST /alerts/{alertId}/extended-properties
Set alert extended properties
Set alert extended properties
Body parameter
{
"request": [
{
"name": "string",
"value": {}
}
]
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
alertId | path | string | true | none |
body | body | CreateAlertsExtendedPropertiesRequest | true | none |
Example responses
200 Response
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Response for create alert extended properties | CreateAlertExtendedPropertiesResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
incident-summary
getIncidentSummary
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/incidents/string/summary \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/incidents/string/summary", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/incidents/string/summary", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/string/summary"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/string/summary"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/incidents/string/summary")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /incidents/{incidentId}/summary
Query incident summary
Query incident summary with support for filters and pagination. Default limit is 1000 docs per request.
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | none |
names | query | array[string] | false | List of the internal field name of the custom-field schema |
ids | query | array[string] | false | List of the db`s document identifier |
marker | query | string | false | none |
Example responses
200 Response
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
],
"nextMarker": "string"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Response for query incident summary public | QueryIncidentSummaryResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
setIncidentSummary
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/incidents/string/summary \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"request":[{"name":"string","value":{}}]}'
fetch("https://test-api.cyberproof.io/api/v1/incidents/string/summary", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"request\":[{\"name\":\"string\",\"value\":{}}]}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"request\":[{\"name\":\"string\",\"value\":{}}]}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/incidents/string/summary", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/incidents/string/summary"
payload := strings.NewReader("{\"request\":[{\"name\":\"string\",\"value\":{}}]}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/incidents/string/summary"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"request\":[{\"name\":\"string\",\"value\":{}}]}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/incidents/string/summary")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"request\":[{\"name\":\"string\",\"value\":{}}]}")
.asString();
POST /incidents/{incidentId}/summary
Set incident summary
Set incident summary
Body parameter
{
"request": [
{
"name": "string",
"value": {}
}
]
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
incidentId | path | string | true | none |
body | body | CreateIncidentsSummaryRequest | true | none |
Example responses
200 Response
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Response for Create incident summary | CreateIncidentSummaryResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
messages
createMessage
Code samples
curl --request POST \
--url https://test-api.cyberproof.io/api/v1/messages \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a' \
--data '{"externalId":"111e3cf9-da0e-46a1-b099-3fd2e653ecbd","scope":{"id":"616ea579f2631c8d4c68a1b7","type":"alert"},"parentMessageId":"616ea579f2631c8d4c68a1b7","attachmentIds":["616ea579f2631c8d4c68a1b7"],"content":{"message":"some text <b>bold</b> message","contentType":"text"}}'
fetch("https://test-api.cyberproof.io/api/v1/messages", {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
},
"body": "{\"externalId\":\"111e3cf9-da0e-46a1-b099-3fd2e653ecbd\",\"scope\":{\"id\":\"616ea579f2631c8d4c68a1b7\",\"type\":\"alert\"},\"parentMessageId\":\"616ea579f2631c8d4c68a1b7\",\"attachmentIds\":[\"616ea579f2631c8d4c68a1b7\"],\"content\":{\"message\":\"some text <b>bold</b> message\",\"contentType\":\"text\"}}"
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
payload = "{\"externalId\":\"111e3cf9-da0e-46a1-b099-3fd2e653ecbd\",\"scope\":{\"id\":\"616ea579f2631c8d4c68a1b7\",\"type\":\"alert\"},\"parentMessageId\":\"616ea579f2631c8d4c68a1b7\",\"attachmentIds\":[\"616ea579f2631c8d4c68a1b7\"],\"content\":{\"message\":\"some text <b>bold</b> message\",\"contentType\":\"text\"}}"
headers = {
'Content-Type': "application/json",
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("POST", "/api/v1/messages", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/messages"
payload := strings.NewReader("{\"externalId\":\"111e3cf9-da0e-46a1-b099-3fd2e653ecbd\",\"scope\":{\"id\":\"616ea579f2631c8d4c68a1b7\",\"type\":\"alert\"},\"parentMessageId\":\"616ea579f2631c8d4c68a1b7\",\"attachmentIds\":[\"616ea579f2631c8d4c68a1b7\"],\"content\":{\"message\":\"some text <b>bold</b> message\",\"contentType\":\"text\"}}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/messages"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
Content = new StringContent("{\"externalId\":\"111e3cf9-da0e-46a1-b099-3fd2e653ecbd\",\"scope\":{\"id\":\"616ea579f2631c8d4c68a1b7\",\"type\":\"alert\"},\"parentMessageId\":\"616ea579f2631c8d4c68a1b7\",\"attachmentIds\":[\"616ea579f2631c8d4c68a1b7\"],\"content\":{\"message\":\"some text <b>bold</b> message\",\"contentType\":\"text\"}}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.post("https://test-api.cyberproof.io/api/v1/messages")
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.body("{\"externalId\":\"111e3cf9-da0e-46a1-b099-3fd2e653ecbd\",\"scope\":{\"id\":\"616ea579f2631c8d4c68a1b7\",\"type\":\"alert\"},\"parentMessageId\":\"616ea579f2631c8d4c68a1b7\",\"attachmentIds\":[\"616ea579f2631c8d4c68a1b7\"],\"content\":{\"message\":\"some text <b>bold</b> message\",\"contentType\":\"text\"}}")
.asString();
POST /messages
Create a new message
Body parameter
{
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
}
}
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
body | body | MessageCreateRequest | true | none |
Example responses
201 Response
{
"id": "616ea579f2631c8d4c68a1b7",
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
},
"attachments": [
{
"status": "uploaded",
"id": "5e7c6cf54b832e0018f191ad",
"name": "attachment.txt",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"url": "https://someDomain/somePath/attachment.txt",
"size": 2680000,
"mimeType": "text/plain",
"extension": "txt",
"createdAt": "2019-08-24T14:15:22Z",
"createdBy": "8e2c4cf54b832e0018f191ad",
"relations": [
{
"type": "vega",
"id": "8e2c4cf54b832e0018f191ad"
}
]
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
201 | Created | A JSON object containing the results and additional information | Message |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
queryMessages
Code samples
curl --request GET \
--url 'https://test-api.cyberproof.io/api/v1/messages?scopeType=alert' \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/messages?scopeType=alert", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/messages?scopeType=alert", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/messages?scopeType=alert"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/messages?scopeType=alert"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/messages?scopeType=alert")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /messages
*Queries messages based on filters provided by the client. For synchronization purposes, the updatedAfter
filter option should be used. *
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
marker | query | string(byte) | false | A continuation token, used to retrieve the next results page. |
scopeType | query | string | true | The type of the entity ( alert / incident / channel ...) |
scopeId | query | string | false | filter by id of the entity as saved in the system must be supplied with scopeType. |
fileNames | query | array[string] | false | filter by messages that include a file by this name as attachment note- if "fileIds" is supplied this field is ignored |
fileIds | query | array[string] | false | filter by files that include a file by this id as attachment note- this takes precedent over "fileNames" |
hasAttachments | query | boolean | false | filter by either with or wihtout attachments |
createdBy | query | string | false | Include only those which were created by a specific user ID |
createdBefore | query | string(date-time) | false | Include only those which were created before the specified timestamp (exclusive) |
createdAfter | query | string(date-time) | false | Include only those which were created after or at the specified timestamp (inclusive) |
Enumerated Values
Parameter | Value |
---|---|
scopeType | alert |
scopeType | incident |
scopeType | channel |
Example responses
200 Response
{
"nextMarker": "string",
"results": [
{
"id": "616ea579f2631c8d4c68a1b7",
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
}
}
]
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | A JSON object containing the results and additional information | MessagesQueryResults |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
custom-fields
queryCustomFieldsSchemasPublic
Code samples
curl --request GET \
--url https://test-api.cyberproof.io/api/v1/custom-fields/settings \
--header 'Accept: application/json' \
--header 'X-API-KEY: 30c050f7fdfe466b9442570ae77dbc8a'
fetch("https://test-api.cyberproof.io/api/v1/custom-fields/settings", {
"method": "GET",
"headers": {
"Accept": "application/json",
"X-API-KEY": "30c050f7fdfe466b9442570ae77dbc8a"
}
})
.then(response => {
console.log(response);
})
.catch(err => {
console.error(err);
});
import http.client
conn = http.client.HTTPSConnection("test-api.cyberproof.io")
headers = {
'Accept': "application/json",
'X-API-KEY': "30c050f7fdfe466b9442570ae77dbc8a"
}
conn.request("GET", "/api/v1/custom-fields/settings", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://test-api.cyberproof.io/api/v1/custom-fields/settings"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://test-api.cyberproof.io/api/v1/custom-fields/settings"),
Headers =
{
{ "Accept", "application/json" },
{ "X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a" },
},
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
HttpResponse<String> response = Unirest.get("https://test-api.cyberproof.io/api/v1/custom-fields/settings")
.header("Accept", "application/json")
.header("X-API-KEY", "30c050f7fdfe466b9442570ae77dbc8a")
.asString();
GET /custom-fields/settings
Read custom fields setting/schemas
Query custom fields schema with support for filters and pagination
Parameters
Name | In | Type | Required | Description |
---|---|---|---|---|
sort | query | array[string] | false | fields to sort by |
includeTotal | query | boolean | false | include total count on response (slower) |
ids | query | array[string] | false | List of the db`s document identifiers |
type | query | CustomFieldsSchemaTypesEnum | false | Enum values for the available data types i.e TEXT, RICH_TEXT, NUMBER etc. |
scope | query | EntityScopes | false | Enum values for the available scopes i.e SUMMARY, ADDITIONAL_INFO etc. |
marker | query | string | false | none |
label | query | string | false | none |
fieldName | query | string | false | none |
entityType | query | string | false | none |
classifications | query | array[string] | false | none |
visible | query | boolean | false | none |
order | query | number | false | none |
deleted | query | boolean | false | none |
Enumerated Values
Parameter | Value |
---|---|
sort | label |
sort | label:desc |
sort | fieldName |
sort | fieldName:desc |
sort | entityType |
sort | entityType:desc |
sort | classifications |
sort | classifications:desc |
sort | scope |
sort | scope:desc |
sort | order |
sort | order:desc |
sort | type |
sort | type:desc |
sort | visible |
sort | visible:desc |
sort | deleted |
sort | deleted:desc |
type | TEXT |
type | RICH_TEXT |
type | |
type | NUMBER |
type | IPV4 |
type | IPV6 |
type | DATETIME |
type | TEXT_LIST |
type | BOOLEAN_RADIO |
scope | ADDITIONAL_INFO |
scope | SUMMARY |
entityType | ALERT |
entityType | INCIDENT |
Example responses
200 Response
{
"total": 0,
"results": [
{
"id": "string",
"label": "string",
"fieldName": "string",
"entityType": "ALERT",
"classifications": [
"string"
],
"type": "TEXT",
"scope": "ADDITIONAL_INFO",
"order": 0,
"visible": true,
"deleted": true,
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
],
"nextMarker": "string"
}
Responses
Status | Meaning | Description | Schema |
---|---|---|---|
200 | OK | Response for query schema | QueryCustomFieldSchemaResponse |
400 | Bad Request | The request is invalid | None |
401 | Unauthorized | Authentication failure | None |
403 | Forbidden | The client does not have sufficient priviliges to access the requested resource or perform the requested operation | None |
404 | Not Found | The requested resource was not found | None |
409 | Conflict | The request conflicts with the current state of the resource. | None |
410 | Gone | The resource requested is no longer available and will not be available again. The resource could have been intentionally removed and should be purged. The client should not request the resource in the future. | None |
413 | Payload Too Large | The payload sent by the client exceeds the size limits imposed by the server | None |
429 | Too Many Requests | Too many requests (throttled). The client should backoff and retry later on, in accordance to the rate limiting policy of the server. | None |
500 | Internal Server Error | The server encountered an unexpected condition that prevented it from fulfilling the request | None |
502 | Bad Gateway | The API server, acting as a gateway, got an invalid response from the underlying data store | None |
503 | Service Unavailable | The server cannot handle the request at the moment | None |
504 | Gateway Time-out | The API server, acting as a gateway, could not get a response from the underlying data store in due time | None |
Schemas
CreateAlertRequest
{
"name": "Email messages containing malware removed after delivery",
"sourceId": "345ffe9a",
"severity": "High",
"description": "message containing malware are delivered to mailboxes in your organization. Office 365 removed the infected messages from Exchange Online mailboxes.",
"sourceUrl": "http://10.0.0.90/MySIEM/api/alerts/345ffe9a",
"raw": {
"attributeInitializationInProgress": false,
"createdTime": {
"day": {
"numberInt": "18"
},
"hour": {
"numberInt": "16"
},
"milliSecond": {
"numberInt": "711"
},
"minute": {
"numberInt": "10"
},
"month": {
"numberInt": "6"
},
"second": {
"numberInt": "47"
},
"timezoneID": "Israel",
"year": {
"numberInt": "2017"
}
},
"createdTimestamp": {
"numberDouble": "1500383447711"
},
"deprecated": false,
"description": "ACME",
"disabled": false,
"inCache": true,
"inactive": false,
"initialized": true,
"isAdditionalLoaded": false,
"localID": {
"numberDouble": "30064798760"
},
"modificationCount": {
"numberInt": "1"
}
},
"classification": "Authentication",
"observables": [
{
"type": "IPv4 Address",
"value": "192.168.40.45",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"extraProperties": {
"property1": {
"value": "aaa-bbcc",
"type": "WeakIdentifier"
},
"property2": {
"value": "aaa-bbcc",
"type": "WeakIdentifier"
}
},
"relatedExtraProperties": {
"property1": {
"sha": 256,
"type": "WeakIdentifier"
},
"property2": {
"sha": 256,
"type": "WeakIdentifier"
}
}
}
],
"useCase": "UC216 - EPP - Persistent Malware",
"company": "ACME",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"threatActors": [
"Cyber Criminals",
"Anonymous"
],
"malwareTools": [
"TrickBot",
"IcedID",
"Cobalt Strike"
],
"ctiSourceUrls": [
"https://blog.malwarebytes.com/someTopic"
],
"recommendations": "Implement the attached IOCs in your security systems.",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The name of the alert |
sourceId | string | true | none | The identifier of the alert, as it appears in the source system. In most cases this would be the ID as it appears in the SIEM. It cannot exceed 400 characters. |
severity | string | true | none | The severity of the alert. Must be one of the severities defined in CDC. |
description | string | true | none | The description of the alert. It cannot exceed 5000 characters when exceeds, the request will not fail but description will be truncated. |
sourceUrl | string(uri) | false | none | The source URL of the alert in the SIEM or in the origin system |
raw | object | false | none | Alert raw data, as provided by the SIEM or source system. NOTE: object's keys cannot start with $ nor contain . characters. |
classification | string | false | none | Classification category that the alert falls into. |
observables | [object] | false | none | The observables associated with this alert |
» type | string | true | none | The type of the observable |
» value | string | true | none | The value of the observable |
» tags | Tags | false | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive. |
» extraProperties | object | false | none | observable additional properties |
»» additionalProperties | object | false | none | none |
»»» value | any | true | none | none |
anyOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | string | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | number | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | boolean | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | [string] | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | [number] | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | [boolean] | false | none | none |
continued
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»» type | string | false | none | none |
» relatedExtraProperties | object | false | none | additional properties of observable alert relation |
»» additionalProperties | object | false | none | none |
»»» value | any | true | none | none |
anyOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | string | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | number | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | boolean | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | [string] | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | [number] | false | none | none |
or
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»»» anonymous | [boolean] | false | none | none |
continued
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»»» type | string | false | none | none |
useCase | string | false | none | Alert use case |
company | string | false | none | The company with which this alert is associated |
tags | Tags | false | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive. |
categories | Categories | false | none | Mapping of alert to specific category in SIEM |
detectionRule | string | false | none | Name of detection rule from SIEM that triggered the generation of alert. It cannot exceed 256 characters. |
alertType | string | false | none | The type of the alert. Must be one of the alert types defined in CDC - see Enumerated values. When not provided or invalid value, alertType will be set to General. |
threatType | string | false | none | The threat type with which this alert is associated. |
threatActors | [string] | false | none | The attacker, whoever launched the attack/campaign/malware. |
malwareTools | [string] | false | none | The Malware/Tools that were used in the attack. |
ctiSourceUrls | [string] | false | none | The data source that was used for opening the alert. |
recommendations | string | false | none | Instruction how to handle alert. |
killChain | [string] | false | none | Mapping of alert to specific Kill Chain phases. The case of the names will be ignored, as well as spaces and duplicate values. All values will be normalized accroding to the provided enum. See in Wikipedia This field accepts any value; the provided enum shows the recommended values. |
mitreAttacks | MitreAttacks | false | none | MitreAttack Ids List |
Enumerated Values
Property | Value |
---|---|
alertType | CTI-Landscape |
alertType | CTI-Assetbased |
alertType | General |
AlertsQueryResults
{
"nextMarker": "string",
"results": [
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing"
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | a continuation token. Empty if there are no further results |
results | [AlertSummary] | true | none | none |
IncidentSummary
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | A unique, machine-oriented ID identifying this incident |
key | string | true | none | A unique, human-oriented key identifying this incident |
name | string | false | none | The name of the incident. Included only if the client specified it explicitly in the "include" parameter |
description | string | false | none | The incident description. Included only if the client specified it explicitly in the "include" parameter |
created | string(date-time) | true | none | The time when the incident was created |
updated | string(date-time) | true | none | The time when the incident was last updated |
type | string | true | none | Incident type |
status | string | true | none | The status of the incident |
priority | string | true | none | The priority of the incident |
group | string | false | none | The group to which this incident is currently assigned |
externalIds | ExternalIds | false | none | Array of external identifiers of the entity. Clients will only receive identifiers they have permission for, and won't be able to see identifiers of other systems. |
tags | Tags | false | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive. |
company | string | false | none | The company with which this incident is associated |
pendingForGroup | string | false | none | If this incident was redirected to a different group this will contain the name of the target group |
redirectionReason | string | false | none | If this incident was redirected to a different group this will contain the user comment provided with redirection request |
endSlaDate | string(date-time)¦null | false | none | Service level agreement end date |
ExternalIds
[
{
"system": "ServiceNow",
"id": "40385fee"
}
]
Array of external identifiers of the entity. Clients will only receive identifiers they have permission for, and won't be able to see identifiers of other systems.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
system | string | true | none | none |
id | string | true | none | none |
Tags
[
"Cloud-Computing",
"Virus",
"Phishing"
]
Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric.
Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive.
Properties
None
Categories
[
"Ransomware",
"Phishing"
]
Mapping of alert to specific category in SIEM
Properties
None
Alert
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"raw": {
"attributeInitializationInProgress": false,
"createdTime": {
"day": {
"numberInt": "18"
},
"hour": {
"numberInt": "16"
},
"milliSecond": {
"numberInt": "711"
},
"minute": {
"numberInt": "10"
},
"month": {
"numberInt": "6"
},
"second": {
"numberInt": "47"
},
"timezoneID": "Israel",
"year": {
"numberInt": "2017"
}
},
"createdTimestamp": {
"numberDouble": "1500383447711"
},
"deprecated": false,
"description": "ACME",
"disabled": false,
"inCache": true,
"inactive": false,
"initialized": true,
"isAdditionalLoaded": false,
"localID": {
"numberDouble": "30064798760"
},
"modificationCount": {
"numberInt": "1"
}
},
"appendedRaw": [
{}
],
"cdcUrl": "https://acme.cyberproof.io/home/alerts/alert/5e7c6cf54b832e0018f191ad",
"threatActors": [
"Cyber Criminals",
"Anonymous"
],
"malwareTools": [
"TrickBot",
"IcedID",
"Cobalt Strike"
],
"ctiSourceUrls": [
"https://blog.malwarebytes.com/someTopic"
],
"recommendations": "Implement the attached IOCs in your security systems."
}
Properties
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | AlertSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | object | false | none | none |
» raw | object | false | none | The alert raw data. |
» appendedRaw | [object] | false | none | The alert appended raw data. |
» cdcUrl | string(uri) | true | none | The URL of this alert in the CDC application. |
» threatActors | [string] | false | none | The attacker, whoever launched the attack/campaign/malware. |
» malwareTools | [string] | false | none | The Malware/Tools that were used in the attack. |
» ctiSourceUrls | [string] | false | none | The data source that was used for opening the alert. |
» recommendations | string | false | none | Instruction how to handle alert. |
Incident
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z",
"closingComment": "string",
"closingReason": "True Positive",
"closed": "2019-08-24T14:15:22Z",
"cdcUrl": "https://acme.cyberproof.io/home/incidents/incident/5ea71bb363f6c6001707663b"
}
Properties
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | IncidentSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | object | false | none | none |
» closingComment | string | false | none | The specified comment when it was closed. Only present if the incident was closed. |
» closingReason | IncidentClosingReason | false | none | Incident closure reason Possible default values are: "Benign Positive", "True Positive", "False Positive - Incorrect alert logic", "False Positive - Inaccurate data" and "Undetermined" Notice: There could be an additional possible custom reasons, but only if such exist at CDC (metamodels) |
» closed | string(date-time) | false | none | Timestamp specifying when the incident was closed. |
» cdcUrl | string(uri) | true | none | The URL of this incident in the CDC application. |
IncidentsQueryResults
{
"nextMarker": "string",
"results": [
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z"
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | a continuation token. Empty if there are no further results |
results | [IncidentSummary] | true | none | none |
IncidentAlertsQueryResults
{
"nextMarker": "string",
"results": [
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"raw": {
"attributeInitializationInProgress": false,
"createdTime": {
"day": {
"numberInt": "18"
},
"hour": {
"numberInt": "16"
},
"milliSecond": {
"numberInt": "711"
},
"minute": {
"numberInt": "10"
},
"month": {
"numberInt": "6"
},
"second": {
"numberInt": "47"
},
"timezoneID": "Israel",
"year": {
"numberInt": "2017"
}
},
"createdTimestamp": {
"numberDouble": "1500383447711"
},
"deprecated": false,
"description": "ACME",
"disabled": false,
"inCache": true,
"inactive": false,
"initialized": true,
"isAdditionalLoaded": false,
"localID": {
"numberDouble": "30064798760"
},
"modificationCount": {
"numberInt": "1"
}
},
"appendedRaw": [
{}
],
"cdcUrl": "https://acme.cyberproof.io/home/alerts/alert/5e7c6cf54b832e0018f191ad",
"threatActors": [
"Cyber Criminals",
"Anonymous"
],
"malwareTools": [
"TrickBot",
"IcedID",
"Cobalt Strike"
],
"ctiSourceUrls": [
"https://blog.malwarebytes.com/someTopic"
],
"recommendations": "Implement the attached IOCs in your security systems."
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | A continuation token. Empty if there are no further results |
results | [Alert] | true | none | none |
IncidentAlertIdsQueryResults
{
"nextMarker": "string",
"results": [
"string"
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | a continuation token. Empty if there are no further results |
results | [string] | true | none | alert IDs associated with this incident |
IncidentObservablesQueryResults
{
"nextMarker": "string",
"results": [
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
]
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | A continuation token. Empty if there are no further results |
results | [ObservableSummary] | true | none | none |
EvidenceQueryResults
{
"nextMarker": "string",
"results": [
{
"id": "5aa4d8fcbdee5a000a911882",
"type": "MITRE_ATTACK_ADDED",
"reported": "2019-08-24T14:15:22Z",
"created": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"description": "System Admin has changed severity from Low to Medium",
"messageId": "string",
"messageCdcUrl": "https://acme.cyberproof.io/home/incidents/5ea71bb363f6c6001707663b/evidence/5ea71bb363f6c6001707254a",
"externalId": "345ffe9a",
"data": {}
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | A continuation token. Empty if there are no further results |
results | [Evidence] | true | none | none |
CreateIncidentMessageRequest
{
"externalId": "345ffe9a",
"contentType": "text",
"content": "Requires further investigation",
"evidence": {
"caption": "Severity changed",
"reported": "2019-08-24T14:15:22Z",
"description": "System Admin has changed severity from Low to Medium"
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
externalId | string | true | none | The identifier of the message, as it appears in external systems, mostly used to achieve idempotence |
contentType | string | true | none | The type of the content, currently only 'text' is supported |
content | string | true | none | The content of the message |
evidence | object | false | none | When specified, the message is marked as evidence |
» caption | string | true | none | The caption of the evidence |
» reported | string(date-time) | false | none | The time when this evidence was supposed to be reported |
» description | string | false | none | The description of this evidence |
Enumerated Values
Property | Value |
---|---|
contentType | text |
IncidentMessageSummary
{
"id": "5e7c6cf54b832e0018f191ad",
"text": "Requires further investigation",
"processedText": "Requires further investigation"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | A unique, machine-oriented ID identifying this message |
text | string | true | none | The text of the message |
processedText | string | false | none | The processed text of the message |
CreateIncidentObservableRequest
{
"type": "IPv4 Address",
"value": "192.168.40.45",
"tags": [
"Critical-Infrastructure"
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
type | string | true | none | The type of the observable |
value | string | true | none | The value of the observable |
tags | [string] | false | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. |
CloseIncidentRequest
{
"closingComment": "Virus removed, performed AntiVirus software update, ensured the AntiVirus detects and quarantines emails with the virus attached",
"closingReason": "True Positive",
"shouldTerminatePlaybooks": true
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
closingComment | string | true | none | The closing comment for this incident |
closingReason | IncidentClosingReason | false | none | Incident closure reason Possible default values are: "Benign Positive", "True Positive", "False Positive - Incorrect alert logic", "False Positive - Inaccurate data" and "Undetermined" Notice: There could be an additional possible custom reasons, but only if such exist at CDC (metamodels) |
shouldTerminatePlaybooks | boolean | false | none | Terminate playbooks parameter Possible values: - true - will terminate all running playbooks in the alerts within the incident and change status(es) and close the incident/alert(s) - false (default) - close incident if there are no running playbooks, else - close incident flow will be canceled |
IncidentClosingReason
"True Positive"
Incident closure reason Possible default values are: "Benign Positive", "True Positive", "False Positive - Incorrect alert logic", "False Positive - Inaccurate data" and "Undetermined"
Notice: There could be an additional possible custom reasons, but only if such exist at CDC (metamodels)
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | string | false | none | Incident closure reason Possible default values are: "Benign Positive", "True Positive", "False Positive - Incorrect alert logic", "False Positive - Inaccurate data" and "Undetermined" Notice: There could be an additional possible custom reasons, but only if such exist at CDC (metamodels) |
UpdateIncidentRequest
{
"priority": "Low",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
priority | string | false | none | The priority of the incident |
tags | Tags | false | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive. |
company | string | false | none | The company with which the incident is associated |
RedirectIncidentRequest
{
"targetGroup": "string",
"reason": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
targetGroup | string | true | none | The group to which the incident is being redirected |
reason | string | true | none | a user-provided reason for redirection |
ObservableSummary
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | The unique identifier of this observable |
type | string | true | none | The type of the observable |
isIoc | boolean | true | none | is this observable an indicator of compromise? |
value | string | true | none | The value of the observable |
created | string(date-time) | true | none | The time when the observable was created |
updated | string(date-time) | true | none | The time when the observable was last updated, including changes to the observable and association to incidents. |
suspiciousRate | number(double)¦null | true | none | The suspicious rate of the observable (higher is more suspicious), between 0 and 100 This field is Nullable. Null value meaning: Not enough data to calculate suspiciousRate, could be updated later. |
tags | [string] | true | none | The tags associated with this observable |
enrichments | [EnrichmentSummary] | true | none | The recent and valid enrichments associated with this observable |
ObservablesQueryResults
{
"nextMarker": "string",
"results": [
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
]
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | A continuation token. Empty if there are no further results |
results | [ObservableSummary] | true | none | none |
ObservableAlertIdsQueryResults
{
"nextMarker": "string",
"results": [
"string"
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | a continuation token. Empty if there are no further results |
results | [string] | true | none | alert IDs associated with this observable |
ObservableIncidentIdsQueryResults
{
"nextMarker": "string",
"results": [
"string"
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | a continuation token. Empty if there are no further results |
results | [string] | true | none | incident IDs associated with this observable |
EnrichmentSummary
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | The unique identifier of this enrichment |
name | string | true | none | The name of the enrichment |
reported | string(date-time) | true | none | The time when this enrichment was reported |
suspiciousRate | number(double)¦null | true | none | The suspicious rate of the observable (higher is more suspicious), between 0 and 100 This field is Nullable. Null value meaning: Not enough data to calculate suspiciousRate, could be updated later. |
Evidence
{
"id": "5aa4d8fcbdee5a000a911882",
"type": "MITRE_ATTACK_ADDED",
"reported": "2019-08-24T14:15:22Z",
"created": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"description": "System Admin has changed severity from Low to Medium",
"messageId": "string",
"messageCdcUrl": "https://acme.cyberproof.io/home/incidents/5ea71bb363f6c6001707663b/evidence/5ea71bb363f6c6001707254a",
"externalId": "345ffe9a",
"data": {}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | A unique, machine-oriented ID identifying this evidence. |
type | string | true | none | The type of evidence |
reported | string(date-time) | true | none | The time when this evidence was reported |
created | string(date-time) | true | none | The time when this evidence was created |
caption | string | false | none | The caption of the evidence |
description | string | false | none | The description of this evidence |
messageId | string | false | none | The ID of the message this evidence was created from |
messageCdcUrl | string | false | none | The URL of the message in the CDC application that this evidence was created from. |
externalId | string | false | none | The identifier of the evidence, as it appears in external systems, mostly used to achieve idempotence |
data | object | false | none | Additional evidence metadata |
Enumerated Values
Property | Value |
---|---|
type | TEXT |
type | ALERT_OWNER_ASSIGNED |
type | ALERT_OWNER_REMOVED |
type | ALERT_STATUS_CHANGED |
type | ALERT_ATTACHED_TO_INCIDENT |
type | ALERT_AUTOMATION_JOB_ENDED |
type | ALERT_AUTOMATION_JOB_STARTED |
type | ALERT_CLOSED |
type | ALERT_DETACHED_FROM_INCIDENT |
type | ALERT_DETECTED |
type | ALERT_RESOLVED |
type | ALERT_INCIDENT_CREATED |
type | ALERT_PLAYBOOK_STEP_COMPLETED |
type | ALERT_REOPENED |
type | MITRE_ATTACK_ADDED |
type | MITRE_ATTACK_REMOVED |
type | INCIDENT_ALERT_ADDED |
type | INCIDENT_ALERT_REMOVED |
type | INCIDENT_CREATED |
type | INCIDENT_CLOSED |
type | INCIDENT_REOPENED |
type | INCIDENT_STATUS_CHANGED |
type | INCIDENT_COMPANY_CHANGED |
type | INCIDENT_SEVERITY_CHANGED |
type | INCIDENT_PRIORITY_CHANGED |
type | INCIDENT_TYPE_CHANGED |
type | INCIDENT_OWNER_CHANGED |
type | INCIDENT_ESCALATED |
type | INCIDENT_ESCALATION_REVOKED |
type | INCIDENT_ESCALATION_ACCEPTED |
type | INCIDENT_ESCALATION_REMINDER_SENT |
type | PLAYBOOK_ADDED |
type | PLAYBOOK_STEP_COMPLETED |
type | PLAYBOOK_USER_INPUT_REQUIRED |
type | PLAYBOOK_EVIDENCES_PROVIDED |
type | PLAYBOOK_TERMINATED |
CreateEvidenceRequest
{
"reported": "2019-08-24T14:15:22Z",
"caption": "Severity changed",
"messageId": "string",
"description": "System Admin has changed severity from Low to Medium",
"externalId": "345ffe9a"
}
Validations:
- At least one of the following fields should be provided: messageId, description.
- Only one of the following fields can be provided: messageId, externalId.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
reported | string(date-time) | true | none | The time when this evidence was reported |
caption | string | true | none | The caption of the evidence |
messageId | string | false | none | The ID of the message this evidence was created from. |
description | string | false | none | The description of this evidence |
externalId | string | false | none | The identifier of the evidence, as it appears in external systems, mostly used to achieve idempotence |
KillChain
[
"Reconnaissance",
"Weaponization",
"Delivery"
]
Mapping of alert to specific Kill Chain phases. See in Wikipedia
Properties
None
MitreAttacks
[
"T1003",
"T1001",
"T1595.001"
]
MitreAttack Ids List
Properties
None
EntityScope
{
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
}
entities in the system can have a scope defining their assosication with a bussiness object
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | id of the entity as saved in the system |
type | string | true | none | The type of the entity ( alert / incident / channel ...) |
Enumerated Values
Property | Value |
---|---|
type | alert |
type | incident |
type | channel |
FileScope
{
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
}
entities in the system can have a scope defining their assosication with a bussiness object
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | id of the entity as saved in the system |
type | string | true | none | The type of the entity ( alert / incident / channel ...) |
Enumerated Values
Property | Value |
---|---|
type | alert |
type | incident |
type | channel |
type | visualization |
TextMessageContent
{
"message": "some text <b>bold</b> message",
"contentType": "text"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
message | string | true | none | the text of the message. can be simple text or rich text |
contentType | string | true | none | Specifies the type of the Message content (Text messages) |
Enumerated Values
Property | Value |
---|---|
contentType | text |
AdaptiveCardMessageContent
{
"json": {},
"contentType": "adaptiveCard"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
json | object | true | none | the raw data attached for the porpuse of populating the card |
contentType | string | true | none | Specifies the type of the Message content (Adaptive Card messages) |
Enumerated Values
Property | Value |
---|---|
contentType | adaptiveCard |
MessageCreateRequest
{
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
externalId | string | true | none | The identifier of the message, as it appears in external systems. Only one message can be linked to each unique externalId. |
scope | EntityScope | true | none | Scope provides association data for this message |
parentMessageId | string | false | none | If provided, the new message will be posted as a child of another message as the last message in it's thread |
attachmentIds | [string] | false | none | IDs of file attached to this message |
content | TextMessageContent | true | none | The content of the message |
MessageSummary
{
"id": "616ea579f2631c8d4c68a1b7",
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | ID of the message as saved in the system |
externalId | string | true | none | The identifier of the message, as it appears in external systems. Only one message can be linked to each unique externalId. |
scope | EntityScope | true | none | entities in the system can have a scope defining their assosication with a bussiness object |
parentMessageId | string | false | none | If present, this message was posted in another message's thread |
attachmentIds | [string] | false | none | IDs of file attached to this message |
content | any | true | none | The content of the message |
oneOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | TextMessageContent | false | none | none |
xor
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | AdaptiveCardMessageContent | false | none | none |
Message
{
"id": "616ea579f2631c8d4c68a1b7",
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
},
"attachments": [
{
"status": "uploaded",
"id": "5e7c6cf54b832e0018f191ad",
"name": "attachment.txt",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"url": "https://someDomain/somePath/attachment.txt",
"size": 2680000,
"mimeType": "text/plain",
"extension": "txt",
"createdAt": "2019-08-24T14:15:22Z",
"createdBy": "8e2c4cf54b832e0018f191ad",
"relations": [
{
"type": "vega",
"id": "8e2c4cf54b832e0018f191ad"
}
]
}
]
}
Properties
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | MessageSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | object | false | none | none |
» attachments | [FileInfo] | false | none | file info objects for attachments. note - empty array means no attachments. |
» content | any | false | none | none |
oneOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»» anonymous | TextMessageContent | false | none | none |
xor
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»» anonymous | AdaptiveCardMessageContent | false | none | none |
MessagesQueryResults
{
"nextMarker": "string",
"results": [
{
"id": "616ea579f2631c8d4c68a1b7",
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
}
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | a continuation token. Empty if there are no further results |
results | [MessageSummary] | true | none | none |
FileStatus
"uploaded"
The status of the file, respecting the upload and sanitaion process. Every file should have a status
uploaded
- uploaded but not ready yet, requires additional processingprocessing
- being processed by the system, i.e. pending sanitationverified
- completed sanitation processes, needs to move to final storage locationready
- completed and made availablefailed
- the file upload process has failed, such as when sanitation can't be appliedblocked
- the file sanitation process failed ( i.e. file has malicious content )
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | string | false | none | The status of the file, respecting the upload and sanitaion process. Every file should have a status * uploaded - uploaded but not ready yet, requires additional processing* processing - being processed by the system, i.e. pending sanitation* verified - completed sanitation processes, needs to move to final storage location* ready - completed and made available* failed - the file upload process has failed, such as when sanitation can't be applied* blocked - the file sanitation process failed ( i.e. file has malicious content ) |
Enumerated Values
Property | Value |
---|---|
anonymous | uploaded |
anonymous | processing |
anonymous | verified |
anonymous | ready |
anonymous | failed |
anonymous | blocked |
FileInfo
{
"status": "uploaded",
"id": "5e7c6cf54b832e0018f191ad",
"name": "attachment.txt",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"url": "https://someDomain/somePath/attachment.txt",
"size": 2680000,
"mimeType": "text/plain",
"extension": "txt",
"createdAt": "2019-08-24T14:15:22Z",
"createdBy": "8e2c4cf54b832e0018f191ad",
"relations": [
{
"type": "vega",
"id": "8e2c4cf54b832e0018f191ad"
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
status | FileStatus | true | none | The status of the file, respecting the upload and sanitaion process. Every file should have a status * uploaded - uploaded but not ready yet, requires additional processing* processing - being processed by the system, i.e. pending sanitation* verified - completed sanitation processes, needs to move to final storage location* ready - completed and made available* failed - the file upload process has failed, such as when sanitation can't be applied* blocked - the file sanitation process failed ( i.e. file has malicious content ) |
id | string | true | none | A unique, machine-oriented ID identifying this file. |
name | string | true | none | The file name |
scope | FileScope | true | none | entities in the system can have a scope defining their assosication with a bussiness object |
url | string | true | none | The file url |
size | number | true | none | the file size in bytes |
mimeType | string | true | none | The MIME (Multipurpose Internet Mail Extensions) type of the file. A two-part identifier for file formats and format contents transmitted on the Internet. see more: https://en.wikipedia.org/wiki/Media_type |
extension | string | false | none | An identifier specified as a suffix to the name of a file |
createdAt | string(date-time) | true | none | File creation timestamp |
createdBy | string | true | none | The ID of the user who created this file. |
relations | [object] | false | none | The relations of the file |
» id | string | false | none | none |
» type | string | false | none | none |
Enumerated Values
Property | Value |
---|---|
type | vega |
FilesQueryResults
{
"nextMarker": "string",
"results": [
{
"status": "uploaded",
"id": "5e7c6cf54b832e0018f191ad",
"name": "attachment.txt",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"url": "https://someDomain/somePath/attachment.txt",
"size": 2680000,
"mimeType": "text/plain",
"extension": "txt",
"createdAt": "2019-08-24T14:15:22Z",
"createdBy": "8e2c4cf54b832e0018f191ad",
"relations": [
{
"type": "vega",
"id": "8e2c4cf54b832e0018f191ad"
}
]
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
nextMarker | string(byte) | false | none | a continuation token. Empty if there are no further results |
results | [FileInfo] | true | none | none |
UploadFileRequest
{
"relations": "[{\"type\": \"vega\", \"id\": \"5e7c6cf54b832e0018f191ad\"}]",
"password": "test123",
"file": "string"
}
Form data containing relations, password and file fields.
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
relations | string | false | none | A string representing array of json object where type = relation type, e.g. vega and id = template file id. |
password | string | false | none | A single password or more separated by a comma. |
file | string(binary) | false | none | The binary file stream |
DownloadFileResponse
"string"
The binary file stream
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | string(binary) | false | none | The binary file stream |
CDCQueryResponse
{
"sort": [
{
"fieldName": "string",
"desc": true
}
],
"limit": 20,
"skip": 0,
"items": [
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"summaryType": "alert",
"incidentId": "string"
}
],
"total": 32
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
sort | [object] | true | none | none |
» fieldName | string | false | none | Field name used for sorting query results |
» desc | boolean | false | none | DESC/ASC value |
limit | integer | true | none | none |
skip | integer | true | none | none |
items | [oneOf] | true | none | Array of either Alerts, Incidents, Observables or Messages (Please note, resulting documents property list are controlled by contents of include field in request) |
oneOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | CQLAlertSummary | false | none | none |
xor
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | CQLIncidentSummary | false | none | none |
xor
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | CQLObservableSummary | false | none | none |
xor
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | CQLMessageSummary | false | none | none |
continued
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total | number | false | none | Total count of query results. Note Field is returned only when includeTotal in request is sent as true |
CQLAlertSummary
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing",
"summaryType": "alert",
"incidentId": "string"
}
Properties
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | BaseAlertSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | object | false | none | none |
» summaryType | string | true | none | Discriminator property to distinguish between different responses |
» incidentId | string | false | none | Id of related incident |
Enumerated Values
Property | Value |
---|---|
summaryType | alert |
CQLIncidentSummary
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z",
"summaryType": "incident"
}
Properties
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | BaseIncidentSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | object | false | none | none |
» summaryType | string | true | none | Discriminator property to distinguish between different responses |
Enumerated Values
Property | Value |
---|---|
summaryType | incident |
CQLObservableSummary
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"rawData": {
"data": {
"prop1": "blah",
"prop2": 3,
"prop3": false
}
}
}
],
"summaryType": "observable"
}
Properties
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | BaseObservableSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | object | false | none | none |
» enrichments | [allOf] | false | none | The recent and valid enrichments associated with this observable |
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»» anonymous | EnrichmentSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
»» anonymous | object | false | none | none |
»»» rawData | object¦null | false | none | Raw data for enrichment. |
continued
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» summaryType | string | true | none | Discriminator property to distinguish between different responses |
Enumerated Values
Property | Value |
---|---|
summaryType | observable |
CQLMessageSummary
{
"id": "616ea579f2631c8d4c68a1b7",
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
},
"summaryType": "messsage"
}
Properties
allOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | BaseMessageSummary | false | none | none |
and
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | object | false | none | none |
» summaryType | string | true | none | Discriminator property to distinguish between different responses |
Enumerated Values
Property | Value |
---|---|
summaryType | messsage |
BaseAlertSummary
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | false | none | A unique, machine-oriented ID identifying this alert. |
source | string | false | none | The name of the source system |
sourceId | string | false | none | The ID of the alert in the source system |
score | number(double)¦null | false | none | The score of the alert This field is Nullable. Null value meaning: Not enough data to calculate score, could be updated later. |
name | string | false | none | The name of the alert |
description | string | false | none | The description of the alert |
severity | string | false | none | The severity of the alert |
created | string(date-time) | false | none | Alert creation timestamp |
modified | string(date-time) | false | none | Last modification timestamp |
detected | string(date-time) | false | none | Alert detection timestamp |
status | string | false | none | Alert status |
sourceUrl | string(uri) | false | none | A URI of this alert pointing to the source system |
company | string | false | none | The company with which the alert is associated |
useCase | string | false | none | Alert use case |
tags | Tags | false | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive. |
classification | string | false | none | Classification category that the alert falls into. |
observableTags | [string] | false | none | List of tags of alert observables |
categories | Categories | false | none | Mapping of alert to specific category in SIEM |
detectionRule | string | false | none | Name of detection rule from SIEM that triggered the generation of alert |
killChain | KillChain | false | none | Mapping of alert to specific Kill Chain phases. See in Wikipedia |
mitreAttacks | MitreAttacks | false | none | MitreAttack Ids List |
alertType | string | false | none | The type of the alert. Must be one of the alert types defined in CDC - see Enumerated values. When not provided or invalid value, alertType will be set to General. |
threatType | string | false | none | The threat type with which this alert is associated. |
Enumerated Values
Property | Value |
---|---|
alertType | CTI-Landscape |
alertType | CTI-Assetbased |
alertType | General |
BaseIncidentSummary
{
"id": "string",
"key": "CDC-20191208-00046",
"name": "Web Proxy - Execution file download",
"description": "Customer Name - ACME Inc<br>Alert Name - Web Proxy - Execution file download<br>Device Product - Web Gateway<br>Category Outcome - /Failure<br>\n",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"type": "DDOS",
"status": "Closed",
"priority": "Low",
"group": "L1",
"externalIds": [
{
"system": "ServiceNow",
"id": "40385fee"
}
],
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"company": "ACME Europe",
"pendingForGroup": "string",
"redirectionReason": "string",
"endSlaDate": "2019-08-23T14:15:22Z"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | false | none | A unique, machine-oriented ID identifying this incident |
key | string | false | none | A unique, human-oriented key identifying this incident |
name | string | false | none | The name of the incident. Included only if the client specified it explicitly in the "include" parameter |
description | string | false | none | The incident description. Included only if the client specified it explicitly in the "include" parameter |
created | string(date-time) | false | none | The time when the incident was created |
updated | string(date-time) | false | none | The time when the incident was last updated |
type | string | false | none | Incident type |
status | string | false | none | The status of the incident |
priority | string | false | none | The priority of the incident |
group | string | false | none | The group to which this incident is currently assigned |
externalIds | ExternalIds | false | none | Array of external identifiers of the entity. Clients will only receive identifiers they have permission for, and won't be able to see identifiers of other systems. |
tags | Tags | false | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive. |
company | string | false | none | The company with which this incident is associated |
pendingForGroup | string | false | none | If this incident was redirected to a different group this will contain the name of the target group |
redirectionReason | string | false | none | If this incident was redirected to a different group this will contain the user comment provided with redirection request |
endSlaDate | string(date-time)¦null | false | none | Service level agreement end date |
BaseObservableSummary
{
"id": "5e13b88122c957000787db06",
"type": "IPv4 Address",
"isIoc": false,
"value": "192.168.40.45",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2,
"tags": [
"Critical-Infrastructure"
],
"enrichments": [
{
"id": "5e13b88122c957000787db06",
"name": "VirusTotal",
"reported": "2019-08-24T14:15:22Z",
"suspiciousRate": 3.2
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | false | none | The unique identifier of this observable |
type | string | false | none | The type of the observable |
isIoc | boolean | false | none | is this observable an indicator of compromise? |
value | string | false | none | The value of the observable |
created | string(date-time) | false | none | The time when the observable was created |
updated | string(date-time) | false | none | The time when the observable was last updated, including changes to the observable and association to incidents. |
suspiciousRate | number(double)¦null | false | none | The suspicious rate of the observable (higher is more suspicious), between 0 and 100 This field is Nullable. Null value meaning: Not enough data to calculate suspiciousRate, could be updated later. |
tags | [string] | false | none | The tags associated with this observable |
enrichments | [EnrichmentSummary] | false | none | The recent and valid enrichments associated with this observable |
BaseMessageSummary
{
"id": "616ea579f2631c8d4c68a1b7",
"externalId": "111e3cf9-da0e-46a1-b099-3fd2e653ecbd",
"scope": {
"id": "616ea579f2631c8d4c68a1b7",
"type": "alert"
},
"parentMessageId": "616ea579f2631c8d4c68a1b7",
"attachmentIds": [
"616ea579f2631c8d4c68a1b7"
],
"content": {
"message": "some text <b>bold</b> message",
"contentType": "text"
}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | false | none | ID of the message as saved in the system |
externalId | string | false | none | The identifier of the message, as it appears in external systems. Only one message can be linked to each unique externalId. |
scope | EntityScope | false | none | entities in the system can have a scope defining their assosication with a bussiness object |
parentMessageId | string | false | none | If present, this message was posted in another message's thread |
attachmentIds | [string] | false | none | IDs of file attached to this message |
content | any | false | none | The content of the message |
oneOf
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | TextMessageContent | false | none | none |
xor
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
» anonymous | AdaptiveCardMessageContent | false | none | none |
AutocompleteSearchResponse
{
"limit": 10,
"items": [
"string"
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
limit | number | false | none | none |
items | [string] | false | none | none |
CustomFieldSchemaResponse
{
"id": "string",
"label": "string",
"fieldName": "string",
"entityType": "ALERT",
"classifications": [
"string"
],
"type": "TEXT",
"scope": "ADDITIONAL_INFO",
"order": 0,
"visible": true,
"deleted": true,
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | The db`s document identifier |
label | string | true | none | The display name of the field i.e Some label |
fieldName | string | true | none | The internal field name i.e incident_some_label_rich_text |
entityType | EntityTypes | true | none | Enum values for the type of entity i.e INCIDENT |
classifications | [string] | true | none | List of classifications i.e DDOS, MALWARE This field is mandatory if entityType is ALERT |
type | CustomFieldsSchemaTypesEnum | true | none | Enum values for the available data types i.e TEXT, RICH_TEXT, NUMBER |
scope | EntityScopes | true | none | Enum values for the available scopes i.e SUMMARY, ADDITIONAL_INFO |
order | number | false | none | This field controls the order of appearance. has an effect if entityType is INCIDENT |
visible | boolean | false | none | This field controls the visibility for UI consumers. |
deleted | boolean | false | none | none |
createdAt | string(date-time) | true | none | none |
updatedAt | string(date-time) | true | none | none |
QueryCustomFieldSchemaResponse
{
"total": 0,
"results": [
{
"id": "string",
"label": "string",
"fieldName": "string",
"entityType": "ALERT",
"classifications": [
"string"
],
"type": "TEXT",
"scope": "ADDITIONAL_INFO",
"order": 0,
"visible": true,
"deleted": true,
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
],
"nextMarker": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
total | number | true | none | The total documents available for the query. (usage for pagination) |
results | [CustomFieldSchemaResponse] | true | none | none |
nextMarker | string | true | none | none |
QueryCustomFieldResponse
{
"results": [
{
"id": "string",
"entityId": "string",
"entityType": "ALERT",
"name": "string",
"value": {},
"createdAt": "string",
"updatedAt": "string",
"createdBy": "string",
"updatedBy": "string"
}
],
"nextMarker": "string",
"total": 0
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
results | [CustomField] | true | none | none |
nextMarker | string | true | none | none |
total | number | true | none | none |
CustomField
{
"id": "string",
"entityId": "string",
"entityType": "ALERT",
"name": "string",
"value": {},
"createdAt": "string",
"updatedAt": "string",
"createdBy": "string",
"updatedBy": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | none |
entityId | string | true | none | none |
entityType | string | true | none | none |
name | string | true | none | none |
value | object | true | none | none |
createdAt | string | true | none | none |
updatedAt | string | true | none | none |
createdBy | string | false | none | none |
updatedBy | string | false | none | none |
Enumerated Values
Property | Value |
---|---|
entityType | ALERT |
entityType | INCIDENT |
CreateManyCustomFieldRequest
{
"request": [
{
"entityId": "string",
"entityType": "ALERT",
"name": "string",
"value": {}
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
request | [CreateCustomFieldRequest] | true | none | none |
CreateCustomFieldRequest
{
"entityId": "string",
"entityType": "ALERT",
"name": "string",
"value": {}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
entityId | string | true | none | none |
entityType | string | false | none | none |
name | string | true | none | none |
value | object | true | none | none |
Enumerated Values
Property | Value |
---|---|
entityType | ALERT |
entityType | INCIDENT |
CreateCustomFieldResponse
{
"results": [
{
"id": "string",
"entityId": "string",
"entityType": "ALERT",
"name": "string",
"value": {},
"createdAt": "string",
"updatedAt": "string",
"createdBy": "string",
"updatedBy": "string"
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
results | [CustomField] | true | none | none |
CustomFieldsSchemaTypesEnum
"TEXT"
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | string | false | none | none |
Enumerated Values
Property | Value |
---|---|
anonymous | TEXT |
anonymous | RICH_TEXT |
anonymous | |
anonymous | NUMBER |
anonymous | IPV4 |
anonymous | IPV6 |
anonymous | DATETIME |
anonymous | TEXT_LIST |
anonymous | BOOLEAN_RADIO |
EntityScopes
"ADDITIONAL_INFO"
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | string | false | none | none |
Enumerated Values
Property | Value |
---|---|
anonymous | ADDITIONAL_INFO |
anonymous | SUMMARY |
EntityTypes
"ALERT"
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
anonymous | string | false | none | none |
Enumerated Values
Property | Value |
---|---|
anonymous | ALERT |
anonymous | INCIDENT |
AlertExtendedPropertiesResponse
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The internal field name of the custom-field schema |
value | object | false | none | The actual field`s value, can be any data type or nullable |
id | string | true | none | The db`s document identifier |
createdBy | string | true | none | The user who created the resource |
updatedBy | string | true | none | The user who updated the resource |
createdAt | string | true | none | none |
updatedAt | string | true | none | none |
AlertSummary
{
"id": "5e7c6cf54b832e0018f191ad",
"source": "QRadar",
"sourceId": 296,
"score": 33.2,
"name": "Windows - Multiple failed logins same user same host",
"description": "Customer Name - AcmeCo\nAlert Name - Windows - Multiple failed logins same user same host\nDevice Vendor - Microsoft\nDevice Product - Microsoft Windows\nDevice Event Class Id - rule:105\n",
"severity": "Medium",
"created": "2019-08-24T14:15:22Z",
"modified": "2019-08-24T14:15:22Z",
"detected": "2019-08-24T14:15:22Z",
"status": "In Incident",
"sourceUrl": "https://192.168.41.164/console/do/sem/offensesummary?appName=Sem&pageId=OffenseSummary&summaryId=296",
"company": "ACME Europe",
"useCase": "UC216 - EPP - Persistent Malware",
"tags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"classification": "Authentication",
"observableTags": [
"Cloud-Computing",
"Virus",
"Phishing"
],
"categories": [
"Ransomware",
"Phishing"
],
"detectionRule": "WRONG_PASSWORD_3_ATTEMPTS",
"killChain": [
"Reconnaissance",
"Weaponization",
"Delivery"
],
"mitreAttacks": [
"T1003",
"T1001",
"T1595.001"
],
"alertType": "CTI-Landscape",
"threatType": "Phishing"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
id | string | true | none | A unique, machine-oriented ID identifying this alert. |
source | string | true | none | The name of the source system |
sourceId | string | true | none | The ID of the alert in the source system |
score | number(double)¦null | false | none | The score of the alert This field is Nullable. Null value meaning: Not enough data to calculate score, could be updated later. |
name | string | true | none | The name of the alert |
description | string | true | none | The description of the alert |
severity | string | true | none | The severity of the alert |
created | string(date-time) | true | none | Alert creation timestamp |
modified | string(date-time) | true | none | Last modification timestamp |
detected | string(date-time) | true | none | Alert detection timestamp |
status | string | true | none | Alert status |
sourceUrl | string(uri) | false | none | A URI of this alert pointing to the source system |
company | string | false | none | The company with which the alert is associated |
useCase | string | false | none | Alert use case |
tags | Tags | true | none | Array of tags. A tag's name can contain only the next symbols: alphabetic, "-", "_", ".", "#", "@", and numeric. Tags are case-reserving on insertion: if a tag doesn't already exist with a different casing style, the tag will be saved with the casing specified. When used as query filters, tags are treated as case-insensitive. |
classification | string | false | none | Classification category that the alert falls into. |
observableTags | [string] | true | none | List of tags of alert observables |
categories | Categories | true | none | Mapping of alert to specific category in SIEM |
detectionRule | string | false | none | Name of detection rule from SIEM that triggered the generation of alert |
killChain | KillChain | true | none | Mapping of alert to specific Kill Chain phases. See in Wikipedia |
mitreAttacks | MitreAttacks | false | none | MitreAttack Ids List |
alertType | string | true | none | The type of the alert. Must be one of the alert types defined in CDC - see Enumerated values. When not provided or invalid value, alertType will be set to General. |
threatType | string | false | none | The threat type with which this alert is associated. |
Enumerated Values
Property | Value |
---|---|
alertType | CTI-Landscape |
alertType | CTI-Assetbased |
alertType | General |
CreateAlertExtendedPropertiesRequest
{
"name": "string",
"value": {}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The internal field name of the custom-field schema |
value | object | false | none | The actual field`s value, can be any data type or nullable |
CreateAlertExtendedPropertiesResponse
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
results | [AlertExtendedPropertiesResponse] | true | none | none |
CreateAlertsExtendedPropertiesRequest
{
"request": [
{
"name": "string",
"value": {}
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
request | [CreateAlertExtendedPropertiesRequest] | true | none | none |
CreateIncidentsSummaryRequest
{
"request": [
{
"name": "string",
"value": {}
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
request | [CreateIncidentSummaryRequest] | true | none | none |
CreateIncidentSummaryRequest
{
"name": "string",
"value": {}
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The internal field name of the custom-field schema |
value | object | false | none | The actual field`s value, can be any data type or nullable |
CreateIncidentSummaryResponse
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
]
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
results | [IncidentSummaryResponse] | true | none | none |
IncidentSummaryResponse
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
name | string | true | none | The internal field name of the custom-field schema |
value | object | false | none | The actual field`s value, can be any data type or nullable |
id | string | true | none | The db`s document identifier |
createdBy | string | true | none | The user who created the resource |
updatedBy | string | true | none | The user who updated the resource |
createdAt | string | true | none | none |
updatedAt | string | true | none | none |
QueryAlertExtendedPropertiesResponse
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
],
"nextMarker": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
results | [AlertExtendedPropertiesResponse] | true | none | none |
nextMarker | string | false | none | none |
QueryIncidentSummaryResponse
{
"results": [
{
"name": "string",
"value": {},
"id": "string",
"createdBy": "string",
"updatedBy": "string",
"createdAt": "string",
"updatedAt": "string"
}
],
"nextMarker": "string"
}
Properties
Name | Type | Required | Restrictions | Description |
---|---|---|---|---|
results | [IncidentSummaryResponse] | true | none | none |
nextMarker | string | false | none | none |
General API Guidelines
- In case of an API endpoint that is a query endpoint (e.g. queryAlerts, queryObservableAlertIds), and the query yielded no results, an empty list will be returned:
[]
.
Concurrency
CyberProof supports consistency related concerns by leveraging HTTP constructs to enable an optimistic concurrency control. Specifically, the mechanism is provided by the combination of entity tags and conditional requests.
An entity tag, specified by the ETag
HTTP header, is an opaque token that the server associates with a particular state of a resource. When the resource changes, the entity tag should be modified as well. This allows parties to determine if a request on a resource references an up-to-date repreesentation of that resource. Typically, if there's a mismatch, the request is not performed and the client should refresh its copy of the resource to bring it up to date.
A conditional request is a request that may be executed differently depending on the value of specific HTTP headers. These headers define the precondition that must be true before the server should execute the request. Regarding entity tags, generally there are two options for making requests conditional:
If-Match
: The request will continue if the ETag of the current resource is equal to the one listed in this headerIf-None-Match
: The request will continue if the ETag of the current resource is different to each tag listed in this header
Take the following scenario as an example:
- Client calls
getIncident
with a certain incident id - Client receives the incident response along with the
ETag
response header - Client needs to update the incident
- Client updates its incident's entity state
- Client calls
updateIncident
and includes aIf-Match
header with the value of theETag
it received before
- Server operation
- Server compares current
ETag
with the one specified in theIf-Match
header - When matched, the operation is performed and the response to the client includes the updated incident's entity tag in the
ETag
response header - When unmatched, the operation is not performed and the server responds with a status code of Precondition Failed (412)
- Server compares current
What's New
GET
/alerts/{alertId}/extended-properties
Query alert extended properties
POST
/alerts/{alertId}/extended-properties
Set alert extended properties
GET
/incidents/{incidentId}/summary
Query incident summary
POST
/incidents/{incidentId}/summary
Set incident summary
GET
/custom-fields/settings
Read custom fields setting/schemas