invoke-ai/InvokeAI · error · HTTPException

Failed to create board

Error message

Failed to create board

What it means

HTTP 500 from POST /boards/ (create_board) when the boards service create() call throws any exception. The router intentionally converts every non-HTTP error into this generic 500, so name conflicts, validation, or DB issues must be diagnosed from server logs.

Source

Thrown at invokeai/app/api/routers/boards.py:61

@boards_router.post(
    "/",
    operation_id="create_board",
    responses={
        201: {"description": "The board was created successfully"},
    },
    status_code=201,
    response_model=BoardDTO,
)
def create_board(
    current_user: CurrentUserOrDefault,
    board_name: str = Query(description="The name of the board to create", max_length=300),
) -> BoardDTO:
    """Creates a board for the current user"""
    try:
        result = ApiDependencies.invoker.services.boards.create(board_name=board_name, user_id=current_user.user_id)
        return result
    except Exception:
        raise HTTPException(status_code=500, detail="Failed to create board")


@boards_router.get("/{board_id}", operation_id="get_board", response_model=BoardDTO)
def get_board(
    current_user: CurrentUserOrDefault,
    board_id: str = Path(description="The id of board to get"),
) -> BoardDTO:
    """Gets a board (user must have access to it)"""

    try:
        result = ApiDependencies.invoker.services.boards.get_dto(board_id=board_id)
    except Exception:
        raise HTTPException(status_code=404, detail="Board not found")

    # Admins can access any board.
    # Owners can access their own boards.
    # Shared and public boards are visible to all authenticated users.
    if (

View on GitHub (pinned to 0b6a024f2f)

Solutions

  1. Check server logs for the underlying exception
  2. Retry with a different, shorter board_name (avoid duplicates)
  3. Verify DB connectivity and schema migrations are current
  4. Call GET /boards first to check for an existing board with the same name

Example fix

// before
await api.post('/boards/', { board_name: 'My Board' });
// after
const existing = (await api.get('/boards/')).items.find(b => b.board_name === 'My Board');
const board = existing ?? await api.post('/boards/', { board_name: 'My Board' });
Defensive patterns

Strategy: try-catch

Validate before calling

const boards = (await api.get('/boards/')).items;
if (boards.some(b => b.board_name === desiredName)) throw new Error('board name already in use');

Type guard

const isServerError = (e) => e?.response?.status >= 500;

Try / catch

try {
  return await api.post('/boards/', { board_name });
} catch (e) {
  if (isServerError(e)) throw new Error(`Create board failed — check invokeai server logs; name: ${board_name}`);
  throw e;
}

Prevention

When it happens

Trigger: POST /boards/ with body {board_name} when ApiDependencies.invoker.services.boards.create throws — duplicate/over-long board_name rejected by storage, or database failure.

Common situations: Creating a board whose name already exists in a backend that enforces uniqueness, board_name exceeding DB column length, or SQLite/Postgres outage.

Related errors


AI-assisted analysis of invoke-ai/InvokeAI@0b6a024f2f (2026-08-29). Data as JSON: /api/errors/c151fd4c7941c305. Report an issue: GitHub.