Search all guides

Reference · Tools

TheHive integration

Manage security incidents in TheHive (v3/v4): alerts, cases, observables, tasks, and logs. Supports Cortex analyzers/responders and binary file uploads.

Action (binary) Utility v1 Binary data

TheHive node manages security incidents in TheHive v3 and v4: alerts, cases, observables, tasks and logs, with Cortex analyzer and responder support and binary file uploads. A typical build is creating an alert from a detection, promoting it to a case, and attaching the observables for analysis.

Works as
Action (binary)
Tool name
thehive
Operations
12 — Count , Create , Execute Analyzer , Execute Responder , Get and 7 more
Parameters
73
Outputs
Output, Error
Credentials
TheHive API
Official docs
TheHive docs github.com

What you can build with TheHive

  • Create a security alert in TheHive.
  • Get all cases with severity High.
  • Create a file observable with binary upload.
  • Execute a Cortex analyzer on an observable.
  • Create a task log with file attachment.
  • Promote an alert to a case.
  • Execute a Cortex responder on a case.

Overview

TheHive is an open-source Security Incident Response Platform (SIRP). This tool provides full CRUD operations for alerts, cases, tasks, task logs, and observables in TheHive v3/v4. It supports binary data uploads for file-type observables and log attachments via multipart form upload (Pattern B). It integrates with Cortex for executing analyzers on observables and responders on any resource type. Supports both v0 (TheHive 3) and v1 (TheHive 4) API versions with transparent branching.

Node Type

Action (Binary) — handles file/binary data operations

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires TheHive API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Alertalert
Casecase
Loglog
Observableobservable
Tasktask

Operations

OperationValueDescription
CountcountCount records matching the filters (v1 API only)
CreatecreateCreate a record
Execute AnalyzerexecuteAnalyzerExecute Cortex analyzers
Execute ResponderexecuteResponderExecute a Cortex responder
GetgetGet a single record
Get ManygetAllGet many records
Mark as ReadmarkAsReadMark alert as read
Mark as UnreadmarkAsUnreadMark alert as unread
MergemergeMerge alert into an existing case
PromotepromotePromote alert to a case
UpdateupdateUpdate a record

Availability per resource:

  • Alert — count, create, executeResponder, get, getAll, markAsRead, markAsUnread, merge, promote, update
  • Case — count, create, executeResponder, get, getAll, update
  • Observable — count, create, executeAnalyzer, executeResponder, get, getAll, search, update
  • Task — count, create, executeResponder, get, getAll, search, update
  • Log — create, executeResponder, get, getAll

Parameters

Alert: Count

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— SeverityoptionsNo2
Options: 1, 2, 3
— TagsstringNo—
— TLPoptionsNo2
Options: 0, 1, 2, 3
— FollowbooleanNofalse
— Custom Fields (JSON)stringNo—

Alert: Create

ParameterTypeRequiredDefaultDescription
TitlestringYes—Title of the alert, case or task.
DescriptionstringYes—Description of the alert or case.
SeverityoptionsYes2Severity of the alert or case. Default=Medium.
Options: 1, 2, 3
DatestringYes—Date and time when the alert was raised (ISO 8601).
TagsstringYes—Comma-separated tags.
TLPoptionsYes2Traffic Light Protocol level. Default=Amber.
Options: 0, 1, 2, 3
Status (alertStatus)optionsYesNewStatus the new alert is created with: New, Updated, Ignored or Imported. Default=New.
Options: New, Updated, Ignored, Imported
TypestringYes—Type of the alert.
SourcestringYes—Source of the alert.
Source ReferencestringYes—Source reference of the alert.
FollowbooleanYestrueWhether the alert becomes active when updated.
Artifacts (JSON)jsonNo[]Observable artifacts as JSON array. Each object: { dataType, data, message, tags }.
JSON ParametersbooleanNotrueWhether to pass custom fields as JSON.
Additional FieldscollectionNo{}
— Case TemplatestringNo—Case template to use when a case is created from this alert.
— Custom Fields (JSON)stringNo—Custom fields as JSON object: { “fieldRef”: value }.

Alert: Execute Responder

ParameterTypeRequiredDefaultDescription
Alert IDstringYes—ID of the alert, case, observable, task or log the operation acts on.
Responder IDstringYes—ID of the Cortex responder to execute. Use GET /connector/cortex/responder/{type}/{id} to list available responders.

