Skip to main content
Every alert in Calseta is normalized to an agent-native schema — clean field names designed for AI consumption. Regardless of which source system sent the alert, agents always see the same structure.

Alert Fields

Alert Status

The status field tracks the investigation lifecycle. Transitions are enforced by the API:

Lifecycle Timestamps

These are set automatically by Calseta — they cannot be set via the API:
  • acknowledged_at — set on the first transition out of Open (to Triaging, Escalated, or Closed)
  • triaged_at — set when entering Triaging
  • closed_at — set when entering Closed

Enrichment Status

The enrichment_status field is system-managed and tracks the enrichment pipeline progress. It is separate from status and cannot be set via the API.

Severity Levels

Source systems map their own severity values to these. Unknown or missing severity defaults to Pending. Each alert links to additional data available via sub-endpoints:

The _metadata Block

The GET /v1/alerts/{uuid} and webhook payload responses include a computed _metadata block:
This block is computed at serialization time — no additional database columns.

Why Not OCSF?

Calseta uses its own schema instead of the Open Cybersecurity Schema Framework (OCSF). OCSF is designed for data producers (EDR, network, identity vendors) mapping fields so SIEMs can ingest from diverse sources. It uses numeric class IDs, epoch timestamps, and unmapped buckets optimized for SIEM indexing. AI agents need different things: readable field names, structured enrichment data as a first-class concept, and a relational indicator model. Calseta’s schema is designed from the ground up for agent consumption. Source-specific fields that don’t map to the Calseta schema are preserved in raw_payload, so no data is lost.