{"record":{"id":"9165f885c8821c43","repo":"ipfs/kubo","slug":"telemetry-endpoint-returned-http-d","errorCode":null,"errorMessage":"telemetry endpoint returned HTTP %d","messagePattern":"telemetry endpoint returned HTTP (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"plugin/plugins/telemetry/telemetry.go","lineNumber":808,"sourceCode":"\t// so HTTP_PROXY, HTTPS_PROXY and NO_PROXY are respected.\n\tclient := &http.Client{\n\t\tTimeout: httpTimeout,\n\t}\n\tresp, err := client.Do(req)\n\tif err != nil {\n\t\tlog.Debugf(\"failed to send telemetry: %s\", err)\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\t// A collector says it is permanently out of service with 410 Gone, which\n\t// stops this node for good. See retire.\n\tif resp.StatusCode == http.StatusGone {\n\t\treturn errEndpointRetired\n\t}\n\n\tif resp.StatusCode >= 400 {\n\t\terr := fmt.Errorf(\"telemetry endpoint returned HTTP %d\", resp.StatusCode)\n\t\tlog.Debug(err)\n\t\treturn err\n\t}\n\tlog.Debugf(\"telemetry sent successfully (%d)\", resp.StatusCode)\n\treturn nil\n}\n","sourceCodeStart":790,"sourceCodeEnd":815,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/plugin/plugins/telemetry/telemetry.go#L790-L815","documentation":"sendTelemetry posts the node's telemetry report to the configured collector endpoint and, when the response status is >= 400, returns 'telemetry endpoint returned HTTP <code>' (after logging at debug level). The endpoint rejected the payload or the request, so this cycle's telemetry was not accepted. Status 410 is special-cased as errEndpointRetired.","triggerScenarios":"Collector returns 400 (malformed payload/schema mismatch), 401/403 (auth/token invalid), 404/410 (endpoint moved or retired), or 429/5xx (rate limit, collector outage).","commonSituations":"A kubo version posting a schema the collector no longer accepts, misconfigured collector URL, retired endpoint pinned in an old binary, or the collector temporarily down.","solutions":["Check the status code: 410 means the endpoint is retired — stop sending (kubo handles this via errEndpointRetired) or upgrade kubo","Verify the collector URL in config (Telemetry settings) is current and reachable","Check IPFS_TELEMETRY=off / DO_NOT_TRACK if you simply want to silence telemetry entirely","Retry later for 429/5xx; failures are non-fatal and logged at debug level"],"exampleFix":"// before\ncollector := \"https://old-collector.example.com/v1\"\n// after\ncollector := \"https://current-collector.example.com/v2\" // or disable:\nIPFS_TELEMETRY=off ipfs daemon","handlingStrategy":"retry","validationCode":"resp, err := http.Head(collectorURL)\nif err == nil && resp.StatusCode == http.StatusGone {\n    // endpoint retired; disable telemetry or update collector\n}","typeGuard":null,"tryCatchPattern":"if err := sendTelemetry(ctx, payload); err != nil {\n    if errors.Is(err, errEndpointRetired) { disableTelemetry() }\n    // otherwise: log and retry on next cycle; non-fatal\n    log.Debug(err)\n}","preventionTips":["Keep kubo updated so the payload schema matches the current collector","Validate collector URL configuration","Set IPFS_TELEMETRY=off or DO_NOT_TRACK=1 if telemetry is unwanted","Treat 4xx/5xx as non-fatal; telemetry must never break the daemon"],"tags":["telemetry","http","network"],"backgroundTag":"telemetry-endpoint-error","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}