openapi: 3.0.3 info: title: Abnormal Security Client API version: 1.4.3 description: | This is the specification for Abnormal Security Client API which can be used for managing security threats detected by Abnormal Security.

Who is this API for?

This API is for managing threats to an organization identified by Abnormal Security. The organization should be integrated with Abnormal Security and enabled for real-time detection of malicious emails.

Integration Steps

Go to `https://portal.abnormalsecurity.com/home/settings/integrations` & click on `Abnormal REST API`

Step 1: Generating the authentication token

Retrieve your authentication token via the Abnormal portal. You will use this token to view and modify your Abnormal-detected threats and cases. Keep the token safe, as it grants access to sensitive threat data related to your organization. Store it in a secure place, such as an encrypted password vault, and do not share it unless absolutely necessary. If you feel that the token has been compromised, please contact your Account Manager immediately. Once obtained, the token can be used in a request from any HTTP client, such as cURL:
 curl -H "Authorization: Bearer  << ACCESS_TOKEN >>" https://api.abnormalplatform.com/v1/threats 

Step 2: IP allowlisting

IP allowlisting ensures that API access is only possible from IP addresses explicitly belonging to your organization. It prevents users from unauthorized networks to access your Abnormal SOAR data. This second layer of security helps keep your data safe from unauthorized users, and protects you in the event of a token compromise. To allowlist your organization's IPs, please provide enter into the Abnormal portal specific IPv4 / IPv6 addresses, or a range of addresses using a CIDR block.

Step 3: Try it out with Test Data

To confirm that Steps 1 & 2 have been configured properly, send a request to the server with the following header set:
 curl -H "Authorization: Bearer  << ACCESS_TOKEN >>" -H "Mock-Data: True" https://api.abnormalplatform.com/v1/threats 
The server should respond with a body payload similar to the examples specified in this documentation.

Note for EU Customers

