Alerts

Operational signals from devices, sites, and integrations — captured, classified, configured, and actionable

Alerts surface operational issues, notifications, and insights across the Texture platform. They consolidate signals from devices, sites, external services, and Texture automations so operators know what needs attention. Each alert records what happened, where it occurred, how severe it is, and what actions have been taken.

This page is the complete reference for alerts: the capture principle and data model, how alerts are classified, how to configure workspace visibility, and how alerts arrive from OEM integrations.

Why alerts matter#

  • Situational awareness — Maintain a real-time pulse on device health, site performance, and platform automations.
  • Coordinated response — Track acknowledgement, remediation, and resolution so teams never duplicate effort.
  • Platform-wide connectivity — Link alerts to Sites and Devices for fast navigation between an incident, the underlying asset, and related context.
  • Auditable history — Preserve a full record of status changes, snoozes, and resolutions for compliance and post-event analysis.

Capture principle#

Texture always captures incoming alerts, regardless of workspace visibility settings. When you hide alerts or narrow severity and OEM filters, the platform still stores every alert. Filtering applies only to what operators see in the Dashboard and what external systems receive through Destinations (for example, ALERT_CREATED webhooks). Nothing is deleted or dropped at ingestion.

This separation keeps a complete audit trail while letting each workspace control noise in the UI and notification pipeline.

Core data model#

Alerts follow a consistent schema across the API and Dashboard. Key fields include:

FieldDescription
id / externalIdUnique identifiers for the alert in Texture and any upstream system.
workspaceId, siteId, deviceIdScope the alert to a workspace, site, and (optionally) a specific device.
title, descriptionHuman-readable summary and optional detail about the condition.
type, subtypeStructured classification (see Classification). Prefer these over legacy alertType.
alertTypeLegacy free-text classification. Deprecated in favor of type / subtype.
severityRequired level: CRITICAL, WARNING, or INFO.
statusOperational state: OPEN, ACKNOWLEDGED, IGNORED, or RESOLVED.
sourceSystemWhere the alert originated (Texture automation, OEM adapter, partner integration, manual entry).
providerName, providerCodeHuman-readable and coded identifiers for the upstream provider when applicable.
acknowledgedAt / by, resolvedAt / by, ignoredAt / by, snoozedUntilResponse workflow and temporary suppression timestamps.
createdAt, updatedAtLifecycle auditing timestamps.
manufacturer, deviceName, deviceType, deviceModel, deviceSerialNumberDevice metadata enrichment when available.

Alerts are linked to their workspace, site, and device, so you can navigate from an incident to the underlying assets in the Dashboard and API responses.

Classification#

Alerts list view in the Texture Dashboard

Severity#

Severity communicates how urgently an alert must be handled:

ValueMeaning
CRITICALImmediate action required for safety or system availability.
WARNINGElevated attention needed to prevent impact or degraded performance.
INFOInformational events worth monitoring but typically not disruptive.

Status lifecycle#

Operators drive an alert through these states:

  1. Open (OPEN) — Newly created and awaiting action.
  2. Acknowledged (ACKNOWLEDGED) — Someone is actively working the issue.
  3. Ignored (IGNORED) — Intentionally suppressed without resolution (for example, a false positive).
  4. Resolved (RESOLVED) — Root cause addressed and the alert closed.

Snoozing sets snoozedUntil to pause follow-up for a defined window without changing the underlying status.

Types and subtypes#

Use type and (optionally) subtype to classify alerts for filtering, routing, and analytics. Ingestion pipelines map free-text OEM messages into these canonical values where possible.

Alert types#

TypeTypical domain
COMMUNICATIONSDevice, meter, or controller connectivity
POWER_LIMITSite power limits, ramp rate, power factor
GRID_STATUSGrid forming, following, resync
HARDWARE_FAULTInverter, battery, contactor, generator faults
FIRMWARE_UPDATEFirmware update status
CONFIGURATIONConfiguration or setup issues
VOLTAGE_FREQUENCYVoltage drop, frequency deviation
STATE_OF_ENERGYState of energy, reserve, power saving
TEMPERATUREThermal and overtemperature events
ISLANDINGIslanding / anti-islanding
GENERATORGenerator-related faults
SOFTWARE_PROCESSControl agent or process failures
SENSORSensor faults and disconnects
SYSTEM_SHUTDOWNExternal or GPIO shutdown
PERFORMANCE_DEGRADEDYield or performance below expectation
SITE_LEVELSite-wide conditions
SAFETYSafety-related events
UNKNOWNUnclassified (no mapping rule matched)

