{"record":{"id":"a315dd1521665671","repo":"cloudflare/cloudflared","slug":"quick-tunnel-provisioning-failed","errorCode":null,"errorMessage":"quick tunnel provisioning failed","messagePattern":"quick tunnel provisioning failed","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/cloudflared/tunnel/quick_tunnel.go","lineNumber":105,"sourceCode":"\t\t}\n\t\treturn fmt.Errorf(\"quick tunnel provisioning failed with status %d: %s\", resp.StatusCode, string(respBody))\n\t}\n\n\tvar data QuickTunnelResponse\n\tif err := json.Unmarshal(respBody, &data); err != nil {\n\t\trespString := string(respBody)\n\t\tfields := map[string]interface{}{\"status_code\": resp.Status}\n\t\tsc.log.Err(err).Fields(fields).Msgf(\"Error unmarshaling QuickTunnel response: %s\", respString)\n\t\treturn errors.Wrap(err, \"failed to unmarshal quick Tunnel\")\n\t}\n\n\t// TODO(TUN-10791): Add CLI-level coverage that provisioning errors are logged to users.\n\tif len(data.Errors) > 0 {\n\t\treturn fmt.Errorf(\"quick tunnel provisioning failed: %s\", formatQuickTunnelErrors(data.Errors))\n\t}\n\n\tif !data.Success {\n\t\treturn errors.New(\"quick tunnel provisioning failed\")\n\t}\n\n\ttunnelID, err := uuid.Parse(data.Result.ID)\n\tif err != nil {\n\t\treturn errors.Wrap(err, \"failed to parse quick Tunnel ID\")\n\t}\n\n\tcredentials := connection.Credentials{\n\t\tAccountTag:   data.Result.AccountTag,\n\t\tTunnelSecret: data.Result.Secret,\n\t\tTunnelID:     tunnelID,\n\t}\n\n\turl := data.Result.Hostname\n\tif !strings.HasPrefix(url, \"https://\") {\n\t\turl = \"https://\" + url\n\t}\n","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/cloudflare/cloudflared/blob/2253eeeb25a44a713a4b60b8ba1e1b3f377d1a0f/cmd/cloudflared/tunnel/quick_tunnel.go#L87-L123","documentation":"RunQuickTunnel provisions an ephemeral Quick Tunnel via the Cloudflare API. When the API response reports no specific errors but data.Success is false, cloudflared cannot extract a detailed reason and returns the generic \"quick tunnel provisioning failed\". It indicates the provisioning request failed server-side without a structured error entry.","triggerScenarios":"Cloudflare API returns 200 with success:false and empty errors array during `cloudflared tunnel --url ...` quick tunnel setup; intermediaries corrupting the response; Cloudflare-side outage.","commonSituations":"Corporate proxies/firewalls mangling API responses; Cloudflare status incidents; rate limiting responses lacking error detail.","solutions":["Retry the command; provisioning failures are often transient.","Check the Cloudflare status page for incidents affecting tunnel provisioning.","Ensure no proxy/TLS-intercepting appliance is altering the API response; try from a different network.","Fall back to a Named Tunnel (`cloudflared tunnel create`) which gives clearer API errors."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"err := runQuickTunnel();\nif err != nil && strings.Contains(err.Error(), \"quick tunnel provisioning failed\") {\n    time.Sleep(2 * time.Second)\n    // retry up to N times, then fall back to a Named Tunnel\n}","preventionTips":["Prefer Named Tunnels for anything beyond ad-hoc testing.","Avoid TLS-intercepting proxies on hosts that provision Quick Tunnels.","Check the Cloudflare status page when provisioning fails repeatedly."],"tags":["network","api","quick-tunnel","provisioning"],"backgroundTag":"api-request-failed","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"}