Statuses and workflow#
A board's status columns are its workflow. There is no separate workflow setting, no transition rules, and no states hidden behind the board: the columns you see across the top are the whole model.
Columns belong to one board#
Status columns are per-board. Every board is created with the same three — Backlog, In progress, Done — and from that moment they are that board's own. Renaming In progress to Building on one board does not touch any other board, and two boards in the same workspace can have entirely different workflows.
A ticket sits in exactly one column of the board it is on, or in no column at all. A ticket with no column is legal in the data but has nowhere to render, so in practice everything you create through the app gets a column.
Configuring the columns#
All of this needs the owner, admin, or member role, on a board you can reach. Viewers see the columns and change nothing.
- Add a column. Add column at the right-hand end of the board, then a name of up to 100 characters. It is appended after the existing columns.
- Rename a column. The pencil beside the column name.
- Reorder columns. Drag the grip in the column header, or focus it and use the arrow keys. The order you set is the order everyone sees.
Two things you cannot do, so that you do not go looking for them:
- You cannot delete a column. Nothing in the app removes one. Reorder an unwanted column to the end and stop using it.
- You cannot choose a column's colour. Laver assigns the colours in the board header; there is no colour picker.
Give each column on a board a distinct name. Nothing enforces uniqueness, and duplicate names make the by-name lookup described below ambiguous.
What "complete" means#
Exactly one column per board is flagged as the completion column. On a new board that is Done, because the flag is set on the last of the three starting columns.
The flag does two things:
- The tick shortcut. Hovering a card shows a shortcut button; with no shortcuts configured it is a single tick labelled Mark as completed, and it sends the ticket to the completion column in one click, from anywhere on the board.
- Sprint carry-over. When a sprint rolls over, tickets in the completion column stay behind on the finished board and everything else moves to the new one. That is the whole definition of "unfinished" — see Sprints.
It is not a lock or a sign-off. A ticket in the completion column can be edited, moved back, or reopened like any other, and nothing is archived automatically.
Two limits worth knowing. Columns you add yourself are never marked complete — new columns are created unflagged — and there is no setting anywhere that moves the flag to a different column. On a board created by Laver it stays on the column that started as Done, even if you rename that column or drag it elsewhere. If your workflow ends somewhere else, rename the original column rather than adding a new one after it.
Moving a ticket#
Moving a ticket between columns is changing its status; there is no separate state to update. In the app, three gestures do the same thing:
- Drag the card into another column, dropping it where you want it in the order.
- Open the ticket and pick from the Status dropdown.
- Use a hover shortcut on the card. You can configure up to four of these under Card display in the board header — each becomes a one-click move to that column.
Whichever you use, the move is saved immediately and pushed to everyone else with that board open, so a colleague sees the card move without refreshing. Two people dragging the same ticket at once is resolved by the ticket's version: one write wins and the other is told the ticket changed underneath it.
Moving a ticket to a different board is a different action — Move to board on the card's right-click menu — and it lands the ticket in a column on the destination board.
Column names in the API#
Anywhere the API takes a status_uuid, it also takes a column name as
status. This is deliberate: "the To Do column" is what a script actually has,
and matching is case-insensitive and ignores surrounding whitespace, so
"to do" finds To Do.
curl -X POST https://api.laver.app/tasks/11111111-2222-4333-8444-555555555555/move \
-H "Authorization: Bearer laver_..." \
-H "Content-Type: application/json" \
-d '{"version": 7, "status": "In progress"}'
Two rules apply:
- Send
statusorstatus_uuid, never both — sending both is rejected with 400 "Give either status or status_uuid, not both." - The name must exist on that board, or you get 400 "No column named … on this board."
Names also work when creating a ticket and when filtering a board's tickets, so a script can post straight into a named column without reading the board first. The version field, the conflict response, and the full request shapes are in Tickets by API.