{"record":{"id":"616476527d1f6924","repo":"cloudflare/cloudflared","slug":"failed-to-create-route-account-level-endpoint","errorCode":null,"errorMessage":"failed to create route account-level endpoint","messagePattern":"failed to create route account-level endpoint","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cfapi/base_client.go","lineNumber":55,"sourceCode":"\ntype baseEndpoints struct {\n\taccountLevel  url.URL\n\tzoneLevel     url.URL\n\taccountRoutes url.URL\n\taccountVnets  url.URL\n}\n\nvar _ Client = (*RESTClient)(nil)\n\nfunc NewRESTClient(baseURL, accountTag, zoneTag, authToken, userAgent string, log *zerolog.Logger) (*RESTClient, error) {\n\tbaseURL = strings.TrimSuffix(baseURL, \"/\")\n\taccountLevelEndpoint, err := url.Parse(fmt.Sprintf(\"%s/accounts/%s/cfd_tunnel\", baseURL, accountTag))\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed to create account level endpoint\")\n\t}\n\taccountRoutesEndpoint, err := url.Parse(fmt.Sprintf(\"%s/accounts/%s/teamnet/routes\", baseURL, accountTag))\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed to create route account-level endpoint\")\n\t}\n\taccountVnetsEndpoint, err := url.Parse(fmt.Sprintf(\"%s/accounts/%s/teamnet/virtual_networks\", baseURL, accountTag))\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed to create virtual network account-level endpoint\")\n\t}\n\tzoneLevelEndpoint, err := url.Parse(fmt.Sprintf(\"%s/zones/%s/tunnels\", baseURL, zoneTag))\n\tif err != nil {\n\t\treturn nil, errors.Wrap(err, \"failed to create account level endpoint\")\n\t}\n\thttpTransport := http.Transport{\n\t\tTLSHandshakeTimeout:   defaultTimeout,\n\t\tResponseHeaderTimeout: defaultTimeout,\n\t}\n\t_ = http2.ConfigureTransport(&httpTransport)\n\treturn &RESTClient{\n\t\tbaseEndpoints: &baseEndpoints{\n\t\t\taccountLevel:  *accountLevelEndpoint,\n\t\t\tzoneLevel:     *zoneLevelEndpoint,","sourceCodeStart":37,"sourceCodeEnd":73,"githubUrl":"https://github.com/cloudflare/cloudflared/blob/2253eeeb25a44a713a4b60b8ba1e1b3f377d1a0f/cfapi/base_client.go#L37-L73","documentation":"NewRESTClient builds the account-level teamnet routes endpoint (baseURL + /accounts/<accountTag>/teamnet/routes) with url.Parse and wraps failures with this message. Like the other endpoint construction errors, it fires only when the composed URL string is invalid.","triggerScenarios":"A baseURL or accountTag containing characters that make the composed routes URL unparseable (spaces, control chars, malformed percent-encoding).","commonSituations":"Misconfigured custom API base URL with stray characters; account tag pasted with hidden whitespace or shell-escaped characters.","solutions":["Inspect baseURL and accountTag for illegal URL characters and trim them.","Revert to the default Cloudflare API base URL if a custom one was set.","Escape or validate the account tag before passing it to NewRESTClient."],"exampleFix":"// before\naccountTag := \"abc def\"\n// after\naccountTag := strings.TrimSpace(\"abcdef\")","handlingStrategy":"validation","validationCode":"u, err := url.Parse(fmt.Sprintf(\"%s/accounts/%s/teamnet/routes\", baseURL, accountTag))\nif err != nil {\n\treturn fmt.Errorf(\"invalid routes endpoint URL: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"client, err := cfapi.NewRESTClient(baseURL, accountTag, zoneTag, token, ua, log)\nif err != nil {\n\tlog.Error().Err(err).Str(\"baseURL\", baseURL).Msg(\"cfapi client init failed\")\n\treturn err\n}","preventionTips":["Sanitize accountTag/baseURL (TrimSpace, strip quotes) before client creation.","Prefer the default Cloudflare API URL unless a custom proxy is required.","Unit-test client construction with your real config values."],"tags":["go","url","api-client"],"backgroundTag":"invalid-url-format","analyzedSha":"2253eeeb25a44a713a4b60b8ba1e1b3f377d1a0f","analyzedAt":"2026-09-06T04:14:33.757Z","contentChangedAt":"2026-09-06T04:14:33.757Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}