vikunja/pkg/routes/api/v2
Claude 25c6c6750a
feat: per-user pro feature toggles
Licensed features can now be granted or revoked per user instead of
applying instance-wide. Resolution is layered: the instance license must
include the feature, then a per-user override, an admin-set instance
default and the built-in code default are consulted in that order.
Time tracking is the first per-user toggleable feature; admin_panel and
audit_logs stay instance-wide. New features opt in via the
perUserToggleable map in pkg/license.

- store per-user overrides in a json column on users, instance defaults
  in the new pro_feature_instance_defaults table
- enforce the toggle in the v2 time-entries route gate and in the
  TimeEntry permission chokepoint for non-route callers
- new admin v2 endpoints to manage instance defaults and per-user
  overrides
- expose effective_pro_features on /api/v1/user; the frontend prefers it
  over /info's instance-wide list once the user is loaded
- admin UI: per-user toggles on the user detail modal, instance defaults
  on the admin overview

https://claude.ai/code/session_01AVt4FHWrUUhv5p6yn99pdp
2026-06-09 19:46:32 +00:00
..
scalar feat(api-v2): vendor scalar api docs bundle 2026-05-31 15:23:32 +02:00
admin_pro_features.go feat: per-user pro feature toggles 2026-06-09 19:46:32 +00:00
admin_projects.go docs(api/v2): keep registrar godoc attached; clarify registry concurrency + ordering 2026-06-03 13:14:13 +00:00
api_tokens.go feat(api/v2): add API token list/create/delete on /api/v2 2026-06-05 08:49:23 +00:00
avatar.go docs(api/v2): keep registrar godoc attached; clarify registry concurrency + ordering 2026-06-03 13:14:13 +00:00
avatar_upload.go docs(api/v2): keep registrar godoc attached; clarify registry concurrency + ordering 2026-06-03 13:14:13 +00:00
bot_users.go feat(api/v2): add bot user CRUD on /api/v2 2026-06-05 08:51:39 +00:00
docs.go feat(api/v2): serve Scalar docs UI at /api/v2/docs 2026-05-31 12:56:57 +00:00
errors.go feat(api/v2): return 422 with invalid_fields for validation errors 2026-06-06 21:09:56 +00:00
errors_test.go fix(api/v2): don't leak internal error detail in 5xx responses 2026-05-31 12:56:57 +00:00
huma.go feat(api/v2): enforce validation centrally in the Register wrapper 2026-06-06 21:09:56 +00:00
label_tasks.go feat(api/v2): add task labels (create/list/delete) on /api/v2 2026-06-05 08:33:47 +00:00
labels.go feat(api/v2): report max_permission on label and project-view reads 2026-06-04 21:16:51 +00:00
link_sharing.go feat(api/v2): add link sharing (create/read/list/delete) 2026-06-05 09:17:25 +00:00
notifications.go fix(api/v2): return 200 from notifications mark-all (creates nothing) 2026-06-07 10:05:24 +00:00
project_teams.go feat(api/v2): add project team shares CRUD on /api/v2 2026-06-07 15:33:20 +00:00
project_users.go feat(api/v2): add project user shares CRUD on /api/v2 2026-06-07 10:37:59 +00:00
project_views.go feat(api/v2): report max_permission on label and project-view reads 2026-06-04 21:16:51 +00:00
projects.go refactor(api/v2): align project max_permission to the shared embed pattern 2026-06-05 07:40:07 +00:00
registry.go docs(api/v2): keep registrar godoc attached; clarify registry concurrency + ordering 2026-06-03 13:14:13 +00:00
saved_filters.go feat(api/v2): add saved filter CRUD on /api/v2 2026-06-07 10:40:20 +00:00
sessions.go feat(api/v2): add session list/delete on /api/v2 2026-06-05 08:21:48 +00:00
subscriptions.go docs: trim wordy comments to load-bearing whys 2026-06-07 09:57:51 +00:00
task_assignees.go feat(api/v2): add task assignees (create/list/delete) on /api/v2 2026-06-06 19:06:12 +00:00
task_comments.go feat(api/v2): report max_permission on task comment reads 2026-06-05 07:43:38 +00:00
task_duplicate.go docs(api/v2): keep registrar godoc attached; clarify registry concurrency + ordering 2026-06-03 13:14:13 +00:00
team_members.go feat(api/v2): add team members (add/remove/admin-toggle) on /api/v2 2026-06-07 10:48:23 +00:00
teams.go feat(api/v2): report max_permission on team reads 2026-06-05 08:06:54 +00:00
time_entries.go feat: per-user pro feature toggles 2026-06-09 19:46:32 +00:00
types.go feat(api/v2): add shared conditional read helper and document list params 2026-06-04 21:16:51 +00:00
validation.go feat(api/v2): enforce validation centrally in the Register wrapper 2026-06-06 21:09:56 +00:00
webhooks.go refactor(webhooks): mask write-only credentials in the model so create/update never echo them 2026-06-06 19:50:41 +00:00