Alerting & Notifications

Webhook Payload Reference

The versioned JSON payload Fleetera posts to your webhook endpoint.

Every webhook delivery is an HTTP POST with a Content-Type: application/json body. The body is a versioned object: the top-level v field is the payload schema version, currently 1. Fleetera will not make breaking changes to a published version — new fields may be added, but existing fields keep their meaning. If the schema ever changes incompatibly, the version number changes with it.

Write your receiver to tolerate additional fields it does not recognize, and to branch on the top-level type (alert.triggered vs. alert.resolved). This keeps your integration working as Fleetera adds detail to the payload over time.

Example: alert triggered

{
  "v": 1,
  "type": "alert.triggered",
  "id": "9f2a7c1b-3e84-4d56-9a0f-1c7b2e5d8a40",
  "timestamp": "2026-06-10T09:42:17.512Z",
  "tenantId": "7c1e0b8f-2c6f-4f57-bb20-0a1e4d9a9d3a",
  "alert": {
    "eventId": "5d8a40f2-9f2a-4c1b-3e84-2e5d1c7b9a0f",
    "status": "triggered",
    "severity": "critical",
    "triggeredAt": "2026-06-10T09:42:17.000Z",
    "resolvedAt": null,
    "triggerValue": 87.4,
    "threshold": 80,
    "rule": {
      "id": "1c7b2e5d-9a0f-4d56-3e84-9f2a7c1b8a40",
      "name": "Gearbox over-temp",
      "type": "threshold"
    },
    "labels": {
      "assetId": "2e5d1c7b-5d8a-40f2-9f2a-4c1b3e849a0f",
      "variableKey": "gearbox_temp",
      "siteId": "8a40f29f-2a7c-1b3e-849a-0f1c7b2e5d8a",
      "assetCategoryAlias": "ambient_system",
      "connectorId": "4d569f2a-7c1b-3e84-9a0f-1c7b2e5d8a40",
      "unit": "degC"
    }
  }
}

Example: alert resolved

An alert.resolved message is sent when the alert clears, if the channel has resolved notifications enabled. It carries the same id-as-idempotency-key contract and the same labels, with status: "resolved" and a non-null resolvedAt:

{
  "v": 1,
  "type": "alert.resolved",
  "id": "c3b9e2d7-a4f1-4c8b-0c5b-3f9a7c2b8e1d",
  "timestamp": "2026-06-10T10:05:44.218Z",
  "tenantId": "7c1e0b8f-2c6f-4f57-bb20-0a1e4d9a9d3a",
  "alert": {
    "eventId": "5d8a40f2-9f2a-4c1b-3e84-2e5d1c7b9a0f",
    "status": "resolved",
    "severity": "critical",
    "triggeredAt": "2026-06-10T09:42:17.000Z",
    "resolvedAt": "2026-06-10T10:05:43.000Z",
    "triggerValue": 76.1,
    "threshold": 80,
    "rule": {
      "id": "1c7b2e5d-9a0f-4d56-3e84-9f2a7c1b8a40",
      "name": "Gearbox over-temp",
      "type": "threshold"
    },
    "labels": {
      "assetId": "2e5d1c7b-5d8a-40f2-9f2a-4c1b3e849a0f",
      "variableKey": "gearbox_temp",
      "siteId": "8a40f29f-2a7c-1b3e-849a-0f1c7b2e5d8a",
      "assetCategoryAlias": "ambient_system",
      "connectorId": "4d569f2a-7c1b-3e84-9a0f-1c7b2e5d8a40",
      "unit": "degC"
    }
  }
}

Top-level fields

FieldTypeDescription
vnumberPayload schema version. Currently 1.
typestringThe event type: alert.triggered or alert.resolved. Matches the X-Fleetera-Event header.
idstringThe delivery ID. This is also the idempotency key — see below. Matches the X-Fleetera-Delivery header.
timestampstringISO-8601 instant at which Fleetera dispatched this delivery.
tenantIdstringThe Fleetera organization (tenant) the alert belongs to.
alertobjectThe alert detail. See Alert object.

The id field is your idempotency key

id identifies the delivery, and it is stable across retries: if Fleetera retries a delivery after a transient failure, the retried request carries the same id (and the same X-Fleetera-Delivery header). Your receiver may therefore see the same id more than once.

Deduplicate on id. Record the IDs you have already processed and treat a repeat as a no-op (or make your handler idempotent some other way). This guarantees that a retry never results in a duplicate ticket, page, or message. Do not dedupe on alert.eventId alone — a trigger and its later resolve share the same eventId.

Alert object

The alert object describes the alert event itself.

FieldTypeDescription
eventIdstringThe alert event ID. The same eventId is shared by an alert's trigger and its later resolve.
statusstringtriggered or resolved.
severitystringThe alert severity: info, warning, or critical.
triggeredAtstringISO-8601 instant the alert first triggered.
resolvedAtstring | nullISO-8601 instant the alert resolved, or null while the alert is still active.
triggerValuenumber | nullThe measured value that drove the event, when applicable. null for rules where a single value does not apply.
thresholdnumber | nullThe configured threshold the value was compared against, when applicable. null for rule types without a single threshold.
ruleobjectThe rule that produced the alert. See Rule object.
labelsobjectRouting and identity labels for the alert. See Labels object.

Rule object

FieldTypeDescription
idstringThe alert rule's ID.
namestringThe human-readable rule name, as configured in Fleetera.
typestringThe rule type: threshold, duration, multi_condition, rate_of_change, pattern, or staleness.

Labels object

The labels object carries the identity of the asset and signal the alert fired on. These are the same labels Fleetera routes on internally, so a receiver that forwards alerts into another system (such as PagerDuty or Opsgenie) can re-route on the same identifiers.

FieldTypeDescription
assetIdstringThe asset the alert fired on. Always present.
variableKeystringThe variable (signal) key the alert evaluated. Always present.
siteIdstring | nullThe site the asset belongs to. May be null if unknown for the rule.
assetCategoryAliasstring | nullThe asset category alias (for example, ambient_system). May be null.
connectorIdstring | nullThe connector that supplied the data. May be null.
unitstring | nullThe unit of the measured value (for example, degC). May be null.

assetId and variableKey are always present — they are the per-instance identity of the alert. The remaining labels are nullable: a label can be absent for an older or inline rule. Always handle null for siteId, assetCategoryAlias, connectorId, and unit.

On this page