{"record":{"id":"b422e9d9675096fd","repo":"tailscale/tailscale","slug":"invalid-endpoint","errorCode":null,"errorMessage":"invalid endpoint","messagePattern":"invalid endpoint","errorType":"http","errorClass":null,"httpStatus":404,"severity":"error","filePath":"client/web/web.go","lineNumber":632,"sourceCode":"\t\ts.proxyRequestToLocalAPI(w, r)\n\t\treturn\n\tcase path == \"/local/v0/prefs\" && r.Method == httpm.PATCH:\n\t\thandleJSON[maskedPrefs](s.serveUpdatePrefs)(w, r)\n\t\treturn\n\tcase path == \"/local/v0/update/check\" && r.Method == httpm.GET:\n\t\ts.proxyRequestToLocalAPI(w, r)\n\t\treturn\n\tcase path == \"/local/v0/update/check\" && r.Method == httpm.POST:\n\t\ts.proxyRequestToLocalAPI(w, r)\n\t\treturn\n\tcase path == \"/local/v0/update/progress\" && r.Method == httpm.POST:\n\t\ts.proxyRequestToLocalAPI(w, r)\n\t\treturn\n\tcase path == \"/local/v0/upload-client-metrics\" && r.Method == httpm.POST:\n\t\ts.proxyRequestToLocalAPI(w, r)\n\t\treturn\n\t}\n\thttp.Error(w, \"invalid endpoint\", http.StatusNotFound)\n}\n\ntype authResponse struct {\n\tServerMode     ServerMode      `json:\"serverMode\"`\n\tAuthorized     bool            `json:\"authorized\"` // has an authorized management session\n\tViewerIdentity *viewerIdentity `json:\"viewerIdentity,omitempty\"`\n\tNeedsSynoAuth  bool            `json:\"needsSynoAuth,omitempty\"`\n}\n\n// viewerIdentity is the Tailscale identity of the source node\n// connected to this web client.\ntype viewerIdentity struct {\n\tLoginName     string           `json:\"loginName\"`\n\tNodeName      string           `json:\"nodeName\"`\n\tNodeIP        string           `json:\"nodeIP\"`\n\tProfilePicURL string           `json:\"profilePicUrl,omitempty\"`\n\tCapabilities  peerCapabilities `json:\"capabilities\"` // features peer is allowed to edit\n}","sourceCodeStart":614,"sourceCodeEnd":650,"githubUrl":"https://github.com/tailscale/tailscale/blob/6e0912f97994f927632b34ae9e63b53d6516a6ac/client/web/web.go#L614-L650","documentation":"Returned as HTTP 404 by serveAPI when the request path/method does not match any allow-listed LocalAPI proxy route or handler. The web client proxies only a fixed set of LocalAPI paths; anything else is refused rather than forwarded.","triggerScenarios":"Thrown at client/web/web.go:632 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the local API path spelling and HTTP method","Confirm the web client and tailscaled versions are compatible","Use /api/local/v0/... paths the server actually implements"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6e0912f97994f927632b34ae9e63b53d6516a6ac","analyzedAt":"2026-08-18T08:17:25.280Z","contentChangedAt":"2026-08-18T08:17:25.280Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}