Overview
The SentinelOne destination forwards Ocean events to your Singularity Data Lake (SDL / AI-SIEM) using its Scalyr-derivedaddEvents HTTP ingest API. Events arrive as structured records (one record per Ocean event) with flat attributes, ready to power AI-SIEM dashboards, correlation rules, and PowerQuery investigations.
For an introduction to event types, payloads, and delivery semantics, see the SIEM Forwarding Overview.
Prerequisites
Before configuring the destination in Ocean, gather two values from your SentinelOne SDL tenant:- The Ingest URL — your region’s
addEventsendpoint, of the formhttps://xdr.<region>.sentinelone.net/api/addEvents(the exact host depends on your SDL deployment region). - A Write API Key — a token authorized to write events into SDL. Treat this as a secret. Ocean places this value in the request body’s
tokenfield on every POST.
Ocean delivers over HTTPS only. The Ingest URL must start with
https:// and must end in /api/addEvents.Get the ingest URL and write API key
- In the SentinelOne console, open Singularity Data Lake (sometimes labeled AI-SIEM or XDR).
- Navigate to Settings → API Keys (the exact menu name varies by SDL release — look for the screen that lists log-ingest tokens).
-
Note your region in SDL. SentinelOne’s documented ingest hosts are:
The full Ingest URL Ocean needs is
Region Ingest host US xdr.us1.sentinelone.netCA xdr.ca1.sentinelone.netEMEA xdr.eu1.sentinelone.netAP xdr.ap1.sentinelone.netAPS xdr.aps1.sentinelone.netAU xdr.apse2.sentinelone.nethttps://<region-host>/api/addEvents. - Create (or copy an existing) Write API Key scoped for event ingestion. Store it securely — Ocean stores it encrypted and never displays it again.
Configure the destination in Ocean
Fill in the basics
| Field | Value |
|---|---|
| Name | A friendly name (e.g. SOC SentinelOne Prod). |
| URL | The full addEvents URL you assembled above (https://xdr.<region>.sentinelone.net/api/addEvents). |
| Write Token | The Write API Key you copied above. Ocean stores this encrypted; it is never displayed again. |
Pick events to forward
Under Events to forward, select at least one:
- Inbound Protection — malicious cases
- Inbound Protection — spam cases
- AI Response — report phishing
- AI Response — quarantine release
- Audit Logs
How events arrive in SentinelOne
Each batch is POSTed as a single JSON object to/api/addEvents. The request body looks like this:
tokencarries your Write API Key — there is noAuthorizationheader.sessionis a stable identifier Ocean generates per sender lifetime.sessionInfo.serverHost/sessionInfo.logfileare fixed toocean-security/ocean:siemso events are always findable and the documented queries (serverHost = 'ocean-security') always hold.- Each event uses
tsin nanoseconds since the UNIX epoch, encoded as a string. attrscarriesevent_idandevent_typeplus the Ocean event payload fully flattened into top-level scalar columns (see below).- The Scalyr
sevlevel is always3(info). Ocean does not encode the verdict in the lake-level severity — use theverdictfield for triage instead.
Field structure: everything is flattened
SentinelOne SDL only exposes top-level scalar fields as queryable columns. Values nested inside objects are stored but are not reliably queryable, so Ocean flattens every event before sending it. The event payload reference describes Ocean’s nested JSON; in SDL that same data arrives flat, transformed by two rules:- Nested objects are flattened with an underscore-joined key. A field at
original_email.subjectbecomes the top-level keyoriginal_email_subject;analysis.verdictbecomesanalysis_verdict;message.internet_message_idbecomesmessage_internet_message_id. When a child key already begins with its parent’s name the duplication is collapsed, soanalysis.analysis_reasoningbecomesanalysis_reasoning(notanalysis_analysis_reasoning). - Arrays are sent as a single JSON-encoded string.
email.recipientsarrives as the keyemail_recipientswith a string value like["user@your-org.com"]. Query these withcontainsrather than equality. - Freeform JSON blobs are kept as a single JSON string. Fields whose shape varies per record — the audit-log
details,resource_before, andresource_aftersnapshots — are not flattened. They arrive as one JSON-encoded string so they don’t explode into unbounded, inconsistent per-property columns. Query them withcontains.
| Nested path (overview) | SDL flat key | Example value |
|---|---|---|
analysis.verdict | analysis_verdict | malicious |
original_email.subject | original_email_subject | Action required: password reset |
original_email.sender_address | original_email_sender_address | phisher@malicious.example |
email.recipients (array) | email_recipients | ["user@your-org.com"] (JSON string) |
reporter.address | reporter_address | user@your-org.com |
Normalized aliases
Because flattening names the same concept differently per event type (verdict for inbound_protection but analysis_verdict for report_phishing / quarantine_release; subject vs original_email_subject vs email_subject), Ocean also adds a small set of normalized aliases to the top level of every applicable event. A single query or detection rule keyed on these covers all event types:
| Alias | Meaning | Present on |
|---|---|---|
verdict | Ocean’s verdict (malicious, spam, graymail, safe, …) | all |
subject | Email subject | all |
sender_address | Sender email address | all |
recipient_address | Recipient email address | inbound protection |
reporter_address | Reporter email address | phishing reports |
analysis_verdict, original_email_subject, …) are still present alongside them.
Querying
Filter on the normalized aliases in PowerQuery — for example, high-signal threats across every event type:contains:
Defining alerts
Because the high-signal fields are top-level scalars, you can build a Custom Detection Rule (AI SIEM → Detections) directly on them — no parser or mapper required. A rule that fires on any malicious-verdict Ocean email, across all event types:Ocean events ingested over
addEvents land in SDL’s All Data tier (third-party ingest), where they are searchable and rule-able as shown above. They do not appear in the agent-only EDR tier, which is populated exclusively by SentinelOne endpoint agents.Troubleshooting
| Symptom | Likely cause | Resolution |
|---|---|---|
| Destination shows Authentication failed | Wrong or revoked Write API Key. | Re-create the API key in SDL and update the destination. |
| Destination shows Endpoint unreachable | Ingest URL is malformed, points at the wrong region, or omits /api/addEvents. | Verify the region host and that the URL ends in /api/addEvents. |
| Connection test fails on create | Key lacks ingest permission, or the URL is wrong. | Confirm the key is scoped for write ingest and run the curl from the Tip above to isolate the issue. |
| Events not appearing in SDL | Indexing/propagation delay, or events filtered by serverHost/logfile. | Wait a few minutes; search without serverHost / logfile filters first. |
200 response but a warnings array mentions timestamps | The events landed but were timestamped outside the account’s retention window. | This only happens with synthetic / past-dated events; live Ocean events are timestamped at processing time and will not trigger this. |
