swagger: '2.0' info: title: Huntress API Reference Accounts Escalations API description: "\n

© Huntress - All rights reserved

\n

Introduction

\n\n

Webhook event payloads are available via the dropdown menu above the search bar on this page.

\n\n

The Huntress API follows a RESTful pattern. Requests are made via resource-oriented URLs as described in this document and API responses are formatted as JSON data.

\n\n

A command-line client is also available for interacting with the API from your terminal. It requires Ruby 3.1+ and has no external dependencies. You can download it from https://api.huntress.io/api/huntress-cli.

\n\n

Alternatively, if you'd prefer to use an MCP, we have instructions for setting up the Huntress MCP. Note that the MCP is read-only, so this is a good option if you're looking for a safer way to access your Huntress data from an LLM.

\n\n

If you'd like to request additional API endpoints or capabilities, submit feedback through our feedback portal.

\n\n

API Overview

\n
\n\t

Authentication

\n
$KEY = echo \"$HUNTRESS_PUBLIC_KEY:$HUNTRESS_PRIVATE_KEY\" | base64\ncurl \"https://api.huntress.io/v1/agents\" \\ -H \"Authorization: Basic $KEY\"\n
\n
\n

To begin, generate your API Key at <your_account_subdomain>.huntress.io. Once you are logged into your account on the Huntress site, check the dropdown menu at the top-right corner of the site header. You should see API Credentials among the options if your account has been granted access to the Huntress API. Click on the option to continue to the API Key generation page.

\n\n

Once on the API Key generation page, click on the green Setup button to begin the process to generate your API Key. You will be redirected to a page where you will be prompted to generate your API Key. Click the Generate button to generate a public and private key pair for Huntress API access. The inputs on the page will be filled in with your access credentials once you have done so.

\n\n

Your API Private Key will only be visible at this stage of API Key generation. Be sure to save the value provided somewhere secure, as once you navigate away from this page, this value will no longer be accessible and you must regenerate your API credentials if your secret key value is lost.

\n\n

If necessary, you can repeat the process to regenerate your API credentials with a new API Key and API Secret Key on the same API Key generation page, at <your_account_subdomain>.huntress.io/account/api_credentials.

\n\n

The Huntress API implements basic access authentication. Once you have your API Key and API Secret Key, provide these values as the result of a Base64 encoded string in every request to the Huntress API via the Authorization header. Your request header should look something like Authorization: Basic [Base64Encode(<your_api_key>:<your_api_secret_key>)]. Please refer to the code snippets for further examples.

\n
\n
\n\t

Rate Limits

\n

Every Huntress API account is rate limited to 60 requests per minute, on a sliding window. This means that no more than 60 requests can be made within a 60 second time interval between the first request and the last request.

\n\n

For example, if request 1 is made at T0, request 2 is made at T5, and requests 3 through 60 are made at T10, making request 61 at T55 would result in a 429 error response. Making request 61 at T61 would succeed, however making request 62 at T61 would fail, at least until the time has passed T65, corresponding to a minute after request 2 was made.

\n
\n
\n\t

HTTP Response Codes

\n

Huntress follows HTTP standards when delivering responses: a 2xx response is a success, a 4xx response indicates an issue with the client request, and a 5xx response indicates an issue with Huntress servers.\n
\n
\nSpecific error codes are detailed in the following table:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Error Status CodeDetails
400There is an unexpected value in the API request being made.
401Your request could not be authenticated. Check that your API key is properly formatted and included in the Authorization header.
404The requested resource is unavailable: either it doesn't exist, or your account does not hold correct permissions to access it.
429You have made too many requests within the rate limit timeframe. See the previous section on rate_limits for details.
500

An error has occurred within Huntress servers.

You could retry the request, but if you encounter continued errors, please contact Support with details of your error. If all traffic from Huntress is resulting in 500 responses, please check our Huntress Status Page.

\n
\n
\n\t

Pagination

\n

Certain Huntress API endpoints utilize a page_token and limit parameter to specify a window location and size, respectively, to the resources currently being requested.\n

