ThreatLocker Audit Log
What the API calls the "audit" endpoints, the ThreatLocker UI calls the
Action Log — the same data either way. Every execution attempt,
every block, every permit, every audit-only match generates an entry.
This is your forensics surface: when something happened on an endpoint,
this is where you find out what.
Anti-triggers
- Admin change history. The Action Log records what executed on
endpoints, not who edited a policy or approved a request in the
console. For approval decisions use
threatlocker-approval-requests; for who invoked a tool through the
gateway, see the plugin's GOVERNANCE.md.
- A pending request rather than a past block. A user waiting on an
application is in the queue, not the log — use
threatlocker-approval-requests.
- Detection telemetry. Every entry here is a policy outcome (Block,
Permit, Audit), never a threat verdict. Behavioural detections are
sentinelone-threat-hunting or huntress-signals.
- Whether an agent is reporting at all. An empty log usually means a
stale agent; check check-in state with
threatlocker-computers.
API Tools
Search Action Log
threatlocker_audit_search
POST-based GetByParameters. Common filters via the body:
searchText — substring across file name, path, computer name, user
- Date-range fields (typically
fromDate / toDate in ISO 8601 UTC)
pageNumber, pageSize, orderBy: "actionTime",
isAscending: false (newest first is the usual default)
organizationId header for tenant scoping
Each row typically includes actionId, actionTime, kindOfAction
(Block, Permit, Audit), fileName, filePath, fileHash, signer,
computerName, userName, policyName, and processChain (parent
process info).
Get Action Detail
threatlocker_audit_get
Returns a single action with full context — full process tree, command
line, network endpoints contacted (when available), and any related
actions clustered around the same event.
File History
threatlocker_audit_file_history
Aggregates all Action Log entries for a given file path or hash. Use
this when you have a candidate IOC and want to know everywhere it
appeared in the fleet, when, and what happened each time.
kindOfAction Categorization
| Action |
Meaning |
| Block |
Policy denied execution — the binary did not run |
| Permit |
Policy allowed execution — the binary ran |
| Audit |
Audit-only — observed but not acted on (often Learning Mode) |
Block + Audit together is the high-signal pair for hunting:
- A Block event is your control working as designed.
- An Audit event in Secured Mode means something matched a watch
rule but was not stopped — investigate.
- An Audit event in Learning Mode is just baseline data, less
actionable.
Common Workflows
Timeline Around a Security Event
When given "something happened on host X around time T":
threatlocker_audit_search with searchText: "<host>",
fromDate: T - 1h, toDate: T + 1h,
orderBy: "actionTime", isAscending: true.
- Read forward through the timeline and look for the inflection —
the first unusual binary, the first child process from a known LOLBin
parent, the first network-active process.
- For any anomaly, call
threatlocker_audit_get for the full detail
and add the parent process to your investigation list.
- Pivot on
fileHash of the suspicious binary using
threatlocker_audit_file_history to see where else in the fleet it
appeared.
File-Path-Across-Endpoints Investigation
When given an IOC (path or hash):
threatlocker_audit_file_history with the IOC.
- Bucket results by
computerName — which endpoints saw it?
- For each affected endpoint, note the earliest
actionTime —
the spread pattern often points to patient zero.
- For every Permit action against the IOC, that endpoint may have
been impacted. For every Block, you have evidence the control
stopped it.
Repeated Denials From the Same Source
A pattern worth surfacing: same user or same computer generating many
Block events in a short window.
- Search a recent window with
kindOfAction: "Block".
- Group results client-side by
userName and computerName.
- Anyone with > N blocks in a short window is either:
- A user fighting their tooling (open an approval — see
approval-requests skill).
- A compromised account or malware retrying execution.
Policy Bypass / Audit-Only Match Correlation
- Search with
kindOfAction: "Audit".
- Filter to Secured-Mode endpoints (cross-reference computers via
threatlocker_computers_get — policyMode).
- Each Audit hit on a Secured endpoint indicates a watch rule fired
without enforcement — review the rule and decide if it should
become a Block.
Date-Range Filter Patterns
- Last hour —
now - 1h to now. Tight, high-signal.
- Last 24h — Daily triage and report scope.
- Last 7d — Threat-hunting baseline.
- Around an alert —
alertTime ± 30m is usually enough; expand
if the parent process is unclear.
Always send dates in ISO 8601 UTC. The Action Log itself stores UTC.
Edge Cases
- High-volume endpoints — Build servers, dev workstations and
jump boxes can generate thousands of audit rows per day. Use tight
date windows or
signer filters to keep result sets manageable.
- Duplicate-looking events — A single execution can produce
multiple log rows (file open, hash check, network connect). Always
read the
actionId to confirm uniqueness.
- Truncated process chains —
processChain is best-effort. If
the parent is empty or unknown, treat the row as a starting point
for further investigation, not a final answer.
Best Practices
- Start with the tightest possible time window; expand only if needed.
- Always pivot on
fileHash rather than filePath for IOC work —
attackers rename binaries, hashes don't change.
- Capture
actionId references in any incident write-up so a
reviewer can re-pull the exact source rows.
- Cross-reference findings with
approval-requests — a recent
approval may explain an otherwise suspicious Permit.
Related Skills
1---2name: threatlocker-audit-log3description: The ThreatLocker Action Log (the API name is "audit"): incident timelines, tracing a file's history across endpoints, repeated-denial detection, and correlating policy bypasses or audit-only matches with user and computer context.4---56# ThreatLocker Audit Log78What the API calls the "audit" endpoints, the ThreatLocker UI calls the9**Action Log** — the same data either way. Every execution attempt,10every block, every permit, every audit-only match generates an entry.11This is your forensics surface: when something happened on an endpoint,12this is where you find out what.1314## Anti-triggers1516- **Admin change history.** The Action Log records what executed on17 endpoints, not who edited a policy or approved a request in the18 console. For approval decisions use19 `threatlocker-approval-requests`; for who invoked a tool through the20 gateway, see the plugin's `GOVERNANCE.md`.21- **A pending request rather than a past block.** A user waiting on an22 application is in the queue, not the log — use23 `threatlocker-approval-requests`.24- **Detection telemetry.** Every entry here is a policy outcome (Block,25 Permit, Audit), never a threat verdict. Behavioural detections are26 `sentinelone-threat-hunting` or `huntress-signals`.27- **Whether an agent is reporting at all.** An empty log usually means a28 stale agent; check check-in state with `threatlocker-computers`.2930## API Tools3132### Search Action Log3334```35threatlocker_audit_search36```3738POST-based `GetByParameters`. Common filters via the body:3940- `searchText` — substring across file name, path, computer name, user41- Date-range fields (typically `fromDate` / `toDate` in ISO 8601 UTC)42- `pageNumber`, `pageSize`, `orderBy: "actionTime"`,43 `isAscending: false` (newest first is the usual default)44- `organizationId` header for tenant scoping4546Each row typically includes `actionId`, `actionTime`, `kindOfAction`47(Block, Permit, Audit), `fileName`, `filePath`, `fileHash`, `signer`,48`computerName`, `userName`, `policyName`, and `processChain` (parent49process info).5051### Get Action Detail5253```54threatlocker_audit_get55```5657Returns a single action with full context — full process tree, command58line, network endpoints contacted (when available), and any related59actions clustered around the same event.6061### File History6263```64threatlocker_audit_file_history65```6667Aggregates all Action Log entries for a given file path or hash. Use68this when you have a candidate IOC and want to know everywhere it69appeared in the fleet, when, and what happened each time.7071## `kindOfAction` Categorization7273| Action | Meaning |74|--------|---------|75| **Block** | Policy denied execution — the binary did not run |76| **Permit** | Policy allowed execution — the binary ran |77| **Audit** | Audit-only — observed but not acted on (often Learning Mode) |7879Block + Audit together is the high-signal pair for hunting:8081- A **Block** event is your control working as designed.82- An **Audit** event in Secured Mode means something matched a watch83 rule but was not stopped — investigate.84- An **Audit** event in Learning Mode is just baseline data, less85 actionable.8687## Common Workflows8889### Timeline Around a Security Event9091When given "something happened on host X around time T":92931. `threatlocker_audit_search` with `searchText: "<host>"`,94 `fromDate: T - 1h`, `toDate: T + 1h`,95 `orderBy: "actionTime"`, `isAscending: true`.962. Read forward through the timeline and look for the inflection —97 the first unusual binary, the first child process from a known LOLBin98 parent, the first network-active process.993. For any anomaly, call `threatlocker_audit_get` for the full detail100 and add the parent process to your investigation list.1014. Pivot on `fileHash` of the suspicious binary using102 `threatlocker_audit_file_history` to see where else in the fleet it103 appeared.104105### File-Path-Across-Endpoints Investigation106107When given an IOC (path or hash):1081091. `threatlocker_audit_file_history` with the IOC.1102. Bucket results by `computerName` — which endpoints saw it?1113. For each affected endpoint, note the earliest `actionTime` —112 the spread pattern often points to patient zero.1134. For every Permit action against the IOC, that endpoint may have114 been impacted. For every Block, you have evidence the control115 stopped it.116117### Repeated Denials From the Same Source118119A pattern worth surfacing: same user or same computer generating many120Block events in a short window.1211221. Search a recent window with `kindOfAction: "Block"`.1232. Group results client-side by `userName` and `computerName`.1243. Anyone with > N blocks in a short window is either:125 - A user fighting their tooling (open an approval — see126 `approval-requests` skill).127 - A compromised account or malware retrying execution.128129### Policy Bypass / Audit-Only Match Correlation1301311. Search with `kindOfAction: "Audit"`.1322. Filter to Secured-Mode endpoints (cross-reference computers via133 `threatlocker_computers_get` — `policyMode`).1343. Each Audit hit on a Secured endpoint indicates a watch rule fired135 without enforcement — review the rule and decide if it should136 become a Block.137138## Date-Range Filter Patterns139140- **Last hour** — `now - 1h` to `now`. Tight, high-signal.141- **Last 24h** — Daily triage and report scope.142- **Last 7d** — Threat-hunting baseline.143- **Around an alert** — `alertTime ± 30m` is usually enough; expand144 if the parent process is unclear.145146Always send dates in ISO 8601 UTC. The Action Log itself stores UTC.147148## Edge Cases149150- **High-volume endpoints** — Build servers, dev workstations and151 jump boxes can generate thousands of audit rows per day. Use tight152 date windows or `signer` filters to keep result sets manageable.153- **Duplicate-looking events** — A single execution can produce154 multiple log rows (file open, hash check, network connect). Always155 read the `actionId` to confirm uniqueness.156- **Truncated process chains** — `processChain` is best-effort. If157 the parent is empty or `unknown`, treat the row as a starting point158 for further investigation, not a final answer.159160## Best Practices161162- Start with the tightest possible time window; expand only if needed.163- Always pivot on `fileHash` rather than `filePath` for IOC work —164 attackers rename binaries, hashes don't change.165- Capture `actionId` references in any incident write-up so a166 reviewer can re-pull the exact source rows.167- Cross-reference findings with `approval-requests` — a recent168 approval may explain an otherwise suspicious Permit.169170## Related Skills171172- [api-patterns](../api-patterns/SKILL.md) — Auth and pagination173- [computers](../computers/SKILL.md) — Endpoint policy mode context174- [approval-requests](../approval-requests/SKILL.md) — Decisions that175 produce Permit actions176- [organizations](../organizations/SKILL.md) — Multi-tenant pivot