wtfutil/wtf · error

could not find board with name %s

Error message

could not find board with name %s

What it means

getBoardID searches the boards accessible to the configured Trello API key/token for one whose name matches the configured board name, and returns this error when no board matches. Trello boards are matched by exact name.

Source

Thrown at modules/todo_plus/backend/trello.go:55

func getBoardID(client *trello.Client, username, boardName string) (string, error) {
	member, err := client.GetMember(username, trello.Defaults())
	if err != nil {
		return "", err
	}

	boards, err := member.GetBoards(trello.Defaults())
	if err != nil {
		return "", err
	}

	for _, board := range boards {
		if board.Name == boardName {
			return board.ID, nil
		}
	}

	return "", fmt.Errorf("could not find board with name %s", boardName)
}

func getListId(client *trello.Client, boardID string, listName string) (string, error) {
	board, err := client.GetBoard(boardID, trello.Defaults())
	if err != nil {
		return "", err
	}

	boardLists, err := board.GetLists(trello.Defaults())
	if err != nil {
		return "", err
	}

	for _, list := range boardLists {
		if list.Name == listName {
			return list.ID, nil
		}
	}

View on GitHub (pinned to bb838c1ccb)

Solutions

  1. Compare the configured name exactly (case and whitespace) with the board name in Trello
  2. Re-fetch boards: log into Trello and confirm the account tied to your API token can see the board
  3. Use the board's short-link/ID instead of a name if renames keep breaking config
  4. Regenerate the Trello token if it belongs to the wrong account

Example fix

// before
boardName := "My Tasks"   // board actually named "my tasks"
// after
boardName := "my tasks"
Defensive patterns

Strategy: validation

Validate before calling

boards, _ := client.GetBoards(trello.Defaults())
names := map[string]bool{}
for _, b := range boards { names[b.Name] = true }
if !names[boardName] { return fmt.Errorf("board %q not visible to token", boardName) }

Type guard

func boardExists(boards []trello.Board, name string) bool {
    for _, b := range boards { if b.Name == name { return true } }
    return false
}

Try / catch

id, err := getBoardID(client, boardName)
if err != nil {
    if strings.HasPrefix(err.Error(), "could not find board") {
        return fmt.Errorf("check Trello config: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Setup() with a boardName that matches none of the boards returned by client.GetBoards — name typo, wrong-case name, or the board not shared with the account owning the token.

Common situations: Board renamed in Trello after the widget config was written; board belonging to another team/account than the API token's user; trailing whitespace or case mismatch in config; revoked or wrong-scope token that can't see the board.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of wtfutil/wtf@bb838c1ccb (2026-09-03). Data as JSON: /api/errors/5d399fc2958fd5b6. Report an issue: GitHub.