tailscale/tailscale · error

invalid endpoint

Error message

invalid endpoint

What it means

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.

Source

Thrown at client/web/web.go:632

		s.proxyRequestToLocalAPI(w, r)
		return
	case path == "/local/v0/prefs" && r.Method == httpm.PATCH:
		handleJSON[maskedPrefs](s.serveUpdatePrefs)(w, r)
		return
	case path == "/local/v0/update/check" && r.Method == httpm.GET:
		s.proxyRequestToLocalAPI(w, r)
		return
	case path == "/local/v0/update/check" && r.Method == httpm.POST:
		s.proxyRequestToLocalAPI(w, r)
		return
	case path == "/local/v0/update/progress" && r.Method == httpm.POST:
		s.proxyRequestToLocalAPI(w, r)
		return
	case path == "/local/v0/upload-client-metrics" && r.Method == httpm.POST:
		s.proxyRequestToLocalAPI(w, r)
		return
	}
	http.Error(w, "invalid endpoint", http.StatusNotFound)
}

type authResponse struct {
	ServerMode     ServerMode      `json:"serverMode"`
	Authorized     bool            `json:"authorized"` // has an authorized management session
	ViewerIdentity *viewerIdentity `json:"viewerIdentity,omitempty"`
	NeedsSynoAuth  bool            `json:"needsSynoAuth,omitempty"`
}

// viewerIdentity is the Tailscale identity of the source node
// connected to this web client.
type viewerIdentity struct {
	LoginName     string           `json:"loginName"`
	NodeName      string           `json:"nodeName"`
	NodeIP        string           `json:"nodeIP"`
	ProfilePicURL string           `json:"profilePicUrl,omitempty"`
	Capabilities  peerCapabilities `json:"capabilities"` // features peer is allowed to edit
}

View on GitHub (pinned to 6e0912f979)

Solutions

  1. Check the local API path spelling and HTTP method
  2. Confirm the web client and tailscaled versions are compatible
  3. Use /api/local/v0/... paths the server actually implements
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at client/web/web.go:632 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tailscale/tailscale@6e0912f979 (2026-08-18). Data as JSON: /api/errors/b422e9d9675096fd. Report an issue: GitHub.