{"record":{"id":"7ed83e4a4cbf022b","repo":"multica-ai/multica","slug":"list-members-w-7ed83e","errorCode":null,"errorMessage":"list members: %w","messagePattern":"list members: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_workspace.go","lineNumber":805,"sourceCode":"\twsID, err := resolveWorkspaceArg(cmd, args)\n\tif err != nil {\n\t\treturn err\n\t}\n\tif wsID == \"\" {\n\t\treturn fmt.Errorf(\"workspace ID is required: pass an id/slug/prefix as argument or set MULTICA_WORKSPACE_ID\")\n\t}\n\n\tclient, err := newAPIClient(cmd)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tctx, cancel := cli.APIContext(context.Background())\n\tdefer cancel()\n\n\tvar members []map[string]any\n\tif err := client.GetJSON(ctx, \"/api/workspaces/\"+wsID+\"/members\", &members); err != nil {\n\t\treturn fmt.Errorf(\"list members: %w\", err)\n\t}\n\n\toutput, _ := cmd.Flags().GetString(\"output\")\n\tif output == \"json\" {\n\t\treturn cli.PrintJSON(os.Stdout, members)\n\t}\n\n\theaders := []string{\"USER ID\", \"NAME\", \"EMAIL\", \"ROLE\"}\n\trows := make([][]string, 0, len(members))\n\tfor _, m := range members {\n\t\trows = append(rows, []string{\n\t\t\tstrVal(m, \"user_id\"),\n\t\t\tstrVal(m, \"name\"),\n\t\t\tstrVal(m, \"email\"),\n\t\t\tstrVal(m, \"role\"),\n\t\t})\n\t}\n\tcli.PrintTable(os.Stdout, headers, rows)","sourceCodeStart":787,"sourceCodeEnd":823,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_workspace.go#L787-L823","documentation":"Wrapped failure of the HTTP GET to /api/workspaces/{id}/members performed by `multica workspace members`. Chained causes: 404 unknown workspace, 401/403 bad token or insufficient role (member listing is often restricted to admins/owners), or network/server errors.","triggerScenarios":"Listing members of a nonexistent id/slug/prefix; authenticating as a role not permitted to enumerate members; server unreachable.","commonSituations":"Stale slug after rename; bot token with limited scopes; pointing at the wrong environment's base URL.","solutions":["Confirm the workspace resolves: `multica workspace get <ws>`","Check the wrapped status: 403 means the token's role cannot list members — switch to an admin/owner token","Fix base URL/network configuration and retry"],"exampleFix":"# before\nmultica workspace members acme\n# list members: 403\n\n# after (use an owner-scoped token)\nMULTICA_API_TOKEN=$OWNER_TOKEN multica workspace members acme","handlingStrategy":"try-catch","validationCode":"if wsID == \"\" {\n    return errors.New(\"workspace ID is required\")\n}","typeGuard":null,"tryCatchPattern":"if err := client.GetJSON(ctx, \"/api/workspaces/\"+wsID+\"/members\", &members); err != nil {\n    var httpErr *apiclient.HTTPError\n    if errors.As(err, &httpErr) {\n        switch httpErr.StatusCode {\n        case 403:\n            return fmt.Errorf(\"token lacks permission to list members of %s\", wsID)\n        case 404:\n            return fmt.Errorf(\"workspace %s not found\", wsID)\n        }\n    }\n    return fmt.Errorf(\"list members: %w\", err)\n}","preventionTips":["Use admin/owner-scoped tokens when scripting member enumeration","Confirm the workspace slug resolves before listing members","Distinguish 403 (role) from 404 (bad id) in the wrapped error before retrying"],"tags":["cli","http","members","workspace","api-client"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}