Webhooks

Event catalog

Available

Canonical DigitalStack events with their exact v1 envelope, minimal payloads, and per-event readiness.

Promoted capability events are available

Time Management, Work Items, and Work Item Enhance events have durable outbox emission and minimal v1 contracts, delivered through the standard signed delivery path. The earlier document and workflow events remain planned; use each event's badge rather than treating the catalog as one blended status.

A webhook event is a notification of a canonical state change— what happened and which resource changed — not a copy of the resource. Payloads are minimal; when you need more, fetch the current authorized representation by resource id through DigitalStack's API.

Supported events

Twenty canonical, past-tense events: four document/workflow contracts, seven Time Management lifecycle events, three Work Item lifecycle events, and six Work Item Enhance lifecycle events. These are the only events a subscription may select.

Event types

document.createdevent
A workspace document was created by a user. Only user-originated creations emit — imports, templates, migrations, and system writes do not.Planned
workflow.transitionedevent
A document workflow moved between states (any transition that is not an approval or a rejection).Planned
workflow.approvedevent
A document was approved in its workflow.Planned
workflow.rejectedevent
A document was rejected in its workflow.Planned
time_entry.createdevent
A canonical time entry was created. Notes, rates, and raw evidence are never included.Available
time_entry.updatedevent
Governed time-entry fields changed.Available
time_entry.voidedevent
A time entry was governedly voided.Available
time_submission.submittedevent
A time submission was submitted.Available
time_submission.recalledevent
A time submission was recalled.Available
time_submission.approvedevent
A time submission was approved.Available
time_submission.rejectedevent
A time submission was rejected.Available
work_item.createdevent
A canonical Execute work item was created.Available
work_item.updatedevent
Canonical editable work-item fields changed. Changed values are fetched through the authorized API.Available
work_item.status_changedevent
A canonical flow-state transition changed the work item status bucket.Available
work_item.comment_createdevent
A comment was added to a canonical Execute work item.Available
work_item.comment_updatedevent
A work-item comment was edited or archived.Available
work_item.assignment_changedevent
The canonical work-item assignee changed.Available
work_item.dates_changedevent
Work-item start, due, target, sprint, or ordering fields changed.Available
work_item.estimate_changedevent
Work-item estimate or points changed.Available
work_item.labels_changedevent
Work-item labels changed.Available
work_item.dependency_linkedevent
A work-item dependency or relationship was created.Available
work_item.dependency_unlinkedevent
A work-item dependency or relationship was removed.Available
work_item.blocker_changedevent
A blocker was raised, updated, resolved, or reopened for a work item.Available
work_item.focus_changedevent
A work item was pinned, reprioritized, annotated, snoozed, or cleared from focus.Available
work_item_enhancement.queuedevent
A Work Item Enhance run was accepted and queued.Available
work_item_enhancement.action_completedevent
One enhancement action completed and produced drafts or artifacts.Available
work_item_enhancement.draft_createdevent
A field-level draft was created for review.Available
work_item_enhancement.completedevent
The enhancement run finished and is ready for review.Available
work_item_enhancement.appliedevent
Selected drafts were applied to the canonical work item.Available
work_item_enhancement.failedevent
The run or action failed with a durable error code.Available
attention_item.resolvedevent
A Today & My Work attention item was marked resolved by an explicit caller action.Available
attention_item.dismissedevent
A Today & My Work attention item was dismissed as not relevant for the current day.Available
attention_item.snoozedevent
A Today & My Work attention item was snoozed until a future timestamp.Available
milestone.status_changedevent
A governed milestone status command changed the Delivery milestone status.Available
milestone.target_date_changedevent
A governed milestone target-date command changed the explicit target date.Available
milestone.progress_updatedevent
A governed milestone progress command changed completion percentage and/or projected date.Available
project.createdevent
A canonical project/engagement was created.Available
project.updatedevent
Canonical project identity or relationship fields changed.Available
project.status_changedevent
A project lifecycle status changed without archiving.Available
project.archivedevent
A project was archived through a confirmed command.Available
project.member_addedevent
A project member was added or upserted.Available
project.member_updatedevent
A project member role changed.Available
project.member_removedevent
A project member was removed.Available
project.settings_updatedevent
Project settings changed.Available
project_health.alert_acknowledgedevent
A Project Health alert was acknowledged through a confirmed command.Available
context_engine.contribution_persistedevent
A governed provider contribution was persisted into the Context Engine.Available
context_engine.merge_decidedevent
A governed Context Engine overlap/merge decision was committed.Available
context_engine.entry_supersededevent
A Context Engine entry was superseded by a governed successor.Available
estimate.createdevent
A canonical estimate draft was created.Available
estimate.updatedevent
Governed estimate metadata, scope, effort, role demand, risk, timeline, or composition changed.Available
estimate.baseline_requestedevent
A reviewable estimate proposal was submitted for human baseline review.Available
estimate.baselinedevent
An authorized human froze an immutable estimate baseline.Available
sprint_planning.suggestions_generatedevent
A Sprints & Planning suggestion batch was generated for review. This is proposal-only and does not apply a plan.Available

v1 event envelope

Every event shares this envelope. It is signed exactly as described on the security & delivery page (X-DStack-Signature, X-DStack-Event, X-DStack-Delivery).

Envelope fields

event_idstringrequired
Immutable, unique per event. Consumers dedupe on this.
typestringrequired
One of the canonical event types.
event_versionintegerrequired
Payload contract version (starts at 1).
occurred_atstring (ISO-8601 UTC)required
When the change happened — frozen at emission, never delivery time.
workspace_idstringrequired
Tenant boundary; deliveries only go to subscriptions in this workspace.
resourceobject { type, id }required
Canonical resource reference (document, time_entry, time_submission, work_item, work_item_enhancement_run, attention_item, sprint_planning, milestone, project, or project_health).
actorobject { id } | nullrequirednullable
Always present; null when there is no user actor. Never invented.
payloadobjectrequired
Per-event minimal canonical fields (below).
sourceobject | nullrequirednullable
Always present; null in v1. Reserved for provenance. Never a source-system schema.

Minimal-payload rule