Alert: Get

ParameterTypeRequiredDefaultDescription
Alert IDstringYes—ID of the alert, case, observable, task or log the operation acts on.
OptionscollectionNo{}
— Include Similar CasesbooleanNofalse

Alert: Get Many

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— SeverityoptionsNo2
Options: 1, 2, 3
— TagsstringNo—
— TLPoptionsNo2
Options: 0, 1, 2, 3
— FollowbooleanNofalse
— Custom Fields (JSON)stringNo—
Return AllbooleanNofalseWhether to return all results or only up to the limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
— SortstringNo—Sort attribute with prefix: + for asc, - for desc. Example: +status or -date.

Alert: Mark as Read

ParameterTypeRequiredDefaultDescription
Alert IDstringYes—ID of the alert, case, observable, task or log the operation acts on.

Alert: Mark as Unread

ParameterTypeRequiredDefaultDescription
Alert IDstringYes—ID of the alert, case, observable, task or log the operation acts on.

Alert: Merge

ParameterTypeRequiredDefaultDescription
Alert IDstringYes—ID of the alert, case, observable, task or log the operation acts on.
Case ID (caseId)stringYes—ID of the case that owns the observable or task, or that the alert is merged into.

Alert: Promote

ParameterTypeRequiredDefaultDescription
Alert IDstringYes—ID of the alert, case, observable, task or log the operation acts on.
Additional FieldscollectionNo{}
— Case TemplatestringNo—Case template to use when promoting.

Alert: Update

ParameterTypeRequiredDefaultDescription
Alert IDstringYes—ID of the alert, case, observable, task or log the operation acts on.
JSON ParametersbooleanNotrueWhether to pass custom fields as JSON.
Update FieldscollectionNo{}
Options: 1, New, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— SeverityoptionsNo2
Options: 1, 2, 3
— StatusoptionsNoNew
Options: New, Updated, Ignored, Imported
— TagsstringNo—
— TLPoptionsNo2
Options: 0, 1, 2, 3
— FollowbooleanNotrue
— Case TemplatestringNo—
— Artifacts (JSON)stringNo—Artifacts as JSON string.
— Custom Fields (JSON)stringNo—Custom fields as JSON object.

Case: Count

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— SeverityoptionsNo2
Options: 1, 2, 3
— TagsstringNo—
— TLPoptionsNo2
Options: 0, 1, 2, 3
— StatusoptionsNoOpen
Options: Open, Resolved, Deleted
— OwnerstringNo—
— FlagbooleanNofalse
— Start DatestringNo—
— End DatestringNo—
— SummarystringNo—
— Impact StatusoptionsNo—
Options: NoImpact, WithImpact, NotApplicable
— Resolution StatusoptionsNo—
Options: Duplicated, FalsePositive, Indeterminate, Other, TruePositive
— Custom Fields (JSON)stringNo—

Case: Create

ParameterTypeRequiredDefaultDescription
TitlestringYes—Title of the alert, case or task.
DescriptionstringYes—Description of the alert or case.
SeverityoptionsYes2Severity of the alert or case. Default=Medium.
Options: 1, 2, 3
Start DatestringYes—Start date of the case or observable, or the submission date of the log (ISO 8601).
OwnerstringYes—Owner of the case.
FlagbooleanYesfalseWhether to flag the case or task.
TLPoptionsYes2Traffic Light Protocol level. Default=Amber.
Options: 0, 1, 2, 3
TagsstringYes—Comma-separated tags.
JSON ParametersbooleanNotrue
OptionscollectionNo{}
— End DatestringNo—Resolution date (ISO 8601).
— SummarystringNo—
— Metrics (JSON)jsonNo[]
— Custom Fields (JSON)stringNo—

Case: Execute Responder

ParameterTypeRequiredDefaultDescription
Responder IDstringYes—ID of the Cortex responder to execute. Use GET /connector/cortex/responder/{type}/{id} to list available responders.
Case ID (id)stringYes—ID of the alert, case, observable, task or log the operation acts on.

Case: Get

ParameterTypeRequiredDefaultDescription
Case ID (id)stringYes—ID of the alert, case, observable, task or log the operation acts on.

