swagger: '2.0'
info:
title: Huntress API Reference Accounts Incident Reports API
description: "\n
© Huntress - All rights reserved
\nIntroduction
\n\nWebhook event payloads are available via the dropdown menu above the search bar on this page.
\n\nThe 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\nA 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\nAlternatively, 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\nIf you'd like to request additional API endpoints or capabilities, submit feedback through our feedback portal.
\n\nAPI Overview
\n\n\tAuthentication
\n$KEY = echo \"$HUNTRESS_PUBLIC_KEY:$HUNTRESS_PRIVATE_KEY\" | base64\ncurl \"https://api.huntress.io/v1/agents\" \\ -H \"Authorization: Basic $KEY\"\n
\n
\nTo 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\nOnce 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\nYour 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\nIf 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\nThe 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\tRate Limits
\nEvery 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\nFor 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\tHTTP Response Codes
\nHuntress 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| Error Status Code | \nDetails | \n
\n\n\n| 400 | \nThere is an unexpected value in the API request being made. | \n
\n\n| 401 | \nYour request could not be authenticated. Check that your API key is properly formatted and included in the Authorization header. | \n
\n\n| 404 | \nThe requested resource is unavailable: either it doesn't exist, or your account does not hold correct permissions to access it. | \n
\n\n| 429 | \nYou have made too many requests within the rate limit timeframe. See the previous section on rate_limits for details. | \n
\n\n| 500 | \nAn 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 \n\n\t
\nCertain 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| Key | \nType | \nDescription | \n
\n\n\n| next_page_token | \nstring | \nThe token used to request the next page in paginated results. If no page token is included, the first page contains all results. | \n
\n\n| next_page_url | \nstring | \nURL 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
\n
\nFollowing 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
\n\t\n\t\tRequest
\n\t\n
\ncurl \"https://api.huntress.io/v1/agents?organization_id=1&page_token=MjAyMi0wMy0wMVQxODo1NDoyNFo\" -H \"Authorization: Basic <Your B64 encoded hash>\"
\n\tThe 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\tAs 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\tParameters 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\tResponse
\n\tThe Huntress API responds with a JSON object containing requested resources if the request is valid and authorized.
\n\tSingular Case
\n\t\n\t
{\n \"report\": { ... }\n}\n
\n\tIn 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\tMultiple Case
\n{\n \"reports\": [ ... ],\n \"pagination\": { ... }\n}\n
\n\tWhen 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: Incident Reports
description: Operations about Incident Reports
paths:
/v1/incident_reports:
get:
summary: List Incident Reports
description: "Shows Incident Reports associated with your account.\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
- 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: indicator_type
description: Filter by indicator type. One of footholds, monitored_files, ransomware_canaries, antivirus_detections, process_detections, managed_identity, mde_detections, siem_detections, favicon_detections, behavioral_detections, email_security_detections, app_control, ai_misuse
type: string
enum:
- footholds
- monitored_files
- ransomware_canaries
- antivirus_detections
- process_detections
- managed_identity
- mde_detections
- siem_detections
- favicon_detections
- behavioral_detections
- email_security_detections
- app_control
- ai_misuse
required: false
- in: query
name: status
description: Filter by status. One of sent, closed, dismissed, auto_remediating, deleting, partner_dismissed
type: string
enum:
- sent
- closed
- dismissed
- auto_remediating
- deleting
- partner_dismissed
required: false
- in: query
name: severity
description: Filter by severity. One of low, high, critical
type: string
enum:
- low
- high
- critical
required: false
- in: query
name: platform
description: Filter by platform. One of windows, darwin, microsoft_365, google, linux, email_security, other
type: string
enum:
- windows
- darwin
- microsoft_365
- google
- linux
- email_security
- other
required: false
- in: query
name: organization_id
description: Filter by organization ID within Huntress account
type: integer
format: int32
required: false
- in: query
name: agent_id
description: Filter by agent ID within Huntress account
type: integer
format: int32
required: false
responses:
'200':
description: List Incident Reports
schema:
type: object
properties:
incident_reports:
type: array
items:
$ref: '#/definitions/IncidentReport'
pagination:
$ref: '#/definitions/Pagination'
required:
- incident_reports
- pagination
'403':
description: There was an issue with your API credential or permissions.
schema:
$ref: '#/definitions/IncidentReport'
tags:
- Incident Reports
operationId: getV1IncidentReports
/v1/incident_reports/{id}:
get:
summary: Get Incident Report
description: Shows details on a single Incident Report associated with your account.
produces:
- application/json
parameters:
- in: path
name: id
description: Incident Report ID within Huntress account
type: integer
format: int32
required: true
responses:
'200':
description: Get Incident Report
schema:
type: object
properties:
incident_report:
$ref: '#/definitions/IncidentReport'
'403':
description: There was an issue with your API credential or permissions.
schema:
$ref: '#/definitions/IncidentReport'
tags:
- Incident Reports
operationId: getV1IncidentReportsId
/v1/incident_reports/{id}/resolution:
post:
summary: Create an Incident Report Resolution
description: 'Use this endpoint to resolve a single Incident Report. All remediations belonging to the Incident Report must be approved first.
While resolution updates the report status to resolved, assisted remediations may still be running in the background and manual remediations may still require completion by a user.
This endpoint requires an API key with permissions to resolve incident reports. **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**.
'
produces:
- application/json
consumes:
- application/json
parameters:
- in: path
name: id
type: integer
format: int32
required: true
responses:
'201':
description: Create an Incident Report Resolution
schema:
type: object
properties:
incident_report:
$ref: '#/definitions/IncidentReport'
'403':
description: There was an issue with your API credential or permissions.
'409':
description: Incident Report cannot be resolved. Confirm that all remediations are approved and report status is 'sent'.
'422':
description: Incident Report cannot be resolved unless report status is 'sent'.
tags:
- Incident Reports
operationId: postV1IncidentReportsIdResolution
/v1/incident_reports/{incident_report_id}/remediations:
get:
summary: List Remediations
description: "Shows details of Remediations belonging to a single Incident Report.\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: path
name: incident_report_id
type: integer
format: int32
required: true
- 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
- 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: types[]
description: 'Filter by type of remediation. Must be a comma-separated string containing the values: assisted, manual, containment'
type: array
items:
type: string
enum:
- assisted
- manual
- containment
required: false
- in: query
name: statuses[]
description: 'Filter by status of remediation. Must be a comma-separated string containing the values: unapproved, approved, completed, failed, cancelled'
type: array
items:
type: string
enum:
- unapproved
- approved
- completed
- failed
- cancelled
required: false
responses:
'200':
description: List Remediations
schema:
type: object
properties:
remediations:
type: array
items:
$ref: '#/definitions/Remediation'
pagination:
$ref: '#/definitions/Pagination'
required:
- remediations
- pagination
'403':
description: There was an issue with your API credential or permissions.
schema:
$ref: '#/definitions/Remediation'
tags:
- Incident Reports
operationId: getV1IncidentReportsIncidentReportIdRemediations
/v1/incident_reports/{incident_report_id}/remediations/{remediation_id}:
get:
summary: Get Remediation
description: Shows details for a single Remediation belonging to a single Incident Report
produces:
- application/json
parameters:
- in: path
name: incident_report_id
type: integer
format: int32
required: true
- in: path
name: remediation_id
description: Incident Report ID
type: integer
format: int32
required: true
responses:
'200':
description: Get Remediation
schema:
type: object
properties:
remediation:
$ref: '#/definitions/Remediation'
'403':
description: There was an issue with your API credential or permissions.
schema:
$ref: '#/definitions/Remediation'
tags:
- Incident Reports
operationId: getV1IncidentReportsIncidentReportIdRemediationsRemediationId
/v1/incident_reports/{incident_report_id}/remediations/bulk_approval:
post:
summary: Bulk Approve Remediations
description: 'Approve all unapproved remediations for an Incident Report. Approval immediately triggers the execution of assisted remediations.
Manual remediations are not executed, and must be independently completed. Once all remediations are approved,
the incident report becomes eligible for resolution.
This endpoint requires an API key with permissions to write to remediations. **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**.
'
produces:
- application/json
consumes:
- application/json
parameters:
- in: path
name: incident_report_id
type: integer
format: int32
required: true
responses:
'201':
description: Bulk Approve Remediations
schema:
type: object
properties:
incident_report:
$ref: '#/definitions/IncidentReport'
'403':
description: There was an issue with your API credential or permissions.
'409':
description: Incident Report must have a status of 'sent'.
'422':
description: Unable to approve remediations
tags:
- Incident Reports
operationId: postV1IncidentReportsIncidentReportIdRemediationsBulkApproval
/v1/incident_reports/{incident_report_id}/remediations/bulk_rejection:
post:
summary: Bulk Reject Remediations
description: 'Reject all unapproved remediations for an Incident Report. Rejecting the remediations will send the incident report back to the Huntress SOC.
This endpoint requires an API key with permissions to write to remediations. **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**.
'
produces:
- application/json
consumes:
- application/json
parameters:
- in: path
name: incident_report_id
type: integer
format: int32
required: true
- name: RemediationBulkRejectionParameters
in: body
required: true
schema:
$ref: '#/definitions/RemediationBulkRejectionParameters'
responses:
'201':
description: Remediations rejected.
'403':
description: There was an issue with your API credential or permissions.
'409':
description: Incident Report must have a status of 'sent'.
'422':
description: Unable to reject remediations
tags:
- Incident Reports
operationId: RemediationBulkRejectionParameters
definitions:
Remediation:
type: object
properties:
id:
type: integer
format: int64
example: 1
description: A unique identifier for a remediation.
type:
type: string
example: manual
description: 'The type of the remediation. Can be one of: assisted, manual, containment'
action:
type: string
example: Delete File
description: Description of the remediation's required steps.
parameters:
type: array
items:
type: string
example:
- name: path
description: c:\windows\system32\tasks\malicious_task
description: Additional context on how the remediation will be performed.
For containment remediations, this will be a string showing the entity to which the remediation was applied.
For assisted remediations this will be an array of key value pairs representing all the parameters that are related to the remediation.
Manual remediations will have no information.
status:
type: string
example: completed
description: 'The status of the remediation. Can be one of: unapproved, approved, completed, failed, cancelled'
approved_at:
type: string
format: date-time
example: '2025-06-26T18:57:03Z'
description: ISO-8601 formatted timestamp for when the remediation was approved.
approved_by:
$ref: '#/definitions/User'
example:
id: 123123
name: John Smith
email: john.smith@example.com
description: The user that approved the remediation.
completed_at:
type: string
format: date-time
example: '2025-06-26T18:57:03Z'
description: ISO-8601 formatted timestamp for when the remediation was completed.
description: Remediation model
IncidentReport:
type: object
properties:
id:
type: integer
format: int64
example: 1
description: A unique identifier for an incident report.
account_id:
type: integer
format: int64
example: 5
description: Unique identifier for the account this incident report is associated with.
agent_id:
type: integer
format: int64
example: 12
description: Unique identifier for the agent this incident report is associated with.
body:
type: string
example:
description: Autogenerated content describing the details of the incident in question.
closed_at:
type: string
format: date-time
example: '2022-03-15T14:22:00Z'
description: ISO-8601 formatted timestamp for when this incident report had its status set to `closed`. Null if non-applicable.
indicator_counts:
type: object
example:
footholds: 1
monitored_files: 0
process_detections: 0
ransomware_canaries: 0
antivirus_detections: 0
description: Mapping of indicator types to number of incidences of that threat in the context of this incident report.
indicator_types:
type: array
items:
type: string
example:
- footholds
description: Unique list of threat indicators that have been found in the context of this incident report.
organization_id:
type: integer
format: int64
example: 4
description: Unique identifier for the organization this incident report is associated with.
platform:
type: string
example: windows
description: The platform of the host machine (`darwin`,`google`,`microsoft_365`,`linux`,`windows`, or `other`).
remediations:
type: object
example:
total_count: 1
has_more: false
items:
- id: 1
type: manual
action: Delete File
parameters:
- name: path
description: c:\windows\system32\tasks\malicious_task
status: completed
approved_at: '2025-06-26T18:57:03Z'
approved_by:
id: '123123'
email: john.smith@example.com
name: John smith
completed_at: '2025-06-26T18:57:03Z'
description: This represents an itemized list of the first 10 remediations for an incident report. If there are more than 10, use the remediations endpoint to retrieve information about them.
sent_at:
type: string
format: date-time
example: '2022-03-01T21:00:00Z'
description: ISO-8601 formatted timestamp for when a Huntress SOC analyst has notified necessary parties regarding this incident report. Null if not sent.
severity:
type: string
example: low
description: The severity of the incident report. Can be one of `low`, `high`, `critical`.
status:
type: string
example: closed
description: Status of the incident report. Can be one of `sent`, `closed`, `dismissed`
status_updated_at:
type: string
format: date-time
example: '2022-03-15T14:22:00Z'
description: ISO-8601 formatted timestamp for when the status of this incident report was last updated.
subject:
type: string
example: LOW - Incident on laptop01 (Test)
description: Autogenerated one-line description of the incident.
summary:
type: string
example: Huntress detected a malicious scheduled task on this host. We recommend removing the file and scheduled task listed in the remediation steps below.
description: Details of the incident report, as provided by a Huntress SOC analyst.
updated_at:
type: string
format: date-time
example: '2022-03-01T20:31:30Z'
description: ISO-8601 formatted timestamp for when this incident report was last updated.
description: IncidentReport model
User:
type: object
properties:
id:
type: integer
format: int64
example: 1
description: A unique identifier for the user.
email:
type: string
example: john.smith@example.com
description: The user's email.
name:
type: string
example: John Smith
description: The user's name.
RemediationBulkRejectionParameters:
type: object
properties:
comment:
type: string
description: A description of why the remediations were rejected. This explanation helps Huntress SOC analysts fix the remediation plan and re-issue the incident report.
useful:
type: boolean
description: Whether or not the remediation plan was useful.
name:
type: string
description: Name of the user rejecting the remediations. Falls back to the user attached to the API key if not provided.
phone_number:
type: string
description: Phone number to be contacted by the Huntress SOC. Falls back to the phone number of the user attached to the API key if not provided.
email:
type: string
description: Email to be contacted by the Huntress SOC. Falls back to the email of the user attached to the API key if not provided.
required:
- comment
- useful
description: Bulk Reject Remediations Remediations
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.