Alerts API

REST endpoints to list, create, and update alerts in your workspace

Use the Texture REST API to query alerts and manage their lifecycle. Authenticate with a workspace API key (Server or API type) in the Texture-Api-Key header.

For field-level request and response schemas, use the interactive API reference or the OpenAPI specification.

For Dashboard visibility controls (severity filters, OEM overrides), see Alert configuration. Workspace alert configuration is not available via REST today — configure it under Settings → Alerts in the Dashboard.

Authentication#

All endpoints require a workspace-scoped API key:

curl -s "https://api.texturehq.com/v1/alerts" \
  -H "Texture-Api-Key: your_api_key"

The key determines which workspace the request applies to. You do not pass workspaceId in the URL; it is inferred from the key.

Alert object#

Responses use a consistent alert shape:

{
  "id": "clm1a2b3c4d5e6f7g8h9i0j1",
  "externalId": "alert-123456",
  "workspaceId": "cllgn0u4r000008l7eazybfbo",
  "siteId": "cllgn0u4r000008l7eazybfbo",
  "deviceId": "cllgn0u4r000008l7eazybfbo",
  "title": "Device is offline",
  "description": "The thermostat has been offline for 15 minutes.",
  "sourceSystem": "field-ops",
  "type": "HARDWARE_FAULT",
  "subtype": "INVERTER_FAULT",
  "alertType": "HARDWARE_FAULT",
  "severity": "WARNING",
  "status": "OPEN",
  "providerName": "Internal",
  "providerCode": "internal",
  "createdAt": "2026-05-22T12:00:00.000Z",
  "updatedAt": "2026-05-22T12:00:00.000Z",
  "acknowledgedAt": null,
  "acknowledgedBy": null,
  "ignoredAt": null,
  "ignoredBy": null,
  "resolvedAt": null,
  "resolvedBy": null,
  "snoozedUntil": null
}
FieldDescription
severityCRITICAL, WARNING, or INFO
statusOPEN, ACKNOWLEDGED, IGNORED, or RESOLVED
type, subtypeNormalized classification (prefer over legacy alertType)
sourceSystemOrigin identifier (OEM adapter, partner app, your automation, etc.)

Device enrichment fields (manufacturer, deviceName, deviceModel, and related fields) are included when available.

Visibility and filtered results#

After you save workspace alert configuration in the Dashboard, GET /v1/alerts returns only alerts that pass your visibility rules—the same filtered set shown in the Dashboard. totalItems and totalPages reflect the filtered count, not every alert stored in the database.

Until the first save, all alerts in the workspace are returned. See capture principle for how storage differs from visibility.


List alerts#

GET /v1/alerts

Query parameters:

ParameterTypeDescription
idstringFilter by Texture alert ID
externalIdstringFilter by upstream system ID
severityenumCRITICAL, WARNING, or INFO
statusenumOPEN, ACKNOWLEDGED, IGNORED, or RESOLVED
siteIdstringFilter by site ID
deviceIdstringFilter by device ID
sourceSystemstringFilter by source system
manufacturerDeviceIdstringFilter by manufacturer device ID
pageintegerPage number (default 1, max 1000)
perPageintegerItems per page (default 10, max 100)

Response: 200 OK — Paginated list:

{
  "data": [ /* alert objects */ ],
  "page": 1,
  "perPage": 25,
  "totalItems": 42,
  "totalPages": 2
}

Example — open critical alerts:

curl -s "https://api.texturehq.com/v1/alerts?status=OPEN&severity=CRITICAL&page=1&perPage=25" \
  -H "Texture-Api-Key: your_api_key"

Create alert#

POST /v1/alerts

Publish an alert from your application or automation. Created alerts follow the same lifecycle and visibility rules as ingested OEM alerts.

Request body:

FieldRequiredDescription
siteIdYesSite the alert belongs to
titleYesShort summary
sourceSystemYesYour system identifier (e.g. field-ops)
severityYesCRITICAL, WARNING, or INFO
deviceIdNoRelated device, if any
descriptionNoAdditional detail
typeNoNormalized type (defaults to UNKNOWN when omitted)
subtypeNoNormalized subtype
alertTypeNoLegacy free-text type (prefer type / subtype)
providerNameNoProvider display name
providerCodeNoProvider-specific code

Response: 201 Created — Returns the created alert object.

Example:

curl -s -X POST "https://api.texturehq.com/v1/alerts" \
  -H "Texture-Api-Key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "siteId": "cllgn0u4r000008l7eazybfbo",
    "title": "Manual inspection required",
    "description": "Technician flagged inverter noise during site visit.",
    "sourceSystem": "field-ops",
    "type": "HARDWARE_FAULT",
    "subtype": "INVERTER_FAULT",
    "severity": "WARNING",
    "providerName": "Internal",
    "providerCode": "internal"
  }'

Acknowledge alert#

PATCH /v1/alerts/:id/acknowledge

Marks the alert as acknowledged. Optionally snooze follow-up until a specific time.

Request body (optional):

FieldTypeDescription
snoozeUntilISO 8601 datetimePause follow-up until this time

Response: 200 OK — Returns the updated alert object.

Example:

curl -s -X PATCH "https://api.texturehq.com/v1/alerts/clm1a2b3c4d5e6f7g8h9i0j1/acknowledge" \
  -H "Texture-Api-Key: your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"snoozeUntil": "2026-06-01T12:00:00Z"}'

Ignore alert#

PATCH /v1/alerts/:id/ignore

Marks the alert as ignored (suppressed without resolution).

Response: 200 OK — Returns the updated alert object.

curl -s -X PATCH "https://api.texturehq.com/v1/alerts/clm1a2b3c4d5e6f7g8h9i0j1/ignore" \
  -H "Texture-Api-Key: your_api_key"

Resolve alert#

PATCH /v1/alerts/:id/resolve

Marks the alert as resolved.

Response: 200 OK — Returns the updated alert object.

curl -s -X PATCH "https://api.texturehq.com/v1/alerts/clm1a2b3c4d5e6f7g8h9i0j1/resolve" \
  -H "Texture-Api-Key: your_api_key"

Endpoint summary#

MethodPathPurpose
GET/v1/alertsList and filter alerts (visibility-aware after config is saved)
POST/v1/alertsCreate an alert
PATCH/v1/alerts/:id/acknowledgeAcknowledge (optional snooze)
PATCH/v1/alerts/:id/ignoreIgnore
PATCH/v1/alerts/:id/resolveResolve