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
- Compare the configured name exactly (case and whitespace) with the board name in Trello
- Re-fetch boards: log into Trello and confirm the account tied to your API token can see the board
- Use the board's short-link/ID instead of a name if renames keep breaking config
- 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
- Copy the board name exactly (case and whitespace) from Trello
- Prefer the board ID/short-link over the name to survive renames
- Ensure the API token's account is a member of the board
- Re-check config after renaming boards in Trello
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
- failed to initialize Azure session: %w
- invalid base URL: %w
- could not create client: %w
- unable to get the league id for provided league '%s'
- no such league
AI-assisted analysis of wtfutil/wtf@bb838c1ccb (2026-09-03).
Data as JSON: /api/errors/5d399fc2958fd5b6.
Report an issue: GitHub.