mattermost-community/focalboard · error
at least one block is required
Error message
at least one block is required
What it means
ErrNoBlocksInBoardsAndBlocks is a sentinel error in the BoardsAndBlocks model. BoardsAndBlocks.IsValid() requires at least one block, and this error reports that the payload's Blocks array is empty.
Source
Thrown at server/model/boards_and_blocks.go:15
package model
import (
"encoding/json"
"errors"
"fmt"
"io"
"github.com/mattermost/focalboard/server/utils"
"github.com/mattermost/mattermost/server/public/shared/mlog"
)
var ErrNoBoardsInBoardsAndBlocks = errors.New("at least one board is required")
var ErrNoBlocksInBoardsAndBlocks = errors.New("at least one block is required")
var ErrNoTeamInBoardsAndBlocks = errors.New("team ID cannot be empty")
var ErrBoardIDsAndPatchesMissmatchInBoardsAndBlocks = errors.New("board ids and patches need to match")
var ErrBlockIDsAndPatchesMissmatchInBoardsAndBlocks = errors.New("block ids and patches need to match")
type BlockDoesntBelongToAnyBoardErr struct {
blockID string
}
func (e BlockDoesntBelongToAnyBoardErr) Error() string {
return fmt.Sprintf("block %s doesn't belong to any board", e.blockID)
}
// BoardsAndBlocks is used to operate over boards and blocks at the
// same time
// swagger:model
type BoardsAndBlocks struct {
// The boards
// required: falseView on GitHub (pinned to a84bbb65e3)
Solutions
- Include at least one block in the Blocks array of the payload
- Validate len(blocksAndBlocks.Blocks) > 0 client-side before calling the API
- Skip the call or surface a user-facing message when there is genuinely nothing to import
Example fix
// before
await client.importBoardsAndBlocks({boards: [board], blocks: []})
// after
if (payload.blocks.length > 0) {
await client.importBoardsAndBlocks(payload)
} Defensive patterns
Strategy: validation
Validate before calling
if (!payload.blocks || payload.blocks.length === 0) {
throw new Error('at least one block is required before import')
} Try / catch
try {
await client.importBoardsAndBlocks(payload)
} catch (err) {
if (err.message?.includes('at least one block')) {
alert('Nothing to import: payload has no blocks')
} else throw err
} Prevention
- Validate the payload shape before API calls
- Don't drop blocks in pre-submit filtering without re-checking the result
- Skip the call entirely when the collection is empty
When it happens
Trigger: POST /api/v2/boards-and-blocks (or BoardsAndBlocks.IsValid()) with an empty Blocks array.
Common situations: Import tooling uploading boards without their blocks; filtering block lists (e.g. by board membership) before submission and ending up with zero items.
Related errors
- at least one board is required
- block fields size limit exceeded
- team ID cannot be empty
- board ids and patches need to match
- block ids and patches need to match
AI-assisted analysis of mattermost-community/focalboard@a84bbb65e3 (2026-08-30).
Data as JSON: /api/errors/cc74618b08d97637.
Report an issue: GitHub.