Skip to main content

Cases

A case is a container for investigating and responding to signals, carrying status, severity, assignment, and a body of typed blocks. A case's id is prefixed CAS_.

A case belongs to a Space and is the record of one investigation. It tracks workflow state (status, phase, severity, type, and assignment), a set of extracted entities, and time-to-respond metrics. Its body is an ordered list of blocks, each a typed unit such as a note, a captured query, an analysis, or a response action. A case is often opened from a signal, in which case the signal lands as a log block and the case name is drawn from the signal's message. Creating a case fires the CaseCreated webhook event.

Blocks​

The body of a case is an ordered array of blocks. Each block has a shared header and a type-specific payload. getById returns them under blocks, discriminated by resourceKind.

Every block carries these header fields.

FieldTypeDescription
idstringBlock ID.
resourceKindenumThe block type. One of the six values below.
createdAttimestampWhen the block was added.
createdByUserIdstringThe user who added the block. Null when added by a non-user actor.
commentsarray<object>Threaded comments on the block, each with id, text, createdAt, and createdByUserId. Empty when there are none.

The six block types.

resourceKindDescription
CaseNoteBlockA free-text note. Carries text.
CaseLogBlockA captured row set, such as the signal that opened the case. Carries columns and rows.
CaseQueryBlockA saved Hamelin query relevant to the investigation. Carries query.
CaseRelatedBlockA link to another resource. Carries relatedResourceId.
CaseAnalysisBlockAn automated analysis run. Carries status, resultSummary, resultDetails, interestLevel, and its own extracted entities. See below.
CaseResponseActionBlockA remediation task. Carries name, description, status, assignedToUserId, and completionNotes. See below.

A CaseAnalysisBlock runs through these states in status.

ValueDescription
PENDINGQueued, not yet started.
IN_PROGRESSRunning.
COMPLETEDFinished. resultSummary, resultDetails, and interestLevel are populated.
FAILEDErrored. errorMessage explains the failure.

Its interestLevel grades the finding as NOT_INTERESTING, INTERESTING, or MALICIOUS. Null until the analysis completes.

A CaseResponseActionBlock runs through these states in status.

ValueDescription
PENDINGNot yet acted on.
COMPLETEDDone. completionNotes records the outcome.
DISMISSEDClosed without action.

Entities​

An entity is an observable extracted from a case or an analysis block. Each has a type, a raw value, and a normalizedValue. The type is one of seven values.

ValueDescription
ip_addressAn IP address.
hostnameA host name.
emailAn email address.
domainA domain name.
usernameA user name.
file_hashA file hash.
urlA URL.

Timeline​

The timeline is the case's audit log, returned by getById under auditLogs. Each entry records one change.

FieldTypeDescription
idintegerAudit-log entry ID.
versionintegerThe case version this entry produced.
timestamptimestampWhen the change occurred.
userIdstringThe user who made the change. Null when the actor was not a user.
chatIdstringThe chat that made the change, prefixed CHT_. Null when not a chat.
changesobjectThe fields that changed, as a partial case.

Severities​

Severity is org-configurable. Each severity has an id and a name, managed at the organization level. The default set, ordered most to least severe, is Critical, High, Medium, Low, Informational. A case's severityId references one of these.

Phases​

Phase is org-configurable. Each phase has an id and a name, managed at the organization level. The default set, in workflow order, is Identification, Containment, Eradication, Recovery. A case's phaseId references one of these.

Types​

Type is org-configurable. Each type has an id, a name, and an icon, managed at the organization level. The default set is Phishing, Malware, Unauthorized Access, Data Breach, Policy Violation, Other. A case's typeId references one of these.

Inputs​

Severity, phase, and type reference per-organization workflow settings rather than fixed enums. Each is an integer id pointing at a configured severity, phase, or type. See those sections for the defaults.

FieldTypeRequiredDescription
namestringRequiredCase title.
statusenumRequiredWorkflow state: Open, On-Hold, or Closed.
severityIdintegerOptionalReferences a configured severity. Null when unset.
phaseIdintegerRequiredReferences a configured phase.
typeIdintegerOptionalReferences a configured type. Null when unset.
assignedToUserIdstringOptionalThe user the case is assigned to. Null when unassigned.
summarystringOptionalFree-text case summary.
closureCodeenumOptionalDisposition set when the case is closed. One of True Positive - Suspicious Activity, Benign Positive - Suspicious But Expected, False Positive - Incorrect Detection Logic, False Positive - Inaccurate Data, Other, Testing. Null while open.
suggestedClosureCodeDismissedbooleanOptionalWhether the suggested closure code was dismissed.
spaceIdstringRequiredThe Space the case belongs to.

Outputs​

FieldTypeDescription
entitiesarray<object>Extracted entities associated with the case.
suggestedClosureCodeenumA closure code proposed by analysis, from the same value set as closureCode. Null when none is suggested.
createdByDetectionIdstringThe detection whose signal opened the case, prefixed DET_. Null when the case was opened by hand.
timeToDetectMsintegerMilliseconds from the triggering signal's timestamp to case creation. Null when not measured.
timeToInvestigateMsintegerMilliseconds spent in investigation. Null when not measured.
timeToContainMsintegerMilliseconds to containment. Null when not measured.
timeToEradicateMsintegerMilliseconds to eradication. Null when not measured.
timeToResolveMsintegerMilliseconds to resolution. Null when not measured.
initialAnalysisCompletedAttimestampWhen the initial automated analysis finished. Null before it completes.
closedAttimestampWhen the case was closed. Null while open.
closedByUserIdstringThe user who closed the case. Null when closed by a non-user actor or still open.
closedByChatIdstringThe chat that closed the case, prefixed CHT_. Null when not closed by a chat.
analysisSkippedReasonenumWhy automated analysis was skipped. Only value is QuotaExceeded. Null when analysis ran.
analysisPendingbooleanWhether automated analysis is queued or running for the case. Present on the list endpoint only.

Plus the common resource fields.