{"record":{"id":"2ab66cdf9b0c20da","repo":"cloudflare/cloudflared","slug":"failed-to-create-virtual-network-account-level-end","errorCode":null,"errorMessage":"failed to create virtual network account-level endpoint","messagePattern":"failed to create virtual network account-level endpoint","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cfapi/base_client.go","lineNumber":59,"sourceCode":"\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,\n\t\t\taccountRoutes: *accountRoutesEndpoint,\n\t\t\taccountVnets:  *accountVnetsEndpoint,\n\t\t},\n\t\tauthToken: authToken,","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/cloudflare/cloudflared/blob/2253eeeb25a44a713a4b60b8ba1e1b3f377d1a0f/cfapi/base_client.go#L41-L77","documentation":"NewRESTClient builds the account-level virtual networks endpoint (baseURL + /accounts/<accountTag>/teamnet/virtual_networks) and wraps any url.Parse failure with this message. It indicates the composed URL string was not a valid URL.","triggerScenarios":"baseURL or accountTag containing spaces, control characters, or malformed percent-escapes making the virtual networks endpoint URL unparseable.","commonSituations":"Custom API endpoint configuration errors; account tag copied with surrounding whitespace or quotes from a config file.","solutions":["Check baseURL and accountTag for stray characters and trim/fix them.","Use the default API base URL unless a custom endpoint is required.","Validate/escape the account tag before client construction."],"exampleFix":"// before\nbaseURL := \"https://api.cloudflare.com/\\n\"\n// after\nbaseURL := strings.TrimSpace(\"https://api.cloudflare.com\")","handlingStrategy":"validation","validationCode":"u, err := url.Parse(fmt.Sprintf(\"%s/accounts/%s/teamnet/virtual_networks\", baseURL, accountTag))\nif err != nil {\n\treturn fmt.Errorf(\"invalid virtual networks endpoint URL: %w\", err)\n}","typeGuard":null,"tryCatchPattern":"client, err := cfapi.NewRESTClient(baseURL, accountTag, zoneTag, token, ua, log)\nif err != nil {\n\treturn fmt.Errorf(\"cfapi init: %w\", err)\n}","preventionTips":["Trim and validate baseURL and accountTag before client construction.","Avoid embedding tags from raw JSON/YAML without unquoting.","Validate config once at startup, not per call."],"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-14T05:17:10.506Z"}