Skip to content

Workspace workflow activities overview ​

A workspace workflow activity is one entry in the change history of a catalog workflow. Entries record changes such as a new or renamed workflow, an attached state, or a changed transition, approver, or hook. The feed is read-only, and each workflow has its own.

Plane writes entries in the background after each change, so an entry can appear a moment after the write that caused it. Through this API, two writes record no entry: a chain replacement with Update a workspace workflow, and Remove a state from a workspace workflow.

These endpoints work only in a workspace with governance turned on. In an ungoverned workspace, they return 409 states_managed_at_project. Project workflows there have the same feed, with the same object, under workflow activities.

The workspace workflow activity object ​

Attributes ​

  • id string (uuid)

    Unique identifier for the entry.

  • workflow_id string (uuid)

    The workflow the entry belongs to.

  • actor_id string (uuid)

    The user who made the change. Nullable.

  • state_id string (uuid)

    The catalog state the change applies to. For transition, approver, and hook changes, it is the transition's source state. For type, creation, and default changes, it is the state itself. It is null for changes to the workflow itself and for states added to the chain. An entry for an added state names the state in new_identifier.

  • verb string

    What happened: created, updated, deleted, added, removed, enabled, or disabled.

  • field string

    What changed. See Field values. Nullable.

  • old_value, new_value string

    The value before and after the change, as text. Depending on field, this is a name, an id, or True or False. Nullable.

  • old_identifier, new_identifier string (uuid)

    The ids of the records before and after the change, when the change involves one, such as a state, an approver, or a hook. Nullable.

  • epoch number

    When the change was made, as Unix time in seconds. Nullable.

  • created_at string (date-time)

    When the entry was recorded.

Response200
json
{
  "id": "3a8d1f6c-9e2b-4c57-b4a1-6f0e8d2c9b73",
  "workflow_id": "9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88",
  "actor_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
  "state_id": "b7e42a19-3c5d-4f80-9a26-8d1c0f4e7b53",
  "verb": "added",
  "field": "state_approvers",
  "old_value": "",
  "new_value": "priya",
  "old_identifier": null,
  "new_identifier": "a3f92c71-6e4b-4d08-9b5a-1c7e3d9f2b84",
  "epoch": 1768475092.0,
  "created_at": "2026-01-15T11:04:52.660219Z"
}

Field values ​

The catalog endpoints record these field and verb pairs. Entries that the Plane app writes use the same values. The app can also record other field values, so treat an unknown field as something to show, not as an error.

fieldverbWhat changed
workflowcreated, deletedThe workflow was created or deleted. On create, new_identifier is the workflow id. On delete, old_value is its name.
workflow_nameupdatedThe workflow was renamed. old_value and new_value are the names.
workflow_descriptionupdatedThe description changed. The values aren't recorded.
workflow_is_activeupdatedThe workflow was activated or deactivated. The values are True or False.
workflow_stateaddedA catalog state was attached to the chain. new_value is its name, and new_identifier is its id.
workflow_typeupdatedA chain state's type changed. The values are transition or approval.
allow_work_item_creationenabled, disabledA chain state's allow_issue_creation changed.
workflow_default_stateupdatedThe default state moved. The values are state names, and the identifiers are catalog state ids.
state_transitionadded, updated, removedA transition was created, retargeted, or deleted. The values and identifiers are target state ids.
rejected_stateupdatedA transition's rejection state changed. The values and identifiers are state ids.
state_approversadded, removedAn approver was added to or removed from a transition. The values are display names, and the identifiers are user ids.
transition_ruleadded, updated, removedA hook was created, updated, or deleted. On create and update, new_value is the handler name. The identifiers hold the hook id.

Polling for new entries ​

The feed sorts oldest first. Keep the created_at of the newest entry you have processed and pass it as created_at__gt on the next request to read only what is new. Filter with verb, field, or actor_id to narrow the feed. See List workspace workflow activities.

Endpoints ​

MethodPathDescription
GET/api/v2/workspaces/{slug}/workflows/{workflow_id}/activities/List workspace workflow activities
GET/api/v2/workspaces/{slug}/workflows/{workflow_id}/activities/{pk}/Get a workspace workflow activity

Response shaping ​

Both endpoints accept ?fields= for sparse responses. See Sparse fields. Errors follow the shared problem+json contract.

Changed from v1 ​

  • The list is paginated. v1 returns the whole feed as one array.
  • v2 adds the verb, field, and actor_id filters next to created_at__gt, and a route to get one entry.
  • In an ungoverned workspace, both routes return 409 states_managed_at_project. v1 returns 400.

See Migrating from v1 for the full list.