\nEach API request will also return a pagination object with details about your current pagination state based on the parameters provided. The pagination object contains:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
KeyTypeDescription
next_page_tokenstringThe token used to request the next page in paginated results. If no page token is included, the first page contains all results.
next_page_urlstringURL containing the next page and the limit provided in the original API request, to be used to continue sequentially accessing resources. Only displays when another page can be accessed.
\n
\n

Following is a formatted example of the pagination object in an API response:
\n

\n
\n\"pagination\": {\n  \"next_page_url\": \"https://api.huntress.io/v1/agents?page_token=MjAyMi0wMy0wMVQxODo1NDoyNFo&limit=10\",\n  \"next_page_token\": \"MjAyMi0wMy0wMVQxODo1NDoyNFo\"\n}
\n
\n
\n
\n\t

Request and Response Format

\n\t
\n\t\t

Request

\n\t
\n
\ncurl \"https://api.huntress.io/v1/agents?organization_id=1&page_token=MjAyMi0wMy0wMVQxODo1NDoyNFo\" -H \"Authorization: Basic <Your B64 encoded hash>\"
\n\t

The base URL for API requests is api.huntress.io/v1/, followed by the resource requested. Resources can be requested either singularly or as a list, which correspond to /v1/<resources>/:id or /v1/<resources> respectively, with the exception of the /v1/account and /v1/actor endpoints, which only returns the account associated with the API credentials provided.

\n\t

As an example, api.huntress.io/v1/agents would return a list of agents, while api.huntress.io/v1/agents/1 would return a singular agent with ID: 1.

\n\t

Parameters are provided to the API through a query string. As an example, providing the organization_id filter as a parameter to the /v1/agents endpoint would look like api.huntress/io/v1/agents?organization_id=1. Accessing a sequential page with the same filter active would look like api.huntress.io/v1/agents?organization_id=1&page_token=MjAyMi0wMy0wMVQxODo1NDoyNFo.

\n\t
\n\t
\n\t\t

Response

\n\t

The Huntress API responds with a JSON object containing requested resources if the request is valid and authorized.

\n\t

Singular Case