Alert subtypes#

SubtypeUsually paired with
BATTERY_METER_COMMS / INVERTER_COMMS / PV_INVERTER_COMMS / SITE_CONTROLLER_COMMSCOMMUNICATIONS
SITE_MAX_LIMITED / SITE_MIN_LIMITED / RAMP_RATE_LIMITED / POWER_FACTOR_LIMITEDPOWER_LIMIT
GRID_FORMING / GRID_FOLLOWING / GRID_RESYNC_FAILEDGRID_STATUS
INVERTER_FAULT / BATTERY_FAULT / CONTACTOR_FAULT / GENERATOR_FAULTHARDWARE_FAULT
OPTICASTER_EXE_FAILED / CONTROL_AGENT_CRASHEDSOFTWARE_PROCESS
LOW_SOE / SLEEP_MODE / WAIT_FOR_SOLARSTATE_OF_ENERGY
EXTERNAL_SWITCH_SHUTDOWN / GPIO_SHUTDOWNSYSTEM_SHUTDOWN
EXCESSIVE_VOLTAGE_DROP / FREQUENCY_DEVIATIONVOLTAGE_FREQUENCY
METER_DISCONNECTED / TEMPERATURE_SENSOR_FAULTSENSOR
PERFORMANCE_BELOW_EXPECTATIONPERFORMANCE_DEGRADED

Creating and updating alerts#

Texture supports multiple creation paths, all sharing the same schema and lifecycle:

PathDescription
REST APIPublish alerts from your own systems or automations, and update acknowledgement, ignore, or resolve states programmatically.
DashboardOperators can file alerts manually for field-discovered issues, using the same schema and lifecycle as API-created alerts.
External ingestionAlerts flow in from OEM platforms and partner applications. Use externalId and provider fields for traceability (see OEM alert ingestion below).

Configuring alert visibility#

Workspace alert configuration lets you reduce noise without losing data. Each workspace has its own settings for visibility, severity filters, and per-integration (OEM) overrides. Configuration affects what you see and what gets notified — never what Texture stores.

Alert settings page in the Texture Dashboard

Where to configure#

  1. Open the Texture Dashboard.
  2. Go to Settings → Alerts (/settings/alerts).
  3. Adjust the controls below, then click Save to apply changes to the workspace.

Only workspace admins and owners can edit alert settings. Other members see the configuration in read-only mode.

Important — configuration is opt-in per workspace. Until you save at least once, the platform does not apply any visibility filters — all alerts remain visible and all fan out to Destinations — even though the form shows recommended defaults (CRITICAL and WARNING on, INFO off). Those defaults are enforced only after the first Save. This keeps existing workspaces backward-compatible.

Capture vs. visibility#

LayerAffected by config?
Ingestion and database storageNo — every alert is captured
Dashboard lists (alerts query, Site / Device alerts)Yes — after first save
Destination fanout (ALERT_CREATED, etc.)Yes — after first save

Hidden alerts remain available for audit, compliance, and internal operations. If the platform cannot read your saved configuration (for example, a transient database error), it fails open: alerts stay visible and notifications continue until the config can be read again.

Controls#

Alert visibility (master switch). The workspace-level on/off switch. When disabled, no alerts are shown and no alert fanout occurs — but capture continues in the background. Severity and OEM sections dim when the switch is off, yet remain editable so you can prepare settings before re-enabling.

Severity filters. Each level (CRITICAL, WARNING, INFO) is an independent toggle; only alerts whose severity matches an enabled level are shown and notified. Disabling all three while visibility is enabled means nothing appears or notifies (alerts are still captured).

UI labels vs. behavior. The Dashboard may describe severity cards with phrases like "Critical + Warning." Backend filtering treats each level independently — you enable the specific severities you want, not a cumulative minimum threshold.

OEM overrides. Control visibility per connected integration (manufacturer). The section lists only OEMs with active connections. Turning an integration off hides its alerts from the Dashboard and excludes them from notification fanout. Overrides are keyed by manufacturer slug (for example, solaredge-web, enphase, sma) — the same identifier used at ingestion. Only off overrides are stored; you never need to turn integrations on explicitly.

