Everything you need to set up, configure, and get the most out of ClearSOC.
ClearSOC is a multi-tenant Security Operations Center platform. It ingests security events from your cloud providers, automatically detects threats using configurable rules, and guides your team through investigation and response — all mapped to the NIST Cybersecurity Framework 2.0.
Sign up at clearsocapp.com/signup. You'll be walked through company setup (name, domain, industry) and an onboarding wizard that connects your first integration.
Navigate to Integrations and connect at least one cloud provider. ClearSOC connects to 10 event sources; Microsoft 365, Google Workspace and AWS CloudTrail are covered step by step below. A connected integration syncs about every 15 minutes, and its first sync pulls the previous 24 hours.
After the first sync, your Dashboard will show live event ingestion counts, open incidents, and your NIST CSF 2.0 compliance score. New incidents appear in real-time via WebSocket push — no refresh needed.
| Term | Description |
|---|---|
| Security Event | A raw log entry from a connected source — e.g. an Entra ID sign-in, an S3 bucket policy change, or a Drive file shared outside your domain. |
| Incident | A threat detected by a rule. Carries severity (Critical → Info), MITRE ATT&CK tactic, and NIST CSF category. |
| Detection Rule | A threshold or sequence pattern that fires an incident when matched events exceed a threshold or occur in a defined order. |
| Response Action | One of 9 actions ClearSOC can take, such as blocking an IP, disabling a user or isolating a device. Blocking an IP and isolating a device always wait for a person; whether the rest do depends on your autonomy level. |
| NIST Score | A 0–100 health score per NIST CSF 2.0 function (Govern, Identify, Protect, Detect, Respond, Recover) computed from the severity and age of open incidents, and for Govern from your control attestations. |
ClearSOC pulls security events from your sources over OAuth 2.0 or with an API key. Each integration syncs on a recurring schedule and maps raw provider events to a normalized SecurityEvent schema.
Covers Entra ID (Azure AD) sign-in logs and the security alerts Microsoft Graph exposes, including Defender for Office 365 email alerts where you license it. The device list feeds your asset inventory. Successful sign-ins are kept with their approximate location, so ClearSOC can flag one person signing in from two places too far apart to travel between.
AuditLog.Read.All and SecurityAlert.Read.All; the response actions use User.ReadWrite.All (disabling a user, revoking sessions), User-PasswordProfile.ReadWrite.All (forcing a password reset, which Microsoft also allows only when the admin who connects holds a role that can reset passwords, such as Global Administrator or User Administrator) and IdentityRiskyUser.ReadWrite.All (marking a user as risky). The asset inventory reads the device list with Device.Read.All. The screen also lists the sign-in scopes openid, profile, email and offline_access.Covers the Admin SDK activity reports: sign-ins (including those Google flags as suspicious), admin console changes, Drive activity such as files shared outside your domain, and Gmail forwarding to outside addresses. ChromeOS devices feed your asset inventory.
admin.reports.audit.readonly for detection, and admin.directory.user, which the response actions use to suspend a user or force a password change; admin.directory.device.chromeos.readonly for the ChromeOS devices in your asset inventory; plus the sign-in scopes openid, email and profile.Covers management events such as IAM changes, S3 bucket policy changes and EC2 actions, read through CloudTrail's LookupEvents API. Name your trail's S3 bucket and ClearSOC reads the trail's log files instead: every account in an organisation trail, and the data events you choose (S3 object-level activity, for example). Without a bucket, S3 object-level activity is not read.
ClearSOCIntegration (any name starting with ClearSOC works) with the trust policy shown. It lets ClearSOC's account assume the role only with your external ID.us-east-2, or several separated by commas), then test and add. ClearSOC always reads us-east-1 as well, where AWS records console sign-ins and IAM changes.Connect Jira from the Helpdesk page and choose the project and issue type ClearSOC files issues in. With Jira Service Management, an admin can also have ARGUS answer the service desks you choose:
| Provider | Default interval | First sync pulls |
|---|---|---|
| Microsoft 365 | Every 15 min | Last 24 hours |
| Google Workspace | Every 15 min | Last 24 hours |
| AWS CloudTrail | Every 15 min | Last 24 hours |
A sync that fails is retried with a growing wait, doubling after each failure up to a cap. After an outage, the next good sync asks for everything since the last one, up to seven days back.
Detection rules define what constitutes a threat. A rule's logic is a JSON object whose type is either threshold or sequence.
Both types match events with a condition: a field, a value and an optional operator. The field is one of event_type, source, actor, source_ip or message; the operator is contains (the default, case-insensitive) or equals.
Fire an incident when events matching the condition occur N or more times within a time window. Optionally group by source_ip or actor so each IP or user has its own counter.
{
"type": "threshold",
"field": "event_type",
"value": "FailedSignIn",
"threshold": 10,
"window_minutes": 5,
"group_by": "source_ip"
}This fires when a single IP produces 10 or more FailedSignIn events within 5 minutes, a brute-force pattern.
Track multi-stage attack patterns. Each stage is one condition with an order. The stages must match in order, for the same user (or IP, with correlate_by), within total_window_minutes.
{
"type": "sequence",
"correlate_by": "actor",
"total_window_minutes": 120,
"stages": [
{ "order": 1, "field": "event_type", "value": "FailedSignIn" },
{ "order": 2, "field": "event_type", "value": "SuspiciousEmailForward" },
{ "order": 3, "field": "event_type", "value": "ExternalFileShare" }
]
}This fires when the same Google Workspace user fails a sign-in, then forwards mail outside the domain, then shares a Drive file externally, all within two hours.
Rules are created in the app or with POST /api/rules, whose body takes these fields:
| Field | Type | Description |
|---|---|---|
name | string | Human-readable rule name shown in the UI. |
description | string | Explains what the rule detects and why. |
severity | critical | high | medium | low | info | Severity of the incident created when this rule fires. |
mitreTactic | string | MITRE ATT&CK tactic (e.g. "Initial Access", "Lateral Movement"). Used to map the incident to a NIST CSF category. |
isEnabled | boolean | Disabled rules are skipped during evaluation but retained for auditing. |
logic | string | The threshold or sequence definition above, sent as a JSON-encoded string. |
mitreTactic to a NIST CSF 2.0 function when an incident is created. This drives your compliance score in real time.ClearSOC executes a response action through the integration that owns the target: Microsoft 365 or Google Workspace for user accounts, Palo Alto NGFW or AWS WAF for IP blocks, CrowdStrike or SentinelOne for hosts, and your AWS account for IAM users and EC2 instances. An action runs when ARGUS takes it on its own, when someone approves it, or when an Analyst or Admin runs it from an incident.
| Action | What it does | Waits for approval | Can be undone |
|---|---|---|---|
| Block IP | Pushes a block rule to your Palo Alto NGFW or AWS WAF, and marks any asset with that IP as Compromised. | Always | Yes |
| Isolate Asset | Network-isolates the host through CrowdStrike or SentinelOne, and marks the asset Compromised. | Always | Yes |
| Disable User | Sets accountEnabled: false in Entra ID, or suspends the user in Google Workspace. | Depends on the autonomy level | Yes |
| Enforce MFA | Revokes every sign-in session (Microsoft Graph revokeSignInSessions, or a Google sign-out), so the user signs in again through your MFA policy. | Depends on the autonomy level | No: the change cannot be undone |
| Force Password Reset | Sets forceChangePasswordNextSignIn: true in Entra ID, or requires a password change in Google Workspace. | Depends on the autonomy level | No: the change cannot be undone |
| Tag User as Risky | Confirms the user as compromised in Entra ID Identity Protection, so your Conditional Access policies can act on it. Needs Entra ID P2. | Depends on the autonomy level | Yes |
| Disable IAM User | Deletes the AWS IAM user's console password and deactivates its access keys. | Depends on the autonomy level | Only by hand, outside ClearSOC |
| Revoke Access Keys | Deactivates the IAM user's active access keys. | Depends on the autonomy level | Yes |
| Quarantine EC2 | Moves the instance into a quarantine security group with no inbound or outbound rules, recording its original groups first. | Depends on the autonomy level | Yes |
When ARGUS proposes an action it may not take on its own, it creates an Approval record instead of executing. Block IP and Isolate Asset always do, at every autonomy level, and so does every action ARGUS proposes on a Critical incident. Approvals expire after 24 hours. Anyone with the Analyst or Admin role can approve or reject from the Approvals page.
Each tenant picks one of 4 autonomy levels. The level sets the highest incident severity ARGUS may act on without a person, and which actions it may take there:
| Level | Acts on its own on | What it may do on its own | Notes |
|---|---|---|---|
| Conservative | Low and Info incidents | Tag User as Risky | The default. Enforcing MFA and forcing a password reset wait for a person here, because neither can be undone. |
| Balanced | Medium incidents and below | Any action except Block IP and Isolate Asset | |
| Aggressive | High incidents and below | Any action except Block IP and Isolate Asset | |
| Autonomous | High incidents and below | Any action except Block IP and Isolate Asset | Same ceiling as Aggressive; this level also runs the unattended agent. |
At every level, Block IP and Isolate Asset wait for approval, and ARGUS never acts on its own on a Critical incident. You can also restrict ARGUS to a list of action types; anything outside the list goes to approval.
ClearSOC computes a real-time NIST CSF 2.0 health score (0–100) for your tenant. The overall score is a weighted average of the function scores ClearSOC can actually measure — each reflecting how well you're detecting, responding to, and recovering from threats in that domain. Until a connected data source has synced, there is no score: the posture page says so instead of showing a number.
| NIST Function | Weight | Driven by |
|---|---|---|
| Govern | 10% | Governance control attestations (% attested and not expired) |
| Identify | 12% | Open incidents mapped to ID.* categories |
| Protect | 18% | Open incidents mapped to PR.* categories |
| Detect | 25% | Open incidents mapped to DE.* categories — highest weight |
| Respond | 20% | Open incidents mapped to RS.* categories |
| Recover | 15% | Open incidents mapped to RC.* categories + failed recovery actions |
Each open incident deducts points from its function score. The penalty increases with severity and age:
| Severity | Base penalty | Extra once open over 72h |
|---|---|---|
| Critical | −12 pts | −4 pts |
| High | −6 pts | −4 pts |
| Medium | −2 pts | −4 pts |
| Low / Info | −1 pt | −4 pts |
A function ClearSOC is measuring scores 100 while it has nothing open against it. One open Critical incident takes that function to 88, and to 84 once it has been open for more than 72 hours.
A function is measured only when something maps to it: an enabled detection rule, or a recorded incident. A function nothing maps to is reported as not measured — it is left out of the average rather than counted as 100, because no evidence is not the same as a clean result. Identify is currently in that position for every tenant: no ATT&CK tactic maps to it, and asset and vulnerability outcomes are not scored yet. The posture page and the exports show which functions were measured and what share of the framework, by weight, the overall score covers.
ClearSOC tracks SLA compliance on resolved incidents:
| Severity | SLA target |
|---|---|
| Critical | 4 hours |
| High | 8 hours |
| Medium | 24 hours |
| Low | 72 hours |
If neither an enabled detection rule nor any incident covers a NIST function, each of that function's reference categories is listed as a coverage gap on the Compliance page, with a suggested next step.
An admin or an auditor can download one incident as a zip from its page, to hand to an auditor, an insurer or a regulator. It holds four files: report.pdf, the incident told in order; record.json, its stored record: the detection rule, the assessment, ARGUS decisions, the response actions, the approvals, linked tickets, notes and the audit trail, each value as it was stored; events.csv, its events; and manifest.json, the SHA-256 digest of each of the other three. Every export writes the manifest's digest to your audit log, so a pack can be checked later against that entry. The audit trail in the pack leaves out the IP address and browser of the people in it, and an incident with more events than a pack carries says so in every file. The pack is a compliance export, like the insurance-readiness PDF.
All API endpoints are under https://clearsocapp.com/api. Authentication uses a JWT stored in an httpOnly cookie (clearsoc_access), refreshed automatically via a separate refresh token cookie. Its lifetime is your tenant's session timeout capped at 2 hours.
POST /api/auth/login
Content-Type: application/json
{ "email": "you@company.com", "password": "your-password" }
→ 200 OK (sets clearsoc_access + clearsoc_refresh cookies)
{ "user": { "id": "...", "email": "...", "role": "admin", "tenantId": "..." } }POST /api/auth/refresh → refreshes access token using refresh cookie POST /api/auth/logout → revokes refresh token, clears cookies
If the account uses MFA, the login response is { "mfaRequired": true } instead, and POST /api/auth/mfa/verify issues the session once the code checks out.
Push events from any source with an ingest key, created on the API Keys page. The key decides the tenant, so the body carries no tenant ID.
POST /api/events
X-Api-Key: csk_…
Idempotency-Key: 7d2c9e41-… (optional)
Content-Type: application/json
{
"events": [
{
"source": "crowdstrike",
"eventType": "ProcessBlocked",
"severity": "High",
"message": "Malicious process blocked on WORKSTATION-01",
"rawData": { "processName": "mimikatz.exe", "pid": 4821 },
"occurredAt": "2026-05-09T12:00:00Z"
}
]
}
→ 200 OK { "ingested": 1, "usedToday": …, "capPerDay": … }Up to 5,000 events per request. A batch that would pass your plan's daily cap is refused whole, with 429 and a Retry-After that points at midnight UTC. Resending with the same Idempotency-Key replays the first response instead of ingesting twice.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/incidents | List incidents for your tenant (paginated, filterable by status and severity) |
| GET | /api/incidents/:id | Get a single incident with its AI analysis and recommended actions |
| PATCH | /api/incidents/:id/status | Change an incident's status, e.g. { "status": "resolved" } |
| GET | /api/assets | List asset inventory |
| GET | /api/rules | List detection rules |
| POST | /api/rules | Create a new detection rule |
| GET | /api/compliance/posture | Full NIST CSF 2.0 posture snapshot |
| GET | /api/integrations | List connected integrations and sync status |
| POST | /api/integrations/:id/sync | Start a sync now instead of waiting for the schedule |
| GET | /api/tickets | List helpdesk tickets |
| GET | /api/reports/compliance | Compliance report data for one framework: ?framework=nist-csf, hipaa, pci-dss or soc2 |
| Endpoint group | Limit |
|---|---|
| Sign-in and password reset | 10 requests / minute per IP |
| Public forms, such as demo requests | 30 requests / minute per IP |
| Endpoints that queue heavy work, such as ARGUS previews and hunts | 20 requests / minute per IP |
| Public API (/api/v1) | 100 requests / minute per API key |
| Everything else, including /api/events | 1000 requests / minute per IP |
Exceeded limits return 429 Too Many Requests with a Retry-After header.
/swagger in development environments. Production Swagger is disabled for security.Something missing or unclear? Reach out to the team.
support@clearsocapp.com