Case: Get Many

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— SeverityoptionsNo2
Options: 1, 2, 3
— TagsstringNo—
— TLPoptionsNo2
Options: 0, 1, 2, 3
— StatusoptionsNoOpen
Options: Open, Resolved, Deleted
— OwnerstringNo—
— FlagbooleanNofalse
— Start DatestringNo—
— End DatestringNo—
— SummarystringNo—
— Impact StatusoptionsNo—
Options: NoImpact, WithImpact, NotApplicable
— Resolution StatusoptionsNo—
Options: Duplicated, FalsePositive, Indeterminate, Other, TruePositive
— Custom Fields (JSON)stringNo—
Return AllbooleanNofalseWhether to return all results or only up to the limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
— SortstringNo—Sort attribute with prefix: + for asc, - for desc. Example: +status or -date.

Case: Update

ParameterTypeRequiredDefaultDescription
Case ID (id)stringYes—ID of the alert, case, observable, task or log the operation acts on.
JSON ParametersbooleanNotrue
Update FieldscollectionNo{}
Options: 1, New, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— SeverityoptionsNo2
Options: 1, 2, 3
— Start DatestringNo—
— End DatestringNo—
— OwnerstringNo—
— FlagbooleanNofalse
— TLPoptionsNo2
Options: 0, 1, 2, 3
— TagsstringNo—
— StatusoptionsNoOpen
Options: Open, Resolved, Deleted
— SummarystringNo—
— Impact StatusoptionsNo—
Options: NoImpact, WithImpact, NotApplicable
— Resolution StatusoptionsNo—
Options: Duplicated, FalsePositive, Indeterminate, Other, TruePositive
— Metrics (JSON)jsonNo[]
— Custom Fields (JSON)stringNo—

Log: Create

ParameterTypeRequiredDefaultDescription
Task ID (taskId)stringYes—ID of the task.
MessagestringYes—Description of the observable in its case, or the content of the log.
Start DatestringYes—Start date of the case or observable, or the submission date of the log (ISO 8601).
Status (logStatus)optionsYesOkStatus the new task log is created with: Ok or Deleted. Default=Ok.
Options: Ok, Deleted
OptionscollectionNo{}
— Attachment Binary PropertystringNo—Name of the binary property on the input item to attach. Leave empty for no attachment.

Log: Execute Responder

ParameterTypeRequiredDefaultDescription
Responder IDstringYes—ID of the Cortex responder to execute. Use GET /connector/cortex/responder/{type}/{id} to list available responders.
Log IDstringYes—ID of the alert, case, observable, task or log the operation acts on.

Log: Get

ParameterTypeRequiredDefaultDescription
Log IDstringYes—ID of the alert, case, observable, task or log the operation acts on.

Log: Get Many

ParameterTypeRequiredDefaultDescription
Task ID (taskId)stringYes—ID of the task.
Return AllbooleanNofalseWhether to return all results or only up to the limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)

Observable: Count

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— Data TypestringNo—Comma-separated data type filter.
— ValuestringNo—
— DescriptionstringNo—
— KeywordstringNo—
— MessagestringNo—
— TagsstringNo—
— IOCbooleanNofalse
— SightedbooleanNofalse
— TLPoptionsNo2
Options: 0, 1, 2, 3
— StatusoptionsNoOk
Options: Ok, Deleted

Observable: Create

ParameterTypeRequiredDefaultDescription
Case ID (caseId)stringYes—ID of the case that owns the observable or task, or that the alert is merged into.
Data TypestringYes—Type of the observable (e.g., ip, domain, url, file, hash, mail, etc.). Use “file” for binary upload.
DatastringYes—Observable data value (e.g., IP address, domain name, URL). (hidden when Data Type is file)
Binary PropertystringYesdataName of the binary property on the input item containing the file to upload. (shown when Data Type is file)
MessagestringYes—Description of the observable in its case, or the content of the log.
Start DatestringYes—Start date of the case or observable, or the submission date of the log (ISO 8601).
TLPoptionsYes2Traffic Light Protocol level. Default=Amber.
Options: 0, 1, 2, 3
IOCbooleanYesfalseWhether the observable is an Indicator of Compromise.
SightedbooleanYesfalseWhether the observable has been sighted.
Status (observableStatus)optionsYesOkStatus the new observable is created with: Ok or Deleted. Default=Ok.
Options: Ok, Deleted
OptionscollectionNo{}
— TagsstringNo—Comma-separated tags.

Observable: Execute Analyzer