Common scenarios#

  • Reduce INFO noise — keep visibility enabled, enable CRITICAL and WARNING, disable INFO, save. INFO alerts are still stored but hidden.
  • Pause all alert notifications — disable Alert visibility and save. Re-enable when ready; severity and OEM settings are preserved.
  • Hide one noisy integration — keep visibility enabled, turn the OEM override off for that integration, save.
  • Return to showing everything — save a permissive config (all severities on, no OEM overrides off, visibility enabled).

Settings apply to the current workspace only — switch workspaces to configure each separately. Workspace alert configuration is set in the Dashboard; there is no REST endpoint for it today.

OEM alert ingestion#

Alerts ingested from OEM and partner systems share the same Texture schema, but each integration differs in polling cadence, severity mapping, resolution behavior, and volume. Use this section when tuning configuration or investigating noisy fleets.

Provider key vs. connection slug#

Two identifiers appear in the Dashboard and documentation:

IdentifierWhere it appearsUsed for
Connection manufacturer slugConnect / Settings → Alerts OEM list (e.g. solaredge-web, enphase)Dashboard labels; OEM override key in workspace settings
Alert.providerStored on each alert row; event pipelineVisibility filtering and OEM override enforcement

When the keys differ, overrides may not apply. Usually the connection slug and stored Alert.provider match (for example, enphase / enphase). When they differ (notably SolarEdge: slug solaredge-web, provider solaredge), an OEM override toggled in the Dashboard may not hide alerts until the override key matches the stored provider value. Filtering compares overrides against Alert.provider, not the display fields.

Provider summary#

IntegrationConnection slugAlert.providerPrimary ingestion path
SolarEdge Web Monitoringsolaredge-websolaredgeAlert adapter (connection.poll) + OEM adapter
EnphaseenphaseenphaseAlert adapter (site alert polling)
SMAsmasmaAlert adapter (provider grant poll) + OEM adapter
Also Energyalso-energyalso-energyAlert adapter (app / provider grant poll)
ChargePointchargepointchargepointOEM adapter
GeneracgeneracgeneracOEM adapter
Tesla (grid services)tesla / program-specificteslaOEM adapter (grid services alerts)

Manual and programmatically created alerts use other provider values (for example manual, or values you supply when creating an alert).

Provider severity & status mapping#

  • SolarEdge — severity derived from numeric impact (high → CRITICAL, moderate → WARNING, zero/low → INFO); status prefers serverStatus, else infers from open / muted flags. Quirks: high INFO volume, cross-poll deduplication, rich HTML descriptions, some types auto-clear after sustained normal operation, and the OAuth v2 endpoint lacks date-range / pagination.
  • Enphase — codes 1–2 → CRITICAL, 3 → WARNING, 4–6 → INFO; status is OPEN until alarm_end_time is set, then RESOLVED. Severity may arrive as number or string (normalized); unknown codes may fall back to INFO.
  • SMA — Error / Disturbance → CRITICAL, Warning → WARNING, Info → INFO; Appeared (or missing) → OPEN, Solved → RESOLVED. Quirks: duplicate status pings (deduplicated, but bursts after reconnects) and rapid Appeared / Solved cycles.
  • Also Energy — severity / status derived from alert code, title, and hardware state; codes mapped to type / subtype where known. Hardware-centric; grant-scoped polling; can be feature-gated per manufacturer during maintenance.
  • ChargePoint / Generac / Tesla — publish via the OEM adapter with stable provider keys matching their slug in most cases (Tesla grid-services connection slug may differ from provider).

Reducing alert volume#

GoalSuggested approach
Cut informational noiseDisable INFO in severity filters after first save
Silence one integrationOEM override off for that slug if it matches Alert.provider; otherwise filter by severity
Pause all outbound noiseDisable Alert visibility (master switch); capture continues
Audit full historyQuery or export outside filtered Dashboard views; all alerts remain stored

Working with alerts across the platform#

  • Sites and devices — Each alert references its originating site and, when applicable, a device. Site and device views expose associated alerts for impact and history.
  • Search and filtering — Filter by type, subtype, severity, status, site, and device. Workspace visibility settings further narrow the Dashboard after configuration is saved.
  • Destinations — Alert lifecycle events can flow to webhooks, email, SMS, and Kafka. Visibility settings gate fanout.

Next steps#

  • Configure workspace visibility under Settings → Alerts to tune severity and OEM filters.
  • Connect Sites and Devices to see how alerts relate to core platform resources.
  • Set up Destinations to deliver ALERT_CREATED and related events to external systems.