Payloads carry only the canonical facts of the change. The following are deliberately never in a v1 payload — fetch the resource by id if you need them:

  • document title / name
  • document body / content
  • workflow reason (free text)
  • arbitrary metadata
  • source-system payloads or schemas
  • secrets, tokens, authorization headers
  • personal, financial, or otherwise sensitive fields

Per-event payloads

document.created

Planned

A workspace document was created by a user. Only user-originated creations emit — imports, templates, migrations, and system writes do not.

payload fields

document_idstringrequired
Canonical document id.
document_typestringrequired
Canonical document type.
statusstringrequired
Document status at creation (e.g. draft).
created_atstring (ISO-8601 UTC)required
Creation time.
document.created — example
{
  "event_id": "evt_1a2b3c4d5e6f7089",
  "type": "document.created",
  "event_version": 1,
  "occurred_at": "2026-07-13T18:22:04Z",
  "workspace_id": "b1a2c3d4-0000-4000-8000-000000000001",
  "resource": {
    "type": "document",
    "id": "d4e5f6a7-0000-4000-8000-000000000002"
  },
  "actor": {
    "id": "u7788990-0000-4000-8000-000000000003"
  },
  "payload": {
    "document_id": "d4e5f6a7-0000-4000-8000-000000000002",
    "document_type": "sow",
    "status": "draft",
    "created_at": "2026-07-13T18:22:04Z"
  },
  "source": null
}

workflow.transitioned

Planned

A document workflow moved between states (any transition that is not an approval or a rejection).

payload fields

document_idstringrequired
Canonical document id.
from_statestringrequired
Workflow state before (draft|in_review|approved|frozen|signed|archived).
to_statestringrequired
Workflow state after (same fixed set).
transition_outcomestringrequired
approved | rejected | transitioned — the authoritative classifier.
override_usedbooleanrequired
Whether a governance override was used.
occurred_atstring (ISO-8601 UTC)required
When the transition happened.
workflow.transitioned — example
{
  "event_id": "evt_9f2c8b1e4a7d4f0b",
  "type": "workflow.transitioned",
  "event_version": 1,
  "occurred_at": "2026-07-13T18:22:04Z",
  "workspace_id": "b1a2c3d4-0000-4000-8000-000000000001",
  "resource": {
    "type": "document",
    "id": "d4e5f6a7-0000-4000-8000-000000000002"
  },
  "actor": {
    "id": "u7788990-0000-4000-8000-000000000003"
  },
  "payload": {
    "document_id": "d4e5f6a7-0000-4000-8000-000000000002",
    "from_state": "in_review",
    "to_state": "frozen",
    "transition_outcome": "transitioned",
    "override_used": false,
    "occurred_at": "2026-07-13T18:22:04Z"
  },
  "source": null
}

workflow.approved

Planned

A document was approved in its workflow.

payload fields

document_idstringrequired
Canonical document id.
from_statestringrequired
Workflow state before (draft|in_review|approved|frozen|signed|archived).
to_statestringrequired
Workflow state after (same fixed set).
transition_outcomestringrequired
approved | rejected | transitioned — the authoritative classifier.
override_usedbooleanrequired
Whether a governance override was used.
occurred_atstring (ISO-8601 UTC)required
When the transition happened.
workflow.approved — example
{
  "event_id": "evt_9f2c8b1e4a7d4f0b",
  "type": "workflow.approved",
  "event_version": 1,
  "occurred_at": "2026-07-13T18:22:04Z",
  "workspace_id": "b1a2c3d4-0000-4000-8000-000000000001",
  "resource": {
    "type": "document",
    "id": "d4e5f6a7-0000-4000-8000-000000000002"
  },
  "actor": {
    "id": "u7788990-0000-4000-8000-000000000003"
  },
  "payload": {
    "document_id": "d4e5f6a7-0000-4000-8000-000000000002",
    "from_state": "in_review",
    "to_state": "approved",
    "transition_outcome": "approved",
    "override_used": false,
    "occurred_at": "2026-07-13T18:22:04Z"
  },
  "source": null
}

workflow.rejected

Planned

A document was rejected in its workflow.

payload fields

document_idstringrequired
Canonical document id.
from_statestringrequired
Workflow state before (draft|in_review|approved|frozen|signed|archived).
to_statestringrequired
Workflow state after (same fixed set).
transition_outcomestringrequired
approved | rejected | transitioned — the authoritative classifier.
override_usedbooleanrequired
Whether a governance override was used.
occurred_atstring (ISO-8601 UTC)required
When the transition happened.
workflow.rejected — example
{
  "event_id": "evt_9f2c8b1e4a7d4f0b",
  "type": "workflow.rejected",
  "event_version": 1,
  "occurred_at": "2026-07-13T18:22:04Z",
  "workspace_id": "b1a2c3d4-0000-4000-8000-000000000001",
  "resource": {
    "type": "document",
    "id": "d4e5f6a7-0000-4000-8000-000000000002"
  },
  "actor": {
    "id": "u7788990-0000-4000-8000-000000000003"
  },
  "payload": {
    "document_id": "d4e5f6a7-0000-4000-8000-000000000002",
    "from_state": "in_review",
    "to_state": "draft",
    "transition_outcome": "rejected",
    "override_used": false,
    "occurred_at": "2026-07-13T18:22:04Z"
  },
  "source": null
}

time_entry.created

Available

A canonical time entry was created. Notes, rates, and raw evidence are never included.

payload fields

time_entry_idstringrequired
Canonical time-entry id.
work_datedaterequired
Workspace-local work date.
duration_minutesintegerrequired
Recorded duration.
project_idstring | nullrequirednullable
Canonical project id when attributed.
statusstringrequired
Entry lifecycle state.
occurred_atstring (ISO-8601 UTC)required
Creation time.
time_entry.created — example
{
  "event_id": "evt_time_created",
  "type": "time_entry.created",
  "event_version": 1,
  "occurred_at": "2026-07-14T18:22:04Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "time_entry",
    "id": "entry_1"
  },
  "actor": null,
  "payload": {
    "time_entry_id": "entry_1",
    "work_date": "2026-07-14",
    "duration_minutes": 60,
    "project_id": null,
    "status": "draft",
    "occurred_at": "2026-07-14T18:22:04Z"
  },
  "source": null
}

