openapi: 3.1.0 info: version: 1.0.0 title: References description: |- API for CybelAngel's Alerts. Authentication uses standard [OAuth2 Bearer Tokens](https://tools.ietf.org/html/rfc6750). Here is a simple example of how to fetch such a token with curl: ```shell curl -X POST https://auth.cybelangel.com/oauth/token -H 'content-type: application/json -d '{"client_id": "client_id", "client_secret": "client_secret", "audience": "https://platform.cybelangel.com/", "grant_type": "client_credentials"} ``` The received access token can then be used as a Bearer token to request our API. contact: email: support@cybelangel.com license: url: 'https://cybelangel.com/' name: Proprietary servers: - url: 'https://api.cybelangel.com' paths: /v1/alerts: get: tags: - alerts summary: Search alerts description: 'Search alerts according to user filters.

Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
Requests for data outside of this range will not return any results.' operationId: alerts_search_alerts_alerts_get parameters: - name: cursor in: query description: |- Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request. Searching from a cursor does not impact the total number of results. Behavior is undefined if the filters and sort are changed between successive requests. Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter. required: false schema: title: Cursor description: |- Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request. Searching from a cursor does not impact the total number of results. Behavior is undefined if the filters and sort are changed between successive requests. Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter. anyOf: - type: string - name: order_by in: query description: |- Can be multiple fields with +/- for ascending/descending sort. Fields can be ingestion_date, detection_date, ml_score. required: false schema: type: array title: Order By description: |- Can be multiple fields with +/- for ascending/descending sort. Fields can be ingestion_date, detection_date, ml_score. default: - +ingestion_date - +detection_date items: type: string pattern: '[+-]?(ingestion_date|detection_date|ml_score)' minLength: 1 - name: stream_id in: query description: |- Stream id used to filter alerts belonging to some organization. A client can only query alerts for its allowed streams. required: true schema: type: string title: Stream Id description: |- Stream id used to filter alerts belonging to some organization. A client can only query alerts for its allowed streams. minLength: 1 examples: - 90b18fad-b9ca-41db-bae1-b4964c1a4e84 examples: default: value: 90b18fad-b9ca-41db-bae1-b4964c1a4e84 - name: start_date in: query description: |- Minimal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. required: true schema: type: string title: Start Date description: |- Minimal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. format: date-time examples: - '2024-09-01T10:00:00.000Z' examples: default: value: '2024-09-01T10:00:00.000Z' - name: end_date in: query description: |- Maximal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. required: false schema: title: End Date description: |- Maximal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. anyOf: - type: string format: date-time - name: status in: query description: |- Select only alerts having one of the requested statuses. By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts. required: false schema: type: array title: Status description: |- Select only alerts having one of the requested statuses. By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts. default: - new items: $ref: '#/components/schemas/AlertStatus' - name: category in: query description: 'If set, select alerts with specified categories.' required: false schema: type: array title: Category description: 'If set, select alerts with specified categories.' default: [] items: $ref: '#/components/schemas/AlertCategory' - name: customer_assessment in: query description: |- If set, select only alerts having one of the requested customer assessments. This is the **customer.assessment** field that may be set by clients using the API. required: false schema: type: array title: Customer Assessment description: |- If set, select only alerts having one of the requested customer assessments. This is the **customer.assessment** field that may be set by clients using the API. default: [] items: $ref: '#/components/schemas/CustomerAssessment' - name: keyword in: query description: 'If set, select alerts matching specified keywords aliases.' required: false schema: type: array title: Keyword description: 'If set, select alerts matching specified keywords aliases.' default: [] items: type: string minLength: 1 - name: keyword_id in: query description: 'If set, select alerts matching specified keyword identifiers.' required: false schema: type: array title: Keyword Id description: 'If set, select alerts matching specified keyword identifiers.' default: [] items: type: string minLength: 1 - name: min_ml_score in: query description: 'If set, select alerts with equal or higher ''ml.score''.' required: false schema: type: integer title: Min Ml Score description: 'If set, select alerts with equal or higher ''ml.score''.' minimum: 0 maximum: 100 default: 0 - name: hostname in: query description: 'If set, select alerts with any specified hostname value.' required: false schema: type: array title: Hostname description: 'If set, select alerts with any specified hostname value.' default: [] items: type: string minLength: 1 - name: ip in: query description: 'If set, select alerts with specified IP address among ''ip'', ''server_ip'' or ''victim_ip'' fields.' required: false schema: type: array title: Ip description: 'If set, select alerts with specified IP address among ''ip'', ''server_ip'' or ''victim_ip'' fields.' default: [] items: type: string minLength: 1 - name: search_query in: query description: Words to search in alerts text fields. required: false schema: title: Search Query description: Words to search in alerts text fields. anyOf: - type: string minLength: 1 - name: limit in: query description: Max number of returned alerts. Increasing it will also increase the payload. required: false schema: type: integer title: Limit description: Max number of returned alerts. Increasing it will also increase the payload. minimum: 0 maximum: 1000 default: 10 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AlertList' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' '/v1/alerts/{alert_id}': get: tags: - alerts summary: Get an alert description: 'Get an alert by its unique id.

Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
Requests for data outside of this range will not return any results.' operationId: alerts_search_an_alert_alerts__alert_id__get parameters: - name: alert_id in: path description: ID of an alert. required: true schema: type: string title: Alert Id description: ID of an alert. minLength: 1 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/PublicAlert' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' '/v1/alerts/{alert_id}/customer': patch: tags: - alerts summary: Set customer fields description: Allow to edit customer-maintained fields in an alert published by the API.

