Post and delete status updates

Post a status update to a workspace with createStatusUpdate, and remove one with deleteStatusUpdate.


A status update is a project-level health check-in: a traffic-light category (GREEN, ORANGE, or RED) plus dated rich-text commentary, attributed to the user who posted it. Use the createStatusUpdate mutation to post one to a workspace, and deleteStatusUpdate to remove one.

Status updates belong to a workspace (a Project in the API). They are immutable: there is no edit operation. To change a posted update, delete it and post a new one.

No edit operation

The API does not expose a mutation to edit a status update. Changing one means deleteStatusUpdate followed by a fresh createStatusUpdate.

Request

Post a status update. All five input fields are required.

mutation PostStatusUpdate {
  createStatusUpdate(
    input: {
      projectId: "project_123"
      category: ORANGE
      html: "<p>Migration is <strong>behind schedule</strong> — slipping to next sprint.</p>"
      text: "Migration is behind schedule — slipping to next sprint."
      date: "2026-05-29T00:00:00.000Z"
    }
  ) {
    id
    category
    text
    date
    createdAt
    user {
      id
      fullName
    }
  }
}

Include your authentication headers on every request:

  • X-Bloo-Token-ID — your API token ID
  • X-Bloo-Token-Secret — your API token secret
  • X-Bloo-Company-ID — your organization ID or slug

projectId accepts a workspace ID or slug.

Parameters

CreateStatusUpdateInput

ParameterTypeRequiredDescription
projectIdString!YesID or slug of the workspace to post the update to.
categoryStatusUpdateCategory!YesTraffic-light health indicator. One of GREEN, ORANGE, RED.
htmlString!YesThe rich-text body, as HTML. This is what renders in the app.
textString!YesPlain-text version of the body, used for previews, search, and notifications. Supply both html and text (the same dual-field convention used by comments).
dateDateTime!YesThe as-of date the update reports for, as an ISO 8601 string. This is distinct from createdAt (when the record was posted) — it lets you backdate an update.

StatusUpdateCategory

ValueMeaning
GREENOn track / healthy.
ORANGEAt risk / needs attention.
REDOff track / blocked.

Response

createStatusUpdate returns the created StatusUpdate.

{
  "data": {
    "createStatusUpdate": {
      "id": "clm4n8qwx000008l0g4oxdqn7",
      "category": "ORANGE",
      "text": "Migration is behind schedule — slipping to next sprint.",
      "date": "2026-05-29T00:00:00.000Z",
      "createdAt": "2026-05-29T14:22:05.118Z",
      "user": {
        "id": "clm4n8qwx000108l0a1b2c3d4",
        "fullName": "Jordan Lee"
      }
    }
  }
}

Returns

StatusUpdate — selected fields:

FieldTypeDescription
idID!Unique identifier of the status update.
categoryStatusUpdateCategory!The health indicator (GREEN / ORANGE / RED).
htmlString!The rich-text body as HTML.
textString!The plain-text body.
dateDateTime!The reported as-of date.
commentCountInt!Number of comments on this update.
isReadBooleanWhether the requesting user has read it.
isSeenBooleanWhether the requesting user has seen it.
userUser!The user who posted it.
projectProject!The workspace it belongs to.
createdAtDateTime!When the update was posted.
updatedAtDateTime!When the record was last modified.

For the full field list and how to read updates back, see Query and subscribe to status updates.

Side effects

Posting an update fires the usual collaboration side effects: it records an entry in the workspace activity feed, sends notifications to relevant members, and resolves any @-mentions in the html body into mention notifications.

Delete a status update

Pass the status update’s id. deleteStatusUpdate returns a MutationResult — a bare result envelope, so select only success and operationId (it has no other fields).

mutation RemoveStatusUpdate {
  deleteStatusUpdate(id: "status_update_123") {
    success
    operationId
  }
}
{
  "data": {
    "deleteStatusUpdate": {
      "success": true,
      "operationId": "clm4n9zzz000208l0p7q8r9s0"
    }
  }
}

Deleting an update also removes its comments and activity entries, and publishes a delete event to anyone subscribed to the workspace’s status updates.

MutationResult

FieldTypeDescription
successBoolean!true when the update was deleted.
operationIdStringIdentifier for the delete operation.

Errors

CodeOperationWhen
PROJECT_NOT_FOUNDcreateStatusUpdateNo workspace matches projectId.
STATUS_UPDATE_NOT_FOUNDdeleteStatusUpdateNo status update matches id.
FORBIDDENbothThe caller’s workspace role isn’t allowed to post (or isn’t the creator or a workspace OWNER, for delete).
UNAUTHENTICATEDbothThe request is missing or has invalid credentials.

Permissions

Both operations require the workspace to be active (not archived). Roles are UserAccessLevel values on the workspace.

  • Post (createStatusUpdate): any role except VIEW_ONLY and COMMENT_ONLY.
  • Delete (deleteStatusUpdate): you must be the update’s creator, or hold the OWNER role on the workspace. VIEW_ONLY and COMMENT_ONLY are denied regardless.

Workspaces can hide the status-update feature entirely via the project-level hideStatusUpdate setting; the API operations still work even when the feature is hidden in the UI.