API: status and bulk actions
Change the workflow status of a single issue, or apply status and tag changes to many issues at once. Both operate on issues (error groups) in the current application. See API conventions for base URL, auth, and headers.
Issue status
Move one issue to a new status and record the change in its history. Requires the issue id, a target status, and an optional note.
| Field | Type | Notes |
|---|---|---|
id | int | The issue (error group) id. |
status | string | One of the statuses below. |
note | string | Optional; trimmed. Stored on the history entry. |
Valid statuses:
open in_progress fixed wont_fix reoccurred
Any other value is rejected. An unknown id returns an "Issue not found" error. On success the issue's status_updated_at is set to the current time, a history row is written (recording the previous and new status), and the response echoes the transition:
{ "id": 42, "from_status": "open", "status": "fixed", "note": "Patched in 3.2.1" }
See Workflow status and history for how transitions are tracked.
Bulk issues
Apply one action to a set of issue ids in a single transaction. If any id fails validation, the whole batch is rolled back.
| Field | Type | Notes |
|---|---|---|
ids | int[] | 1-200 ids. Duplicates and non-positive values are dropped. |
action | string | status, add_tag, or remove_tag. |
status | string | Required for status; same values as above. |
note | string | Optional for status; max 10,000 characters. |
tag_id | int | Required for add_tag / remove_tag; must exist. |
The status action updates every listed issue and writes a history row for each. add_tag attaches an existing tag (as a manual tag, re-marking an existing link as manual); remove_tag detaches it. Every id must belong to the current application, or the batch fails.
Responses report the action, target, and affected ids:
{ "action": "status", "status": "fixed", "note": "", "updated": 3, "ids": [7, 8, 9] }
{ "action": "add_tag", "tag_id": 5, "updated": 3, "ids": [7, 8, 9] }
Assignment (Laravel-hosted only)
POST /?api=assign-issue and GET /?api=assignable-users let you assign an issue to a person — but only when Log Lens is mounted inside a Laravel host app that supplies an assignable-users callable (see Roles & assignment). Standalone has no user table of its own to assign from, so assignable-users always returns an empty list there and assignment is a no-op — this is a deliberate scope decision, not a bug.
| Field | Type | Notes |
|---|---|---|
id | int | The issue to (un)assign. |
assigned_to_id | string, nullable | An opaque id from the host's assignable-users list. Omit or send empty to unassign. |
assigned_to_label | string | Required when assigning; the display name shown in the dashboard. |
POST /?api=assign-issue
{"id":42,"assigned_to_id":"usr_9f2","assigned_to_label":"Priya N."}
assigned_to_id/assigned_to_label are stored as an opaque pair, not a foreign key — Log Lens has no users table to reference. GET /?api=assignable-users returns {data:[{id, label}]}, sourced from the host app and scoped to the current application (a host can return different people per application).
Related
- Bulk status and tag actions
- API: tags
- API: issue detail and raw source
- Tags and automatic rules
- Roles & assignment — the full identity/authorization model this depends on