The only use now is to assess the alerts.
These assessments may then be used by CybelAngel to improve the alerts automated filtering. operationId: alerts_patch_an_alert_alerts__alert_id__customer_patch parameters: - name: alert_id in: path description: ID of an alert. required: true schema: type: string title: Alert Id description: ID of an alert. minLength: 1 requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AlertRequestCustomerFieldsPatch' responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' '/v1/alerts/{alert_id}/credentials': get: tags: - alerts summary: Get leak alert credentials (deprecated) description: This endpoint is deprecated and will be removed in a future release.
Use /v1/alerts//leak-credentials instead. operationId: alerts_get_alert_credentials_deprecated_alerts__alert_id__credentials_get parameters: - name: alert_id in: path description: ID of an alert. required: true schema: type: string title: Alert Id description: ID of an alert. minLength: 1 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CredentialsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '410': description: Gone content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_GoneError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' deprecated: true security: - jwt: [] servers: - url: 'https://api.cybelangel.com' '/v1/alerts/{alert_id}/leak-credentials': get: tags: - alerts summary: Get leak alert credentials description: Get credentials associated with an alert. operationId: alerts_get_alert_credentials_alerts__alert_id__leak_credentials_get parameters: - name: alert_id in: path description: ID of an alert. required: true schema: type: string title: Alert Id description: ID of an alert. minLength: 1 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CredentialsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' '/v1/alerts/{alert_id}/codeshare-findings': get: tags: - alerts summary: Get codeshare alert findings description: 'Get sensitive code snippets for a codeshare alert.

Note: downloading hundreds of thousands of findings may take a few dozen seconds.' operationId: alerts_get_codeshare_findings_alerts__alert_id__codeshare_findings_get parameters: - name: alert_id in: path description: ID of an alert. required: true schema: type: string title: Alert Id description: ID of an alert. minLength: 1 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/FindingsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' '/v1/alerts/{alert_id}/dns-screenshot': get: tags: - alerts summary: Get DNS alert screenshot. description: 'Get the website screenshot associated with a DNS alert.

