mattermost-community/focalboard · error
patch updates cards that are limited
Error message
patch updates cards that are limited
What it means
ErrPatchUpdatesLimitedCards is returned when a card patch (partial update) would modify cards that are restricted under the current license tier. Like the views limit, this is a licensing guard: unlicensed installs only allow limited card operations, and a patch touching those protected fields/cards is rejected wholesale.
Source
Thrown at server/model/error.go:17
package model
import (
"database/sql"
"errors"
"fmt"
"net/http"
"strings"
mmModel "github.com/mattermost/mattermost/server/public/model"
pluginapi "github.com/mattermost/mattermost/server/public/pluginapi"
)
var (
ErrViewsLimitReached = errors.New("views limit reached for board")
ErrPatchUpdatesLimitedCards = errors.New("patch updates cards that are limited")
ErrInsufficientLicense = errors.New("appropriate license required")
ErrCategoryPermissionDenied = errors.New("category doesn't belong to user")
ErrCategoryDeleted = errors.New("category is deleted")
ErrBoardMemberIsLastAdmin = errors.New("cannot leave a board with no admins")
ErrRequestEntityTooLarge = errors.New("request entity too large")
ErrInvalidBoardSearchField = errors.New("invalid board search field")
)
// ErrNotFound is an error type that can be returned by store APIs
// when a query unexpectedly fetches no records.
type ErrNotFound struct {
entity string
}View on GitHub (pinned to a84bbb65e3)
Solutions
- Obtain a license covering full Boards card functionality
- Limit the patch to fields not restricted by the license
- Move the card without patching restricted properties, or restructure the workflow
Defensive patterns
Strategy: type-guard
Validate before calling
if !hasValidLicense() && patchTouchesLimitedCards(patch) {
// reject or trim the patch client-side before sending
} Type guard
func isLimitedCardsErr(err error) bool {
return errors.Is(err, model.ErrPatchUpdatesLimitedCards)
} Try / catch
err := app.PatchBlock(boardID, blockID, patch)
if errors.Is(err, model.ErrPatchUpdatesLimitedCards) {
// fall back to a limited patch or notify the user
} Prevention
- Detect license state before enabling bulk card edits
- Keep patches minimal and split out restricted fields
- Test card workflows on an unlicensed install
When it happens
Trigger: Sending PATCH /api/v1/boards/{boardID}/blocks/{blockID} (or MoveContentBlock) against a card that is limited on an unlicensed install; calling MoveContentBlock whose destination patch updates limited cards.
Common situations: Free-tier installs after the cards feature became partially paid; API scripts that bulk-patch card properties; drag-and-drop moves in the UI that internally patch cards.
Related errors
- board ids and patches need to match
- block ids and patches need to match
- Board IDs do not match
- views limit reached for board
- appropriate license required
AI-assisted analysis of mattermost-community/focalboard@a84bbb65e3 (2026-08-30).
Data as JSON: /api/errors/612c525466037870.
Report an issue: GitHub.