{"record":{"id":"40f9a814569b3a69","repo":"BerriAI/litellm","slug":"no-valid-endpoint-found-for-arize-please-set-ari","errorCode":null,"errorMessage":"No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint","messagePattern":"No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/litellm_core_utils/litellm_logging.py","lineNumber":3943,"sourceCode":"            for callback in _in_memory_loggers:\n                if isinstance(callback, OpikLogger):\n                    return callback\n\n            _opik_logger: Final = OpikLogger()\n            _in_memory_loggers.append(_opik_logger)\n            return _opik_logger\n        elif logging_integration == \"arize\":\n            _v2 = _maybe_construct_otel_v2(\"arize\", _in_memory_loggers)\n            if _v2 is not None:\n                return _v2\n            from litellm.integrations.opentelemetry import (\n                OpenTelemetry,\n                OpenTelemetryConfig,\n            )\n\n            arize_config: Final = ArizeLogger.get_arize_config()\n            if arize_config.endpoint is None:\n                raise ValueError(\n                    \"No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint\"\n                )\n            otel_config = OpenTelemetryConfig(\n                exporter=arize_config.protocol,\n                endpoint=arize_config.endpoint,\n                service_name=arize_config.project_name,\n            )\n\n            os.environ[\"OTEL_EXPORTER_OTLP_TRACES_HEADERS\"] = (\n                f\"space_id={arize_config.space_key or arize_config.space_id},api_key={arize_config.api_key}\"\n            )\n            for callback in _in_memory_loggers:\n                if isinstance(callback, ArizeLogger) and callback.callback_name == \"arize\":\n                    return callback\n            _arize_otel_logger: Final = ArizeLogger(config=otel_config, callback_name=\"arize\")\n            _in_memory_loggers.append(_arize_otel_logger)\n            return _arize_otel_logger\n        elif logging_integration == \"arize_phoenix\":","sourceCodeStart":3925,"sourceCodeEnd":3961,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/litellm_core_utils/litellm_logging.py#L3925-L3961","documentation":"When initializing the 'arize' callback, LiteLLM reads ArizeLogger.get_arize_config(); if neither ARIZE_ENDPOINT (gRPC) nor ARIZE_HTTP_ENDPOINT (HTTP) resolves to a non-None endpoint, it raises this ValueError. Arize needs both credentials (ARIZE_API_KEY/ARIZE_SPACE_KEY) and an explicit endpoint to build the OpenTelemetry exporter, and the endpoint is the piece you forgot.","triggerScenarios":"Setting callbacks: ['arize'] (config.yaml litellm_settings or LITELLM_CALLBACKS env) with ARIZE_API_KEY/ARIZE_SPACE_KEY set but neither ARIZE_ENDPOINT nor ARIZE_HTTP_ENDPOINT present in the proxy process environment.","commonSituations":"Copying Arize setup docs that only mention API key/space; deploying to a new environment where the endpoint env vars were not carried over; mistyped var names (e.g. ARIZE_ENDPOINT_URL).","solutions":["Set ARIZE_HTTP_ENDPOINT (e.g. https://otlp.arize.com/phonybroker/otel/v1/traces for the phony broker) or ARIZE_ENDPOINT for gRPC in the proxy environment","Verify with a quick env check before startup: python -c \"import os; print(os.getenv('ARIZE_ENDPOINT'), os.getenv('ARIZE_HTTP_ENDPOINT'))\"","Ensure the vars are actually visible to the proxy process (docker-compose env, systemd Environment=, k8s secret) not just your shell","If you only wanted Arize-hosted phony-broker tracing, follow the LiteLLM Arize docs for the exact endpoint URL format"],"exampleFix":"# before\nexport ARIZE_API_KEY=... ARIZE_SPACE_KEY=...\nlitellm_settings:\n  callbacks: [\"arize\"]   # ValueError: No valid endpoint found\n\n# after\nexport ARIZE_API_KEY=... ARIZE_SPACE_KEY=... ARIZE_HTTP_ENDPOINT=\"https://otlp.arize.com/phonybroker/otel/v1/traces\"\nlitellm_settings:\n  callbacks: [\"arize\"]","handlingStrategy":"validation","validationCode":"import os\n\nmissing = [v for v in ('ARIZE_API_KEY', 'ARIZE_SPACE_KEY') if not os.getenv(v)]\nif not (os.getenv('ARIZE_ENDPOINT') or os.getenv('ARIZE_HTTP_ENDPOINT')):\n    missing.append('ARIZE_ENDPOINT or ARIZE_HTTP_ENDPOINT')\nassert not missing, f'Arize callback misconfigured, missing: {missing}'","typeGuard":null,"tryCatchPattern":"try:\n    litellm.callbacks = ['arize']\n    litellm.completion(...)\nexcept ValueError as e:\n    if 'No valid endpoint found for Arize' in str(e):\n        os.environ['ARIZE_HTTP_ENDPOINT'] = 'https://otlp.arize.com/...'\n        raise RuntimeError('Arize endpoint configured; restart proxy')\n    raise","preventionTips":["Document the full required env set per observability callback in your deployment checklist","Run env-var preflight checks at process start for every enabled callback","Use a secrets manager template so endpoint vars ship together with API keys"],"tags":["litellm","arize","observability","callbacks","environment-variables"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}