Ingestion Endpoint
Setting Up the Webhook
Option 1: Logic App (Recommended)
- In the Azure portal, create a new Logic App
- Add a trigger: When Azure Sentinel alert is triggered
- Add an action: HTTP POST
- URL:
https://your-calseta-host/v1/ingest/sentinel - Headers:
Authorization: Bearer cai_your_api_key - Body: Select the full alert JSON from the trigger output
- URL:
- Enable the Logic App
Option 2: Automation Rule
- In Sentinel, go to Automation → Automation rules
- Create a new rule with conditions matching the alerts you want to forward
- Add an action: Run playbook (use a Logic App with the HTTP POST action above)
Payload Format
Calseta expects the standard Sentinel alert JSON structure. Key fields mapped during normalization:| Sentinel Field | Calseta Field |
|---|---|
properties.alertDisplayName | title |
properties.severity | severity |
properties.timeGenerated | occurred_at |
properties.description | Stored in raw_payload |
properties.tactics | Mapped to detection rule mitre_tactics |
properties.techniques | Mapped to detection rule mitre_techniques |
Severity Mapping
| Sentinel | Calseta |
|---|---|
Informational | Informational (1) |
Low | Low (2) |
Medium | Medium (3) |
High | High (4) |
Indicator Extraction
The Sentinel plugin extracts indicators from:properties.entities— Sentinel’s parsed entities (IPs, accounts, hosts, file hashes)- Alert description and custom fields via system normalized-field mappings
- Custom per-source field mappings you define against
raw_payload
Webhook Signature Verification
SetSENTINEL_WEBHOOK_SECRET in your .env file to enable signature verification. Configure the same secret in your Logic App’s HTTP action.
Example Payload
Rate Limits
Sentinel Logic Apps can fire rapidly during alert storms. Calseta handles this via rate limiting — configureRATE_LIMIT_INGEST_PER_MINUTE if you need to adjust the default.

