Skip to content

Shortcuts

Shortcuts are per-user keybindings the SPA reads at boot to override its defaults. There is no concept of a “team shortcut” — every user owns theirs.

GET /settings/shortcuts

Auth: JWT. List shortcut rows for the current user.

Response 200

[
{ "id": "sc_…", "action": "card.transition.next", "binding": "shift+enter" },
{ "id": "sc_…", "action": "comment.post", "binding": "ctrl+enter" }
]

action is a stable identifier the SPA recognizes (card.transition.next, card.archive, comment.post, board.search, …). binding is in the SPA’s standard format — modifiers in lowercase, separated by +.

POST /settings/shortcuts

Auth: JWT. Add a shortcut.

Body

{ "action": "card.archive", "binding": "ctrl+shift+backspace" }

409 if the user already has a shortcut for that action — use PATCH instead.

PATCH /settings/shortcuts/{id}

Auth: JWT. Update the binding.

Body{ "binding": "ctrl+shift+delete" }

DELETE /settings/shortcuts/{id}

Auth: JWT. Remove the override. The SPA falls back to the built-in default for that action.

Response 200{ "success": true }.

Conflicts

The SPA refuses to set two actions to the same binding for the same user. The backend does not enforce this — duplicate bindings make the last-loaded one win, which is technically fine but rarely what anyone wants.