\n\t
\n\t
{\n  \"report\": { ... }\n}\n
\n\t

In the case of accessing a singular resource, the JSON object in question will contain one key that maps the singular resource to the singular representation of the resource name. As an example, if you were to request api.huntress.io/v1/reports/1, the JSON response would contain a single key report that maps to the report with ID: 1.

\n\t

Multiple Case

\n
{\n  \"reports\": [ ... ],\n  \"pagination\": { ... }\n}\n
\n\t

When accessing a list of resources, the JSON response contains two keys at the root level. The first key is the plural representation of that resource. The second is a pagination key that represents the current state of pagination based on parameters provided in the original request. As an example, a request to api.huntress.io/v1/reports returns a JSON object with the keys reports and pagination at its root level. Further details on the fields within the pagination object can be seen at the relevant section.

\n\t
\n
\n" version: 1.0.0 host: api.huntress.io schemes: - https produces: - application/json security: - basic: - basic_auth tags: - name: Escalations description: Operations about Escalations paths: /v1/escalations: get: summary: List Escalations description: "\nShows Escalations associated with your account.\nAdditional details for a specific escalation can be obtained by using the **GET Escalation** endpoint.\n\nEscalations are used to notify Huntress account administrators that a situation requires their attention.\nBelow are some common use cases:\n - Security Operation Centers (SOC) suspect that an application being flagged as malicious is a false positive, and we want to get your authorization to allow-list the application moving forward.\n - A potential threat flagged by Managed Defender requires additional information (file path details, etc.) in order for Huntress to provide actionable assisted remediation steps.\n - A login event occurred from an unexpected country or VPN, and Huntress would like partner feedback on whether that event should be expected or unauthorized.\n\n Though Escalations are not incident reports, they do have severities (low, high, critical) associated with them that dictate an expected response time.\n\n**Note:** This endpoint will also return a `pagination` key on the root level. \nPlease refer to the [pagination section](https://api.huntress.io/docs#pagination) within our docs for more information.\n" produces: - application/json parameters: - in: query name: limit description: Max number of resources returned in a paged collection. Defaults to 10, with a minimum of 1 and maximum 500. type: integer format: int32 default: 10 minimum: 1 maximum: 500 required: false - in: query name: page_token description: Token used to request the next page in paginated results. Defaults to 'null' type: string required: false - in: query name: sort_field description: Field to sort by. Defaults to 'id'. type: string default: id enum: - id - severity - due_at - created_at - updated_at required: false - in: query name: sort_direction description: Sort direction. Defaults to 'desc'. type: string default: desc enum: - asc - desc required: false - in: query name: status description: Filter by status. type: string enum: - open - overdue - resolved required: false - in: query name: severity description: Filter by severity. type: string enum: - low - high - critical required: false - in: query name: subtype description: Filter by subtype. type: string required: false - in: query name: organization_id description: Filter by organization ID. type: integer format: int32 required: false responses: '200': description: List Escalations schema: type: object properties: escalations: type: array items: $ref: '#/definitions/Escalation' pagination: $ref: '#/definitions/Pagination' required: - escalations - pagination '403': description: There was an issue with your API credential or permissions. schema: $ref: '#/definitions/Escalation' tags: - Escalations operationId: getV1Escalations /v1/escalations/{id}: get: summary: Get Escalation description: Shows details on a single Escalation associated with your account. produces: - application/json parameters: - in: path name: id description: Escalation ID within Huntress Account type: integer format: int32 required: true responses: '200': description: Get Escalation schema: type: object properties: escalation: $ref: '#/definitions/EscalationWithEntities' '403': description: There was an issue with your API credential or permissions. schema: $ref: '#/definitions/Escalation' tags: - Escalations operationId: getV1EscalationsId /v1/escalations/{id}/resolution: post: summary: Create an Escalation Resolution description: "Allows you to resolve an Escalation. Creating a resolution updates the Escalation's status\nto resolved. This endpoint requires an API key with permissions to write to Escalations. **Note that the default account API key is read-only, so you'll need to create a user-based API key with the appropriate permissions to access this endpoint**.\nThe behavior of this endpoint varies by Escalation type so your request should be crafted based on the specific Escalation you are interacting with.\n\n#### Simple Resolution\n\nFor most types of Escalations, a POST to the resolution endpoint with only the Escalation's ID is sufficient. This action resolves the Escalation directly without requiring any additional parameters.\n\n#### Complex Resolution\n\nFor Escalations that have many entities which all require action, a call to this endpoint will **bulk resolve all associated entities at once**. The determination provided will be **applied to every single entity attached to the Escalation.** \nNote that these kinds of Escalation resolutions require extra parameters in their requests. \n\nEscalation types that can resolve multiple associated entities at once are:\n - Unwanted Country Access\n - Unwanted VPN Access\n\n **NOTE:** Ommitting both `determination` and `scope` params will temporarily resolve the Unwanted Access Escalations.\n The escalation will reopen upon the next occurrence of the event that created the escalation.\n This is equivalent to using the \"dismiss\" option in the portal.\n" produces: - application/json consumes: - application/json parameters: - in: path name: id type: integer format: int32 required: true - name: EscalationResolutionParameters in: body required: true schema: $ref: '#/definitions/EscalationResolutionParameters' responses: '201': description: Create an Escalation Resolution schema: $ref: '#/definitions/EscalationResolution' '400': description: Invalid resolution parameters '403': description: There was an issue with your API credential or permissions. '409': description: Escalation has already been resolved '422': description: Escalation cannot be resolved through the API tags: - Escalations operationId: EscalationResolutionParameters definitions: EscalationResolutionParameters: type: object properties: determination: type: string description: Determination is only used for Unwanted Country Access and Unwanted VPN Access Escalations. This field determines whether **all** the associated identities are expected or unauthorized. enum: - expected - unauthorized scope: type: string description: 'Scope is used only for Unwanted Access Escalations. This determines what kinds of access rules are created in response to the Escalation. This parameter is better explained using an example: In the scenario when `email123@example.com` logs in from Russia and the determination is `unauthorized`: When the scope is `identity`: Rules created based on the resolution will only apply to the identities associated with the Escalation. In this case a rule will be created specifically preventing `email123@example.com` from logging in from Russia. When the scope is `organization`: Rules created based on the resolution will apply to all identities in the organization. In this case all logins from Russia will be prevented across the organization. When the scope is `account`: Rules created based on the resolution will apply to all identities on the account. In this case all logins from Russia will be prevented across the account. ' enum: - account - organization - identity description: Create an Escalation Resolution Escalation: type: object properties: id: type: integer format: int64 example: 84938 description: A Huntress-unique identifier for the escalation. account: type: Account example: id: 1 name: Your Account Name description: The Account the escalation pertains to. organizations: type: array items: type: string example: - id: 1234 name: ExampleCo description: An array of Organizations this escalation pertains to created_at: type: string format: date-time example: '2025-09-05T18:20:34Z' description: ISO-8601 formatted timestamp for when this escalation was created. resolved_at: type: string format: date-time example: '2025-09-05T18:20:34Z' description: ISO-8601 formatted timestamp for when this escalation was resolved. severity: type: string enum: - low - high - critical example: low description: The severity of the escalation. status: type: string enum: - open - sent - resolved example: resolved description: The status of the Escalation subject: type: string example: Defender Disabled description: The subject of the Escalation subtype: type: string example: US description: An additional classifier for the escalation. The interpretation depends on the escalation type (e.g. an ISO country code for Unexpected Country Access escalations). type: type: string example: Environmental Issue description: The type of the Escalation updated_at: type: string format: date-time example: '2025-09-05T18:20:34Z' description: ISO-8601 formatted timestamp for when this escalation was last updated. description: Escalation model EscalationResolution: type: object properties: escalation: $ref: '#/definitions/EscalationWithEntities' description: The resolved Escalation. resolution_method: type: string enum: - rule - dismiss - direct example: rule description: The code path the server took to resolve the Escalation. `rule` indicates a bulk resolution that created attribute rules from the supplied `determination` and `scope` parameters. `dismiss` indicates a temporary resolution from omitting both parameters on an Unwanted Access Escalation. `direct` indicates a simple resolution on an Escalation type that does not accept resolution parameters. required: - escalation - resolution_method description: EscalationResolution model EscalationWithEntities: type: object properties: id: type: integer format: int64 example: 84938 description: A Huntress-unique identifier for the escalation. account: type: Account example: id: 1 name: Your Account Name description: The Account the escalation pertains to. organizations: type: array items: type: string example: - id: 1234 name: ExampleCo description: An array of Organizations this escalation pertains to created_at: type: string format: date-time example: '2025-09-05T18:20:34Z' description: ISO-8601 formatted timestamp for when this escalation was created. resolved_at: type: string format: date-time example: '2025-09-05T18:20:34Z' description: ISO-8601 formatted timestamp for when this escalation was resolved. severity: type: string enum: - low - high - critical example: low description: The severity of the escalation. status: type: string enum: - open - sent - resolved example: resolved description: The status of the Escalation subject: type: string example: Defender Disabled description: The subject of the Escalation subtype: type: string example: US description: An additional classifier for the escalation. The interpretation depends on the escalation type (e.g. an ISO country code for Unexpected Country Access escalations). type: type: string example: Environmental Issue description: The type of the Escalation updated_at: type: string format: date-time example: '2025-09-05T18:20:34Z' description: ISO-8601 formatted timestamp for when this escalation was last updated. entities: type: Object example: total_count: 1 has_more: false items: - id: 1 type: Agent details: hostname: laptop01 platform: windows os: Windows 8 Pro last_callback_at: '2025-09-05T18:20:35Z' description: Object containing information about Entities associated with the escalation. required: - entities description: EscalationWithEntities model Pagination: type: object properties: next_page_url: type: string next_page_token: type: string description: Pagination model securityDefinitions: basic_auth: type: basic desc: Base 64 encoded string of your Huntress Account API key and API secret.