time_entry.updated

Available

Governed time-entry fields changed.

payload fields

time_entry_idstringrequired
Canonical time-entry id.
changed_fieldsstring[]required
Names only; changed values are fetched through the authorized API.
versionintegerrequired
Optimistic record version.
occurred_atstring (ISO-8601 UTC)required
Update time.
time_entry.updated — example
{
  "event_id": "evt_time_updated",
  "type": "time_entry.updated",
  "event_version": 1,
  "occurred_at": "2026-07-14T18:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "time_entry",
    "id": "entry_1"
  },
  "actor": null,
  "payload": {
    "time_entry_id": "entry_1",
    "changed_fields": [
      "duration_minutes"
    ],
    "version": 2,
    "occurred_at": "2026-07-14T18:30:00Z"
  },
  "source": null
}

time_entry.voided

Available

A time entry was governedly voided.

payload fields

time_entry_idstringrequired
Canonical time-entry id.
prior_statusstringrequired
Lifecycle state before voiding.
voided_atstring (ISO-8601 UTC)required
Void time.
time_entry.voided — example
{
  "event_id": "evt_time_voided",
  "type": "time_entry.voided",
  "event_version": 1,
  "occurred_at": "2026-07-14T18:40:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "time_entry",
    "id": "entry_1"
  },
  "actor": null,
  "payload": {
    "time_entry_id": "entry_1",
    "prior_status": "draft",
    "voided_at": "2026-07-14T18:40:00Z"
  },
  "source": null
}

time_submission.submitted

Available

A time submission was submitted.

payload fields

submission_idstringrequired
Canonical time-submission id.
period_startdaterequired
Submitted period start.
period_enddaterequired
Submitted period end.
submitted_atstring (ISO-8601 UTC)required
Lifecycle transition time.
time_submission.submitted — example
{
  "event_id": "evt_time_submitted",
  "type": "time_submission.submitted",
  "event_version": 1,
  "occurred_at": "2026-07-15T14:22:04Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "time_submission",
    "id": "submission_1"
  },
  "actor": null,
  "payload": {
    "submission_id": "submission_1",
    "period_start": "2026-07-14",
    "period_end": "2026-07-14",
    "submitted_at": "2026-07-15T14:22:04Z"
  },
  "source": null
}

time_submission.recalled

Available

A time submission was recalled.

payload fields

submission_idstringrequired
Canonical time-submission id.
prior_statusstringrequired
State before recall.
recalled_atstring (ISO-8601 UTC)required
Lifecycle transition time.
time_submission.recalled — example
{
  "event_id": "evt_time_recalled",
  "type": "time_submission.recalled",
  "event_version": 1,
  "occurred_at": "2026-07-15T14:22:04Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "time_submission",
    "id": "submission_1"
  },
  "actor": null,
  "payload": {
    "submission_id": "submission_1",
    "prior_status": "submitted",
    "recalled_at": "2026-07-15T14:22:04Z"
  },
  "source": null
}

time_submission.approved

Available

A time submission was approved.

payload fields

submission_idstringrequired
Canonical time-submission id.
approval_idstringrequired
Approval decision id.
approved_atstring (ISO-8601 UTC)required
Lifecycle transition time.
time_submission.approved — example
{
  "event_id": "evt_time_approved",
  "type": "time_submission.approved",
  "event_version": 1,
  "occurred_at": "2026-07-15T14:22:04Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "time_submission",
    "id": "submission_1"
  },
  "actor": {
    "id": "approver_1"
  },
  "payload": {
    "submission_id": "submission_1",
    "approval_id": "approval_1",
    "approved_at": "2026-07-15T14:22:04Z"
  },
  "source": null
}

time_submission.rejected

Available

A time submission was rejected.

payload fields

submission_idstringrequired
Canonical time-submission id.
approval_idstringrequired
Approval decision id.
rejected_atstring (ISO-8601 UTC)required
Lifecycle transition time.
time_submission.rejected — example
{
  "event_id": "evt_time_rejected",
  "type": "time_submission.rejected",
  "event_version": 1,
  "occurred_at": "2026-07-15T14:22:04Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "time_submission",
    "id": "submission_1"
  },
  "actor": {
    "id": "approver_1"
  },
  "payload": {
    "submission_id": "submission_1",
    "approval_id": "approval_1",
    "rejected_at": "2026-07-15T14:22:04Z"
  },
  "source": null
}

work_item.created

Available

A canonical Execute work item was created.

payload fields

work_item_idstringrequired
Canonical work-item id.
team_idstringrequired
Owning Execute team id.
sprint_idstring | nullrequirednullable
Sprint id when the item is planned into a sprint.
kindstringrequired
Canonical work-item kind.
status_bucketstringrequired
Canonical status bucket at creation.
created_atstring (ISO-8601 UTC)required
Creation time.
work_item.created — example
{
  "event_id": "evt_work_item_created",
  "type": "work_item.created",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_01k2...",
    "team_id": "team_abc123",
    "sprint_id": null,
    "kind": "task",
    "status_bucket": "todo",
    "created_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

work_item.updated

Available

Canonical editable work-item fields changed. Changed values are fetched through the authorized API.

payload fields

work_item_idstringrequired
Canonical work-item id.
changed_fieldsstring[]required
Names only; changed values are fetched through the authorized API.
updated_atstring (ISO-8601 UTC)required
Update time.
work_item.updated — example
{
  "event_id": "evt_work_item_updated",
  "type": "work_item.updated",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:03:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": null,
  "payload": {
    "work_item_id": "work_01k2...",
    "changed_fields": [
      "title",
      "points"
    ],
    "updated_at": "2026-07-15T21:03:00Z"
  },
  "source": null
}

work_item.status_changed

Available

A canonical flow-state transition changed the work item status bucket.

payload fields

work_item_idstringrequired
Canonical work-item id.
from_state_idstring | nullrequirednullable
Previous flow-state id.
to_state_idstringrequired
New flow-state id.
from_bucketstring | nullrequirednullable
Previous canonical status bucket.
to_bucketstringrequired
New canonical status bucket.
transition_idstringrequired
Transition audit-row id.
occurred_atstring (ISO-8601 UTC)required
Transition time.
work_item.status_changed — example
{
  "event_id": "evt_work_item_status_changed",
  "type": "work_item.status_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:08:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_01k2...",
    "from_state_id": "state_todo",
    "to_state_id": "state_doing",
    "from_bucket": "todo",
    "to_bucket": "in_progress",
    "transition_id": "transition_01k2...",
    "occurred_at": "2026-07-15T21:08:00Z"
  },
  "source": null
}

