Platform Reference

Events Reference

All platform event types emitted by FlowOS. Events trigger webhooks, workflow nodes, and notification rules.

Overview

Every state change in FlowOS emits a typed event. Events are the universal trigger mechanism — webhooks subscribe to event types, workflow triggers listen for them, and notification rules fire on them. All events share a common envelope:

json
{
  "id":          "evt_01...",
  "type":        "incident.created",
  "tenantId":    "t_acme",
  "workspaceId": "ws_prod",
  "environment": "production",
  "timestamp":   "2026-06-02T10:00:00.000Z",
  "actorId":     "usr_01...",
  "actorType":   "user",
  "entityType":  "incident",
  "entityId":    "inc_01...",
  "data":        { /* full record snapshot */ },
  "changes":     [ { "field": "status", "from": "open", "to": "resolved" } ]
}
The data field contains the record state after the change. For *.deleted events, data is the final state before deletion. The changes array is only present on *.updated events.

Incident Events

EventDescriptionKey payload fields
incident.createdNew incident record created.id, number, title, status, priority, assignedTo
incident.updatedAny field on an incident changed.id, changes[]
incident.status_changedStatus field specifically changed.id, from, to, changedBy
incident.assignedAssigned-to user changed.id, assignedTo, previousAssignedTo
incident.escalatedIncident was escalated.id, escalatedTo, tier, reason
incident.resolvedStatus changed to resolved.id, resolvedAt, resolvedBy, resolution
incident.closedStatus changed to closed.id, closedAt, closedBy
incident.reopenedStatus moved back to open from resolved/closed.id, reopenCount, reopenedBy
incident.sla_breachedSLA target missed.id, slaType, targetMinutes, elapsedMinutes
incident.sla_warningSLA warning threshold reached.id, slaType, percentUsed
incident.deletedIncident soft-deleted.id, deletedBy
incident.comment_addedComment posted on an incident.incidentId, commentId, authorId, body
incident.task_createdTask created on an incident.incidentId, taskId
incident.war_room_openedWar room started for a major incident.incidentId, warRoomId

Problem Events

EventDescriptionKey payload fields
problem.createdNew problem created.id, number, title, status
problem.updatedAny field changed.id, changes[]
problem.status_changedStatus field changed.id, from, to
problem.root_cause_foundRoot cause documented.id, rootCause, identifiedBy
problem.known_error_createdProblem promoted to known error.id, knownErrorId, workaround
problem.resolvedProblem resolved.id, resolvedAt, permanentFix
problem.closedProblem closed.id, closedAt
problem.deletedProblem soft-deleted.id, deletedBy

Change Events

EventDescriptionKey payload fields
change.createdNew change request created.id, number, title, type, status
change.updatedAny field changed.id, changes[]
change.submittedChange submitted for review.id, submittedBy
change.approvedAll approvers approved.id, approvedBy[], approvedAt
change.rejectedChange rejected by an approver.id, rejectedBy, reason
change.cab_reviewedCAB review completed.id, outcome, cabReviewers[]
change.scheduledImplementation window set.id, scheduledStart, scheduledEnd
change.implementation_startedImplementation began.id, startedAt, startedBy
change.completedChange implemented successfully.id, completedAt, completedBy
change.rolled_backChange rolled back.id, rolledBackAt, rolledBackBy, reason
change.cancelledChange cancelled.id, cancelledBy, reason
change.deletedChange soft-deleted.id, deletedBy
change.blackout_violatedChange attempted during a blackout window.id, blackoutWindowId

Service Request Events

EventDescriptionKey payload fields
request.createdNew service request submitted.id, number, catalogItemId, requestedBy
request.updatedAny field changed.id, changes[]
request.approval_requestedApproval gate triggered.id, approvalId, approvers[]
request.approvedRequest approved.id, approvedBy
request.rejectedRequest rejected.id, rejectedBy, reason
request.fulfillment_startedFulfillment workflow started.id, workflowRunId
request.fulfilledRequest fully fulfilled.id, fulfilledAt, fulfilledBy
request.cancelledRequest cancelled.id, cancelledBy
request.sla_breachedFulfillment SLA missed.id, targetHours, elapsedHours
request.deletedRequest soft-deleted.id, deletedBy

Workflow Events

EventDescriptionKey payload fields
workflow.createdNew workflow definition created.id, name
workflow.publishedNew version published.id, version, publishedBy
workflow.activatedWorkflow set to active.id, activatedBy
workflow.deactivatedWorkflow set to inactive.id, deactivatedBy
workflow.run_startedExecution started.id, runId, triggerType, input
workflow.run_completedExecution finished successfully.id, runId, durationMs, output
workflow.run_failedExecution failed.id, runId, error.code, error.message, error.nodeId
workflow.run_cancelledExecution manually cancelled.id, runId, cancelledBy
workflow.run_pausedExecution paused (waiting for input/approval).id, runId, waitToken
workflow.approval_requestedApproval node waiting for response.id, runId, approvalId, approvers[]
workflow.deletedWorkflow soft-deleted.id, deletedBy

User & Auth Events

EventDescriptionKey payload fields
user.createdNew user account created.id, email, name
user.invitedUser invited to a workspace.id, email, invitedBy, workspaceId
user.activatedUser accepted invite and activated account.id, activatedAt
user.deactivatedUser account deactivated.id, deactivatedBy
user.role_assignedRole assigned to user.userId, roleKey, assignedBy
user.role_removedRole removed from user.userId, roleKey, removedBy
user.login_succeededSuccessful login.userId, ip, userAgent, method
user.login_failedFailed login attempt.email, ip, reason
user.mfa_enrolledMFA method enrolled.userId, method
user.password_changedPassword changed.userId, changedBy
api_key.createdAPI key created.keyId, name, scopes, createdBy
api_key.rotatedAPI key rotated.keyId, rotatedBy
api_key.revokedAPI key revoked.keyId, revokedBy

Alert & Monitoring Events

EventDescriptionKey payload fields
alert.createdNew alert received from a monitoring source.id, source, ciId, priority
alert.acknowledgedAlert acknowledged by an on-call engineer.id, acknowledgedBy, acknowledgedAt
alert.resolvedAlert condition cleared.id, resolvedAt, resolvedBy
alert.incident_createdIncident auto-created from this alert.alertId, incidentId
alert.escalatedAlert escalated to next on-call tier.id, tier, escalatedTo
monitoring.check_passedMonitoring check returned healthy.checkId, ciId
monitoring.check_failedMonitoring check returned unhealthy.checkId, ciId, error

Release & Deployment Events

EventDescriptionKey payload fields
release.createdRelease record created.id, name, linkedChangeIds[]
release.approvedRelease approved for deployment.id, approvedBy
release.deployment_startedRelease deployment began.id, deployedBy, environment
release.deployment_succeededDeployment completed successfully.id, environment, completedAt
release.deployment_failedDeployment failed.id, environment, error
release.rolled_backRelease rolled back.id, rolledBackBy, reason

Subscribing to Events

Via Webhook

bash
POST /api/events/subscriptions
{
  "name": "Incident alerts to Slack",
  "eventName": "incident.created",
  "action": "webhook",
  "webhookUrl": "https://hooks.slack.com/services/...",
  "filter": "priority == 'critical' || priority == 'high'"
}

Via Workflow Trigger

In the Workflow Studio, select Event trigger and choose one or more event types from the dropdown. The full event envelope is available as trigger.payload in expressions.

javascript
// In a workflow expression
trigger.payload.data.number       // INC-0042
trigger.payload.data.priority     // critical
trigger.payload.changes[0].from   // open
trigger.payload.changes[0].to     // resolved