ParameterTypeRequiredDefaultDescription
Observable IDstringYes—ID of the alert, case, observable, task or log the operation acts on.
Data TypestringYes—Type of the observable (e.g., ip, domain, url, file, hash, mail, etc.). Use “file” for binary upload.
Analyzer IDsstringYes—Comma-separated analyzer IDs in format “analyzerId::cortexId”.

Observable: Execute Responder

ParameterTypeRequiredDefaultDescription
Responder IDstringYes—ID of the Cortex responder to execute. Use GET /connector/cortex/responder/{type}/{id} to list available responders.
Observable IDstringYes—ID of the alert, case, observable, task or log the operation acts on.

Observable: Get

ParameterTypeRequiredDefaultDescription
Observable IDstringYes—ID of the alert, case, observable, task or log the operation acts on.

Observable: Get Many

ParameterTypeRequiredDefaultDescription
Case ID (caseId)stringYes—ID of the case that owns the observable or task, or that the alert is merged into.
Return AllbooleanNofalseWhether to return all results or only up to the limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
— SortstringNo—Sort attribute with prefix: + for asc, - for desc. Example: +status or -date.
ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— Data TypestringNo—Comma-separated data type filter.
— ValuestringNo—
— DescriptionstringNo—
— KeywordstringNo—
— MessagestringNo—
— TagsstringNo—
— IOCbooleanNofalse
— SightedbooleanNofalse
— TLPoptionsNo2
Options: 0, 1, 2, 3
— StatusoptionsNoOk
Options: Ok, Deleted
Return AllbooleanNofalseWhether to return all results or only up to the limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
— SortstringNo—Sort attribute with prefix: + for asc, - for desc. Example: +status or -date.

Observable: Update

ParameterTypeRequiredDefaultDescription
Observable IDstringYes—ID of the alert, case, observable, task or log the operation acts on.
Update FieldscollectionNo{}
Options: 1, New, 0, Open, NoImpact, Duplicated, Ok, Waiting
— MessagestringNo—
— TagsstringNo—
— TLPoptionsNo2
Options: 0, 1, 2, 3
— IOCbooleanNofalse
— SightedbooleanNofalse
— StatusoptionsNoOk
Options: Ok, Deleted

Task: Count

ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— OwnerstringNo—
— StatusoptionsNoWaiting
Options: Waiting, InProgress, Completed, Cancel
— FlagbooleanNofalse
— Start DatestringNo—
— End DatestringNo—

Task: Create

ParameterTypeRequiredDefaultDescription
Case ID (caseId)stringYes—ID of the case that owns the observable or task, or that the alert is merged into.
TitlestringYes—Title of the alert, case or task.
Status (taskStatus)optionsYesWaitingStatus the new task is created with: Waiting, InProgress, Completed or Cancel. Default=Waiting.
Options: Waiting, InProgress, Completed, Cancel
FlagbooleanYesfalseWhether to flag the case or task.
OptionscollectionNo{}
— DescriptionstringNo—
— OwnerstringNo—
— Start DatestringNo—
— End DatestringNo—

Task: Execute Responder

ParameterTypeRequiredDefaultDescription
Responder IDstringYes—ID of the Cortex responder to execute. Use GET /connector/cortex/responder/{type}/{id} to list available responders.
Task ID (id)stringYes—ID of the alert, case, observable, task or log the operation acts on.

Task: Get

ParameterTypeRequiredDefaultDescription
Task ID (id)stringYes—ID of the alert, case, observable, task or log the operation acts on.

Task: Get Many

ParameterTypeRequiredDefaultDescription
Case ID (caseId)stringYes—ID of the case that owns the observable or task, or that the alert is merged into.
Return AllbooleanNofalseWhether to return all results or only up to the limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
— SortstringNo—Sort attribute with prefix: + for asc, - for desc. Example: +status or -date.
ParameterTypeRequiredDefaultDescription
FilterscollectionNo{}
Options: 1, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— OwnerstringNo—
— StatusoptionsNoWaiting
Options: Waiting, InProgress, Completed, Cancel
— FlagbooleanNofalse
— Start DatestringNo—
— End DatestringNo—
Return AllbooleanNofalseWhether to return all results or only up to the limit.
LimitnumberNo100Max number of results to return. (shown when Return All is false)
OptionscollectionNo{}
— SortstringNo—Sort attribute with prefix: + for asc, - for desc. Example: +status or -date.

Task: Update