work_item.comment_created

Available

A comment was added to a canonical Execute work item.

payload fields

work_item_idstringrequired
Canonical work-item id.
comment_idstringrequired
Created comment id.
author_idstring | nullrequirednullable
Actor that authored the comment.
created_atstring (ISO-8601 UTC)required
Comment creation time.
work_item.comment_created — example
{
  "event_id": "evt_work_item_comment_created",
  "type": "work_item.comment_created",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:12:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_01k2...",
    "comment_id": "comment_01k7...",
    "author_id": "user_123",
    "created_at": "2026-07-15T21:12:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.comment_updated

Available

A work-item comment was edited or archived.

payload fields

work_item_idstringrequired
Canonical work-item id.
comment_idstringrequired
Comment id.
changed_fieldsstring[]required
Changed fields only; fetch current values through the authorized API.
updated_atstring (ISO-8601 UTC)required
Update time.
work_item.comment_updated — example
{
  "event_id": "evt_work_item_comment_updated",
  "type": "work_item.comment_updated",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:14:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_01k2...",
    "comment_id": "comment_01k7...",
    "changed_fields": [
      "body"
    ],
    "updated_at": "2026-07-15T21:14:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.assignment_changed

Available

The canonical work-item assignee changed.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
prior_assignee_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
assignee_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.assignment_changed — example
{
  "event_id": "evt_work_item_assignment_changed",
  "type": "work_item.assignment_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "prior_assignee_id": "prior_assignee_id_value",
    "assignee_id": "assignee_id_value",
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.dates_changed

Available

Work-item start, due, target, sprint, or ordering fields changed.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
changed_fieldsstring[]required
Minimal Work Item Operations lifecycle payload field.
prior_valuesobjectrequired
Minimal Work Item Operations lifecycle payload field.
new_valuesobjectrequired
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.dates_changed — example
{
  "event_id": "evt_work_item_dates_changed",
  "type": "work_item.dates_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "changed_fields": [
      "due_date"
    ],
    "prior_values": {
      "due_date": "2026-07-24"
    },
    "new_values": {
      "due_date": "2026-07-24"
    },
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.estimate_changed

Available

Work-item estimate or points changed.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
prior_estimatestringrequired
Minimal Work Item Operations lifecycle payload field.
estimatestringrequired
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.estimate_changed — example
{
  "event_id": "evt_work_item_estimate_changed",
  "type": "work_item.estimate_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "prior_estimate": "prior_estimate_value",
    "estimate": "estimate_value",
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.labels_changed

Available

Work-item labels changed.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
added_labelsstring[]required
Minimal Work Item Operations lifecycle payload field.
removed_labelsstring[]required
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.labels_changed — example
{
  "event_id": "evt_work_item_labels_changed",
  "type": "work_item.labels_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "added_labels": [
      "api"
    ],
    "removed_labels": [
      "triage"
    ],
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.dependency_linked

Available

A work-item dependency or relationship was created.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
dependency_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
target_work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
relationshipstringrequired
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.dependency_linked — example
{
  "event_id": "evt_work_item_dependency_linked",
  "type": "work_item.dependency_linked",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "dependency_id": "dependency_id_value",
    "target_work_item_id": "target_work_item_id_value",
    "relationship": "relationship_value",
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.dependency_unlinked

Available

A work-item dependency or relationship was removed.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
dependency_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
target_work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
relationshipstringrequired
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.dependency_unlinked — example
{
  "event_id": "evt_work_item_dependency_unlinked",
  "type": "work_item.dependency_unlinked",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "dependency_id": "dependency_id_value",
    "target_work_item_id": "target_work_item_id_value",
    "relationship": "relationship_value",
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.blocker_changed

Available

A blocker was raised, updated, resolved, or reopened for a work item.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
blocker_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
statusstringrequired
Minimal Work Item Operations lifecycle payload field.
severitystringrequired
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.blocker_changed — example
{
  "event_id": "evt_work_item_blocker_changed",
  "type": "work_item.blocker_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "blocker_id": "blocker_id_value",
    "status": "status_value",
    "severity": "severity_value",
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item.focus_changed

Available

A work item was pinned, reprioritized, annotated, snoozed, or cleared from focus.

payload fields

work_item_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
focus_idstring | nullrequirednullable
Minimal Work Item Operations lifecycle payload field.
actionstringrequired
Minimal Work Item Operations lifecycle payload field.
prioritystringrequired
Minimal Work Item Operations lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Work Item Operations lifecycle payload field.
work_item.focus_changed — example
{
  "event_id": "evt_work_item_focus_changed",
  "type": "work_item.focus_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:16:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item",
    "id": "work_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "work_item_id": "work_item_id_value",
    "focus_id": "focus_id_value",
    "action": "action_value",
    "priority": 10,
    "occurred_at": "2026-07-15T21:16:00Z"
  },
  "source": {
    "kind": "work_item_operations_api"
  }
}

work_item_enhancement.queued

Available

A Work Item Enhance run was accepted and queued.

payload fields

run_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
target_typestringrequired
Minimal Work Item Enhance lifecycle payload field.
target_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
requested_actionsstring[]required
Minimal Work Item Enhance lifecycle payload field.
queued_atstring (ISO-8601 UTC)required
Minimal Work Item Enhance lifecycle payload field.
work_item_enhancement.queued — example
{
  "event_id": "evt_work_item_enhancement_queued",
  "type": "work_item_enhancement.queued",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item_enhancement_run",
    "id": "wie_01k6..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "run_id": "run_id_value",
    "target_type": "work_item",
    "target_id": "target_id_value",
    "requested_actions": [
      "draft_01k6..."
    ],
    "queued_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

work_item_enhancement.action_completed

Available

One enhancement action completed and produced drafts or artifacts.

payload fields

run_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
actionstringrequired
Minimal Work Item Enhance lifecycle payload field.
draft_idsstring[]required
Minimal Work Item Enhance lifecycle payload field.
artifact_idsstring[]required
Minimal Work Item Enhance lifecycle payload field.
completed_atstring (ISO-8601 UTC)required
Minimal Work Item Enhance lifecycle payload field.
work_item_enhancement.action_completed — example
{
  "event_id": "evt_work_item_enhancement_action_completed",
  "type": "work_item_enhancement.action_completed",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item_enhancement_run",
    "id": "wie_01k6..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "run_id": "run_id_value",
    "action": "requirements",
    "draft_ids": [
      "draft_01k6..."
    ],
    "artifact_ids": [
      "draft_01k6..."
    ],
    "completed_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

work_item_enhancement.draft_created

Available

A field-level draft was created for review.

payload fields

run_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
draft_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
fieldstringrequired
Minimal Work Item Enhance lifecycle payload field.
target_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
created_atstring (ISO-8601 UTC)required
Minimal Work Item Enhance lifecycle payload field.
work_item_enhancement.draft_created — example
{
  "event_id": "evt_work_item_enhancement_draft_created",
  "type": "work_item_enhancement.draft_created",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item_enhancement_run",
    "id": "wie_01k6..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "run_id": "run_id_value",
    "draft_id": "draft_id_value",
    "field": "field_value",
    "target_id": "target_id_value",
    "created_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

work_item_enhancement.completed

Available

The enhancement run finished and is ready for review.

payload fields

run_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
target_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
draft_countintegerrequired
Minimal Work Item Enhance lifecycle payload field.
artifact_countintegerrequired
Minimal Work Item Enhance lifecycle payload field.
completed_atstring (ISO-8601 UTC)required
Minimal Work Item Enhance lifecycle payload field.
work_item_enhancement.completed — example
{
  "event_id": "evt_work_item_enhancement_completed",
  "type": "work_item_enhancement.completed",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item_enhancement_run",
    "id": "wie_01k6..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "run_id": "run_id_value",
    "target_id": "target_id_value",
    "draft_count": 1,
    "artifact_count": 1,
    "completed_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

work_item_enhancement.applied

Available

Selected drafts were applied to the canonical work item.

payload fields

run_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
target_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
applied_draft_idsstring[]required
Minimal Work Item Enhance lifecycle payload field.
target_versionstringrequired
Minimal Work Item Enhance lifecycle payload field.
applied_atstring (ISO-8601 UTC)required
Minimal Work Item Enhance lifecycle payload field.
work_item_enhancement.applied — example
{
  "event_id": "evt_work_item_enhancement_applied",
  "type": "work_item_enhancement.applied",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item_enhancement_run",
    "id": "wie_01k6..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "run_id": "run_id_value",
    "target_id": "target_id_value",
    "applied_draft_ids": [
      "draft_01k6..."
    ],
    "target_version": "target_version_value",
    "applied_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

work_item_enhancement.failed

Available

The run or action failed with a durable error code.

payload fields

run_idstringrequired
Minimal Work Item Enhance lifecycle payload field.
actionstringrequired
Minimal Work Item Enhance lifecycle payload field.
error_codestringrequired
Minimal Work Item Enhance lifecycle payload field.
failed_atstring (ISO-8601 UTC)required
Minimal Work Item Enhance lifecycle payload field.
work_item_enhancement.failed — example
{
  "event_id": "evt_work_item_enhancement_failed",
  "type": "work_item_enhancement.failed",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "work_item_enhancement_run",
    "id": "wie_01k6..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "run_id": "run_id_value",
    "action": "requirements",
    "error_code": "synthetic_failure",
    "failed_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

attention_item.resolved

Available

A Today & My Work attention item was marked resolved by an explicit caller action.

payload fields

attention_item_idstringrequired
Stable generated attention-item UUID from the My Day response.
actionstringrequired
resolve | dismiss | snooze.
statusstringrequired
resolved
notestring | nullrequirednullable
Optional operator note.
snooze_untilstring (ISO-8601 UTC) | nullrequirednullable
Only populated for snooze actions.
context_package_generated_atstring (ISO-8601 UTC) | nullrequirednullable
Generation timestamp of the package the item came from.
occurred_atstring (ISO-8601 UTC)required
Action time.
attention_item.resolved — example
{
  "event_id": "evt_attention_item_resolved",
  "type": "attention_item.resolved",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "attention_item",
    "id": "b1259ce1-bf47-5a54-8d71-b9b2f4e83ed3"
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "attention_item_id": "b1259ce1-bf47-5a54-8d71-b9b2f4e83ed3",
    "action": "resolve",
    "status": "resolved",
    "note": null,
    "snooze_until": null,
    "context_package_generated_at": "2026-07-15T20:45:00Z",
    "occurred_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

attention_item.dismissed

Available

A Today & My Work attention item was dismissed as not relevant for the current day.

payload fields

attention_item_idstringrequired
Stable generated attention-item UUID from the My Day response.
actionstringrequired
resolve | dismiss | snooze.
statusstringrequired
dismissed
notestring | nullrequirednullable
Optional operator note.
snooze_untilstring (ISO-8601 UTC) | nullrequirednullable
Only populated for snooze actions.
context_package_generated_atstring (ISO-8601 UTC) | nullrequirednullable
Generation timestamp of the package the item came from.
occurred_atstring (ISO-8601 UTC)required
Action time.
attention_item.dismissed — example
{
  "event_id": "evt_attention_item_dismissed",
  "type": "attention_item.dismissed",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "attention_item",
    "id": "b1259ce1-bf47-5a54-8d71-b9b2f4e83ed3"
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "attention_item_id": "b1259ce1-bf47-5a54-8d71-b9b2f4e83ed3",
    "action": "dismiss",
    "status": "dismissed",
    "note": "Not relevant today",
    "snooze_until": null,
    "context_package_generated_at": "2026-07-15T20:45:00Z",
    "occurred_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

attention_item.snoozed

Available

A Today & My Work attention item was snoozed until a future timestamp.

payload fields

attention_item_idstringrequired
Stable generated attention-item UUID from the My Day response.
actionstringrequired
resolve | dismiss | snooze.
statusstringrequired
snoozed
notestring | nullrequirednullable
Optional operator note.
snooze_untilstring (ISO-8601 UTC) | nullrequirednullable
Only populated for snooze actions.
context_package_generated_atstring (ISO-8601 UTC) | nullrequirednullable
Generation timestamp of the package the item came from.
occurred_atstring (ISO-8601 UTC)required
Action time.
attention_item.snoozed — example
{
  "event_id": "evt_attention_item_snoozed",
  "type": "attention_item.snoozed",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "attention_item",
    "id": "b1259ce1-bf47-5a54-8d71-b9b2f4e83ed3"
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "attention_item_id": "b1259ce1-bf47-5a54-8d71-b9b2f4e83ed3",
    "action": "snooze",
    "status": "snoozed",
    "note": null,
    "snooze_until": "2026-07-16T13:00:00Z",
    "context_package_generated_at": "2026-07-15T20:45:00Z",
    "occurred_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

milestone.status_changed

Available

A governed milestone status command changed the Delivery milestone status.

payload fields

milestone_idstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
project_idstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
from_statusstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
to_statusstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Milestones & Workstreams lifecycle payload field.
milestone.status_changed — example
{
  "event_id": "evt_milestone_status_changed",
  "type": "milestone.status_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:20:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "milestone",
    "id": "dm_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "milestone_id": "milestone_id_value",
    "project_id": "project_id_value",
    "from_status": "in_progress",
    "to_status": "at_risk",
    "occurred_at": "2026-07-15T21:20:00Z"
  },
  "source": {
    "kind": "delivery_timeline_api"
  }
}

milestone.target_date_changed

Available

A governed milestone target-date command changed the explicit target date.

payload fields

milestone_idstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
project_idstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
prior_target_datestring | null (YYYY-MM-DD)requirednullable
Minimal Milestones & Workstreams lifecycle payload field.
target_datestring | null (YYYY-MM-DD)requirednullable
Minimal Milestones & Workstreams lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Milestones & Workstreams lifecycle payload field.
milestone.target_date_changed — example
{
  "event_id": "evt_milestone_target_date_changed",
  "type": "milestone.target_date_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:20:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "milestone",
    "id": "dm_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "milestone_id": "milestone_id_value",
    "project_id": "project_id_value",
    "prior_target_date": "2026-07-31",
    "target_date": "2026-08-07",
    "occurred_at": "2026-07-15T21:20:00Z"
  },
  "source": {
    "kind": "delivery_timeline_api"
  }
}

milestone.progress_updated

Available

A governed milestone progress command changed completion percentage and/or projected date.

payload fields

milestone_idstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
project_idstringrequired
Minimal Milestones & Workstreams lifecycle payload field.
prior_completion_pctintegerrequired
Minimal Milestones & Workstreams lifecycle payload field.
completion_pctintegerrequired
Minimal Milestones & Workstreams lifecycle payload field.
prior_projected_datestring | null (YYYY-MM-DD)requirednullable
Minimal Milestones & Workstreams lifecycle payload field.
projected_datestring | null (YYYY-MM-DD)requirednullable
Minimal Milestones & Workstreams lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Milestones & Workstreams lifecycle payload field.
milestone.progress_updated — example
{
  "event_id": "evt_milestone_progress_updated",
  "type": "milestone.progress_updated",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:20:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "milestone",
    "id": "dm_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "milestone_id": "milestone_id_value",
    "project_id": "project_id_value",
    "prior_completion_pct": 55,
    "completion_pct": 70,
    "prior_projected_date": "2026-07-31",
    "projected_date": "2026-08-07",
    "occurred_at": "2026-07-15T21:20:00Z"
  },
  "source": {
    "kind": "delivery_timeline_api"
  }
}

project.created

Available

A canonical project/engagement was created.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
statusstringrequired
Minimal Projects & Engagements lifecycle payload field.
created_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.created — example
{
  "event_id": "evt_project_created",
  "type": "project.created",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "status": "draft",
    "created_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project.updated

Available

Canonical project identity or relationship fields changed.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
changed_fieldsstring[]required
Minimal Projects & Engagements lifecycle payload field.
updated_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.updated — example
{
  "event_id": "evt_project_updated",
  "type": "project.updated",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "changed_fields": [
      "client_name"
    ],
    "updated_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project.status_changed

Available

A project lifecycle status changed without archiving.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
from_statusstringrequired
Minimal Projects & Engagements lifecycle payload field.
to_statusstringrequired
Minimal Projects & Engagements lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.status_changed — example
{
  "event_id": "evt_project_status_changed",
  "type": "project.status_changed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "from_status": "draft",
    "to_status": "active",
    "occurred_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project.archived

Available

A project was archived through a confirmed command.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
from_statusstringrequired
Minimal Projects & Engagements lifecycle payload field.
to_statusstringrequired
Minimal Projects & Engagements lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.archived — example
{
  "event_id": "evt_project_archived",
  "type": "project.archived",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "from_status": "draft",
    "to_status": "archived",
    "occurred_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project.member_added

Available

A project member was added or upserted.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
member_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
user_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
rolestringrequired
Minimal Projects & Engagements lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.member_added — example
{
  "event_id": "evt_project_member_added",
  "type": "project.member_added",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "member_id": "member_id_value",
    "user_id": "user_id_value",
    "role": "viewer",
    "occurred_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project.member_updated

Available

A project member role changed.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
member_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
user_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
rolestringrequired
Minimal Projects & Engagements lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.member_updated — example
{
  "event_id": "evt_project_member_updated",
  "type": "project.member_updated",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "member_id": "member_id_value",
    "user_id": "user_id_value",
    "role": "viewer",
    "occurred_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project.member_removed

Available

A project member was removed.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
member_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
user_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.member_removed — example
{
  "event_id": "evt_project_member_removed",
  "type": "project.member_removed",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "member_id": "member_id_value",
    "user_id": "user_id_value",
    "occurred_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project.settings_updated

Available

Project settings changed.

payload fields

project_idstringrequired
Minimal Projects & Engagements lifecycle payload field.
changed_fieldsstring[]required
Minimal Projects & Engagements lifecycle payload field.
updated_atstring (ISO-8601 UTC)required
Minimal Projects & Engagements lifecycle payload field.
project.settings_updated — example
{
  "event_id": "evt_project_settings_updated",
  "type": "project.settings_updated",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:30:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "project_id_value",
    "changed_fields": [
      "client_name"
    ],
    "updated_at": "2026-07-15T21:30:00Z"
  },
  "source": {
    "kind": "projects_api"
  }
}

project_health.alert_acknowledged

Available

A Project Health alert was acknowledged through a confirmed command.

payload fields

project_idstringrequired
Minimal Project Health lifecycle payload field.
alert_keystringrequired
Minimal Project Health lifecycle payload field.
acknowledgement_idstringrequired
Minimal Project Health lifecycle payload field.
statusstringrequired
Minimal Project Health lifecycle payload field.
acknowledged_atstring (ISO-8601 UTC)required
Minimal Project Health lifecycle payload field.
project_health.alert_acknowledged — example
{
  "event_id": "evt_project_health_alert_acknowledged",
  "type": "project_health.alert_acknowledged",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:35:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "project_health",
    "id": "proj_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "proj_01k2...",
    "alert_key": "delivery_risk:blocked_items",
    "acknowledgement_id": "ack_01k2...",
    "status": "acknowledged",
    "acknowledged_at": "2026-07-15T21:35:00Z"
  },
  "source": {
    "kind": "project_health_api"
  }
}

context_engine.contribution_persisted

Available

A governed provider contribution was persisted into the Context Engine.

payload fields

subject_idstringrequired
Primary evolution subject: entry id, merge-decision id, or successor entry id according to evolution_kind.
related_entry_idstring | nullrequirednullable
Related/superseded entry when the evolution event has one.
evolution_kindstringrequired
Canonical Context Engine evolution kind.
occurred_atstring (ISO-8601 UTC)required
Canonical commit time.
context_engine.contribution_persisted — example
{
  "event_id": "evt_context_engine_contribution_persisted",
  "type": "context_engine.contribution_persisted",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:42:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "context_engine_evolution",
    "id": "9c9f22ac-8b6a-4a72-8145-9d1714f8af52"
  },
  "actor": null,
  "payload": {
    "subject_id": "9c9f22ac-8b6a-4a72-8145-9d1714f8af52",
    "related_entry_id": null,
    "evolution_kind": "context-entry-persisted",
    "occurred_at": "2026-07-15T21:42:00Z"
  },
  "source": {
    "kind": "context_engine",
    "promoter_identity": "adoption-workspace"
  }
}

context_engine.merge_decided

Available

A governed Context Engine overlap/merge decision was committed.

payload fields

subject_idstringrequired
Primary evolution subject: entry id, merge-decision id, or successor entry id according to evolution_kind.
related_entry_idstring | nullrequirednullable
Related/superseded entry when the evolution event has one.
evolution_kindstringrequired
Canonical Context Engine evolution kind.
occurred_atstring (ISO-8601 UTC)required
Canonical commit time.
context_engine.merge_decided — example
{
  "event_id": "evt_context_engine_merge_decided",
  "type": "context_engine.merge_decided",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:42:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "context_engine_evolution",
    "id": "9c9f22ac-8b6a-4a72-8145-9d1714f8af52"
  },
  "actor": null,
  "payload": {
    "subject_id": "9c9f22ac-8b6a-4a72-8145-9d1714f8af52",
    "related_entry_id": null,
    "evolution_kind": "merge-decided",
    "occurred_at": "2026-07-15T21:42:00Z"
  },
  "source": {
    "kind": "context_engine",
    "promoter_identity": "adoption-workspace"
  }
}

context_engine.entry_superseded

Available

A Context Engine entry was superseded by a governed successor.

payload fields

subject_idstringrequired
Primary evolution subject: entry id, merge-decision id, or successor entry id according to evolution_kind.
related_entry_idstring | nullrequirednullable
Related/superseded entry when the evolution event has one.
evolution_kindstringrequired
Canonical Context Engine evolution kind.
occurred_atstring (ISO-8601 UTC)required
Canonical commit time.
context_engine.entry_superseded — example
{
  "event_id": "evt_context_engine_entry_superseded",
  "type": "context_engine.entry_superseded",
  "event_version": 1,
  "occurred_at": "2026-07-15T21:42:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "context_engine_evolution",
    "id": "9c9f22ac-8b6a-4a72-8145-9d1714f8af52"
  },
  "actor": null,
  "payload": {
    "subject_id": "9c9f22ac-8b6a-4a72-8145-9d1714f8af52",
    "related_entry_id": "1932e786-445f-4fae-99d8-c57263efbf22",
    "evolution_kind": "supersession",
    "occurred_at": "2026-07-15T21:42:00Z"
  },
  "source": {
    "kind": "context_engine",
    "promoter_identity": "adoption-workspace"
  }
}

estimate.created

Available

A canonical estimate draft was created.

payload fields

estimate_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
project_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
changed_fieldsstring[]required
Minimal Estimates, Effort & Scope lifecycle payload field.
versionintegerrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Estimates, Effort & Scope lifecycle payload field.
estimate.created — example
{
  "event_id": "evt_estimate_created",
  "type": "estimate.created",
  "event_version": 1,
  "occurred_at": "2026-07-15T22:00:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "estimate",
    "id": "estimate_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "estimate_id": "estimate_id_value",
    "project_id": "project_id_value",
    "changed_fields": [
      "contingency_percent"
    ],
    "version": 3,
    "occurred_at": "2026-07-15T22:00:00Z"
  },
  "source": {
    "kind": "digitalstack",
    "authority": "vsow_package"
  }
}

estimate.updated

Available

Governed estimate metadata, scope, effort, role demand, risk, timeline, or composition changed.

payload fields

estimate_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
project_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
changed_fieldsstring[]required
Minimal Estimates, Effort & Scope lifecycle payload field.
versionintegerrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Estimates, Effort & Scope lifecycle payload field.
estimate.updated — example
{
  "event_id": "evt_estimate_updated",
  "type": "estimate.updated",
  "event_version": 1,
  "occurred_at": "2026-07-15T22:00:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "estimate",
    "id": "estimate_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "estimate_id": "estimate_id_value",
    "project_id": "project_id_value",
    "changed_fields": [
      "contingency_percent"
    ],
    "version": 3,
    "occurred_at": "2026-07-15T22:00:00Z"
  },
  "source": {
    "kind": "digitalstack",
    "authority": "vsow_package"
  }
}

estimate.baseline_requested

Available

A reviewable estimate proposal was submitted for human baseline review.

payload fields

estimate_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
project_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
proposal_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
expected_versionintegerrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
statusstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Estimates, Effort & Scope lifecycle payload field.
estimate.baseline_requested — example
{
  "event_id": "evt_estimate_baseline_requested",
  "type": "estimate.baseline_requested",
  "event_version": 1,
  "occurred_at": "2026-07-15T22:00:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "estimate",
    "id": "estimate_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "estimate_id": "estimate_id_value",
    "project_id": "project_id_value",
    "proposal_id": "proposal_id_value",
    "expected_version": 3,
    "status": "status_value",
    "occurred_at": "2026-07-15T22:00:00Z"
  },
  "source": {
    "kind": "digitalstack",
    "authority": "estimate_change_proposal"
  }
}

estimate.baselined

Available

An authorized human froze an immutable estimate baseline.

payload fields

estimate_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
project_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
snapshot_idstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
revision_numberintegerrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
source_signaturestringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
statusstringrequired
Minimal Estimates, Effort & Scope lifecycle payload field.
occurred_atstring (ISO-8601 UTC)required
Minimal Estimates, Effort & Scope lifecycle payload field.
estimate.baselined — example
{
  "event_id": "evt_estimate_baselined",
  "type": "estimate.baselined",
  "event_version": 1,
  "occurred_at": "2026-07-15T22:00:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "estimate",
    "id": "estimate_01k2..."
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "estimate_id": "estimate_id_value",
    "project_id": "project_id_value",
    "snapshot_id": "snapshot_id_value",
    "revision_number": 2,
    "source_signature": "source_signature_value",
    "status": "status_value",
    "occurred_at": "2026-07-15T22:00:00Z"
  },
  "source": {
    "kind": "digitalstack",
    "authority": "vsow_snapshot"
  }
}

sprint_planning.suggestions_generated

Available

A Sprints & Planning suggestion batch was generated for review. This is proposal-only and does not apply a plan.

payload fields

project_idstringrequired
Canonical project id.
action_kindstringrequired
suggest_next_planning_moves.
readiness_scoreintegerrequired
Planning readiness score at generation time.
readiness_verdictstringrequired
ready | nearly | not_yet.
intent_countintegerrequired
Number of citation-gated proposed intents returned.
observation_countintegerrequired
Number of advisory observations returned.
computed_atstring (ISO-8601 UTC)required
Suggestion computation time.
sprint_planning.suggestions_generated — example
{
  "event_id": "evt_sprint_planning_suggestions_generated",
  "type": "sprint_planning.suggestions_generated",
  "event_version": 1,
  "occurred_at": "2026-07-15T20:58:00Z",
  "workspace_id": "ws_1",
  "resource": {
    "type": "sprint_planning",
    "id": "proj_abc123"
  },
  "actor": {
    "id": "user_123"
  },
  "payload": {
    "project_id": "proj_abc123",
    "action_kind": "suggest_next_planning_moves",
    "readiness_score": 70,
    "readiness_verdict": "nearly",
    "intent_count": 2,
    "observation_count": 3,
    "computed_at": "2026-07-15T20:58:00Z"
  },
  "source": null
}

document.created eligibility

Only user-originated document creation emits document.created. A canonical origin marker decides eligibility explicitly — it is never inferred from status or type.

Emitsorigin=user
Documents a person creates in the product.
Does not emitorigin≠user
Imports, templates, migrations, seeded data, and background/system writes — none produce document.created.
Fails closedsafety
A missing or invalid origin is treated as ineligible — no event, never a guessed one.

Workflow classification

Exactly one event per workflow transition, chosen solely by a canonical transition_outcome value — never from labels, status names, reason text, or metadata.

approved→ workflow.approved
Approval transition.
rejected→ workflow.rejected
Rejection transition.
transitioned→ workflow.transitioned
Every other transition.
Fails closedsafety
A missing or invalid outcome produces no event rather than a guessed one.

Delivery & guarantees

At-least-oncedelivery
An event may be delivered more than once. Deduplicate on event_id, which is immutable and unique per event.
No ordering guaranteedelivery
Events are not guaranteed to arrive in causal order. Use occurred_at and your own state; do not assume sequence.
Retriesdelivery
Up to 3 attempts with backoff; a delivery that never succeeds ends in a terminal failed state. Retries are independent per subscription.
Activation watermarkrollout
Only events at or after the activation time are delivered when emission is turned on; an older backlog is not delivered automatically (administrator-initiated replay only).
Secret-backfill gaterollout
Delivery is enabled only after the webhook signing-secret encryption backfill is verified complete.
Redeliverygoverned
A governed redelivery re-sends a stored event to its original subscription as a new delivery attempt, preserving the original event_id, payload, event_version, and occurred_at. It never mutates the event or re-runs business logic.

Capability events

The capability pages — Project Health, Sprint Intelligence, and the rest — publish their own interface status. Time Management, Work Items & Board, and Work Item Enhance have named lifecycle events and are Available. Other capabilities stay Planned rather than borrowing promoted capability maturity.

Time Management

7 named lifecycle events.

Available
Work Items & Board

3 named lifecycle events.

Available
Work Item Operations

10 named lifecycle events.

Available
Work Item Enhance

6 named lifecycle events.

Available
Today & My Work

3 named lifecycle events.

Available
Project Health

1 named lifecycle events.

Available
Projects & Engagements

8 named lifecycle events.

Available
Milestones & Workstreams

3 named lifecycle events.

Available
Sprints & Planning

1 named lifecycle events.

Available
Context Engine

3 named lifecycle events.

Available
Context Platform

No named events defined yet.

Planned
Estimates, Effort & Scope

4 named lifecycle events.

Available