If a screenshot is present, it is returned as a PNG file.
If no screenshot was taken for the alert, a 204 NO_CONTENT is returned.
If the alert is older than 180 days a GONE response is returned.' operationId: alerts_get_alert_dns_screenshot_alerts__alert_id__dns_screenshot_get parameters: - name: alert_id in: path description: ID of an alert. required: true schema: type: string title: Alert Id description: ID of an alert. minLength: 1 responses: '200': description: OK content: image/png: schema: type: string contentMediaType: application/octet-stream '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '410': description: Gone content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_GoneError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' /v1/leak-credentials: get: tags: - alerts summary: Get leak credentials description: Get leak credentials we collected. operationId: alerts_get_leak_credentials_leak_credentials_get parameters: - name: stream_id in: query description: |- Stream id used to filter alerts belonging to some organization. A client can only query alerts for its allowed streams. required: true schema: type: string title: Stream Id description: |- Stream id used to filter alerts belonging to some organization. A client can only query alerts for its allowed streams. minLength: 1 examples: - 90b18fad-b9ca-41db-bae1-b4964c1a4e84 examples: default: value: 90b18fad-b9ca-41db-bae1-b4964c1a4e84 - name: start_date in: query description: Minimal ingestion date. Expects a date with timezone information. required: true schema: type: string title: Start Date description: Minimal ingestion date. Expects a date with timezone information. format: date-time examples: - '2024-09-01T10:00:00.000Z' examples: default: value: '2024-09-01T10:00:00.000Z' - name: end_date in: query description: Maximal ingestion date. Expects a date with timezone information. required: false schema: title: End Date description: Maximal ingestion date. Expects a date with timezone information. anyOf: - type: string format: date-time - name: match in: query description: Words to search in credentials logins and targets. required: false schema: title: Match description: Words to search in credentials logins and targets. anyOf: - type: string minLength: 1 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CredentialsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_NotFoundError_' '410': description: Gone content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_GoneError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' /v1/stix/alerts: get: tags: - stix summary: Search alerts in STIX 2.1 format description: 'Search alerts according to user filters and return them as a Bundle in STIX 2.1 format.
See https://oasis-open.github.io/cti-documentation/stix/intro for more information on this format.

Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months.
Requests for data outside of this range will not return any results.' operationId: stix_search_stix_alerts_stix_alerts_get parameters: - name: cursor in: query description: |- Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request. Searching from a cursor does not impact the total number of results. Behavior is undefined if the filters and sort are changed between successive requests. Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter. required: false schema: title: Cursor description: |- Set it to the the 'cursor' value received from previous search request to iterate on the following alerts, beyond the limit set per request. Searching from a cursor does not impact the total number of results. Behavior is undefined if the filters and sort are changed between successive requests. Note: with big datasets, iterating on cursor can be much slower than iterating on 'start_date' filter. anyOf: [] - name: order_by in: query description: |- Can be multiple fields with +/- for ascending/descending sort. Fields can be ingestion_date, detection_date, ml_score. required: false schema: type: array title: Order By description: |- Can be multiple fields with +/- for ascending/descending sort. Fields can be ingestion_date, detection_date, ml_score. default: - +ingestion_date - +detection_date items: type: string pattern: '[+-]?(ingestion_date|detection_date|ml_score)' minLength: 1 - name: stream_id in: query description: |- Stream id used to filter alerts belonging to some organization. A client can only query alerts for its allowed streams. required: true schema: type: string title: Stream Id description: |- Stream id used to filter alerts belonging to some organization. A client can only query alerts for its allowed streams. minLength: 1 examples: - 90b18fad-b9ca-41db-bae1-b4964c1a4e84 examples: default: value: 90b18fad-b9ca-41db-bae1-b4964c1a4e84 - name: start_date in: query description: |- Minimal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. required: true schema: type: string title: Start Date description: |- Minimal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. format: date-time examples: - '2024-09-01T10:00:00.000Z' examples: default: value: '2024-09-01T10:00:00.000Z' - name: end_date in: query description: |- Maximal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. required: false schema: title: End Date description: |- Maximal ingestion date. Expects a date with timezone information. Note: Historical data is only available starting from January 1, 2024, and is retained for a maximum of 12 months. Requests for data outside of this range will not return any results. anyOf: [] - name: status in: query description: |- Select only alerts having one of the requested statuses. By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts. required: false schema: type: array title: Status description: |- Select only alerts having one of the requested statuses. By default selects only 'new' alerts to exclude alerts automatically discarded by our ML tools or already processed by analysts. default: - new items: $ref: '#/components/schemas/AlertStatus' - name: category in: query description: 'If set, select alerts with specified categories.' required: false schema: type: array title: Category description: 'If set, select alerts with specified categories.' default: [] items: $ref: '#/components/schemas/AlertCategory' - name: customer_assessment in: query description: |- If set, select only alerts having one of the requested customer assessments. This is the **customer.assessment** field that may be set by clients using the API. required: false schema: type: array title: Customer Assessment description: |- If set, select only alerts having one of the requested customer assessments. This is the **customer.assessment** field that may be set by clients using the API. default: [] items: $ref: '#/components/schemas/CustomerAssessment' - name: keyword in: query description: 'If set, select alerts matching specified keywords aliases.' required: false schema: type: array title: Keyword description: 'If set, select alerts matching specified keywords aliases.' default: [] items: type: string minLength: 1 - name: keyword_id in: query description: 'If set, select alerts matching specified keyword identifiers.' required: false schema: type: array title: Keyword Id description: 'If set, select alerts matching specified keyword identifiers.' default: [] items: type: string minLength: 1 - name: min_ml_score in: query description: 'If set, select alerts with equal or higher ''ml.score''.' required: false schema: type: integer title: Min Ml Score description: 'If set, select alerts with equal or higher ''ml.score''.' minimum: 0 maximum: 100 default: 0 - name: hostname in: query description: 'If set, select alerts with any specified hostname value.' required: false schema: type: array title: Hostname description: 'If set, select alerts with any specified hostname value.' default: [] items: type: string minLength: 1 - name: ip in: query description: 'If set, select alerts with specified IP address among ''ip'', ''server_ip'' or ''victim_ip'' fields.' required: false schema: type: array title: Ip description: 'If set, select alerts with specified IP address among ''ip'', ''server_ip'' or ''victim_ip'' fields.' default: [] items: type: string minLength: 1 - name: search_query in: query description: Words to search in alerts text fields. required: false schema: title: Search Query description: Words to search in alerts text fields. anyOf: [] - name: alerts_limit in: query description: |- Max number of considered alerts. Increasing it will also increase the payload. Note: it limits the number of alert considered by the query, but one alert can generate from zero to dozens of STIX objects. required: false schema: type: integer title: Alerts Limit description: |- Max number of considered alerts. Increasing it will also increase the payload. Note: it limits the number of alert considered by the query, but one alert can generate from zero to dozens of STIX objects. minimum: 0 maximum: 1000 default: 10 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/StixAlertsResponse' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ValidationError_' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_ForbiddenAccessError_' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/APIErrorResponse_UnknownError_' security: - jwt: [] servers: - url: 'https://api.cybelangel.com' tags: - name: alerts description: Alerts - name: stix description: Alerts - Stix components: securitySchemes: jwt: type: http scheme: bearer bearerFormat: JWT schemas: AlertStatus: type: string enum: - new - autodiscarded - discarded - interesting - forwarded - report_sent title: AlertStatus description: 'Status of alerts, set by cybelangel automated systems and analysts.' AlertCategory: type: string enum: - adm - fileserver - codeshare - dns - database - board - clouddrive - docshare - paste - leak - rss - social title: AlertCategory description: |- ADM stands for Asset Discovery and Monitoring. DNS stands for Domain Name System. CustomerAssessment: type: string enum: - unknown - true_positive - false_positive title: CustomerAssessment description: |- Assessment of the alert quality: is it a real security threat? Set by the API user to provide feedback to Cybelangel. The default 'unknown' value is present before user assessed the alert, or when removing that assessment. AlertList: type: object title: AlertList description: List of alerts. properties: total: type: integer title: Total description: Total number of alerts matching the request. message: title: Message description: Additional information in case of non-blocking issue with the query. anyOf: - type: string alerts: type: array title: Alerts items: $ref: '#/components/schemas/PublicAlert' more: type: boolean title: More description: Set to true when there are more alerts to retrieve with the same search request parameters and a new 'cursor'. default: false cursor: title: Cursor description: 'Set when there are more alerts to retrieve. It can be used in another search request, with the same parameters, to download the following alerts.' anyOf: - type: string required: - total - alerts PublicAlert: type: object title: PublicAlert description: Represents an Alert in our raw data properties: id: type: string title: Id description: Id of the incident report sent for this alert. examples: - '08c846af-fe9f-4bb3-9061-a3ddbebd1f11:7d14caa9-63ac-4c984-b8a3-98b9dc75f975' stream_id: type: string title: Stream Id description: |- Technical stream for the keyword that generated the alert. It restricts alert access to users of that stream's organization. examples: - 90b18fad-b9ca-41db-bae1-b4964c1a4e84 status: $ref: '#/components/schemas/AlertStatus' ingestion_date: type: string title: Ingestion Date description: |- Time at which this alert was ingested and made available to our users. It can be used to get new alerts when periodically polling the API. Note: due to the asynchronous nature of the ingestion process and various caches, the alerts ingested in the last few minutes may not yet be returned by the API. format: date-time examples: - '2024-09-01T12:36:15.456Z' detection_date: type: string title: Detection Date description: Time of the original detection of this alert when crawling the Internet. format: date-time examples: - '2024-08-31T06:15:54Z' customer: $ref: '#/components/schemas/CustomerFields' report: description: Fields set when publishing a report from this alert. anyOf: - $ref: '#/components/schemas/Report' ml: $ref: '#/components/schemas/MLFields' matches: type: array title: Matches description: |- List of keyword matches that triggered this alert. This is not an exhaustive list of matches from the data causing the alert as we limit the number of extracts we compute. items: $ref: '#/components/schemas/Match' category: $ref: '#/components/schemas/AlertCategory' description: 'Category of alerts, depending on its technical source. It dictates the category-specific field that may be set.' database: description: Set only for Database alerts. anyOf: - $ref: '#/components/schemas/Database' adm: description: Set only for ADM alerts. anyOf: - $ref: '#/components/schemas/ADM' dns: description: Set only for DNS alerts. anyOf: - $ref: '#/components/schemas/DNS' fileserver: description: Set only for Fileserver alerts. anyOf: - $ref: '#/components/schemas/Fileserver' clouddrive: description: Set only for Clouddrive alerts. anyOf: - $ref: '#/components/schemas/Clouddrive' docshare: description: Set only for Docshare alerts. anyOf: - $ref: '#/components/schemas/Docshare' codeshare: description: Set only for Codeshare alerts. anyOf: - $ref: '#/components/schemas/Codeshare' board: description: Set only for Board alerts. anyOf: - $ref: '#/components/schemas/Board' leak: description: Set only for Leak alerts anyOf: - $ref: '#/components/schemas/Leak' rss: description: Set only for RSS alerts anyOf: - $ref: '#/components/schemas/RSS' paste: description: Set only for Paste alerts anyOf: - $ref: '#/components/schemas/Paste' social: description: Set only for Social alerts anyOf: - $ref: '#/components/schemas/Social' required: - id - stream_id - status - ingestion_date - detection_date - customer - ml - matches - category CustomerFields: type: object title: CustomerFields description: Fields set by customer in the alert. properties: assessment: $ref: '#/components/schemas/CustomerAssessment' Report: type: object title: Report description: Fields set when publishing an incident report from this alert. properties: id: type: string title: Id description: Id of the incident report sent for this alert. required: - id MLFields: type: object title: MLFields description: Fields set by our Machine Learning tool when evaluating the alert. properties: score: title: Score description: |- Score between 0 and 100 set by our ML-based tools when evaluating the alert. 0 is certainly a false positive and will certainly be automatically discarded, 100 is most certain a true positive and should be checked carefully. examples: - 84 anyOf: - type: integer minimum: 0 maximum: 100 Match: type: object title: Match description: Match of a keyword linking this alert to the user stream. properties: source: type: string title: Source description: Indicates the technical source of the data. examples: - path keyword: type: string title: Keyword description: Label of the keyword that was detected in the extract. examples: - security keyword_id: type: string title: Keyword Id description: ID of the keyword that was detected in the extract. examples: - 590a6363-9df9-4d75-8f2a-41247357a9cc extracts: type: array title: Extracts description: |- Snippets of the content where the keyword matched. The whole content is HTML-encoded. The matched content is marked by `...` markup. Note: it is empty for 'database' alerts. examples: - /some_folder/Secret_Library_2025_9v2/Antivirus_Security_9-x_V1R1/U_Antivirus_SECURITY_Overview.pdf items: type: string required: - source - keyword - keyword_id - extracts Database: type: object title: Database description: Potential confidential data matching the keywords was found on a publicly exposed database server. properties: city: title: City description: English name of the city where the database server is located. examples: - Paris anyOf: - type: string country: title: Country description: English name of the country where the database is located. examples: - France anyOf: - type: string country_code: title: Country Code description: ISO 3166-1 alpha-2 code of the country where the database server is located. examples: - FR anyOf: - type: string database: type: string title: Database description: Name of the main database with matching data on the server. examples: - admin_cluster databases_count: type: integer title: Databases Count description: Number of database with matching data found on the server. default: 1 ip: title: Ip description: |- IP address of the publicly accessible database. Not set when the server is a cloud provider (AWS, Azure...) and thus has no consistent ip. examples: - 203.0.113.73 anyOf: - type: string format: ipvanyaddress port: type: integer title: Port description: 'Public database server port, used to check its content.' examples: - 27017 protocol: $ref: '#/components/schemas/DBProtocol' description: Public database server protocol. reverse_hostname: type: string title: Reverse Hostname description: Publicly accessible database server reverse hostname. examples: - vm123465.example.fr required: - database - port - protocol - reverse_hostname DBProtocol: type: string enum: - elasticsearch - mongo - sql - pgsql title: DBProtocol description: Different kind of databases. ADM: type: object title: ADM description: 'Asset Discovery Monitoring (ADM): Asset with an open port exposing information that matches keywords.' properties: city: title: City description: City where the asset is located. examples: - Zurich anyOf: - type: string country: title: Country description: Country where the asset is located. examples: - Switzerland anyOf: - type: string country_code: title: Country Code description: Country code where the asset is located. examples: - CH anyOf: - type: string organization: title: Organization description: 'Name of the organisation where the asset is located, a cloud provider for example.' examples: - Zweiss Inc. anyOf: - type: string ip: title: Ip description: |- IP address of the publicly accessible asset. Not set when the server is a cloud provider (AWS, Azure...) and thus has no consistent ip. examples: - 203.0.113.73 anyOf: - type: string format: ipvanyaddress hostname: title: Hostname description: Host name of the publicly accessible asset. examples: - bba.zweiss.example.ae anyOf: - type: string hostnames: type: array title: Hostnames description: Hostnames associated with the ip of the asset. examples: - - bba.zweiss.example.ae - ssl.zweiss.example.ae - maintenance.example.ae items: type: string open_ports: type: array title: Open Ports description: |- List of the open ports detected on the same IP address. They may be identical for alerts on the same IP but with a different port. examples: - - 80 - 5000 - 8000 - 8035 - 8080 items: type: integer open_services: type: array title: Open Services description: |- List of the services running on the open ports. Examples: mysql, telnet, ftp default: [] examples: - - netbios-ssn - vnc-http items: type: string port: type: integer title: Port description: Number of the port considered in this alert. examples: - 80 protocol: type: string title: Protocol description: Name of the protocol running on this port. examples: - http product: title: Product description: Name of the product running on this port. examples: - nginx anyOf: - type: string max_cve_severity: type: number title: Max Cve Severity description: Severity max for a detected CVE. minimum: 0 maximum: 10 examples: - 9.7 cves: type: array title: Cves description: CVEs detected on this port. items: $ref: '#/components/schemas/CVE' ssl_cert: description: SSL certificate associated to the port. anyOf: - $ref: '#/components/schemas/SSLCert' title: title: Title description: Title of the HTML page if the protocol is HTTP. examples: - Our Partnership Portal anyOf: - type: string required: - hostnames - open_ports - port - protocol - max_cve_severity - cves CVE: type: object title: CVE description: Common Vulnerabilities and Exposures. properties: summary: type: string title: Summary description: Description of the CVE. examples: - A crafted request uri-path can cause mod_proxy to forward the request to an origin server choosen by the remote user. This issue affects Apache HTTP Server 2.4.48 and earlier. cvss: type: number title: Cvss description: CVSS (Common Vulnerability Scoring System) rating of the CVE. minimum: 0 maximum: 10 examples: - 9 references: type: array title: References description: Sources of the description and rating. examples: - - 'https://nvd.nist.gov/vuln/detail/CVE-2021-40438' items: type: string name: type: string title: Name description: Name of the CVE. examples: - CVE-2021-40438 required: - summary - cvss - references - name SSLCert: type: object title: SSLCert description: SSL Certificate. properties: expires: title: Expires description: Date of expiration of the certificate. examples: - '2024-11-30T23:59:59' anyOf: - type: string format: date-time issued: title: Issued description: Date of publication of the certificate. examples: - '2023-12-22T00:00:00' anyOf: - type: string format: date-time expired: type: boolean title: Expired description: Is the certificate expired or not. subject: $ref: '#/components/schemas/SSLCertSubject' description: Subject. required: - expired - subject SSLCertSubject: type: object title: SSLCertSubject description: SSL Certificate Subject following the X.509 standard. properties: C: type: string title: C description: Country name. examples: - US O: type: string title: O description: Organization name. examples: - Some American Corp Inc. ST: type: string title: St description: State or Province name. examples: - California CN: type: string title: Cn description: Common Name. examples: - ourpartnershipportal.com required: - C - O - ST - CN DNS: type: object title: DNS description: |- Potential domain cyber-squatting. An alert of that category indicates we found a domain name close enough to one of our keywords that does not belong to its rightful owner. properties: hostname: type: string title: Hostname description: Suspicious host name. examples: - example.mycompanyportal.com domain: type: string title: Domain description: Domain name registered for the suspicious host name. examples: - mycompanyportal.com ip: title: Ip description: |- IP address resolved from the suspicious host name. Not set when the server is a cloud provider (AWS, Azure...) and thus has no consistent ip. examples: - 203.0.113.73 anyOf: - type: string format: ipvanyaddress domain_creation_date: title: Domain Creation Date description: Date of creation of the domain examples: - '2024-06-08T07:53:58Z' anyOf: - type: string format: date-time ns_servers: type: array title: Ns Servers description: 'Nameserver record, indicating which DNS server is authoritative for that domain.' default: [] examples: - - ns1.abovedomains.com. - ns2.abovedomains.com. items: type: string mx: title: Mx description: |- A mail exchanger record (MX record) specifies the mail server responsible for accepting email messages on behalf of a domain name. It is a resource record in the Domain Name System (DNS). It is possible to configure several MX records, typically pointing to an array of mail servers for load balancing and redundancy. examples: - 10 park-mx.abovedomains.com. anyOf: - type: string registrant_email: title: Registrant Email description: |- Email address registered with the domain. It can be a valid email or almost any string typed by the registrant. examples: - Please set email anyOf: - type: string country: title: Country description: English name of the country in which the domain name is registered. examples: - Australia anyOf: - type: string country_code: title: Country Code description: ISO 3166-1 alpha-2 code of the country in which the domain name is registered. examples: - AU anyOf: - type: string required: - hostname - domain Fileserver: type: object title: Fileserver description: Potential document leak on a public server. properties: count_matched_files: type: integer title: Count Matched Files description: |- Number of files that matched with keywords. Note: when millions of files could match, the matches may be distributed across several alerts. examples: - 157 city: title: City description: English name of the city where the server is located. examples: - Koszalin anyOf: - type: string country: title: Country description: English name of the country where the service is located. examples: - Poland anyOf: - type: string country_code: title: Country Code description: ISO 3166-1 alpha-2 code of the country in which the domain name is registered. examples: - PL anyOf: - type: string oldest_last_modified_date: title: Oldest Last Modified Date description: Last modification date of the oldest file matching the keywords. examples: - '2024-08-12T19:01:52Z' anyOf: - type: string format: date-time newest_last_modified_date: title: Newest Last Modified Date description: Last modification date of the most recent file matching the keywords. examples: - '2024-08-13T10:13:41Z' anyOf: - type: string format: date-time ip: title: Ip description: |- IP address of the publicly accessible file server. Not set when the server is a cloud provider (AWS, Azure...) and thus has no consistent ip. examples: - 203.0.113.254 anyOf: - type: string format: ipvanyaddress hostname: type: string title: Hostname description: Host name of the publicly accessible file server. examples: - betelgueuse.example.pl port: type: integer title: Port description: Port on which the sharing service is active. examples: - 2042 protocol: type: string title: Protocol description: Server's sharing protocol. examples: - nfs reverse_hostname: type: string title: Reverse Hostname description: Reverse lookup of the file server hostname. examples: - 203.0.113.254.ipv4.betelgueuse.example.pl longest_filepath: title: Longest Filepath description: |- The longest among publicly accessible file paths found on this server. Note: This field may not be available for certain types of cloud buckets (GCS, ABS, AWS S3...). examples: - /tmplocal/examples/05448864179524ds41bg7g4147gf4j4754sezs/accounts.xslx anyOf: - type: string required: - count_matched_files - hostname - port - protocol - reverse_hostname Clouddrive: type: object title: Clouddrive description: |- Potential document leak on a public cloud drive, like a GCS bucket or an openly shared personal dropbox. This alert can aggregate multiple files linked by either a common drive, a common folder or a common detection parent (post in a message board or some file on the internet linking to exposed cloud drive files). properties: source: $ref: '#/components/schemas/Source' description: 'Source of the clouddrive: onedrive, googledrive or dropbox.' count_matched_files: type: integer title: Count Matched Files description: |- Number of files that matched with keywords. Note: when millions of files could match, the matches may be distributed across several alerts. examples: - 6589 oldest_last_modified_date: title: Oldest Last Modified Date description: Last modification date of the oldest file matching the keywords. examples: - '2024-08-12T19:01:52Z' anyOf: - type: string format: date-time newest_last_modified_date: title: Newest Last Modified Date description: Last modification date of the most recent file matching the keywords. examples: - '2024-08-13T10:13:41Z' anyOf: - type: string format: date-time owner_email: title: Owner Email description: 'Email provided by the user who owns the cloud drive, may not be accurate.' examples: - jcd75069@gmail.com anyOf: - type: string parent_url: title: Parent Url description: |- URL of the website where we found the link to the publicly shared cloud drive. It may no longer be valid or openly accessible. It may not be set when coming from an external provider. examples: - 'https://www.scribd.com/document/769624896/Hackers_of_Poland-PDF' anyOf: - type: string sample_files: type: array title: Sample Files description: |- Some examples of files that triggered this alert, matching one of the keywords defined for the stream. For now there should be only one per alert. items: $ref: '#/components/schemas/File' required: - source - count_matched_files - sample_files Source: type: string enum: - onedrive - googledrive - dropbox title: Source description: Cloud drive source type. File: type: object title: File description: Publicly exposed file in a cloud drive. properties: path: type: string title: Path description: |- Path of the file on the cloud drive. This is only the ending path of the file on the cloud drive as it is usually not possible to access the root of the drive as an external user. It may contain only the file name, or some parent folder names depending on what was publicly exposed at the time it was detected. examples: - '/sortedMenu Tool/2-Input/DataBase/[FREE] DataBase Data.txt' url: type: string title: Url description: URL of the file on the cloud drive. examples: - 'https://onedrive.live.com/redir.aspx?cid=527b8139d66816e7&page=browse&resid=527B8139D56816E7!14752&parId=527B8139D56816E7!14740&authkey=!AJb3iG4G1leXO0E' size: type: integer title: Size description: 'Size of the file, in bytes.' examples: - 191451 required: - path - url - size Docshare: type: object title: Docshare description: 'Potential document leak on a public document sharing platform like Scribd, Trello, Prezi, Slideshare...' properties: author: title: Author description: 'Some identifier of the document author on the source platform. Could be a login, an email or not provided at all.' examples: - ydningrm78 anyOf: - type: string title: title: Title description: 'Title of the shared document, if present in the source.' examples: - Company Security deep dive anyOf: - type: string context: type: string title: Context description: |- First few lines of the shared document. It is also limited to a few thousand characters from the start of the document. examples: - |2- FOR INTERNAL USE ONLY! Our company security policy 1/ Passwords 2/ BYOD 3/ Office rules document_date: type: string title: Document Date description: Date on which the document was shared on the source platform. format: date-time examples: - '2024-09-16T00:00:00Z' source: type: string title: Source description: |- Name of the platform on which the document was shared. It can be a well-known website name like 'scribd' or 'prezi', or any domain name. examples: - scribd url: type: string title: Url description: URL of the shared document at the time it was detected. It may no longer be valid. examples: - 'https://www.scribd.com/document/4976346763/Company-Policy' required: - context - document_date - source - url Codeshare: type: object title: Codeshare description: 'Alert triggered by code shared on a public repository, usually on a code sharing platform like GitHub.' properties: source: type: string title: Source description: Platform on which the code was publicly shared. It is usually 'github.com'. examples: - github.com title: type: string title: Title description: 'Code repository title on the code sharing platform, usually following the author/repository pattern.' examples: - memtsuo5/gatto-blog owner: type: string title: Owner description: Username of the person or organization who owns the repository. examples: - memtsuo5 repository_name: type: string title: Repository Name description: Identifier of the repository where files matching the keywords were edited. examples: - gatto-blog context: title: Context description: |- First few lines of the repository readme file. It is also limited to a few thousand characters from the start of the document. examples: - |