ParameterTypeRequiredDefaultDescription
Task ID (id)stringYes—ID of the alert, case, observable, task or log the operation acts on.
Update FieldscollectionNo{}
Options: 1, New, 0, Open, NoImpact, Duplicated, Ok, Waiting
— TitlestringNo—
— DescriptionstringNo—
— OwnerstringNo—
— StatusoptionsNoWaiting
Options: Waiting, InProgress, Completed, Cancel
— FlagbooleanNofalse
— Start DatestringNo—
— End DatestringNo—

All Operations

ParameterTypeRequiredDefaultDescription
Max ConcurrencynumberNo5Maximum number of items to process concurrently.

Output Data

Every operation produces exactly one output item per input item — nothing fans out. Anything already on the item passes through, and binary data is forwarded unchanged.

  • Single-record operations (create, get, update, promote, merge, markAsRead, markAsUnread, executeAnalyzer, executeResponder) merge the returned record onto the top level of the item JSON.
  • List operations (getAll, search) put the whole list on one item as results, alongside resultCount. Use a Split Out node on results when you need one item per record downstream.
  • count puts the number on the item as count.
  • Endpoints that answer with no content leave success: true on the item.

executeAnalyzer accepts several analyzers at once and runs them in sequence; the item carries the last analyzer’s job result, so run one analyzer per node when you need each result separately.

Example Configuration

Create an alert:

{
  "type": "thehive",
  "parameters": {
    "resource": "alert",
    "operation": "create",
    "title": "Suspicious Network Activity",
    "description": "Detected unusual traffic patterns",
    "severity": 2,
    "tlp": 2,
    "status": "New",
    "type": "network",
    "source": "SIEM",
    "sourceRef": "{{ $json.eventId }}",
    "date": "{{ $json.detectedAt }}",
    "follow": true,
    "tags": "network,suspicious,investigation"
  }
}

Create an alert carrying observable artifacts and custom fields:

{
  "type": "thehive",
  "parameters": {
    "resource": "alert",
    "operation": "create",
    "title": "Malware Detection",
    "description": "Malicious file detected on endpoint",
    "severity": 3,
    "tlp": 2,
    "status": "New",
    "type": "malware",
    "source": "EDR",
    "sourceRef": "{{ $json.eventId }}",
    "date": "{{ $json.detectedAt }}",
    "follow": true,
    "tags": "malware",
    "artifactsJson": "[{\"dataType\":\"file_hash\",\"data\":\"5d41402abc4b2a76b9719d911017c592\",\"message\":\"MD5 hash of malicious file\",\"tags\":[\"malware\",\"hash\"]}]",
    "additionalFields": {
      "caseTemplate": "malware-investigation",
      "customFieldsJson": "{\"priority\":\"high\",\"department\":\"IT\"}"
    }
  }
}

Update an alert:

{
  "type": "thehive",
  "parameters": {
    "resource": "alert",
    "operation": "update",
    "id": "alert-123",
    "updateFields": {
      "title": "Updated Alert Title",
      "severity": 3,
      "status": "Updated",
      "tags": "network,confirmed,escalated"
    }
  }
}

Promote an alert to a case:

{
  "type": "thehive",
  "parameters": {
    "resource": "alert",
    "operation": "promote",
    "id": "alert-123",
    "additionalFields": {
      "caseTemplate": "security-incident"
    }
  }
}

List new high-severity alerts:

{
  "type": "thehive",
  "parameters": {
    "resource": "alert",
    "operation": "getAll",
    "returnAll": false,
    "limit": 50,
    "filters": {
      "severity": 3,
      "tags": "malware"
    },
    "options": {
      "sort": "-date"
    }
  }
}

Create a case:

{
  "type": "thehive",
  "parameters": {
    "resource": "case",
    "operation": "create",
    "title": "Security Incident - Data Breach",
    "description": "Potential data breach detected in customer database",
    "severity": 3,
    "owner": "security-analyst",
    "flag": true,
    "tlp": 3,
    "startDate": "{{ $json.detectedAt }}",
    "tags": "breach,database,urgent",
    "options": {
      "summary": "Initial investigation required",
      "customFieldsJson": "{\"affectedSystems\":[\"db-prod-01\"],\"estimatedImpact\":\"high\"}"
    }
  }
}

Add an IP observable to a case:

{
  "type": "thehive",
  "parameters": {
    "resource": "observable",
    "operation": "create",
    "caseId": "case-456",
    "dataType": "ip",
    "data": "192.168.1.100",
    "message": "Suspicious IP address from network logs",
    "startDate": "{{ $json.detectedAt }}",
    "ioc": true,
    "sighted": true,
    "status": "Ok",
    "tlp": 2,
    "options": {
      "tags": "network,suspicious,internal"
    }
  }
}

Attach a file from an upstream node as a file observable:

{
  "type": "thehive",
  "parameters": {
    "resource": "observable",
    "operation": "create",
    "caseId": "case-456",
    "dataType": "file",
    "binaryPropertyName": "malwareFile",
    "message": "Suspected malware sample",
    "startDate": "{{ $json.detectedAt }}",
    "ioc": true,
    "sighted": false,
    "status": "Ok",
    "tlp": 3
  }
}

Run Cortex analyzers on an observable:

{
  "type": "thehive",
  "parameters": {
    "resource": "observable",
    "operation": "executeAnalyzer",
    "id": "observable-789",
    "dataType": "file",
    "analyzers": "Cuckoo_Sandbox_URL_analysis::cortex-01,VirusTotal_GetReport::cortex-01"
  }
}

Search observables:

{
  "type": "thehive",
  "parameters": {
    "resource": "observable",
    "operation": "search",
    "returnAll": false,
    "limit": 100,
    "filters": {
      "dataType": "ip",
      "ioc": true,
      "tlp": 2,
      "tags": "malicious"
    },
    "options": {
      "sort": "-createdAt"
    }
  }
}

Create an investigation task:

{
  "type": "thehive",
  "parameters": {
    "resource": "task",
    "operation": "create",
    "caseId": "case-456",
    "title": "Analyze Network Logs",
    "status": "Waiting",
    "flag": false,
    "options": {
      "description": "Review network logs for the past 24 hours",
      "owner": "network-analyst",
      "startDate": "{{ $json.detectedAt }}"
    }
  }
}

Log progress on a task, attaching a report file:

{
  "type": "thehive",
  "parameters": {
    "resource": "log",
    "operation": "create",
    "taskId": "task-101",
    "message": "Analysis completed. Found 15 suspicious connections. See attached report.",
    "startDate": "{{ $json.completedAt }}",
    "status": "Ok",
    "options": {
      "attachmentBinaryProperty": "reportFile"
    }
  }
}

Run a containment responder on a case:

{
  "type": "thehive",
  "parameters": {
    "resource": "case",
    "operation": "executeResponder",
    "id": "case-456",
    "responder": "Block_IP::cortex-01"
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

This tool manages security incidents by creating, getting, and updating alerts, cases, observables, and tasks, and by creating and getting logs within TheHive. It is ideal for managing incident response workflows, including executing Cortex analyzers on observables and responders on various resources, and uploading binary files for observables or log attachments. The tool produces updated incident data, new alerts, cases, tasks, observables, and logs, or the results from Cortex analyzer and responder executions.

Alert Investigation Workflow

  1. Create Alert — initial security event detection
  2. Get Alert Details — retrieve full alert information
  3. Update Alert — add analysis findings
  4. Promote to Case — escalate for full investigation
  5. Create Observables — add IOCs and evidence
  6. Execute Analyzers — run automated analysis
  7. Create Tasks — assign investigation steps
  8. Execute Responders — take containment actions

Custom Fields

Custom fields are supplied as a JSON object string in the Custom Fields (JSON) field of the relevant collection, for example {"priority":"P1","department":"SOC","assignee":"analyst@company.com"}. Malformed JSON fails the item rather than being silently dropped.

API Versions

The node speaks both TheHive 3 (v0) and TheHive 4 (v1) APIs and picks the right calls for your instance. count is available on the v1 API only.

Frequently asked questions

What does an investigation flow look like?

Create the alert on detection, get its details, update it with analysis findings, promote it to a case for full investigation, then create observables against that case.

What is the Cortex integration for?

Running analyzers and responders — the automated enrichment and response actions Cortex provides — from inside the workflow rather than by hand in the UI.

Can it attach files?

Yes, binary file upload is supported, so evidence collected earlier in the workflow can be attached to the case.

How does this differ from the TheHive 5 node?

This targets v3 and v4. TheHive 5 has its own node covering the newer API, including comments, pages and queries.

Build with TheHive

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need TheHive API credentials first.

Open BusyBot

Last reviewed . Spotted something wrong? Tell us.