{"record":{"id":"8f4df4442b1bf3d1","repo":"BerriAI/litellm","slug":"api-key-is-required-set-via-api-key-parameter-o","errorCode":null,"errorMessage":"api_key is required. Set via `api_key` parameter or `JINA_API_KEY` environment variable.","messagePattern":"api_key is required\\. Set via `api_key` parameter or `JINA_API_KEY` environment variable\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/llms/jina_ai/rerank/transformation.py","lineNumber":144,"sourceCode":"                # If it's already a dict, keep it as is\n                transformed_result[\"document\"] = result[\"document\"]\n            transformed_results.append(transformed_result)\n\n        return RerankResponse(\n            id=_json_response.get(\"id\") or str(uuid.uuid4()),\n            results=transformed_results,\n            meta=rerank_meta,\n        )  # Return response\n\n    def validate_environment(\n        self,\n        headers: dict,\n        model: str,\n        api_key: str | None = None,\n        optional_params: dict | None = None,\n    ) -> dict:\n        if api_key is None:\n            raise ValueError(\"api_key is required. Set via `api_key` parameter or `JINA_API_KEY` environment variable.\")\n        return {\n            \"accept\": \"application/json\",\n            \"content-type\": \"application/json\",\n            \"authorization\": f\"Bearer {api_key}\",\n        }\n\n    def calculate_rerank_cost(\n        self,\n        model: str,\n        custom_llm_provider: str | None = None,\n        billed_units: RerankBilledUnits | None = None,\n        model_info: ModelInfo | None = None,\n    ) -> tuple[float, float]:\n        \"\"\"\n        Jina AI reranker is priced at $0.000000018 per token.\n        \"\"\"\n        if (\n            model_info is None","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/llms/jina_ai/rerank/transformation.py#L126-L162","documentation":"Raised by the Jina rerank config during environment validation: no api_key argument and no JINA_API_KEY environment variable were found, so the Authorization header cannot be built. This fails before any network call.","triggerScenarios":"litellm.rerank(model='jina_ai/jina-reranker-v2-base-multilingual', ...) without api_key while JINA_API_KEY is unset — common in fresh environments, containers, or CI where the env var was not exported.","commonSituations":"Works locally (env var in shell) but fails in Docker/CI where the variable is not passed; using a proxy config entry that omits api_key; variable named differently (JINA_AI_API_KEY).","solutions":["Pass api_key directly: litellm.rerank(model='jina_ai/...', query=q, documents=docs, api_key='jina_...').","Or export the exact name: export JINA_API_KEY='jina_...' (and pass it via --env or env_file in Docker/CI).","For litellm proxy, set api_key on the jina_ai model entry or use the secret manager."],"exampleFix":"# before\nlitellm.rerank(model='jina_ai/jina-reranker-v2-base-multilingual', query=q, documents=docs)\n\n# after\nlitellm.rerank(model='jina_ai/jina-reranker-v2-base-multilingual', query=q, documents=docs, api_key=os.environ['JINA_API_KEY'])","handlingStrategy":"validation","validationCode":"def require_jina_key(api_key: str | None = None) -> str:\n    key = api_key or os.environ.get('JINA_API_KEY')\n    if not key:\n        raise RuntimeError('JINA_API_KEY not set; add it to the environment or pass api_key')\n    return key","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Check os.environ.get('JINA_API_KEY') at app startup, not at request time","Use the exact variable name JINA_API_KEY in Docker env_file / CI secrets"],"tags":["jina-ai","rerank","configuration","auth","missing-api-key"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}