If you're a customer in the EU, you'll need to make API requests to our EU host `https://eu.rest.abnormalsecurity.com`. If you'd like to test the API through SwaggerHub, you'll find both the default host and the EU host in the Servers dropdown menu below. termsOfService: https://legal.abnormalsecurity.com/legal-hub/abnormal-security-api-terms-of-service-6feee5e3 contact: name: Abnormal Security Support email: support@abnormalsecurity.com paths: /abuse_mailbox/not_analyzed: get: operationId: v1_abuse_mailbox_not_analyzed_retrieve summary: Get a list of messages submitted to AI Security Mailbox (formerly known as Abuse Mailbox) that were not analyzed. parameters: - in: query name: start schema: type: string format: date-time description: The start of the datetime range, as an RFC 3339 timestamp, to fetch unanalyzed messages from. Defaults to 90 days before end. examples: Start: value: '2022-01-01T00:00:00Z' summary: start - in: query name: end schema: type: string format: date-time description: The end of the datetime range, as an RFC 3339 timestamp, to fetch unanalyzed messages from. Defaults to the current time. examples: End: value: '2022-01-07T23:59:59Z' summary: end tags: - AI Security Mailbox (formerly known as Abuse Mailbox) responses: '200': content: application/json: schema: $ref: '#/components/schemas/AbuseMailboxUnanalyzedResponse' description: Unanalyzed message information '400': $ref: '#/components/responses/InvalidDateError' '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/TooManyRequestsError' /abusecampaigns: get: operationId: v1_abusecampaigns_retrieve summary: Get a list of campaigns submitted to AI Security Mailbox (formerly known as Abuse Mailbox) parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the keys `lastReportedTime` and `receivedTime` are supported for `/abusecampaigns`. At least one of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. `lastReportedTime` defaults to the last 24h if unspecified. Do note that provided filter time is in UTC. explode: false style: spaceDelimited examples: LastReportedTime: value: lastReportedTime gte 2020-01-01T00:00:00Z lte 2021-12-01T00:00:00Z summary: lastReportedTime - in: query name: sender schema: type: string description: Filters threats based on the name or email address of the sender - in: query name: recipient schema: type: string description: Filters threats based on the name or email address of the recipient - in: query name: subject schema: type: string description: Filters threats based on the email subject - in: query name: reporter schema: type: string description: Filters threats based on the reporter name or email address - in: query name: attackType schema: type: string enum: - Internal-to-Internal Attacks (Email Account Takeover) - Spam - Reconnaissance - Scam - Social Engineering (BEC) - 'Phishing: Credential' - Invoice/Payment Fraud (BEC) - Malware - Extortion - 'Phishing: Sensitive Data' - Other description: Filters threats based on the type of attack - in: query name: threatType schema: type: string enum: - All - Malicious - Safe - Spam description: Filters threats based on the type of threat - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: Number of abuse campaigns shown on each page. Each page of data will have at most pageSize abuse campaign IDs. - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of abuse campaigns. Has no effect if filter is not specified. - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - AI Security Mailbox (formerly known as Abuse Mailbox) responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedAbuseCampaings' description: Returns a paginated list of abuse campaign IDs for each campaign in AI Security Mailbox (formerly known as Abuse Mailbox). The nextPageNumber field will be absent if there are no more pages of data. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /abusecampaigns/{campaign_id}: get: operationId: v1_abusecampaigns_retrieve_2 summary: Get details of an abuse campaign parameters: - in: path name: campaign_id schema: type: string description: A UUID representing the abuse campaign id required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - AI Security Mailbox (formerly known as Abuse Mailbox) responses: '200': content: application/json: schema: $ref: '#/components/schemas/AbuseCampaignDetails' description: An abuse campaign identified by Abnormal Security. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/attack_frequency: get: operationId: v1_aggregations_attack_frequency_retrieve summary: Retrieve the frequency of specific attack types for a given period. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/attack_frequency` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters attacks by frequency based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/AttackFrequencyResponse' description: A summary of attack frequencies. Represents the count of specific attack types for each reported timestamp. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/attack_stopped: get: operationId: v1_aggregations_attack_stopped_retrieve summary: Retrieve aggregated counts of distinct attack types that were successfully stopped, including current and previous periods. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/attack_stopped` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters attacks stopped based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/AttackStoppedResponse' description: A summary of stopped attacks. Represents the count of attacks stopped for each attack type. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/attack_strategy_breakdown: get: operationId: v1_aggregations_attack_strategy_breakdown_retrieve summary: Retrieve the breakdown of attacks based on their strategy. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/attack_strategy_breakdown` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters attack strategy breakdown based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/AttackStrategyBreakdownResponse' description: A breakdown of attacks based on their strategy. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/attack_vector_breakdown: get: operationId: v1_aggregations_attack_vector_breakdown_retrieve summary: Retrieve the breakdown of attacks based on their vectors. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/attack_vector_breakdown` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters attack vector breakdown based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/AttackVectorBreakdownResponse' description: A breakdown of attacks based on their vectors. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/attacker_origin: get: operationId: v1_aggregations_attacker_origin_retrieve summary: Retrieve the origin countries of attackers for a given period. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/attacker_origin` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters attacker origins based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/AttackerOriginResponse' description: A summary of attacker origins based on geographical regions and countries. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/dashboard_summary: get: operationId: v1_aggregations_dashboard_summary_retrieve summary: Retrieve an aggregated summary of multiple security data points for the dashboard. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/dashboard_summary` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters the dashboard summary based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/DashboardSummary' description: An aggregated list of security data points. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/most_impersonated_employee: get: operationId: v1_aggregations_most_impersonated_employee_retrieve summary: Retrieve the most impersonated employees for a specified period. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/most_impersonated_employee` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters impersonated employees based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/MostImpersonatedEmployeeResponse' description: A list of the most impersonated employees and related statistics. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/most_impersonated_employee_non_vip: get: operationId: v1_aggregations_most_impersonated_employee_non_vip_retrieve summary: Retrieve the most impersonated non-VIP employees for a specified period. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/most_impersonated_employee_non_vip` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters impersonated non-VIP employees based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/MostImpersonatedEmployeeNonVIPResponse' description: A list of the most impersonated non-VIP employees and related statistics. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/most_impersonated_employee_vip: get: operationId: v1_aggregations_most_impersonated_employee_vip_retrieve summary: Retrieve the most impersonated VIP employees for a specified period. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/most_impersonated_employee_vip` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters impersonated VIP employees based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/MostImpersonatedEmployeeVIPResponse' description: A list of the most impersonated VIP employees and related statistics. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/most_impersonated_vendor: get: operationId: v1_aggregations_most_impersonated_vendor_retrieve summary: Retrieve a list of the most impersonated vendors in attacks. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/most_impersonated_vendor` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters the most impersonated vendor data based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/MostImpersonatedVendorResponse' description: A list of the most impersonated vendors in attacks. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/recipient_employees: get: operationId: v1_aggregations_recipient_employees_retrieve summary: Retrieve a list of the employees who were recipients of attacks, based on their job titles. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/recipient_employees` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters the recipient employees data based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/RecipientEmployeeResponse' description: A list of the employees who were recipients of attacks, based on their job titles. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/recipient_employees_non_vip: get: operationId: v1_aggregations_recipient_employees_non_vip_retrieve summary: Retrieve a list of the non-VIP employees who were recipients of attacks, based on their job titles. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/recipient_employees_non_vip` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters the recipient non-VIP employees data based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/RecipientEmployeeNonVIPResponse' description: A list of the non-VIP employees who were recipients of attacks, based on their job titles. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/recipient_employees_vip: get: operationId: v1_aggregations_recipient_employees_vip_retrieve summary: Retrieve a list of the VIP employees who were recipients of attacks, based on their job titles. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/recipient_employees_vip` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters the recipient VIP employees data based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/RecipientEmployeeVIPResponse' description: A list of the VIP employees who were recipients of attacks, based on their job titles. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/sender_impersonation_breakdown: get: operationId: v1_aggregations_sender_impersonation_breakdown_retrieve summary: Retrieve a breakdown of attacks based on sender impersonation. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/sender_impersonation_breakdown` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters sender impersonation breakdown based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/SenderImpersonationResponse' description: A breakdown of attacks based on sender impersonation. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /aggregations/trending_attacks: get: operationId: v1_aggregations_trending_attacks_retrieve summary: Retrieve the list of trending attacks for a specified period. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/trending_attacks` are `receivedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. If this parameter is omitted, the last 7 days of data will be returned. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime - in: query name: source schema: type: string default: all enum: - all - advanced description: Filters trending attacks based on the source of detection. tags: - Dashboard Aggregations responses: '200': content: application/json: schema: $ref: '#/components/schemas/TrendingAttacksResponse' description: A list of trending attacks and related statistics. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /auditlogs: get: operationId: v1_auditlogs_retrieve summary: Gets a list of Audit Logs for Portal parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only key that are supported for `/auditlogs` is `timestamp`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ format`. We limit the results returned to the last 90 days and will default to that if no filter is supplied. style: spaceDelimited examples: Timestamp: value: timestamp gte 2020-01-01T01:01:01Z lte 2020-03-01T01:01:01Z summary: timestamp - in: query name: action schema: type: string description: 'Filters audit logs based on the action(s) taken. Accepts >= 1 options in a space-delimited string. Example: `view_message_content`' style: spaceDelimited - in: query name: category schema: type: string description: 'Filters audit logs based on their category(ies).Accepts >= 1 options in a space-delimited string. Example: `abuse_mailbox threat_log`' style: spaceDelimited - in: query name: status schema: type: string description: Filters audit logs based on their status - in: query name: sourceIp schema: type: string description: Filters audit logs based on their source IP address - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: Number of audit logs that are on each page. Each page of data will have at most pageSize audit logs. - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of audit logs. tags: - Audit Logs responses: '200': content: application/json: schema: $ref: '#/components/schemas/AuditLogResponse' description: The audit logs based on filters specified. The nextPageNumber field will be absent if there are no more pages of data. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /cases: get: operationId: v1_cases_retrieve description: Account Takeover license is required to call this endpoint. summary: Get a list of Abnormal cases identified by Abnormal Security parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only key that is supported for `/cases` is `lastModifiedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ` format. explode: false style: spaceDelimited examples: LastModifiedTime: value: lastModifiedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: lastModifiedTime CreatedTime: value: createdTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: createdTime CustomerVisibleTime: value: customerVisibleTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: customerVisibleTime - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: Number of cases that are on each page. Each page of data will have at most pageSize threats. Has no effect if filter is not specified. - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of cases. Has no effect if filter is not specified. - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Cases responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedCases' description: A list of the top 100 cases identified in Abnormal Cases if no filter query parameter is specified, or a paginated list of cases if a filter query parameter is specified. The pageNumber and nextPageNumber fields will be absent if no filter query parameter is used. The nextPageNumber field will be absent if there are no more pages of data. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /cases/{case_id}: get: operationId: v1_cases_retrieve_2 description: Account Takeover license is required to call this endpoint. summary: Get details of an Abnormal case parameters: - in: path name: case_id schema: type: string description: A string representing the case required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Cases responses: '200': content: application/json: schema: $ref: '#/components/schemas/AbnormalCaseDetails' description: An Abnormal Case. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/CaseDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' post: operationId: v1_cases_create description: Account Takeover license is required to call this endpoint. Use this to update the status of an abnormal case. The action field is contains the new case status. summary: Manage an Abnormal Case. parameters: - in: path name: case_id schema: type: string description: A string representing the case required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Cases requestBody: content: application/json: schema: $ref: '#/components/schemas/PostCaseRequest' required: true responses: '202': content: application/json: schema: $ref: '#/components/schemas/PostCaseResponse' description: Accepted for processing. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/CaseDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' /cases/{case_id}/actions/{action_id}: get: operationId: v1_cases_actions_retrieve description: Account Takeover license is required to call this endpoint. summary: Check the status of an action requested on a case. parameters: - in: path name: case_id schema: type: string description: A string representing the case required: true - in: path name: action_id schema: type: string description: A UUID representing the action id for a case required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Cases responses: '200': content: application/json: schema: $ref: '#/components/schemas/ActionStatus' description: Status of the action requested on a case. This API can be used to check the status of a request made to the threats. The response will return a descriptive string if the action on the threat could not be completed. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/ActionDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' /cases/{case_id}/analysis: get: operationId: v1_cases_analysis_retrieve description: Account Takeover license is required to call this endpoint. summary: Provides the analysis and timeline details of a case parameters: - in: path name: case_id schema: type: string description: A string representing the case required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Cases responses: '200': content: application/json: schema: $ref: '#/components/schemas/CaseAnalysis' description: The analysis results and timeline of events for the case. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /detection360/reports: get: operationId: v1_detection360_reports_retrieve description: Get a list of Detection 360 reports that you have submitted and view corresponding details for each case, including report summaries, statuses, message analyses, and more. summary: List Detection 360 reports for a specific type of detection misclassification. parameters: - in: query name: inquiry_type schema: enum: - MISSED_ATTACK - FALSE_POSITIVE type: string minLength: 1 description: Whether to fetch missed attacks or false positives. required: true - in: query name: start schema: type: string format: date-time description: The start of the datetime range, as an RFC 3339 timestamp, to fetch Detection 360 cases from. Defaults to 30 days before end. examples: Start: value: '2022-01-01T00:00:00Z' summary: start - in: query name: end schema: type: string format: date-time description: The end of the datetime range, as an RFC 3339 timestamp, to fetch Detection 360 cases from. Defaults to the current time. examples: End: value: '2022-01-07T23:59:59Z' summary: end - in: query name: status schema: type: array items: enum: - UNREVIEWED - CONTAINING_ATTACK - IMPROVING_PLATFORM - RESOLVED - CORRECTING_JUDGEMENT type: string description: Only Detection 360 cases with these statuses will be retrieved. Defaults to all statuses. tags: - Detection360 responses: '200': content: application/json: schema: type: array items: $ref: '#/components/schemas/Detection360Case' description: Successful operation '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/TooManyRequestsError' post: operationId: v1_detection360_reports_create description: Use this to report a detection misclassification judgement by Abnormal Security. We use this data to improve our models, and also give customers transparency into the frequency of misclassifications. summary: Submit a detection misclassification report parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Detection360 requestBody: content: application/json: schema: $ref: '#/components/schemas/Detection360ReportRequest' responses: '202': description: Report was submitted successfully. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/TooManyRequestsError' /employee/{email_address}: get: operationId: v1_employee_retrieve summary: Get employee information parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: path name: email_address schema: type: string description: Email address of the employee you want to retrieve data for required: true tags: - Employee Insights responses: '200': content: application/json: schema: $ref: '#/components/schemas/EmployeeDetails' description: Employee information for provided email address '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /employee/{email_address}/identity: get: operationId: v1_employee_identity_retrieve summary: Get employee identity analysis (Genome) data parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: path name: email_address schema: type: string description: Email address of the employee you want to retrieve data for required: true tags: - Employee Insights responses: '200': content: application/json: schema: $ref: '#/components/schemas/EmployeeIdentityDetails' description: Employee identity analysis data derived from employee login data. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /employee/{email_address}/logins: get: operationId: v1_employee_logins_retrieve summary: Get employee login information for last 30 days in csv format parameters: - in: path name: email_address schema: type: string description: Email address of the employee you want to retrieve data for required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Employee Insights responses: '200': content: text/csv: schema: type: string example: Timestamp,User Principal Name,User Display Name,Status,IP Address,City,State,Country or Region,Latitude,Longitude,App Display Name,App ID,Client App Used,Browser,Operating System,Device ID,Resource Display Name description: A csv list of employee login information. Headers of the csv include the following in order:
- Timestamp
- User Principal Name
- User Display Name
- Status
- IP Address
- City
- State
- Country or Region
- Latitude
- Longitude
- App Display Name
- App ID
- Client App Used
- Browser
- Operating System
- Device ID
- Resource Display Name '401': content: text/csv: schema: $ref: '#/components/responses/UnauthorizedError' description: '' '403': content: text/csv: schema: $ref: '#/components/responses/ForbiddenError' description: '' '404': content: text/csv: schema: $ref: '#/components/responses/NotFoundError' description: '' '429': content: text/csv: schema: $ref: '#/components/responses/TooManyRequestsError' description: '' /messages/{message_id}/attachment/{attachment_name}: get: operationId: v1_messages_attachment_retrieve summary: Get details of an attachment in an email message parameters: - in: path name: message_id schema: type: number description: The ABX Message Id of a message. required: true - in: path name: attachment_name schema: type: string description: The attachment name of an attachment belonging to an email message. required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Messages responses: '200': content: application/json: schema: $ref: '#/components/schemas/SoarAttachmentSignalsStruct' description: Attachment details of an attachment in an email message. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/ThreatDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' /messages/{message_id}/attachment/{attachment_name}/download: get: operationId: v1_messages_attachment_download_retrieve summary: Download the attachment in an email as a file parameters: - in: path name: message_id schema: type: number description: The ABX Message Id of a message. required: true - in: path name: attachment_name schema: type: string description: The attachment name of an attachment belonging to an email message. required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Messages responses: '200': content: application/octet-stream: schema: type: string format: binary description: The attachment file as an octet-stream. Will resolve into a file in the file system of the machine calling the request. '401': content: application/octet-stream: schema: $ref: '#/components/responses/UnauthorizedError' description: '' '403': content: application/octet-stream: schema: $ref: '#/components/responses/ForbiddenError' description: '' '404': content: application/octet-stream: schema: $ref: '#/components/responses/NotFoundError' description: '' '429': content: application/octet-stream: schema: $ref: '#/components/responses/TooManyRequestsError' description: '' /messages/{message_id}/download: get: operationId: v1_messages_download_retrieve description: Download the message contents in plaintext in the EML format. For security reasons, this API endpoint is disabled by default. Please talk to your customer specialist to get it enabled. summary: Download a message in EML format parameters: - in: path name: message_id schema: type: number description: The ABX Message Id of a message. required: true tags: - Messages responses: '200': content: message/rfc822: schema: type: string example: | From: sender@example.com To: recipient@example.com Subject: Test Email Date: Thu, 23 Aug 2024 12:00:00 +0000 Content-Type: text/plain; charset="UTF-8" This is the email body description: The EML file in plain text '401': content: message/rfc822: schema: $ref: '#/components/responses/UnauthorizedError' description: '' '403': content: message/rfc822: schema: $ref: '#/components/responses/ForbiddenError' description: '' '404': content: message/rfc822: schema: $ref: '#/components/responses/NotFoundError' description: '' '429': content: message/rfc822: schema: $ref: '#/components/responses/TooManyRequestsError' description: '' /messages/{message_id}/remediation_history: get: operationId: v1_messages_remediation_history_retrieve summary: Get details of the remediation history for a threat log message parameters: - in: path name: message_id schema: type: number description: The ABX Message Id of a message. required: true tags: - Messages responses: '200': content: application/json: schema: $ref: '#/components/schemas/RemediationHistory' description: Remediation history for a threat log message. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/TooManyRequestsError' /resources: get: operationId: v1_resources_retrieve description: Retrieve a paginated list of resources with optional filtering using pageSize and pageNumber query parameters. summary: List resources with pagination and filtering parameters: - in: query name: pageSize schema: type: integer description: 'Number of results to return per page (default: 20, max: 100)' - in: query name: pageNumber schema: type: integer description: 'Page number to retrieve (1-indexed, default: 1)' tags: - Resources responses: '200': content: application/json: schema: $ref: '#/components/schemas/ListResourcesResponse' description: A paginated list of resources matching the filter criteria '400': $ref: '#/components/schemas/BadRequestError' '401': description: Authentication credentials were missing or invalid '403': description: The request was valid but the server is refusing to respond to it '429': description: Rate limit exceeded, please try again later '502': description: Failed to communicate with upstream service /resources/{resource_id}: get: operationId: v1_resources_retrieve_2 description: Retrieve detailed information about a specific resource by its UUID. summary: Get a single resource by ID parameters: - in: path name: resource_id schema: type: string description: Unique identifier for the resource required: true tags: - Resources responses: '200': content: application/json: schema: $ref: '#/components/schemas/GetResourceResponse' description: The requested resource '401': description: Authentication credentials were missing or invalid '403': description: The request was valid but the server is refusing to respond to it '404': $ref: '#/components/schemas/NotFoundError' '429': description: Rate limit exceeded, please try again later '502': description: Failed to communicate with upstream service /resources/{resource_id}/actions: post: operationId: v1_resources_actions_create description: Execute a specific action on a resource (refresh or validate). Returns 202 Accepted with action ID for tracking. summary: Perform an action on a resource parameters: - in: path name: resource_id schema: type: string description: Unique identifier for the resource required: true tags: - Resources requestBody: content: application/json: schema: $ref: '#/components/schemas/PerformAction' required: true responses: '202': content: application/json: schema: $ref: '#/components/schemas/PerformActionResponse' description: Action accepted and completed '400': $ref: '#/components/schemas/BadRequestError' '401': description: Authentication credentials were missing or invalid '403': description: The request was valid but the server is refusing to respond to it '404': $ref: '#/components/schemas/NotFoundError' '429': description: Rate limit exceeded, please try again later '500': description: An unexpected error occurred on the server /resources/{resource_id}/update: patch: operationId: v1_resources_update_partial_update description: Partially update an existing resource's fields (PATCH). Provide only the fields that need updating. summary: Update an existing resource parameters: - in: path name: resource_id schema: type: string description: Unique identifier for the resource required: true tags: - Resources requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedUpdateResource' responses: '200': content: application/json: schema: $ref: '#/components/schemas/UpdateResourceResponse' description: Resource updated successfully '400': $ref: '#/components/schemas/BadRequestError' '401': description: Authentication credentials were missing or invalid '403': description: The request was valid but the server is refusing to respond to it '404': $ref: '#/components/schemas/NotFoundError' '429': description: Rate limit exceeded, please try again later '500': description: An unexpected error occurred on the server /resources/create: post: operationId: v1_resources_create_create description: Create a new resource with the specified name and optional description. Returns 201 Created with resource ID. summary: Create a new resource tags: - Resources requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateResource' required: true responses: '201': content: application/json: schema: $ref: '#/components/schemas/CreateResourceResponse' description: Resource created successfully '400': $ref: '#/components/schemas/BadRequestError' '401': description: Authentication credentials were missing or invalid '403': description: The request was valid but the server is refusing to respond to it '429': description: Rate limit exceeded, please try again later '500': description: An unexpected error occurred on the server /roles: get: operationId: v1_roles_retrieve description: |- Fetch all roles for an account from RBAC system. This endpoint retrieves a union of both account-specific roles and global (Abnormal-defined) roles for the authenticated account from the RBAC service. summary: Get a list of roles for an account from RBAC system parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Roles responses: '200': content: application/json: schema: $ref: '#/components/schemas/RoleListResponse' description: A list of roles available for the account. '401': $ref: '#/components/responses/UnauthorizedError' '403': description: Forbidden - Insufficient permissions '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /search: post: operationId: v1_search_create description: |- Search for email messages across Abnormal and Quarantine sources. Optionally filter by tenant_ids in the request body. If tenant_ids is not provided, all authorized tenants are searched. The tenant_ids must be a subset of the tenants authorized by the bearer token. **Key Filter Fields:** - `body_link`: Filter by URLs found in the email body (e.g., phishing links, suspicious domains) - `judgement`: Filter by threat classification. Values: 'attack' (confirmed threats), 'borderline' (suspicious but not confirmed), 'spam' (unwanted bulk email), 'graymail' (legitimate bulk email), 'safe' (benign messages) - `judgement_source`: Filter by detection source. Values: 'ABNORMAL_SYSTEM' (flagged by Abnormal's own detection), 'CUSTOMER_AI_MODEL' (flagged by a customer-defined Custom AI Model). Only supported for `source=abnormal` (not quarantine). summary: Search for email messages parameters: - in: query name: pageNumber schema: type: integer description: 'Page number for pagination (default: 1)' - in: query name: pageSize schema: type: integer description: 'Number of results per page (default: 100, max: 1000)' tags: - Search and Respond requestBody: content: application/json: schema: $ref: '#/components/schemas/SearchRequest' examples: AllAvailableSearchFilters: value: source: abnormal filters: start_time: '2024-01-01T00:00:00Z' end_time: '2024-01-31T23:59:59Z' subject: 'Urgent: Payment Required' sender_email: suspicious@external-domain.com sender_name: John Doe recipient_email: user@company.com recipient_name: Jane Smith attachment_name: invoice.pdf internet_message_id: body_link: https://suspicious-domain.com sender_ip: 192.0.2.1 judgement: attack use_sender_regex: false use_recipient_regex: false tenant_ids: - 123 - 456 summary: All available search filters SearchByDateAndSender: value: source: abnormal filters: start_time: '2024-01-01T00:00:00Z' end_time: '2024-01-31T23:59:59Z' sender_email: suspicious@external-domain.com tenant_ids: - 123 - 456 summary: Search by date and sender SearchBySubjectAndJudgement: value: source: abnormal filters: start_time: '2024-01-01T00:00:00Z' end_time: '2024-01-31T23:59:59Z' subject: 'Urgent: Payment Required' judgement: attack summary: Search by subject and judgement SearchByCustomAIModel(CAIM)Detection: value: source: abnormal filters: start_time: '2024-01-01T00:00:00Z' end_time: '2024-01-31T23:59:59Z' judgement_source: CUSTOMER_AI_MODEL tenant_ids: - 123 summary: Search by Custom AI Model (CAIM) detection required: true responses: '200': content: application/json: schema: $ref: '#/components/schemas/SearchResponse' examples: SuccessfulSearchResponse: value: results: - customer_id: 100 tenant_id: 123 received_time: '2024-01-15T10:30:00Z' subject: 'Urgent: Wire Transfer Request' sender: attacker@malicious.com sender_display_name: John Doe mailbox_name: user@company.com mailbox_display_name: User Name current_folder_name: Inbox raw_message_id: AAMkAGI2THVSAAA= native_user_id: user@company.com cloud_message_id: abx:CloudMessage:123:456 internet_message_id: abnormal_message_id: abc123def456 abnormal_message_uuid: uuid-123-456 decision_category: attack judgement: attack judgement_source: CUSTOMER_AI_MODEL judgement_source_model_id: '700' judgement_source_model_version: '19' attachments: invoice.pdf: name: invoice.pdf md5_hash: d41d8cd98f00b204e9800998ecf8427e body_links: - https://suspicious-domain.com/phishing sender_ip_addresses: - 192.0.2.1 total: 25 pageNumber: 1 pageSize: 100 nextPageNumber: 2 metadata: trace_id: abc-123-def-456 response_time: '2024-01-15T10:30:05Z' summary: Successful search response description: Search completed successfully '400': description: Invalid request parameters '401': description: Authentication failed (invalid bearer token) or Authorization failed (requested tenant_ids not authorized by bearer token) '403': description: API not enabled for this customer '500': description: Internal server error /search/activities: get: operationId: v1_search_activities_retrieve description: List activity logs for search and remediation operations. Optionally filter by tenant_ids query parameter (e.g., ?tenant_ids=123&tenant_ids=456). If tenant_ids is not provided, all authorized tenants are included. The tenant_ids must be a subset of the tenants authorized by the bearer token. summary: List activity logs parameters: - in: query name: tenant_ids schema: type: string description: Comma-separated list of tenant IDs to filter activities (e.g., '123,456' or '789'). If not provided, all authorized tenants are included. - in: query name: pageNumber schema: type: integer description: 'Page number for pagination (default: 1)' - in: query name: pageSize schema: type: integer description: 'Number of results per page (default: 100, max: 1000)' - in: query name: action schema: type: string description: Filter by remediation action (e.g., delete, move_to_inbox) tags: - Search and Respond responses: '200': content: application/json: schema: $ref: '#/components/schemas/ActivitiesResponse' examples: ActivitiesListResponse: value: activities: - activity_id: 12345 action: delete status: completed performed_by: Rest API timestamp: '2024-01-15T10:30:00Z' result_count: 5 parameters: tenant_ids: - 123 source: abnormal submit_d360_case: false - activity_id: 12346 action: move_to_inbox status: in_progress performed_by: Rest API timestamp: '2024-01-15T11:00:00Z' result_count: 3 parameters: tenant_ids: - 456 source: abnormal target_folder: inbox submit_d360_case: false total: 50 pageNumber: 1 pageSize: 100 metadata: trace_id: abc-123-def-456 response_time: '2024-01-15T11:05:00Z' summary: Activities list response description: Activity logs retrieved successfully '400': description: Invalid request parameters '401': description: Authentication failed (invalid bearer token) or Authorization failed (requested tenant_ids not authorized by bearer token) '403': description: API not enabled for this customer '500': description: Internal server error /search/activities/{activity_log_id}/status: get: operationId: v1_search_activities_status_retrieve description: 'Get detailed status of a specific activity including remediation results. Authorization is automatically determined by the bearer token - if the activity belongs to any tenant authorized by your token, you will be able to access it. The activity_log_id is returned in the response from the remediation endpoint. ' summary: Get activity status parameters: - in: path name: activity_log_id schema: type: integer description: The activity log ID returned from the remediation request (use 'activity_log_id' field from remediation response) required: true tags: - Search and Respond responses: '200': content: application/json: schema: $ref: '#/components/schemas/ActivityStatusResponse' examples: SuccessfulActivityStatus: value: activity_id: 12345 action: delete status: completed performed_by: Rest API timestamp: '2024-01-15T10:30:00Z' result_count: 5 remediation_details: - tenant_id: 123 raw_message_id: AAMkAGI2THVSAAA= status: success error_message: '' - tenant_id: 123 raw_message_id: BBMkAGI2THVSAAA= status: success error_message: '' total: 5 pageNumber: 1 pageSize: 100 metadata: trace_id: abc-123-def-456 response_time: '2024-01-15T10:30:01Z' summary: Successful activity status description: Activity status retrieved successfully '400': description: Invalid activity_log_id parameter '401': description: Authentication failed (invalid bearer token) or the activity does not belong to any tenant authorized by your token '403': description: API not enabled for this customer '404': description: Activity not found '500': description: Internal server error /search/messages/{message_id}/eml: get: operationId: v1_search_messages_eml_retrieve description: Download the EML file for a specific message by cloud_message_id. Returns the EML file content as message/rfc822 format. For quarantine messages, provide both 'quarantineIdentity' and 'recipientMailbox' query parameters. summary: Download EML file for a message parameters: - in: path name: message_id schema: type: string description: 'The cloud_message_id from the Search API response (format: ''abx:CloudMessage:...''). Use the ''cloud_message_id'' field from the search results.' required: true - in: query name: quarantineIdentity schema: type: string description: Quarantine identity for quarantined messages. Required along with 'recipientMailbox' to download quarantine messages from S3 cache. - in: query name: recipientMailbox schema: type: string description: Recipient mailbox email address for quarantined messages. Required along with 'quarantineIdentity' to download quarantine messages from S3 cache. tags: - Search and Respond responses: '200': content: application/json: schema: type: string format: binary description: 'EML file downloaded successfully (Content-Type: message/rfc822)' '400': description: Bad request - invalid message ID format '401': description: Unauthorized - invalid or expired token '403': description: Forbidden - API not enabled or unauthorized tenant access '404': description: Not found - message does not exist or EML not available '500': description: Internal server error /search/messages/attachments/download: get: operationId: v1_search_messages_attachments_download_retrieve description: Download an email attachment for a given message. summary: Download email attachment parameters: - in: query name: message_id schema: type: integer description: Message ID required: true - in: query name: attachment_name schema: type: string description: Name of the attachment to download required: true - in: query name: tenant_id schema: type: integer description: Tenant ID required: true - in: query name: raw_message_id schema: type: string description: Raw message ID from cloud provider required: true - in: query name: native_user_id schema: type: string description: Native user ID from cloud provider required: true - in: query name: recipient_mailbox schema: type: string description: Recipient mailbox email address required: true tags: - Search and Respond responses: '200': content: application/json: schema: type: string format: binary description: Attachment downloaded successfully (binary file) '400': description: Invalid request parameters '401': description: Unauthorized '404': description: Attachment not found '502': description: Failed to retrieve attachment from cloud provider. The message or attachment may have been moved, deleted, or remediated. '500': description: Internal server error /search/remediate: post: operationId: v1_search_remediate_create description: |- Remediate email messages by deleting, moving, or submitting them for review. Returns an `activity_log_id` that can be polled via the **Get Activity Status** endpoint. --- ## Two modes of operation **Specific messages** (`remediate_all=false`): Provide a `messages` list. Each entry must include `tenant_id`, `raw_message_id`, `mailbox_name`, `native_user_id`, `subject`, `sender`, and `received_time`. The response returns an `activity_log_id`; poll **Get Activity Status** to retrieve per-message results. **Bulk / remediate-all** (`remediate_all=true`): Provide `search_filters` instead of `messages`. All messages matching the filters are remediated asynchronously. The response returns an `activity_log_id`; poll **Get Activity Status** to track progress. --- ## Actions | `action` | Description | |---|---| | `delete` | Move messages to the provider's deleted items / recoverable items folder | | `move_to_inbox` | Move messages to a specified folder (requires `target_folder`) | To attach a Detection 360 case to a remediation, set `submit_d360_case: true` alongside any `action` above. --- ## Valid action / remediation_reason combinations | `action` | Allowed `remediation_reason` values | |---|---| | `delete` | `false_negative`, `unsolicited`, `other`, `groups_remediation` | | `move_to_inbox` | `quarantine_release`, `other`, `false_negative` | --- ## Validation rules - `search_filters` is **required** when `remediate_all=true`. - `messages` is **required** when `remediate_all=false`. - `target_folder` is **required** when `action=move_to_inbox`. - `remediation_reason=quarantine_release` is only valid when `source=quarantine`. - `search_filters.start_time` must be strictly before `search_filters.end_time`. - `use_sender_regex=true` in `search_filters` requires `sender_email` to be set. - `use_recipient_regex=true` in `search_filters` requires `recipient_email` to be set. - `submit_d360_case=true` requires `remediation_reason=false_negative`. Detection 360 only supports missed-attack inquiries today; other reasons are rejected at the API boundary. - `submit_d360_case=true` with `remediate_all=true` requires `search_filters.subject` to be set. - `submit_d360_case=true` with `messages` requires `abnormal_message_uuid` on every message. --- ## Tenant filtering Optionally provide `tenant_ids` to restrict remediation to a subset of tenants. If omitted, all tenants authorized by the bearer token are included. `tenant_ids` must be a subset of the tenants authorized by the bearer token. summary: Remediate email messages tags: - Search and Respond requestBody: content: application/json: schema: $ref: '#/components/schemas/RemediationRequest' examples: DeleteSpecificMessages(falseNegative): value: action: delete source: abnormal remediation_reason: false_negative submit_d360_case: false remediate_all: false messages: - tenant_id: 123 raw_message_id: AAMkAGI2THVSAAA= abnormal_message_id: abc123def456 mailbox_name: user@company.com native_user_id: user@company.com subject: 'Urgent: Wire Transfer Request' sender: attacker@malicious.com received_time: '2024-01-15T10:30:00Z' tenant_ids: - 123 summary: Delete specific messages (false negative) MoveSpecificMessagesToInbox(quarantineRelease): value: action: move_to_inbox source: quarantine remediation_reason: quarantine_release target_folder: inbox submit_d360_case: false remediate_all: false messages: - tenant_id: 123 raw_message_id: AAMkAGI2THVSAAA= mailbox_name: user@company.com native_user_id: user@company.com subject: Quarterly Report sender: partner@trusted.com received_time: '2024-01-15T10:30:00Z' tenant_ids: - 123 summary: Move specific messages to inbox (quarantine release) BulkDeleteUsingSearchFilters(remediateAll): value: action: delete source: abnormal remediation_reason: false_negative submit_d360_case: false remediate_all: true search_filters: start_time: '2024-01-01T00:00:00Z' end_time: '2024-01-31T23:59:59Z' sender_email: attacker@malicious.com judgement: attack tenant_ids: - 123 summary: Bulk delete using search filters (remediate_all) DeleteWithD360CaseSubmission: value: action: delete source: abnormal remediation_reason: false_negative submit_d360_case: true remediate_all: false messages: - tenant_id: 123 raw_message_id: AAMkAGI2THVSAAA= abnormal_message_id: abc123def456 abnormal_message_uuid: 550e8400-e29b-41d4-a716-446655440000 mailbox_name: user@company.com native_user_id: user@company.com subject: 'Urgent: Wire Transfer Request' sender: attacker@malicious.com received_time: '2024-01-15T10:30:00Z' tenant_ids: - 123 summary: Delete with D360 case submission required: true responses: '202': content: application/json: schema: $ref: '#/components/schemas/RemediationResponse' examples: RemediationAccepted: value: activity_log_id: 12345 metadata: trace_id: abc-123-def-456 response_time: '2024-01-15T10:30:00Z' summary: Remediation accepted description: Remediation request accepted. Poll GET /v1/search/activity/{activity_log_id} to retrieve results or track progress. '400': description: 'Invalid request. Common causes: missing required fields (`search_filters` when `remediate_all=true`, `messages` when `remediate_all=false`, `target_folder` when `action=move_to_inbox`), incompatible action/reason combination, `quarantine_release` reason with non-quarantine source, or invalid time range.' '401': description: Authentication failed (invalid bearer token) or Authorization failed (requested tenant_ids not authorized by bearer token) '403': description: API not enabled for this customer '409': description: Concurrent remediation limit exceeded. Retry after the in-progress operation completes. '500': description: Internal server error /security-settings: get: operationId: v1_security_settings_retrieve description: |- Fetch security settings for an account. This endpoint retrieves security settings including session timeout configuration (inactivity timeout and max session time). summary: Get security settings including session timeout configuration parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Security Settings responses: '200': content: application/json: schema: $ref: '#/components/schemas/SecuritySettingsResponse' description: Security settings for the account including session timeout configuration. '401': $ref: '#/components/responses/UnauthorizedError' '403': description: Forbidden - Either insufficient permissions or feature not enabled for account '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /soar/tokens: get: operationId: v1_soar_tokens_retrieve description: |- Fetch all API tokens for the authenticated customer from the Go Token Management Service. This endpoint retrieves tokens with response format containing: - token_id: UUID of the token - name: Token name - version: Token version (v1 or v2) - status: Token status (active, expired, revoked) - created_at: ISO 8601 creation timestamp - expires_at: ISO 8601 expiration timestamp - permissions: List of permission strings (scope) summary: Get a list of API tokens for the authenticated customer parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: query name: limit schema: type: integer description: Maximum number of tokens to return (1-200, default 50) - in: query name: offset schema: type: integer description: Pagination offset (default 0) - in: query name: show_all schema: type: boolean description: Include expired/revoked tokens (default false) - in: query name: sort_by schema: type: string description: 'Sort field: created_at, -created_at, expires_at, -expires_at' tags: - Tokens responses: '200': content: application/json: schema: $ref: '#/components/schemas/TokenListResponseSwagger' description: A list of API tokens for the customer. '400': description: Bad Request - Invalid query parameters '401': $ref: '#/components/responses/UnauthorizedError' '403': description: Forbidden - Either insufficient permissions or feature not enabled for account '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' '500': description: Internal Server Error /spm-v2/posture-catalog: get: operationId: v1_spm_v2_posture_catalog_retrieve description: Get posture catalog containing all available abnormal supported postures summary: Get posture catalog containing all available abnormal supported postures parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: ' Number of items on each page.Default 100. Each page of data will have at most pageSize items. Has no effect if filter is not specified.' - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of items. Has no effect if filter is not specified. tags: - SPM responses: '200': content: application/json: schema: $ref: '#/components/schemas/PostureCatalogResponse' description: Returns the posture catalog with all available postures '400': description: Bad Request '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /spm-v2/postures/{posture_id}: get: operationId: v1_spm_v2_postures_retrieve description: Get detailed information about a specific security posture evaluation summary: Get detailed information about a specific security posture evaluation parameters: - in: path name: posture_id schema: type: integer required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - SPM responses: '200': content: application/json: schema: $ref: '#/components/schemas/PostureDetail' description: Returns detailed posture information '400': description: Bad Request '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /spm-v2/postures/{posture_id}/timeline: get: operationId: v1_spm_v2_postures_timeline_retrieve description: Get timeline of events for a specific security posture summary: Get timeline of events for a specific security posture parameters: - in: path name: posture_id schema: type: integer required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: ' Number of items on each page.Default 100. Each page of data will have at most pageSize items. Has no effect if filter is not specified.' - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of items. Has no effect if filter is not specified. tags: - SPM responses: '200': content: application/json: schema: $ref: '#/components/schemas/PostureTimelineResponse' description: Returns posture timeline events '400': description: Bad Request '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /spm-v2/postures/query: post: operationId: v1_spm_v2_postures_query_create description: Get a list of all tenant postures summary: Get a list of all tenant postures parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: ' Number of items on each page.Default 100. Each page of data will have at most pageSize items. Has no effect if filter is not specified.' - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of items. Has no effect if filter is not specified. tags: - SPM requestBody: content: application/json: schema: $ref: '#/components/schemas/PostureListParams' responses: '200': content: application/json: schema: $ref: '#/components/schemas/PostureListResponse' description: Returns a list of all tenant postures '400': description: Bad Request '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /spm-v2/reports/summary: get: operationId: v1_spm_v2_reports_summary_retrieve description: Get summary report for all postures summary: Get summary report for all postures parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - SPM responses: '200': content: application/json: schema: $ref: '#/components/schemas/SPMReport' description: Returns summary report for all postures '400': description: Bad Request '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /spm-v2/workflow-logs/{workflow_log_id}/raw-json: get: operationId: v1_spm_v2_workflow_logs_raw_json_retrieve description: Get raw JSON for a workflow log summary: Get raw JSON for a workflow log parameters: - in: path name: workflow_log_id schema: type: integer required: true - in: query name: workflow_log_id schema: type: integer description: Workflow Log ID required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - SPM responses: '200': content: application/json: schema: $ref: '#/components/schemas/WorkflowLogRawJson' description: Returns raw JSON data for the workflow log '400': description: Bad Request '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /threats: get: operationId: v1_threats_retrieve summary: Get a list of threats parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the keys that are supported for `/threats` are `receivedTime` and `latestTimeRemediated`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ format`. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: receivedTime LatestTimeRemediated: value: latestTimeRemediated gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: latestTimeRemediated - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: ' Number of threats on each page. Each page of data will have at most pageSize threats. Has no effect if filter is not specified.' - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of threats. Has no effect if filter is not specified. - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: query name: source schema: type: string default: all enum: - all - attacks - borderline - spam description: Filters threats based on the source of detection. 'all' returns threats from all sources, 'spam' returns only spam threats, 'attacks' returns only attack threats, and 'borderline' returns only borderline threats. - in: query name: sender schema: type: string description: Filters threats based on the name or email address of the sender - in: query name: recipient schema: type: string description: Filters threats based on the name or email address of the recipient - in: query name: subject schema: type: string description: Filters threats based on the email subject - in: query name: topic schema: type: string enum: - Billing Account Update - Covid-19 Related Attack - Cryptocurrency - Invoice - Invoice Inquiry description: Filters threats based on the topic of email contents - in: query name: attackType schema: type: string enum: - Internal-to-Internal Attacks (Email Account Takeover) - Spam - Reconnaissance - Scam - Social Engineering (BEC) - 'Phishing: Credential' - Invoice/Payment Fraud (BEC) - Malware - Extortion - 'Phishing: Sensitive Data' - Other description: Filters threats based on the type of attack - in: query name: attackVector schema: type: string enum: - Link - Attachment - Text - Others - Attachment with Zipped File - QR Code - Calendar Invite - Spam Bomb description: Filters threats based on the attack vector - in: query name: attackStrategy schema: type: string enum: - Name Impersonation - Internal Compromised Email Account - External Compromised Email Account - Spoofed Email - Unknown Sender - Covid 19 Related Attack description: Filters threats based on the attack strategy - in: query name: impersonatedParty schema: type: string enum: - VIP - Assistants - Employee (other) - Brand - Known Partners - Automated System (Internal) - Automated System (External) - Unknown Partner - None / Others description: Filters threats based on the impersonated party tags: - Threats responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedThreats' description: A list of the IDs of the top 100 threats identified in Threat Log if no filter query parameter is specified, or a paginated list of threats if a filter query parameter is specified. The pageNumber and nextPageNumber fields will be absent if no filter query parameter is used. The nextPageNumber field will be absent if there are no more pages of data. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /threats/{threat_id}: get: operationId: v1_threats_retrieve_2 summary: Get details of a threat parameters: - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: Number of messages corresponding to threat in each page. Each page of data will have at most pageSize message. Total results returned cannot exceed 2000 due to database limitations - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of threat messages. Currently ignored, only 10 results for `messages` will show. Supported will be added in a future version. Total results returned cannot exceed 2000 due to database limitations - in: path name: threat_id schema: type: string description: A UUID representing the threat. required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Threats responses: '200': content: application/json: schema: $ref: '#/components/schemas/ThreatDetails' description: A threat identified by Abnormal Security. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/ThreatDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' post: operationId: v1_threats_create description: Use this to remediate or unremediate a threat. If the request is found to be something which can be processed, the server will return a '202 Accept' with an actionId and status URL in the response. This can be used to check the status of the request. summary: Manage a Threat identified by Abnormal Security parameters: - in: path name: threat_id schema: type: string description: A UUID representing the threat. required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Threats requestBody: content: application/json: schema: $ref: '#/components/schemas/PostThreatRequest' required: true responses: '202': content: application/json: schema: $ref: '#/components/schemas/PostThreatResponse' description: Accepted for processing. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/ThreatDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' /threats/{threat_id}/actions/{action_id}: get: operationId: v1_threats_actions_retrieve summary: Check the status of an action requested on a threat. parameters: - in: path name: threat_id schema: type: string description: A UUID representing the threat. required: true - in: path name: action_id schema: type: string description: A UUID representing the action id for a threat. required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Threats responses: '200': content: application/json: schema: $ref: '#/components/schemas/ActionStatus' description: Status of the action requested on a threat. This API can be used to check the status of a request made to the threats. The response will return a descriptive string if the action on threat could not be completed. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/ActionDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' /threats/{threat_id}/attachments: get: operationId: v1_threats_attachments_retrieve summary: Get attachment details of a threat campaign. parameters: - in: path name: threat_id schema: type: string description: A UUID representing the threat. required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Threats responses: '200': content: application/json: schema: $ref: '#/components/schemas/ThreatAttachmentsResponse' description: Details of the attachments in a threat campaign. This API can be used to obtain the details of the links that are embedded in the email messages of a threat. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/ThreatDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' /threats/{threat_id}/links: get: operationId: v1_threats_links_retrieve summary: Get information of links in a threat campagin. parameters: - in: path name: threat_id schema: type: string description: A UUID representing the threat. required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Threats responses: '200': content: application/json: schema: $ref: '#/components/schemas/ThreatLinksResponse' description: Details of the links in a threat campaign. This API can be used to obtain the details of the links that are embedded in the email messages of a threat. '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/ThreatDoesNotExistError' '429': $ref: '#/components/responses/TooManyRequestsError' /threats_export/csv: get: operationId: v1_threats_export_csv_retrieve summary: Download data from Threat Log in .csv format parameters: - in: query name: format schema: type: string enum: - csv - json - in: query name: filter schema: type: string description: Max time range is 14 days. If only one of the gte or lte filters are specified, the time range defaults to 1 day within the specified filter. If neither of the gte or lte filters are specified, the time range defaults to the previous date to the current date. style: spaceDelimited examples: ReceivedTime: value: receivedTime gte 2023-01-01T01:01:01Z lte 2023-01-14T01:01:01Z summary: receivedTime - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` - in: query name: source schema: type: string default: all enum: - all - attacks - borderline - spam description: Filters threats based on the source of detection. 'all' returns threats from all sources, 'spam' returns only spam threats, 'attacks' returns only attack threats, and 'borderline' returns only borderline threats. - in: header name: Accept schema: type: string enum: - application/json - text/csv default: application/json description: Controls the response format. Use 'text/csv' to receive data in CSV format, or 'application/json' for JSON format (default). tags: - Threats responses: '200': content: text/csv: schema: type: string example: "Date,From Display Name,From Email,Subject,Recipient Email,Job\ \ Title of Sender,Job Title of Recipient,Abnormals best guess of\ \ attack type,Abnormals best guess of attack strategy,Abnormals\ \ best guess of impersonated entity,Abnormals best guess of attack\ \ vector,Remediation Status,Remediation Time,Judgement,Abnormal\ \ Message ID,Threat ID,Tenant ID,Tenant Name\r\n2020-06-09T17:42:59Z,,support@secure-reply.org,Phishing\ \ Email,example@example.com,,,Extortion,Name Impersonation,None\ \ / Others,Text,Auto-Remediated,2020-06-09T18:00:00Z,Malicious,4551618356913732000,42,acme-corp" description: 'A csv list of all messages in the Threat Log. Headers include the following in order:
- Date
- From Display Name
- From Email
- Subject
- Recipient Email
- Job Title of Sender
- Job Title of Recipient
- Abnormals best guess of attack type
- Abnormals best guess of attack strategy
- Abnormals best guess of impersonated entity
- Abnormals best guess of attack vector
- Remediation Status
- Remediation Time
- Judgement
- Abnormal Message ID
- Threat ID
- Tenant ID
- Tenant Name' '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /url-rewrite/clicked-events: get: operationId: v1_url_rewrite_clicked_events_retrieve description: Retrieve paginated click and clickthrough events for URL rewrites. Supports filtering by Unix time range, user email, and event type. Returns events where users clicked on rewritten URLs in email messages. summary: Get URL rewrite click and clickthrough events parameters: - in: query name: limit schema: type: integer description: 'Number of results to return per page (default: 20, max: 100)' - in: query name: start schema: type: integer description: Start time of the time range to filter by (Unix timestamp) - in: query name: end schema: type: integer description: End time of the time range to filter by (Unix timestamp) - in: query name: recipient schema: type: string description: Email address recipient of the email message to filter by - in: query name: event_type schema: type: string description: Event type to filter by (Click/Clickthrough) - in: query name: offset schema: type: string description: Offset to use for pagination tags: - URL Rewrite responses: '200': content: application/json: schema: $ref: '#/components/schemas/ClickedEventsResponse' description: A paginated list of clicked events '400': $ref: '#/components/schemas/Error' '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/TooManyRequestsError' '500': $ref: '#/components/schemas/Error' /users: get: operationId: v1_users_retrieve description: Retrieves users for an account from the RBAC user management system. summary: Get a list of users from RBAC user management system parameters: - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Users responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserListResponse' description: A list of users with their roles and resource permissions. '401': $ref: '#/components/responses/UnauthorizedError' '403': description: Forbidden - Insufficient permissions '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /vendor-cases: get: operationId: v1_vendor_cases_retrieve summary: Get a list of vendor cases. parameters: - in: query name: filter schema: type: string description: Value must be of the format `filter={FILTER KEY} gte YYYY-MM-DDTHH:MM:SSZ lte YYYY-MM-DDTHH:MM:SSZ`. A `{FILTER KEY}` must be specified, and currently the only keys that are supported for `/vendor-cases` are `firstObservedTime` and `lastModifiedTime`. At least 1 of `gte`/`lte` must be specified, with a datetime string following the `YYYY-MM-DDTHH:MM:SSZ format`. style: spaceDelimited examples: FirstObservedTime: value: firstObservedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: firstObservedTime LastModifiedTime: value: lastModifiedTime gte 2020-01-01T01:01:01Z lte 2021-12-01T01:01:01Z summary: lastModifiedTime - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: Number of vendor cases that are on each page. Each page of data will have at most pageSize vendor cases. Has no effect if filter is not specified. - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of vendor cases. Has no effect if filter is not specified. - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Vendors responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedVendorCases' description: List of cases of the queried vendor '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /vendor-cases/{case_id}: get: operationId: v1_vendor_cases_retrieve_2 summary: Get details of a vendor case parameters: - in: path name: case_id schema: type: string description: The vendor case to query required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Vendors responses: '200': content: application/json: schema: $ref: '#/components/schemas/VendorCaseDetails' description: Details of the queried vendor case '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /vendors: get: operationId: v1_vendors_retrieve summary: Get a list of vendors your organization has interacted with parameters: - in: query name: pageSize schema: type: integer minimum: 1 default: 100 description: Number of vendors that are on each page. Each page of data will have at most pageSize threats. Has no effect if filter is not specified. - in: query name: pageNumber schema: type: integer minimum: 1 default: 1 description: 1-indexed page number to get a particular page of vendors. Has no effect if filter is not specified. - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Vendors responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedVendors' description: A paginated list of 100 vendors ordered by risk level (highest risk first) followed by domain name '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /vendors/{vendor_domain}/activity: get: operationId: v1_vendors_activity_retrieve summary: Get activity of a vendor your organization has interacted with parameters: - in: path name: vendor_domain schema: type: string description: The vendor domain to query required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Vendors responses: '200': content: application/json: schema: $ref: '#/components/schemas/VendorActivity' description: Activity history of the queried vendor '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' /vendors/{vendor_domain}/details: get: operationId: v1_vendors_details_retrieve summary: Get details of a vendor your organization has interacted with parameters: - in: path name: vendor_domain schema: type: string description: The vendor domain to query required: true - in: header name: mock-data schema: type: string default: 'False' enum: - 'False' - 'True' description: Returns test data if set to `True` tags: - Vendors responses: '200': content: application/json: schema: $ref: '#/components/schemas/VendorDetail' description: Details of the queried vendor '401': $ref: '#/components/responses/UnauthorizedError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '429': $ref: '#/components/responses/TooManyRequestsError' components: responses: ActionDoesNotExistError: description: Action does not exist CaseDoesNotExistError: description: Abnormal Case does not exist ForbiddenError: description: Access to the resource is forbidden (e.g. IP not in allowlist) InvalidDateError: description: A date provided is in the wrong format or the date range is wider than the allowed range for this endpoint NotFoundError: description: Invalid user input when using the filter query parameter. Will return various error messages ThreatDoesNotExistError: description: Threat does not exist TooManyRequestsError: description: Request count exceeds allowed number of concurrent requests for this resource type UnauthorizedError: description: Access token is missing or invalid schemas: AbnormalCase: type: object properties: caseId: type: string description: A unique identifier for this case. example: 1234 description: type: string severity_level: $ref: '#/components/schemas/SeverityLevel3eaEnum' description: Description of the severity level for this case. confidence: $ref: '#/components/schemas/ConfidenceEnum' description: The confidence level for this case. last_modified: type: string format: date-time first_observed: type: string format: date-time created: type: string format: date-time tenant: type: string nullable: true description: The short name of the tenant associated with this case. Not returned for Azure Sentinel integrations. example: my-tenant required: - caseId - confidence - created - description - first_observed - last_modified - severity_level AbnormalCaseDetails: type: object properties: caseId: type: string description: A unique identifier for this case. example: 1234 case_status: $ref: '#/components/schemas/CaseStatusEnum' severity: type: string description: Description of the severity level for this case. example: Potential Account Takeover affectedEmployee: type: string description: Which employee this case pertains to. example: FirstName LastName customerVisibleTime: type: string format: date-time firstObserved: type: string format: date-time description: First time suspicious behavior was observed. example: '2020-06-09T17:42:59Z' threatIds: type: array items: type: string description: Threats related to Case example: - 184712ab-6d8b-47b3-89d3-a314efef79e2 analysis: type: string remediation_status: $ref: '#/components/schemas/RemediationStatusEnum' severity_level: $ref: '#/components/schemas/AbnormalCaseDetailsSeverityLevelEnum' confidence: $ref: '#/components/schemas/ConfidenceEnum' description: The confidence level for this case. genai_summary: type: array items: type: string description: List of AI-generated summary points for the case tenant: type: string nullable: true description: The short name of the tenant associated with this case. Not returned for Azure Sentinel integrations. example: my-tenant required: - affectedEmployee - analysis - caseId - case_status - confidence - customerVisibleTime - firstObserved - genai_summary - remediation_status - severity - severity_level - threatIds AbnormalCaseDetailsSeverityLevelEnum: enum: - NONE - LOW - MEDIUM - HIGH type: string AbuseCampaign: type: object properties: campaignId: type: string description: An id which maps to an abuse campaign. example: fff51768-c446-34e1-97a8-9802c29c3ebd required: - campaignId AbuseCampaignDetails: type: object properties: campaignId: type: string description: An id which maps to an abuse campaign. example: fff51768-c446-34e1-97a8-9802c29c3ebd firstReported: type: string format: date-time description: Date abuse campaign was first reported. example: '2020-11-11T13:11:40-08:00' lastReported: type: string format: date-time description: Date abuse campaign was last reported. example: '2020-11-11T13:11:40-08:00' messageId: type: string description: A unique identifier for the first message in the abuse campaign. example: -1234567891011121314 subject: type: string description: Subject of the first email in the abuse campaign. example: 'Fwd: This is spam' fromName: type: string description: The display name of the sender. example: Support fromAddress: type: string description: The email address of the sender. example: support@secure-reply.org recipientName: type: string description: The display name of the recipient. example: Tom recipientAddress: type: string description: The email address of the recipient. example: example@example.com judgementStatus: type: string description: Judgement status of message. example: Malicious overallStatus: type: string description: Overall status of message. example: Could not find original message attackType: type: string description: The type of threat the message represents. This is only present for abuse campaigns judged Malicious or Spam example: 'Malicious: Phishing' required: - attackType - campaignId - firstReported - fromAddress - fromName - judgementStatus - lastReported - messageId - overallStatus - recipientAddress - recipientName - subject AbuseMailboxUnanalyzedMessage: type: object properties: subject: type: string description: Subject of the message example: Read me abx_message_id: type: integer reported_datetime: type: string format: date-time recipient: $ref: '#/components/schemas/User' reporter: $ref: '#/components/schemas/User' not_analyzed_reason: $ref: '#/components/schemas/NotAnalyzedReasonEnum' required: - abx_message_id - not_analyzed_reason - recipient - reported_datetime - reporter - subject AbuseMailboxUnanalyzedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/AbuseMailboxUnanalyzedMessage' description: A list of representations of messages that were reported to AI Security Mailbox (formerly known as Abuse Mailbox) but not analyzed. required: - results ActionEnum: enum: - search - remediation - csv_export title: ActionEnum type: string ActionReasonEnum: enum: - false_negative - unsolicited - other - groups_remediation - quarantine_release title: ActionReasonEnum type: string ActionStatus: type: object properties: status: $ref: '#/components/schemas/ActionStatusStatusEnum' description: type: string description: Description of the action example: The request was completed successfully tenantId: type: integer nullable: true description: The tenant ID associated with the threat example: 1234 tenantName: type: string nullable: true description: The short name of the tenant associated with the threat example: example-tenant required: - description - status - tenantId - tenantName ActionStatusEnum: enum: - pending - success - partial_success - error title: ActionStatusEnum type: string ActionStatusStatusEnum: enum: - acknowledged - in_progress - done - error type: string ActivitiesResponse: properties: activities: items: $ref: '#/components/schemas/ActivityLogEntry' title: Activities type: array total: title: Total type: integer pageNumber: title: Pagenumber type: integer pageSize: title: Pagesize type: integer metadata: $ref: '#/components/schemas/MetaData' required: - activities - total - pageNumber - pageSize - metadata title: ActivitiesResponse type: object ActivityLogEntry: properties: activity_id: title: Activity Id type: integer action: $ref: '#/components/schemas/ActionEnum' status: $ref: '#/components/schemas/ActionStatusEnum' performed_by: anyOf: - type: string - type: 'null' default: null title: Performed By timestamp: format: date-time title: Timestamp type: string result_count: anyOf: - type: integer - type: 'null' default: null title: Result Count parameters: anyOf: - additionalProperties: true type: object - type: 'null' default: null title: Parameters submit_d360_case: anyOf: - type: boolean - type: 'null' default: null title: Submit D360 Case required: - activity_id - action - status - timestamp title: ActivityLogEntry type: object ActivityStatusResponse: properties: activity_id: title: Activity Id type: integer action: anyOf: - $ref: '#/components/schemas/ActionEnum' - type: 'null' default: null status: anyOf: - $ref: '#/components/schemas/ActionStatusEnum' - type: 'null' default: null performed_by: anyOf: - type: string - type: 'null' default: null title: Performed By timestamp: anyOf: - format: date-time type: string - type: 'null' default: null title: Timestamp result_count: anyOf: - type: integer - type: 'null' default: null title: Result Count remediation_details: anyOf: - items: $ref: '#/components/schemas/RemediationDetail' type: array - type: 'null' default: null title: Remediation Details total: anyOf: - type: integer - type: 'null' default: null title: Total metadata: $ref: '#/components/schemas/MetaData' required: - activity_id - metadata title: ActivityStatusResponse type: object Actor: type: object properties: display_name: type: string description: Display name of the actor who performed the action example: ABNORMAL_SECURITY Attachment: properties: name: title: Name type: string md5_hash: title: Md5 Hash type: string required: - name - md5_hash title: Attachment type: object AttackFrequency: type: object properties: timeStamp: type: string format: date-time description: The date and time the attack was received. example: '2023-08-11T12:34:56Z' attackType: type: string description: The type of attack detected. example: Scam attackCount: type: integer description: The amount of attacks detected for the specified attack type. example: 200 required: - attackCount - attackType - timeStamp AttackFrequencyResponse: type: object properties: attack_frequency: type: array items: $ref: '#/components/schemas/AttackFrequency' description: List detailing the timestamp, the type of attack, and the count of that attack type for the given timestamp. required: - attack_frequency AttackStopped: type: object properties: attackTypeName: type: string description: The type or category of the attack (e.g., 'all' for all types of attacks). example: all attackCount: type: integer description: The number of attacks detected over a specified period of time. example: 2000 prevAttackCount: type: integer description: The number of attacks detected prior to the defined time range. example: 2001 required: - attackCount - attackTypeName - prevAttackCount AttackStoppedResponse: type: object properties: attack_stopped: type: array items: $ref: '#/components/schemas/AttackStopped' description: List detailing the type of attacks stopped, the current count of attacks stopped, and the previous count of attacks stopped. required: - attack_stopped AttackStrategyBreakdown: type: object properties: attackStrategy: type: string description: The specific strategy employed by the attacker. example: Name Impersonation attackStrategyDescription: type: string description: A brief explanation of the attack strategy. example: Uses sender name and/or email address to impersonate a party. attackCount: type: integer description: The number of occurrences of the attack associated with the given strategy in the specified time frame. example: 200 required: - attackCount - attackStrategy - attackStrategyDescription AttackStrategyBreakdownResponse: type: object properties: attack_strategy_breakdown: type: array items: $ref: '#/components/schemas/AttackStrategyBreakdown' description: List detailing the breakdown of attacks by strategy, along with the count for each strategy. required: - attack_strategy_breakdown AttackVectorBreakdown: type: object properties: attackVectorGroup: type: string description: The category or type of attack vectors used in cyber-attacks. example: attachment attackCount: type: integer description: The number of detected attacks associated with the specified attack vector. example: 200 required: - attackCount - attackVectorGroup AttackVectorBreakdownResponse: type: object properties: attack_vector_breakdown: type: array items: $ref: '#/components/schemas/AttackVectorBreakdown' description: List detailing the breakdown of attacks by vector, along with the count for each vector. required: - attack_vector_breakdown AttackerOrigin: type: object properties: regionName: type: string description: The geographical region name. example: Asia attackCount: type: integer description: The count of attacks originating from the specified region. example: 1000 countries: type: array items: $ref: '#/components/schemas/Country' required: - attackCount - countries - regionName AttackerOriginResponse: type: object properties: attacker_origin: type: array items: $ref: '#/components/schemas/AttackerOrigin' description: List detailing the region, countries in that region, and the count of attacks originating from each country and region. required: - attacker_origin AuditLog: type: object properties: action: type: string description: (Optional) The specific action performed during the event. This field is optional and may not be present. actionDetails: allOf: - $ref: '#/components/schemas/AuditLogActionDetails' description: (Optional) The details of the action performed. category: type: string description: The category of the performed action. sourceIp: type: string description: The IP address of the device that caused the event. status: type: string description: The result of the event. Returned as either SUCCESS or FAILURE. tenantName: type: string description: Name of the tenant the user has access to. timestamp: type: string description: Date/time when the event occurred in UTC. user: allOf: - $ref: '#/components/schemas/AuditLogUser' description: Information about the user who caused the event. Currently only includes the email address. required: - category - sourceIp - status - tenantName - timestamp - user AuditLogActionDetails: type: object properties: messageId: type: string description: ID of the message on which an action was performed. providedReason: type: string description: Reason provided for performing the action. requestUrl: type: string description: URL for the request. AuditLogResponse: type: object properties: auditLogs: type: array items: $ref: '#/components/schemas/AuditLog' pageNumber: type: integer description: Current page number of the results nextPageNumber: type: integer description: (Optional) Next page number to query for. Would not be returned if it was the last page required: - auditLogs - pageNumber AuditLogUser: type: object properties: email: type: string format: email description: Email address of the user. required: - email BadRequestError: type: object description: 400 Bad Request error response. properties: error: type: string default: Bad request description: The request was invalid or malformed BenchmarksEnum: enum: - CIS type: string CaseAnalysis: type: object properties: insights: type: array items: $ref: '#/components/schemas/CaseInsights' description: List of case insights eventTimeline: type: array items: $ref: '#/components/schemas/CaseEvent' readOnly: true description: Timeline of flagged events on the case required: - eventTimeline - insights CaseEvent: oneOf: - $ref: '#/components/schemas/RiskEvent' - $ref: '#/components/schemas/SignInEvent' - $ref: '#/components/schemas/MailRuleEvent' - $ref: '#/components/schemas/OutboundMessageEvent' - $ref: '#/components/schemas/MFAFailureEvent' - $ref: '#/components/schemas/MismatchedMFALocationEvent' CaseInsights: type: object properties: signal: type: string description: type: string required: - description - signal CaseStatusEnum: enum: - Action Required - Acknowledged (In progress) - Acknowledged (Attack resolved) - Acknowledged (Not an attack) type: string ClickedEventsPaginationMetadata: type: object description: Serializer for pagination metadata on the clicked events response. properties: nextOffset: type: string nullable: true description: Offset token for the next page if more results exist limit: type: integer nullable: true description: Limit of the results ClickedEventsResponse: type: object description: |- Serializer for clicked events response. Note: the "data" field is injected below via `_declared_fields` because a class attribute named `data` would shadow DRF's `Serializer.data` property (basedpyright also flags the conflict). properties: metadata: allOf: - $ref: '#/components/schemas/ClickedEventsResponseMetadata' description: Response metadata including pagination data: type: array items: $ref: '#/components/schemas/SoarClickedEvent' description: List of clicked events required: - data - metadata ClickedEventsResponseMetadata: type: object description: Serializer for response metadata containing pagination information. properties: pagination: allOf: - $ref: '#/components/schemas/ClickedEventsPaginationMetadata' description: Pagination information for the response requestId: type: string nullable: true description: Request ID for the API request required: - pagination ConfidenceEnum: enum: - LOW - MEDIUM - HIGH type: string Country: type: object properties: regionName: type: string description: The geographical region name for the country. (This will be repetitive within the region array.) example: Asia country: type: string description: The name of the country. example: India countryCode: type: string description: The country code. example: IN latitude: type: string description: Latitude of the country. example: 20.5937 longitude: type: string description: Longitude of the country. example: 78.9629 attackCount: type: integer description: The count of attacks originating from the specified country. example: 650 required: - attackCount - country - countryCode - latitude - longitude - regionName CreateResource: type: object description: Serializer for creating a new resource. properties: name: type: string description: Name of the resource maxLength: 255 minLength: 1 description: type: string nullable: true description: Optional description of the resource maxLength: 1000 required: - name CreateResourceResponse: type: object description: Serializer for create resource response. properties: resourceId: type: string description: ID of the newly created resource status: type: string description: Status of the creation operation required: - resourceId - status CustomerOverride: type: object description: |- Serializes customer override attribution for a message. Present when blocklist or Custom AI Model attribution is enabled. properties: overrideType: type: string description: The type of customer override applied. example: Customer Blocklist reason: type: string description: The match type that triggered the blocklist override. example: Sender Email overrideJudgement: type: string nullable: true description: The message judgement applied by the override. example: malicious value: type: string nullable: true description: The matched blocklist entry value. example: support@secure-reply.org required: - overrideType - reason DashboardSummary: type: object properties: attackStopped: type: array items: $ref: '#/components/schemas/AttackStopped' description: List detailing the attacks stopped. attackFrequency: type: array items: $ref: '#/components/schemas/AttackFrequency' description: List detailing the attack frequency. attackerOrigin: type: array items: $ref: '#/components/schemas/AttackerOrigin' description: List detailing the origin of the attacker. mostImpersonatedEmployee: type: array items: $ref: '#/components/schemas/MostImpersonatedEmployee' description: List detailing the most impersonated employees. mostImpersonatedEmployeeVIP: type: array items: $ref: '#/components/schemas/MostImpersonatedEmployeeVIP' description: List detailing the most impersonated VIP employees. mostImpersonatedEmployeeNonVIP: type: array items: $ref: '#/components/schemas/MostImpersonatedEmployeeNonVIP' description: List detailing the most impersonated non-VIP employees. trendingAttacks: type: array items: $ref: '#/components/schemas/TrendingAttacks' description: List detailing the trending attacks. attackVectorBreakdown: type: array items: $ref: '#/components/schemas/AttackVectorBreakdown' description: List detailing the attack vectors. attackStrategyBreakdown: type: array items: $ref: '#/components/schemas/AttackStrategyBreakdown' description: List detailing the attack strategies. senderImpersonationBreakdown: type: array items: $ref: '#/components/schemas/SenderImpersonationBreakdown' description: List detailing the impersonated sender breakdown. mostImpersonatedVendor: type: array items: $ref: '#/components/schemas/MostImpersonatedVendor' description: List detailing the most impersonated vendors. recipientEmployees: type: array items: $ref: '#/components/schemas/RecipientEmployee' description: List detailing the recipient employees targeted in attacks. recipientEmployeesVIP: type: array items: $ref: '#/components/schemas/RecipientEmployeeVIP' description: List detailing the VIP recipient employees targeted in attacks. recipientEmployeesNonVIP: type: array items: $ref: '#/components/schemas/RecipientEmployeeNonVIP' description: List detailing the non-VIP recipient employees targeted in attacks. required: - attackFrequency - attackStopped - attackStrategyBreakdown - attackVectorBreakdown - attackerOrigin - mostImpersonatedEmployee - mostImpersonatedEmployeeNonVIP - mostImpersonatedEmployeeVIP - mostImpersonatedVendor - recipientEmployees - recipientEmployeesNonVIP - recipientEmployeesVIP - senderImpersonationBreakdown - trendingAttacks DateRange: type: object properties: from_date: type: string format: date-time description: Start date for the range filter example: '2025-01-01T00:00:00Z' to_date: type: string format: date-time description: End date for the range filter example: '2025-12-31T23:59:59Z' DecisionCategoryEnum: enum: - malicious - spam - safe - graymail title: DecisionCategoryEnum type: string Detection360Case: type: object properties: id: type: integer inquiry_type: $ref: '#/components/schemas/InquiryTypeEnum' messages: type: array items: type: integer report: $ref: '#/components/schemas/Detection360Report' status: $ref: '#/components/schemas/Detection360CaseStatusEnum' submission_datetime: type: string format: date-time submitted_by: $ref: '#/components/schemas/User' required: - id - inquiry_type - messages - status - submission_datetime - submitted_by Detection360CaseStatusEnum: enum: - UNREVIEWED - CONTAINING_ATTACK - IMPROVING_PLATFORM - RESOLVED - CORRECTING_JUDGEMENT type: string Detection360Report: type: object properties: analysis: type: string root_causes: type: array items: $ref: '#/components/schemas/PortalVisibleRootCause' required: - analysis - root_causes Detection360ReportRequest: oneOf: - $ref: '#/components/schemas/FalsePositive' - $ref: '#/components/schemas/FalseNegative' - $ref: '#/components/schemas/MissedAttack' - $ref: '#/components/schemas/MissedSpam' - $ref: '#/components/schemas/MissedGraymail' discriminator: propertyName: report_type mapping: null: '#/components/schemas/MissedGraymail' DisplayId: type: object properties: display_name: type: string description: Human-readable display name example: HIGH id: type: string description: Internal identifier for the item example: high EmailSourceEnum: enum: - abnormal - quarantine title: EmailSourceEnum type: string EmployeeDetails: type: object properties: name: type: string description: Name of the employee. example: Tom email: type: string description: Email of the employee. example: example@example.com title: type: string description: Job title of the employee. example: General Manager manager: type: string description: Email address of the employee's manager example: manager_email@example.com required: - email - manager - name - title EmployeeGenomeCategory: type: object properties: value: type: string description: Category value example: 203.12.172.182 percentage: type: number format: double description: Ratio of this category relative to others example: 0.9 total_count: type: integer description: Number of occurences for this category example: 9 required: - percentage - total_count - value EmployeeGenomeDetails: type: object properties: key: type: string description: Genome key name example: ip_address name: type: string description: Genome title example: Common IP Addresses description: type: string description: Description of genome object example: Common IP Addresses for user logins values: type: array items: $ref: '#/components/schemas/EmployeeGenomeCategory' required: - description - key - name - values EmployeeIdentityDetails: type: object properties: data: type: array items: $ref: '#/components/schemas/EmployeeGenomeDetails' required: - data Error: type: object description: Serializer for bad request error response. properties: error: type: string description: Error message required: - error EventLocation: type: object properties: city: type: string description: The city where the event occurred. example: Aldie state: type: string description: The state where the event occurred. example: Virginia country: type: string description: The country where the event occurred. example: US required: - city - country - state FalseNegative: type: object properties: report_type: $ref: '#/components/schemas/FalseNegativeReportTypeEnum' description: Type of report recipient_email: type: string description: Email address of the recipient example: alice@aloha.com sender_email: type: string description: Email address of the sender example: alice@aloha.com subject: type: string description: Subject of the email example: hello! received_date: type: string description: Date the email was received in YYYY-MM-DD format. example: 2020/02/01 description: type: string description: Free text to provide more context on the issue. example: Alice reported this email looked like an attack. required: - recipient_email - report_type - sender_email - subject FalseNegativeReportTypeEnum: enum: - false-negative type: string FalsePositive: type: object properties: report_type: $ref: '#/components/schemas/FalsePositiveReportTypeEnum' description: Type of report portal_link: type: string description: Link in Portal of the False Positive Threat example: https://portal.abnormalsecurity.com/home/threat-center/remediation-history/1234567890 received_date: type: string description: Date the email was received in YYYY-MM-DD format. example: 2020/02/01 description: type: string description: Free text to provide more context on the issue. example: Alice reported this email was missing from their inbox. required: - portal_link - report_type FalsePositiveReportTypeEnum: enum: - false-positive type: string GetResourceResponse: type: object description: Serializer for get resource response. properties: resource: allOf: - $ref: '#/components/schemas/Resource' description: The requested resource required: - resource InquiryTypeEnum: enum: - MISSED_ATTACK - FALSE_POSITIVE type: string JudgementEnum: enum: - attack - borderline - spam - graymail - safe title: JudgementEnum type: string JudgementSourceEnum: enum: - ABNORMAL_SYSTEM - CUSTOMER_AI_MODEL title: JudgementSourceEnum type: string ListResourcesResponse: type: object description: Serializer for list resources response. properties: resources: type: array items: $ref: '#/components/schemas/Resource' description: List of resources total: type: integer description: Total number of resources matching the query pageNumber: type: integer description: Current page number nextPageNumber: type: integer nullable: true description: Next page number if more pages exist required: - pageNumber - resources - total MFAFailureEvent: type: object properties: event_timestamp: type: string format: date-time description: Time when event occurred example: '2020-05-19T17:47:30Z' category: type: string description: Type of event example: Failed MFA Attempt title: type: string description: Title of the event example: Failed MFA Attempt field_labels: type: object additionalProperties: {} description: Anomaly labels/tags associated with fields in the event ip_address: type: string description: IP Address where user attempted Multi Factor Authentication example: 123.456.78.900 browser: type: string description: Browser that was used when attempting to sign in to mailbox example: Chrome operating_system: type: string description: Operating system of the device used to attempt sign in example: Windows 10 protocol: type: string description: Connection protocol used when attempting to sign in example: Browser application: type: string description: Mail application used to sign in example: GSuite location: allOf: - $ref: '#/components/schemas/EventLocation' description: Location of a sign in as detected from case analysis required: - application - browser - category - event_timestamp - field_labels - ip_address - location - operating_system - protocol - title MailRuleEvent: type: object properties: event_timestamp: type: string format: date-time description: Time when event occurred example: '2020-05-19T17:47:30Z' category: type: string description: Type of event example: Mail Rule title: type: string description: Title of the event example: Mail Rule Change rule_name: type: string description: Name of the mail rule that was changed example: Delete all messages rule condition: type: string description: Condition of the mail rule example: hasNoCondition flagging_detectors: type: string description: Flagging detectors of the mail rule example: DELETE_ALL required: - category - condition - event_timestamp - flagging_detectors - rule_name - title MessageToRemediate: properties: tenant_id: description: Tenant ID title: Tenant Id type: integer raw_message_id: description: Raw message ID title: Raw Message Id type: string abnormal_message_id: anyOf: - type: string - type: 'null' default: null title: Abnormal Message Id abnormal_message_uuid: anyOf: - type: string - type: 'null' default: null title: Abnormal Message Uuid mailbox_name: description: Mailbox name title: Mailbox Name type: string native_user_id: description: Native user ID title: Native User Id type: string subject: description: Subject title: Subject type: string sender: description: Sender title: Sender type: string received_time: description: Received time format: date-time title: Received Time type: string required: - tenant_id - raw_message_id - mailbox_name - native_user_id - subject - sender - received_time title: MessageToRemediate type: object MetaData: properties: trace_id: title: Trace Id type: string response_time: title: Response Time type: string required: - trace_id - response_time title: MetaData type: object MismatchedMFALocationEvent: type: object properties: event_timestamp: type: string format: date-time description: Time when event occurred example: '2020-05-19T17:47:30Z' category: type: string description: Type of event example: Authentication Events title: type: string description: Title of the event example: Different Authentication Factor Locations field_labels: type: object additionalProperties: {} description: Anomaly labels/tags associated with fields in the event description: type: string description: Mismatch between session location and second factor authentication location example: Mismatch between session location and second factor authentication location session_ip: type: string description: IP Address where the user signed in example: 123.456.78.900 / Indianapolis, IN, US second_factor_ip: type: string description: IP Address where the user attempted to use Multi Factor Authentication example: 123.456.78.900 / Indianapolis, IN, US used_second_factors: type: string description: Type of 2FA technology used to make the authentication example: MOBILE_APP_NOTIFICATION familiarity_statistics: type: object additionalProperties: {} description: Familiarity analysis of the other fields in this event location: allOf: - $ref: '#/components/schemas/EventLocation' description: Location of a sign in as detected from case analysis required: - category - description - event_timestamp - familiarity_statistics - field_labels - location - second_factor_ip - session_ip - title - used_second_factors MissedAttack: type: object properties: report_type: $ref: '#/components/schemas/MissedAttackReportTypeEnum' description: Type of report recipient_email: type: string description: Email address of the sender example: alice@aloha.com sender_email: type: string description: Email address of the sender example: alice@aloha.com subject: type: string description: Subject of the email example: hello! received_date: type: string description: Date the email was received in YYYY-MM-DD format. description: type: string description: Free text to provide more context on the issue. example: Alice reported this email looked like an attack. required: - recipient_email - report_type - sender_email - subject MissedAttackReportTypeEnum: enum: - missed-attack type: string MissedGraymail: type: object properties: report_type: $ref: '#/components/schemas/MissedGraymailReportTypeEnum' description: Type of report recipient_email: type: string sender_email: type: string subject: type: string received_date: type: string description: Date the email was received in YYYY-MM-DD format. description: type: string description: Free text to provide more context on the issue. example: Alice does not want to see this email in her inbox. required: - recipient_email - report_type - sender_email - subject MissedGraymailReportTypeEnum: enum: - missed-graymail type: string MissedSpam: type: object properties: report_type: $ref: '#/components/schemas/MissedSpamReportTypeEnum' description: Type of report recipient_email: type: string sender_email: type: string subject: type: string received_date: type: string description: Date the email was received in YYYY-MM-DD format. description: type: string description: Free text to provide more context on the issue. example: Alice reported this email looked like spam. required: - recipient_email - report_type - sender_email - subject MissedSpamReportTypeEnum: enum: - missed-spam type: string MostImpersonatedEmployee: type: object properties: impersonatedEmployeeName: type: string description: Name of the employee impersonated in attacks. example: John Doe attackCount: type: integer description: Number of detected attacks with the impersonated employee in the defined time range. example: 20 prevAttackCount: type: integer description: Number of detected impersonated attacks prior to the defined time range. example: 20 required: - attackCount - impersonatedEmployeeName - prevAttackCount MostImpersonatedEmployeeNonVIP: type: object properties: impersonatedEmployeeName: type: string description: The name of the non-VIP employee impersonated in attacks. example: John Doe attackCount: type: integer description: Number of detected attacks with the impersonated non-VIP employee in the defined time range. example: 20 prevAttackCount: type: integer description: Number of detected impersonated attacks prior to the defined time range. example: 20 required: - attackCount - impersonatedEmployeeName - prevAttackCount MostImpersonatedEmployeeNonVIPResponse: type: object properties: most_impersonated_employee_non_vip: type: array items: $ref: '#/components/schemas/MostImpersonatedEmployeeNonVIP' description: List detailing the names of the most impersonated non-VIP employees, along with the current and previous attack count for each. required: - most_impersonated_employee_non_vip MostImpersonatedEmployeeResponse: type: object properties: most_impersonated_employee: type: array items: $ref: '#/components/schemas/MostImpersonatedEmployee' description: List detailing the names of the most impersonated employees, along with the current and previous attack count for each. required: - most_impersonated_employee MostImpersonatedEmployeeVIP: type: object properties: impersonatedEmployeeName: type: string description: The name of the VIP employee impersonated in attacks. example: John Doe attackCount: type: integer description: Number of detected attacks with the impersonated VIP employee in the defined time range. example: 20 prevAttackCount: type: integer description: Number of detected impersonated attacks prior to the defined time range. example: 20 required: - attackCount - impersonatedEmployeeName - prevAttackCount MostImpersonatedEmployeeVIPResponse: type: object properties: most_impersonated_employee_vip: type: array items: $ref: '#/components/schemas/MostImpersonatedEmployeeVIP' description: List detailing the names of the most impersonated VIP employees, along with the current and previous attack count for each. required: - most_impersonated_employee_vip MostImpersonatedVendor: type: object properties: impersonatedBrandName: type: string description: The name of the vendor impersonated in attacks. example: Apple attackCount: type: integer description: The amount of attacks detected with the respective vendor impersonation. example: 20 prevAttackCount: type: integer description: The amount of vendor impersonated attacks detected prior to the defined time range. example: 20 required: - attackCount - impersonatedBrandName - prevAttackCount MostImpersonatedVendorResponse: type: object properties: most_impersonated_vendor: type: array items: $ref: '#/components/schemas/MostImpersonatedVendor' description: List detailing the most impersonated vendors, along with their attack counts for the current and previous periods. required: - most_impersonated_vendor NotAnalyzedReasonEnum: enum: - PHISHING_SIMULATION - EXCLUDED_SENDER - CUSTOM_FILTER - INVALID_MAILBOX - ORIGINAL_EMAIL_NOT_LOCATED - UNKNOWN_REPORTER - INVALID_SUBMISSION - ROUTED_SUBMISSION - COULD_NOT_EXTRACT - FROM_PHISHING_MAILBOX - NOT_ANALYZED_POV_QUOTA_REACHED - AI_CONVERSATION type: string NotFoundError: type: object description: 404 Not Found error response. properties: error: type: string default: Resource not found description: Resource with the specified ID was not found OutboundMessageEvent: type: object properties: event_timestamp: type: string format: date-time description: Time when event occurred example: '2020-05-19T17:47:30Z' category: type: string description: Type of event example: Mail Sent title: type: string description: Title of the event example: Unusual Correspondence subject: type: string description: Subject of suspicious email sent example: Transaction Sent sender: type: string description: Email of the Sender example: john.doe@lamronba.com recipient: type: string description: Name of the recipient example: Jane Eyre required: - category - event_timestamp - recipient - sender - subject - title PaginatedAbuseCampaings: type: object properties: campaigns: type: array items: $ref: '#/components/schemas/AbuseCampaign' description: List of abuse campaign IDs. pageNumber: type: integer default: 1 description: The current page number. Will not be be in the response if no filter query parameter is passed in via the request. nextPageNumber: type: integer default: 2 description: The next page number. Wil not be included in the response if there are no more pages of data or if no filter query parameter is passed in via the request required: - campaigns PaginatedCases: type: object properties: cases: type: array items: $ref: '#/components/schemas/AbnormalCase' description: List of Abnormal Cases. pageNumber: type: integer default: 1 description: The current page number. Will not be be in the response if no filter query parameter is passed in via the request. nextPageNumber: type: integer default: 2 description: The next page number. Wil not be included in the response if there are no more pages of data or if no filter query parameter is passed in via the request required: - cases PaginatedThreats: type: object properties: threats: type: array items: $ref: '#/components/schemas/Threat' description: List of threat IDs. pageNumber: type: integer default: 1 description: The current page number. Will not be be in the response if no filter query parameter is passed in via the request. nextPageNumber: type: integer default: 2 description: The next page number. Wil not be included in the response if there are no more pages of data or if no filter query parameter is passed in via the request required: - threats PaginatedVendorCases: type: object properties: vendorCases: type: array items: $ref: '#/components/schemas/VendorCases' description: List of vendor cases. pageNumber: type: integer default: 1 description: The current page number. Will not be be in the response if no filter query parameter is passed in via the request. nextPageNumber: type: integer default: 2 description: The next page number. Wil not be included in the response if there are no more pages of data or if no filter query parameter is passed in via the request required: - vendorCases PaginatedVendors: type: object properties: vendors: type: array items: $ref: '#/components/schemas/Vendors' description: List of vendors. pageNumber: type: integer default: 1 description: The current page number. Will not be be in the response if no filter query parameter is passed in via the request. nextPageNumber: type: integer default: 2 description: The next page number. Wil not be included in the response if there are no more pages of data or if no filter query parameter is passed in via the request required: - vendors PaginationMetadata: type: object description: Serializer for pagination metadata. properties: page: type: integer description: Current page number example: 1 pageSize: type: integer description: Number of items per page example: 10 totalResults: type: integer description: Total number of items available example: 42 totalPages: type: integer description: Total number of pages example: 5 required: - page - pageSize - totalPages - totalResults PaginationSwagger: type: object description: Swagger serializer for pagination metadata. properties: total: type: integer description: Total number of tokens matching criteria limit: type: integer description: Maximum tokens returned in this response offset: type: integer description: Number of tokens skipped required: - limit - offset - total PatchedUpdateResource: type: object description: Serializer for updating an existing resource. properties: description: type: string description: Updated description (can be empty string to clear) maxLength: 1000 PerformAction: type: object description: Serializer for performing an action on a resource. properties: action: $ref: '#/components/schemas/PerformActionActionEnum' description: 'Action to perform: refresh or validate' required: - action PerformActionActionEnum: enum: - refresh - validate type: string PerformActionResponse: type: object description: Serializer for perform action response. properties: actionId: type: string description: Unique ID for the action request resourceId: type: string description: ID of the resource the action was performed on status: type: string description: Status of the action required: - actionId - resourceId - status PolicySwagger: type: object description: Swagger serializer for policy object within a role. properties: resource: type: string description: The resource name (e.g., 'threats', 'cases') permissions: type: array items: type: string description: List of permissions granted on this resource required: - permissions - resource PortalVisibleRootCause: type: object properties: name: type: string description: type: string required: - description - name PostCaseRequest: type: object properties: action: $ref: '#/components/schemas/PostCaseRequestActionEnum' required: - action PostCaseRequestActionEnum: enum: - action_required - acknowledge_resolved - acknowledge_in_progress - acknowledge_not_an_attack type: string PostCaseResponse: type: object properties: actionId: type: string description: A unique identifier for this case. example: 61e76395-40d3-4d78-b6a8-8b17634d0f5b statusUrl: type: string description: The URL of the status of the case. example: https://api.abnormalplatform.com/v1/cases/1234/actions/61e76395-40d3-4d78-b6a8-8b17634d0f5b required: - actionId - statusUrl PostThreatRequest: type: object properties: action: $ref: '#/components/schemas/PostThreatRequestActionEnum' required: - action PostThreatRequestActionEnum: enum: - remediate - unremediate type: string PostThreatResponse: type: object properties: action_id: type: string description: The UUID representing the action id for a threat. example: a33a212a-89ff-461f-be34-ea52aff44a67 status_url: type: string description: The URL for status of specific threat. example: https://api.abnormalplatform.com/v1/threats/184712ab-6d8b-47b3-89d3-a314efef79e2/actions/a33a212a-89ff-461f-be34-ea52aff44a73 tenantId: type: integer nullable: true description: The tenant ID associated with the threat example: 1234 tenantName: type: string nullable: true description: The short name of the tenant associated with the threat example: example-tenant required: - action_id - status_url - tenantId - tenantName PostureArea: type: object properties: title: type: string description: Title of the posture area example: Admin Center Highlights description: type: string description: Description of the posture area with security grade information example:

Abnormal rates the security grade of Admin Center as "B-" because less than 25% of postures in this area are resolved...

highlights: type: array items: $ref: '#/components/schemas/PostureHighlight' description: List of highlighted security postures in this area PostureCatalogResponse: type: object description: Paginated response serializer for posture catalog. properties: metadata: allOf: - $ref: '#/components/schemas/ResponseMetadata' description: Response metadata including pagination information data: type: array items: $ref: '#/components/schemas/PostureItem' description: List of available postures in the catalog PostureDetail: type: object properties: last_updated_time: type: string format: date-time description: Timestamp when the posture was last updated example: '2025-04-29T15:51:41.560354Z' posture_name: type: string description: Name of the security posture example: Ensure Microsoft Authenticator is configured to protect against MFA fatigue status: type: string description: Current compliance status of the posture example: NON_COMPLIANT workflow_status: type: string description: Current workflow status for remediation example: UNTRIAGED actor: allOf: - $ref: '#/components/schemas/Actor' description: Actor who last modified the posture posture_type: type: string description: Type of posture evaluation (AUTO or MANUAL) example: AUTO description: type: string description: Detailed description of the security posture requirement example: '**Microsoft Authenticator** should be configured to prevent MFA fatigue attacks...' risk_level: type: string description: Risk level associated with this posture example: HIGH PostureHighlight: type: object properties: title: type: string description: Title of the highlighted security posture example: Ensure Administrative accounts are separate and cloud-only description: type: string description: Description of the security posture highlight example:

Administrative accounts are separate and cloud-only ensures proper separation of privileged accounts from regular user accounts.

posture_id: type: integer description: Unique identifier for the posture example: 292 risk_level: type: string description: Risk level of the highlighted posture example: HIGH PostureItem: type: object description: Serializer for individual posture items in the catalog. properties: id: type: string description: Unique identifier for the posture example: ensure-microsoft-authenticator-configured space_type: type: string description: Type of space this posture applies to example: TENANT platform_type: type: string description: Platform type for this posture example: M365 posture_area: type: string description: Area or category of the posture example: ENTRA benchmarks: type: array items: type: string description: List of security benchmarks this posture belongs to example: - CIS name: type: string description: Name of the security posture example: Ensure Microsoft Authenticator is configured to protect against MFA fatigue category: type: string description: Category classification of the posture example: AUTHENTICATION risk_level: type: string description: Risk level associated with this posture example: HIGH description: type: string description: Detailed description of the security posture requirement example: Microsoft Authenticator should be configured to prevent MFA fatigue attacks by requiring number matching... insight: type: string description: Additional insights about the posture example: This configuration helps prevent attackers from bypassing MFA through fatigue attacks remediation_steps: type: string description: Steps to remediate this posture example: 1. Navigate to Azure AD admin center 2. Go to Security > Authentication methods... created_at: type: string format: date-time description: Timestamp when the posture was created example: '2025-01-15T10:30:00Z' updated_at: type: string format: date-time description: Timestamp when the posture was last updated example: '2025-04-29T15:51:41.560354Z' PostureListItem: type: object properties: posture_id: type: integer description: Unique identifier for the posture example: 421 posture_name: type: string description: Name of the security posture example: Ensure that collaboration invitations are sent to allowed domains only status: type: string description: Current compliance status example: PENDING_EVALUATION workflow_status: type: string description: Current workflow status example: UNTRIAGED risk_level: allOf: - $ref: '#/components/schemas/DisplayId' description: Risk level of the posture last_updated_time: type: string format: date-time description: Timestamp when the posture was last updated example: '2025-04-24T07:50:04.086534Z' last_evaluated_at: type: string format: date-time description: Timestamp when the posture was last evaluated example: '2025-04-24T07:50:04.087191Z' posture_type: type: string description: Type of posture evaluation example: MANUAL benchmarks: type: array items: $ref: '#/components/schemas/DisplayId' description: List of security benchmarks this posture belongs to tags: type: array items: $ref: '#/components/schemas/DisplayId' description: List of tags associated with the posture PostureListParams: type: object properties: risk_levels: type: array items: $ref: '#/components/schemas/RiskLevelsEnum' description: Filter by risk levels example: - HIGH - MED statuses: type: array items: $ref: '#/components/schemas/StatusesEnum' description: Filter by compliance statuses example: - PENDING_EVALUATION - NON_COMPLIANT benchmarks: type: array items: $ref: '#/components/schemas/BenchmarksEnum' description: Filter by security benchmarks example: - CIS last_evaluated_at: allOf: - $ref: '#/components/schemas/DateRange' description: Filter by last evaluation date range posture_area: type: array items: type: string description: Filter by posture areas example: - ADMIN_CENTER - ENTRA platform_type: type: array items: type: string description: Filter by platform types example: - M365 posture_types: type: array items: type: string description: Filter by posture types example: - MANUAL - AUTO PostureListResponse: type: object description: Paginated response serializer for posture list. properties: metadata: allOf: - $ref: '#/components/schemas/ResponseMetadata' description: Response metadata including pagination information postures: type: array items: $ref: '#/components/schemas/PostureListItem' description: List of postures PostureStats: type: object properties: total_postures_count: type: integer description: Total number of postures in this area example: 13 success_postures_count: type: integer description: Number of postures that are compliant example: 0 fail_postures_count: type: integer description: Number of postures that are non-compliant example: 13 PostureTimelineResponse: type: object description: Paginated response serializer for posture timeline events. properties: metadata: allOf: - $ref: '#/components/schemas/ResponseMetadata' description: Response metadata including pagination information events: type: array items: $ref: '#/components/schemas/TimelineEntry' description: List of timeline events for the posture QuarantineInfo: properties: identity: anyOf: - type: string - type: 'null' default: null title: Identity message_id: anyOf: - type: string - type: 'null' default: null title: Message Id policy_type: anyOf: - type: string - type: 'null' default: null title: Policy Type quarantine_reason: anyOf: - type: string - type: 'null' default: null title: Quarantine Reason release_status: anyOf: - type: string - type: 'null' default: null title: Release Status type: anyOf: - type: string - type: 'null' default: null title: Type processed_at: anyOf: - format: date-time type: string - type: 'null' default: null title: Processed At title: QuarantineInfo type: object RecipientEmployee: type: object properties: job_title: type: string description: The job title of the employee who was the target of the attack. example: Software Engineer display_name: type: string description: The display name of the employee who was the target of the attack. example: Jane Doe attack_count: type: integer description: The number of occurrences of the attack targeting the given employee in the specified time frame. example: 15 prev_attack_count: type: integer description: The number of occurrences of the attack targeting the given employee in the previous period. example: 10 required: - attack_count - display_name - job_title - prev_attack_count RecipientEmployeeNonVIP: type: object properties: job_title: type: string description: The job title of the non-VIP employee who was the target of the attack. example: Software Engineer display_name: type: string description: The display name of the non-VIP employee who was the target of the attack. example: Jane Doe attack_count: type: integer description: The number of occurrences of the attack targeting the given non-VIP employee in the specified time frame. example: 15 prev_attack_count: type: integer description: The number of occurrences of the attack targeting the given non-VIP employee in the previous period. example: 10 required: - attack_count - display_name - job_title - prev_attack_count RecipientEmployeeNonVIPResponse: type: object properties: recipient_employees_non_vip: type: array items: $ref: '#/components/schemas/RecipientEmployeeNonVIP' description: List detailing the recipient non-VIP employees, their job titles, and the attack counts against them for the current and previous periods. required: - recipient_employees_non_vip RecipientEmployeeResponse: type: object properties: recipient_employees: type: array items: $ref: '#/components/schemas/RecipientEmployee' description: List detailing the recipient employees, their job titles, and the attack counts against them for the current and previous periods. required: - recipient_employees RecipientEmployeeVIP: type: object properties: job_title: type: string description: The job title of the VIP employee who was the target of the attack. example: Software Engineer display_name: type: string description: The display name of the VIP employee who was the target of the attack. example: Jane Doe attack_count: type: integer description: The number of occurrences of the attack targeting the given VIP employee in the specified time frame. example: 15 prev_attack_count: type: integer description: The number of occurrences of the attack targeting the given VIP employee in the previous period. example: 10 required: - attack_count - display_name - job_title - prev_attack_count RecipientEmployeeVIPResponse: type: object properties: recipient_employees_vip: type: array items: $ref: '#/components/schemas/RecipientEmployeeVIP' description: List detailing the recipient VIP employees, their job titles, and the attack counts against them for the current and previous periods. required: - recipient_employees_vip RemediationActionEnum: enum: - delete - move_to_inbox title: RemediationActionEnum type: string RemediationDetail: properties: tenant_id: title: Tenant Id type: integer raw_message_id: title: Raw Message Id type: string subject: anyOf: - type: string - type: 'null' default: null title: Subject sender: anyOf: - type: string - type: 'null' default: null title: Sender mailbox_name: anyOf: - type: string - type: 'null' default: null title: Mailbox Name current_folder_name: anyOf: - type: string - type: 'null' default: null title: Current Folder Name native_user_id: anyOf: - type: string - type: 'null' default: null title: Native User Id date_created: anyOf: - format: date-time type: string - type: 'null' default: null title: Date Created date_remediated: anyOf: - format: date-time type: string - type: 'null' default: null title: Date Remediated status: $ref: '#/components/schemas/ActionStatusEnum' status_details: anyOf: - type: string - type: 'null' default: null title: Status Details received_time: anyOf: - format: date-time type: string - type: 'null' default: null title: Received Time required: - tenant_id - raw_message_id - status title: RemediationDetail type: object RemediationHistory: type: object properties: remediation_history: type: object additionalProperties: type: string format: date-time description: Remediation history of a threat. example: '"Auto-Remediated": "2023-04-11T20:54:56.244716+00:00"' folder_locations: type: array items: type: string description: Folder locations. example: - Junk required: - folder_locations - remediation_history RemediationRequest: properties: action: $ref: '#/components/schemas/RemediationActionEnum' description: Remediation action source: $ref: '#/components/schemas/EmailSourceEnum' description: Source of the messages remediation_reason: $ref: '#/components/schemas/ActionReasonEnum' description: Reason for remediation target_folder: anyOf: - type: string - type: 'null' default: null description: Target folder for move actions title: Target Folder submit_d360_case: anyOf: - type: boolean - type: 'null' default: false title: Submit D360 Case messages: anyOf: - items: $ref: '#/components/schemas/MessageToRemediate' type: array - type: 'null' default: null title: Messages remediate_all: anyOf: - type: boolean - type: 'null' default: false title: Remediate All search_filters: anyOf: - $ref: '#/components/schemas/SearchFilters' - type: 'null' default: null tenant_ids: anyOf: - items: type: integer minItems: 1 type: array - type: 'null' default: null description: Optional list of tenant IDs to filter remediation. If not provided, all authorized tenants are included. title: Tenant Ids required: - action - source - remediation_reason title: RemediationRequest type: object RemediationResponse: properties: activity_log_id: title: Activity Log Id type: integer metadata: $ref: '#/components/schemas/MetaData' required: - activity_log_id - metadata title: RemediationResponse type: object RemediationStatusEnum: enum: - Not remediated - remediated - Remediation attempted type: string Resource: type: object description: Serializer for resource representation in responses. properties: resourceId: type: string description: Unique identifier for the resource name: type: string description: Human-readable name of the resource description: type: string nullable: true description: Optional description of the resource tags: type: array items: type: string description: List of tags required: - name - resourceId ResourcePermissionSwagger: type: object description: Swagger serializer for resource permissions. properties: resource: type: string description: Name of the resource (e.g., 'ato', 'threat_log') permissions: type: array items: type: string description: List of permissions for this resource (e.g., 'view', 'write', 'manage') required: - permissions - resource ResponseMetadata: type: object description: Serializer for response metadata containing pagination information. properties: pagination: allOf: - $ref: '#/components/schemas/PaginationMetadata' description: Pagination information for the response required: - pagination RiskEvent: type: object properties: event_timestamp: type: string format: date-time description: Time when event occurred example: '2020-05-19T17:47:30Z' category: type: string description: Type of event example: Risk Event title: type: string description: Title of the event example: Impossible Travel field_labels: type: object additionalProperties: {} description: Anomaly labels/tags associated with fields in the event ip_address: type: string description: IP Address where user accessed mail from example: 123.456.78.900 location: allOf: - $ref: '#/components/schemas/EventLocation' description: Location of a sign in as detected from case analysis prev_location: allOf: - $ref: '#/components/schemas/EventLocation' description: Location of a sign in as detected from case analysis required: - category - event_timestamp - field_labels - ip_address - location - prev_location - title RiskLevelsEnum: enum: - LOW - MED - HIGH type: string RoleListResponse: type: object description: Swagger serializer for role list response. properties: status: type: string default: success description: Status of the response status_code: type: integer default: 200 description: HTTP status code data: type: array items: $ref: '#/components/schemas/RoleSwagger' description: List of global roles from RBAC system required: - data RoleSwagger: type: object description: Swagger serializer for role object. properties: id: type: integer description: The unique identifier for the role name: type: string description: Name of the role description: type: string default: '' description: Description of the role policies: type: array items: $ref: '#/components/schemas/PolicySwagger' description: Simplified view of permissions granted by this role required: - id - name - policies SPMReport: type: object properties: sections: type: array items: $ref: '#/components/schemas/Section' description: List of security posture sections organized by platform area SearchFilters: properties: start_time: description: Start time in ISO 8601 format format: date-time title: Start Time type: string end_time: description: End time in ISO 8601 format format: date-time title: End Time type: string subject: anyOf: - type: string - type: 'null' default: null title: Subject sender_email: anyOf: - type: string - type: 'null' default: null title: Sender Email sender_name: anyOf: - type: string - type: 'null' default: null title: Sender Name recipient_email: anyOf: - type: string - type: 'null' default: null title: Recipient Email recipient_name: anyOf: - type: string - type: 'null' default: null title: Recipient Name attachment_name: anyOf: - type: string - type: 'null' default: null title: Attachment Name attachment_md5_hash: anyOf: - type: string - type: 'null' default: null title: Attachment Md5 Hash internet_message_id: anyOf: - type: string - type: 'null' default: null title: Internet Message Id body_link: anyOf: - type: string - type: 'null' default: null title: Body Link sender_ip: anyOf: - type: string - type: 'null' default: null title: Sender Ip judgement: anyOf: - $ref: '#/components/schemas/JudgementEnum' - type: 'null' default: null judgement_source: anyOf: - $ref: '#/components/schemas/JudgementSourceEnum' - type: 'null' default: null judgement_source_model_ids: anyOf: - items: type: string type: array - type: 'null' default: null title: Judgement Source Model Ids judgement_source_model_versions: anyOf: - items: type: string type: array - type: 'null' default: null title: Judgement Source Model Versions use_sender_regex: anyOf: - type: boolean - type: 'null' default: false title: Use Sender Regex use_recipient_regex: anyOf: - type: boolean - type: 'null' default: false title: Use Recipient Regex required: - start_time - end_time title: SearchFilters type: object SearchRequest: properties: source: $ref: '#/components/schemas/EmailSourceEnum' description: Source of the search filters: $ref: '#/components/schemas/SearchFilters' description: Search filters tenant_ids: anyOf: - items: type: integer minItems: 1 type: array - type: 'null' default: null description: Optional list of tenant IDs to filter the search. If not provided, all authorized tenants are included. title: Tenant Ids required: - source - filters title: SearchRequest type: object SearchResponse: properties: results: items: $ref: '#/components/schemas/SearchResult' title: Results type: array total: title: Total type: integer pageNumber: title: Pagenumber type: integer pageSize: title: Pagesize type: integer nextPageNumber: anyOf: - type: integer - type: 'null' default: null title: Nextpagenumber metadata: $ref: '#/components/schemas/MetaData' required: - results - total - pageNumber - pageSize - metadata title: SearchResponse type: object SearchResult: properties: customer_id: anyOf: - type: integer - type: 'null' default: null title: Customer Id tenant_id: anyOf: - type: integer - type: 'null' default: null title: Tenant Id received_time: anyOf: - format: date-time type: string - type: 'null' default: null title: Received Time subject: anyOf: - type: string - type: 'null' default: null title: Subject sender: anyOf: - type: string - type: 'null' default: null title: Sender sender_display_name: anyOf: - type: string - type: 'null' default: null title: Sender Display Name mailbox_name: anyOf: - type: string - type: 'null' default: null title: Mailbox Name mailbox_display_name: anyOf: - type: string - type: 'null' default: null title: Mailbox Display Name current_folder_name: anyOf: - type: string - type: 'null' default: null title: Current Folder Name raw_message_id: anyOf: - type: string - type: 'null' default: null title: Raw Message Id native_user_id: anyOf: - type: string - type: 'null' default: null title: Native User Id cloud_message_id: anyOf: - type: string - type: 'null' default: null title: Cloud Message Id internet_message_id: anyOf: - type: string - type: 'null' default: null title: Internet Message Id abnormal_message_id: anyOf: - type: string - type: 'null' default: null title: Abnormal Message Id abnormal_message_uuid: anyOf: - type: string - type: 'null' default: null title: Abnormal Message Uuid decision_category: anyOf: - $ref: '#/components/schemas/DecisionCategoryEnum' - type: 'null' default: null judgement: anyOf: - $ref: '#/components/schemas/JudgementEnum' - type: 'null' default: null judgement_source: anyOf: - $ref: '#/components/schemas/JudgementSourceEnum' - type: 'null' default: null judgement_source_model_id: anyOf: - type: string - type: 'null' default: null title: Judgement Source Model Id judgement_source_model_version: anyOf: - type: string - type: 'null' default: null title: Judgement Source Model Version attachments: anyOf: - additionalProperties: $ref: '#/components/schemas/Attachment' type: object - type: 'null' default: null title: Attachments body_links: anyOf: - items: type: string type: array - type: 'null' default: null title: Body Links sender_ip_addresses: anyOf: - items: type: string type: array - type: 'null' default: null title: Sender Ip Addresses quarantine_info: anyOf: - $ref: '#/components/schemas/QuarantineInfo' - type: 'null' default: null title: SearchResult type: object Section: type: object properties: id: type: string description: Unique identifier for the section example: ADMIN_CENTER platform_type: type: string description: Platform type for this section example: M365 display_name: type: string description: Human-readable name for the section example: Admin Center stats: allOf: - $ref: '#/components/schemas/PostureStats' description: Statistics about postures in this section posture_area: allOf: - $ref: '#/components/schemas/PostureArea' description: Detailed information about the posture area SecuritySettingsDataSwagger: type: object description: Swagger serializer for security settings data. properties: session_settings: allOf: - $ref: '#/components/schemas/SessionSettingsSwagger' description: Session timeout settings required: - session_settings SecuritySettingsResponse: type: object description: Swagger serializer for security settings response. properties: status: type: string default: success description: Status of the response status_code: type: integer default: 200 description: HTTP status code data: allOf: - $ref: '#/components/schemas/SecuritySettingsDataSwagger' description: Security settings data required: - data SenderImpersonationBreakdown: type: object properties: impersonatedPartyName: type: string description: The specific name or category of the party being impersonated in the attack. example: VIP attackCount: type: integer description: The number of detected attacks associated with the specific impersonated party example: 200 required: - attackCount - impersonatedPartyName SenderImpersonationResponse: type: object properties: sender_impersonation_breakdown: type: array items: $ref: '#/components/schemas/SenderImpersonationBreakdown' description: List detailing the breakdown of attacks by impersonated sender, along with the count for each impersonated sender type. required: - sender_impersonation_breakdown SessionSettingsSwagger: type: object description: Swagger serializer for session settings. properties: inactivity_timeout_minutes: type: integer nullable: true description: Inactivity timeout in minutes (time before session expires due to inactivity) max_session_time_minutes: type: integer nullable: true description: Maximum session time in minutes (absolute max time before re-authentication required) required: - inactivity_timeout_minutes - max_session_time_minutes SeverityLevel3eaEnum: enum: - LOW - MEDIUM - HIGH type: string SignInEvent: type: object properties: event_timestamp: type: string format: date-time description: Time when event occurred example: '2020-05-19T17:47:30Z' category: type: string description: Type of event example: Sign In Event title: type: string description: Title of the event example: Suspicious Failed Sign In Attempt field_labels: type: object additionalProperties: {} description: Anomaly labels/tags associated with fields in the event description: type: string description: Description of the sign in event example: Suspicious Failed Sign In Attempt for foo@bar.com ip_address: type: string description: IP Address where user attempted to sign in from example: 123.456.78.900 isp: type: string description: ISP that was used when attempting to sign in to mailbox example: NGCOM browser: type: string description: Browser that was used when attempting to sign in to mailbox example: Chrome operating_system: type: string description: Operating system of the device used to attempt sign in example: Windows 10 device_trust_type: type: string description: Trust type used by device when signing in protocol: type: string description: Connection protocol used when attempting to sign in example: Browser application: type: string description: Mail application used to sign in example: GSuite location: allOf: - $ref: '#/components/schemas/EventLocation' description: Location of a sign in as detected from case analysis required: - application - browser - category - description - device_trust_type - event_timestamp - field_labels - ip_address - isp - location - operating_system - protocol - title SoarAttachmentSignalsStruct: type: object description: Serializes a AttachmentSignalsPortalStruct object for Soar payload properties: attachmentName: type: string readOnly: true description: Name of the attachment file example: test_attachment.pdf type: type: string readOnly: true description: File type of the attachment example: JPEG details: type: array items: type: string readOnly: true description: Details of insights gained from analyzing the attachment example: - has Javascript md5: type: string nullable: true readOnly: true description: MD5 algorithm hash of the attachment example: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 sha1: type: string nullable: true readOnly: true description: SHA1 hash of the attachment example: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0 sha256: type: string nullable: true readOnly: true description: SHA256 hash of the attachment example: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2 size: type: string readOnly: true description: Size of the attachment file example: 1KB createdOn: type: string format: date-time readOnly: true description: Timestamp attachment file was created on example: '2020-01-01T00:00:00Z' lastUpdated: type: string format: date-time readOnly: true description: Timestamp attachment file was last updated example: '2020-01-01T00:00:00Z' url: type: array items: type: string readOnly: true description: URLs found in the attachment example: - http://malicious.lamronba.com keyPhrases: type: array items: type: string readOnly: true description: Key phrases flagging the attachment as potential malware example: - view - completed document required: - attachmentName - createdOn - details - keyPhrases - lastUpdated - md5 - sha1 - sha256 - size - type - url SoarClickedEvent: type: object description: Serializer for clicked event representation in responses. properties: type: type: string description: Type of click event (click or clickthrough) link: type: string description: The URL that was clicked insights: type: array items: type: string description: List of insights about the click messageMetadata: allOf: - $ref: '#/components/schemas/SoarMessageMetadata' description: Metadata about the email message user: allOf: - $ref: '#/components/schemas/SoarUserAddress' description: Information about the user who clicked clickedTime: type: integer description: Unix timestamp when the click occurred required: - clickedTime - insights - link - messageMetadata - type - user SoarMessageMetadata: type: object description: |- Serializer for message metadata. Note: the "from" field is injected below via `_declared_fields` because `from` is a Python keyword and cannot be declared as a class attribute. properties: subject: type: string nullable: true description: Subject of the email message sender: allOf: - $ref: '#/components/schemas/SoarUserAddress' description: Sender of the email message to: type: array items: $ref: '#/components/schemas/SoarUserAddress' description: Recipients of the email message cc: type: array items: $ref: '#/components/schemas/SoarUserAddress' description: CC recipients of the email message from: allOf: - $ref: '#/components/schemas/SoarUserAddress' description: Sender of the email message required: - cc - from - sender - to SoarUserAddress: type: object description: Serializer for user address information. properties: name: type: string nullable: true description: Display name of the user emailAddress: type: string description: Email address of the user who clicked the link required: - emailAddress StatusesEnum: enum: - NON_COMPLIANT - COMPLIANT - PENDING_EVALUATION - PERMISSIONS_NEEDED type: string TextBlock: type: object properties: type: type: string description: Type of text block (TEXT, LINK, or STATUS) example: TEXT text: type: string description: Text content of the block example: Abnormal Security href: type: string description: URL for link type blocks example: /home/knowledge/tenant/41ef22d1-8ada-4f0b-a384-5d78274bcedb Threat: type: object properties: threatId: type: string description: An id which maps to a threat campaign. A threat campaign might be received by multiple users. example: 184712ab-6d8b-47b3-89d3-a314efef79e2 required: - threatId ThreatAttachments: type: object properties: abxMessageId: type: integer description: An integer representing a unique identifier for an individual message within a threat (i.e email campaign). This is deprecated, use abxMessageIdStr instead. deprecated: true example: 4551618356913732000 abxMessageIdStr: type: string description: A string representing a unique identifier for an individual message within a threat (i.e email campaign). example: 4551618356913732000 attachmentName: type: string description: Name of the attachment example: attachment1.jpg required: - abxMessageId - abxMessageIdStr - attachmentName ThreatAttachmentsResponse: type: object properties: attachments: type: array items: $ref: '#/components/schemas/ThreatAttachments' description: List of attachments in the email messages of a threat tenantId: type: integer nullable: true description: The tenant ID associated with the threat example: 1234 tenantName: type: string nullable: true description: The short name of the tenant associated with the threat example: example-tenant required: - attachments - tenantId - tenantName ThreatDetails: type: object properties: threatId: type: string description: An id which maps to a threat campaign. A threat campaign might be received by multiple users. example: 184712ab-6d8b-47b3-89d3-a314efef79e2 recipientCount: type: integer description: The total number of unique recipients who received messages in this threat campaign. messages: type: array items: $ref: '#/components/schemas/ThreatMessage' description: A list of messages comprised in this threat (i.e email campaign). tenantId: type: integer nullable: true description: The tenant ID associated with the threat example: 1234 tenantName: type: string nullable: true description: The short name of the tenant associated with the threat example: example-tenant pageNumber: type: integer default: 1 description: The current page number nextPageNumber: type: integer default: 2 description: The next page number. Wil not be includedin the response if there are no more pages of data required: - messages - recipientCount - tenantId - tenantName - threatId ThreatLinks: type: object properties: abxMessageId: type: integer description: An integer representing a unique identifier for an individual message within a threat (i.e email campaign). This is deprecated, use abxMessageIdStr instead. deprecated: true example: 4551618356913732000 abxMessageIdStr: type: string description: A string representing a unique identifier for an individual message within a threat (i.e email campaign). example: 4551618356913732000 domainLink: type: string description: The domain name of the link example: lamronba.com linkType: type: string description: The type of link in the email example: html href source: type: string description: The location in the email where the link may be found example: body displayText: type: string description: The link's display text example: This is not a spoof! linkUrl: type: string description: The URL of the link example: http://spoof.lamronba.com required: - abxMessageId - abxMessageIdStr - displayText - domainLink - linkType - linkUrl - source ThreatLinksResponse: type: object properties: links: type: array items: $ref: '#/components/schemas/ThreatLinks' description: List of links in the email messages of a threat tenantId: type: integer nullable: true description: The tenant ID associated with the threat example: 1234 tenantName: type: string nullable: true description: The short name of the tenant associated with the threat example: example-tenant required: - links - tenantId - tenantName ThreatMessage: type: object properties: threatId: type: string description: An id which maps to a threat campaign. A threat campaign might be received by multiple users. example: 184712ab-6d8b-47b3-89d3-a314efef79e2 abxMessageId: type: integer description: An integer representing a unique identifier for an individual message within a threat (i.e email campaign). This is deprecated, use abxMessageIdStr instead. deprecated: true example: 4551618356913732000 abxMessageIdStr: type: string description: A string representing a unique identifier for an individual message within a threat (i.e email campaign). example: 4551618356913732000 abxPortalUrl: type: string description: The URL at which the specific message details are viewable in Abnormal Security's Portal web interface. example: https://portal.abnormalsecurity.com/home/threat-center/remediation-history/4551618356913732076 subject: type: string description: The email subject. example: Phishing Email fromAddress: type: string description: The email address of the sender. example: support@secure-reply.org fromName: type: string description: The display name of the sender. example: Support senderDomain: type: string description: Email domain of sender (only available for IESS customers) example: secure-reply.org toAddresses: type: string description: All the email addresses to which the message was sent, comma-separated & truncated at 255 chars. example: example@example.com, another@example.com recipientAddress: type: string description: The email address of the user who actually received the message. example: example@example.com receivedTime: type: string format: date-time description: The timestamp at which this message arrived. example: '2020-06-09T17:42:59Z' sentTime: type: string format: date-time description: The timestamp at which this message was sent. example: '2020-06-09T17:42:59Z' internetMessageId: type: string description: The internet message ID, per RFC 822 example: <5edfca1c.1c69fb81.4b055.8fd5@mx.google.com> remediationStatus: type: string description: The remediation status of the email threat. example: Auto Remediated attackType: type: string description: The type of threat the message represents. example: Extortion attackStrategy: type: string description: The strategy of threat the message represents. example: Name Impersonation returnPath: type: string description: The path where this message was sent. example: support@secure-reply.org replyToEmails: type: array items: type: string description: The 'reply-to' list of emails. example: - reply-to@example.com ccEmails: type: array items: type: string description: List of email addresses CC'ed. example: - cc@example.com senderIpAddress: type: string description: IP address of sender. example: 100.101.102.103 impersonatedParty: type: string description: Impersonated party, if any. example: None / Others attackVector: type: string description: The attack medium. example: Text attachmentNames: type: array items: type: string description: List of attachment names, if any. example: - attachment.pdf attachmentCount: type: integer description: Number of attachments in email (only available for IESS customers) urls: type: array items: type: string description: URLs present in the email body, if any. example: - https://www.google.com/ urlCount: type: integer description: Number of urls in email (only available for IESS customers) summaryInsights: type: array items: type: string description: A summary of insights into this attack. example: - Bitcoin Topics - Personal Information Theft - Unusual Sender remediationTimestamp: type: string format: date-time description: The timestamp at which this message was remediated, or empty if it has not been remediated. example: '2020-06-09T17:42:59Z' isRead: type: boolean description: Whether an email has been read example: 'true' attackedParty: type: string description: The party that was targeted by an attack. example: VIP autoRemediated: type: boolean description: Indicates whether Abnormal has automatically detected and remediated the message from the user's Inbox. Note``:`` Abnormal has retained this field and the postRemediated field to support prior integrations, but in newly created integrations, you should capture this information from the remediationStatus field. example: 'True' postRemediated: type: boolean description: Indicates whether Abnormal remediated the campaign at a later time, after landing in the user's Inbox. Note``:`` Abnormal has retained this field and the autoRemediated field to support prior integrations, but in newly created integrations, you should capture this information from the remediationStatus field. example: 'False' source: type: string nullable: true description: A string representing the judgement of the message. example: Attack tenantId: type: integer nullable: true description: The tenant ID associated with this message. example: 1000 tenantName: type: string nullable: true description: The tenant name associated with this message. example: acme-corp customerOverride: allOf: - $ref: '#/components/schemas/CustomerOverride' nullable: true required: - abxMessageId - abxMessageIdStr - abxPortalUrl - attachmentCount - attachmentNames - attackStrategy - attackType - attackVector - attackedParty - autoRemediated - ccEmails - fromAddress - fromName - impersonatedParty - internetMessageId - isRead - postRemediated - receivedTime - recipientAddress - remediationStatus - remediationTimestamp - replyToEmails - returnPath - senderDomain - senderIpAddress - sentTime - subject - summaryInsights - threatId - toAddresses - urlCount - urls TimelineEntry: type: object properties: entry_type: type: string description: Type of timeline entry (WORKFLOW_ITEM or NOTABLE_EVENT) example: WORKFLOW_ITEM detail: allOf: - $ref: '#/components/schemas/TimelineEntryDetail' description: Detailed information about the timeline entry TimelineEntryDetail: type: object properties: id: type: integer description: Unique identifier for the timeline entry example: 175 title: type: string description: Title of the timeline event example: Posture Workflow Status Updated created_at: type: string format: date-time description: Timestamp when the event was created example: '2025-04-29T15:51:46.564185Z' updated_at: type: string format: date-time description: Timestamp when the event was last updated example: '2025-04-29T15:51:46.564185Z' description: type: array items: $ref: '#/components/schemas/TextBlock' description: Structured description of the event as text blocks category: allOf: - $ref: '#/components/schemas/DisplayId' description: Category classification for the event event_id: type: string description: External event identifier example: 33646635-3331-6332-3964-363137646630 risk: allOf: - $ref: '#/components/schemas/DisplayId' description: Risk level associated with the event abnormality: allOf: - $ref: '#/components/schemas/DisplayId' description: Abnormality level of the event TokenListResponseSwagger: type: object description: Swagger serializer for token list response. properties: status: type: string default: success description: Response status status_code: type: integer default: 200 description: HTTP status code data: type: array items: $ref: '#/components/schemas/TokenSwagger' description: List of API tokens pagination: allOf: - $ref: '#/components/schemas/PaginationSwagger' description: Pagination metadata required: - data - pagination TokenSwagger: type: object description: Swagger serializer for token object. properties: token_id: type: string description: Unique token identifier (UUID) name: type: string description: Token name version: type: string description: Token version (v1 or v2) status: type: string description: Token status (active, expired, revoked) created_at: type: string format: date-time description: Token creation timestamp (ISO 8601) expires_at: type: string format: date-time description: Token expiration timestamp (ISO 8601) permissions: type: array items: type: string description: List of endpoint permissions (e.g., soar_v1_read_threats, soar_v1_manage_threat) required: - created_at - expires_at - name - permissions - status - token_id - version TrendingAttacks: type: object properties: attackCount: type: integer description: The number of occurrences of the attack for the specified attack type in the current time frame. example: 200 attackType: type: string description: The name or type of the attack detected. example: Scam attackTypeDescription: type: string description: A detailed description of the attack type detected. example: Advance fee fraud and similar scams prevAttackCount: type: integer description: The number of occurrences of the attack in the previous time frame. example: 201 required: - attackCount - attackType - attackTypeDescription - prevAttackCount TrendingAttacksResponse: type: object properties: trending_attacks: type: array items: $ref: '#/components/schemas/TrendingAttacks' description: List detailing various trending attacks, along with the current and previous attack counts for each. required: - trending_attacks UpdateResourceResponse: type: object description: Serializer for update resource response. properties: resourceId: type: string description: ID of the updated resource status: type: string description: Status of the update operation required: - resourceId - status User: type: object properties: name: type: string description: The name of the user example: Ching Li-Hsieh email: type: string description: The email address of the user example: lhching@bigcompany.com required: - name UserListResponse: type: object description: Swagger serializer for user list response. properties: status: type: string default: success description: Status of the response status_code: type: integer default: 200 description: HTTP status code data: type: array items: $ref: '#/components/schemas/UserSwagger' description: List of users from RBAC system with their roles and resource permissions required: - data UserSwagger: type: object description: Swagger serializer for user object. properties: user_id: type: integer description: The unique identifier for the user email: type: string format: email description: Email address of the user groups: type: array items: type: string default: [] description: List of group IDs the user belongs to local_login_enabled: type: boolean default: false description: Whether local login is enabled for the user sso_enabled: type: boolean default: true description: Whether SSO is enabled for the user role: allOf: - $ref: '#/components/schemas/RoleSwagger' description: Role assigned to the user with associated permissions resource_permissions: type: array items: $ref: '#/components/schemas/ResourcePermissionSwagger' description: List of resource permissions granted to the user through their role (only includes enabled permissions) required: - email - user_id VendorActivity: type: object properties: eventTimeline: type: array items: $ref: '#/components/schemas/VendorActivityEvent' required: - eventTimeline VendorActivityEvent: oneOf: - $ref: '#/components/schemas/VendorFederatedEventTimeline' - $ref: '#/components/schemas/VendorInvestigationEventTimeline' VendorCaseDetails: type: object properties: vendorCaseId: type: integer description: Unique ID of vendor case. example: 0 vendorDomain: type: string description: Domain of vendor. example: vendor.com firstObservedTime: type: string format: date-time description: The timestamp at which the first message associated with this vendor case arrived. example: '2020-06-09T17:42:59Z' lastModifiedTime: type: string format: date-time description: The latest timestamp when details of the vendor case was last modified. example: '2020-06-09T17:42:59Z' insights: type: array items: $ref: '#/components/schemas/VendorCaseInsights' readOnly: true description: List of insights generated by Abnormal Security. timeline: type: array items: $ref: '#/components/schemas/VendorCaseTimeline' readOnly: true description: List of timeline events relevant to case. required: - firstObservedTime - insights - lastModifiedTime - timeline - vendorCaseId - vendorDomain VendorCaseInsights: type: object properties: highlight: type: string readOnly: true description: type: string readOnly: true required: - description - highlight VendorCaseTimeline: type: object properties: eventTimestamp: type: string format: date-time readOnly: true description: Timestamp of event example: '2021-01-01T00:00:00Z' senderAddress: type: string description: Sender Address example: alice@vendor.com recipientAddress: type: string description: Recipient Address example: bob@company.com subject: type: string description: Subject of the event example: Click Me! markedAs: type: string readOnly: true description: Indication if your organisation has interacted with email example: Malicious threatId: type: string description: Unique ID of email threat. May be used in /threats endpoint example: 184712ab-6d8b-47b3-89d3-a314efef79e2 required: - eventTimestamp - markedAs - recipientAddress - senderAddress - subject - threatId VendorCases: type: object properties: vendorCaseId: type: integer description: Unique ID of vendor case. required: - vendorCaseId VendorDetail: type: object properties: vendorDomain: type: string readOnly: true description: The domain used by the vendor. example: vendor.com riskLevel: type: string readOnly: true description: The risk level of the vendor. example: High vendorContacts: type: array items: type: string readOnly: true description: Mailboxes from the vendor that had prior interaction with. example: - alice@vendor.com companyContacts: type: array items: type: string readOnly: true description: Mailboxes from your organisation that had prior interaction with vendor. example: - bob@company.com vendorCountries: type: array items: type: string readOnly: true description: Countries which vendor interactions originated from. example: - United States analysis: type: array items: type: string readOnly: true description: Analysis provided by Abnormal Security. example: - Vendor compromise observed in Abnormal Community vendorIpAddresses: type: array items: type: string readOnly: true description: IP addresses which vendor interactions originated from. example: - 127.0.0.1 required: - analysis - companyContacts - riskLevel - vendorContacts - vendorCountries - vendorDomain - vendorIpAddresses VendorFederatedEventTimeline: type: object properties: eventTimestamp: type: string format: date-time readOnly: true description: Timestamp of event example: '2021-01-01T00:00:00Z' eventType: type: string readOnly: true description: Type of event detected example: Federated Signal suspiciousDomain: type: string readOnly: true description: Domain which event originated from example: alice@vendor.com domainIp: type: string readOnly: true description: IP address which event originated from example: 127.0.0.1 ipGeolocation: type: string readOnly: true description: Country Code which event originated from example: US attackGoal: type: string readOnly: true description: Objectives behind event example: malware and ransom required: - attackGoal - domainIp - eventTimestamp - eventType - ipGeolocation - suspiciousDomain VendorInvestigationEventTimeline: type: object properties: eventTimestamp: type: string format: date-time readOnly: true description: Timestamp of event example: '2021-01-01T00:00:00Z' eventType: type: string readOnly: true description: Type of event detected example: Targeted Attack suspiciousDomain: type: string readOnly: true description: Domain which event originated from example: alice@vendor.com attackGoal: type: string readOnly: true description: Objectives behind event example: malware and ransom actionTaken: type: string readOnly: true description: Actions taken by Abnormal Security example: Post Remediated hasEngagement: type: boolean readOnly: true description: Indication if your organisation has interacted with email example: 'False' recipient: type: string readOnly: true description: Recipient of email example: bob@company.com threatId: type: string readOnly: true description: Unique ID of email threat. May be used in /threats endpoint example: 184712ab-6d8b-47b3-89d3-a314efef79e2 required: - actionTaken - attackGoal - eventTimestamp - eventType - hasEngagement - recipient - suspiciousDomain - threatId Vendors: type: object properties: vendorDomain: type: string description: The domain used by the vendor. example: vendor.com required: - vendorDomain WorkflowLogRawJson: type: object description: Serializer for the workflow log raw json response. properties: raw_json: type: string description: Raw JSON data from the workflow log example: '{"status": "updated", "workflow_status": "UNTRIAGED", "timestamp": "2025-04-29T15:51:46.564185Z"}' securitySchemes: BearerAuth: type: http scheme: bearer servers: - url: https://api.abnormalplatform.com/v1 description: Production Server for managing threats - url: https://eu.rest.abnormalsecurity.com/v1 description: EU Production Server for managing threats. tags: - name: Dashboard Aggregations description: APIs to manage Dashboard metrics - name: Threats description: APIs to manage threats notified in the Abnormal Threat Log - name: Cases description: APIs to manage Abnormal Cases - name: Messages description: API to manage message details - name: AI Security Mailbox (formerly known as Abuse Mailbox) description: API to manage AI Security Mailbox (formerly known as Abuse Mailbox) - name: Employee Insights description: API to manage employees - name: Vendors description: API to manage Vendorbase and threats from Vendors - name: Audit Logs description: API to retrieve audit logs for Portal - name: Roles description: API to retrieve roles from RBAC system - name: Users description: API to retrieve users from RBAC system - name: Tokens description: API to manage SOAR API tokens - name: Security Settings description: API to retrieve security settings including session timeout configuration security: - BearerAuth: []