{"record":{"id":"a232c85b1368285e","repo":"BerriAI/litellm","slug":"only-premium-users-can-add-tags-to-projects-you-m","errorCode":null,"errorMessage":"Only premium users can add tags to projects. You must be a LiteLLM Enterprise user to use this feature. If you have a license please set `LITELLM_LICENSE` in your env. Get a 7 day trial key here: https://www.litellm.ai/enterprise#trial. \nPricing: https://www.litellm.ai/#pricing","messagePattern":"Only premium users can add tags to projects\\. You must be a LiteLLM Enterprise user to use this feature\\. If you have a license please set `LITELLM_LICENSE` in your env\\. Get a 7 day trial key here: https://www\\.litellm\\.ai/enterprise#trial\\. \nPricing: https://www\\.litellm\\.ai/#pricing","errorType":"http","errorClass":"HTTPException","httpStatus":403,"severity":"error","filePath":"enterprise/litellm_enterprise/proxy/management_endpoints/project_endpoints.py","lineNumber":362,"sourceCode":"        \"description\": \"Personalized hotel recommendation engine\",\n        \"team_id\": \"team-123\",\n        \"models\": [\"claude-3-sonnet\"],\n        \"budget_id\": \"428eeaa8-f3ac-4e85-a8fb-7dc8d7aa8689\",\n        \"metadata\": {\n            \"use_case_id\": \"SNOW-54321\"\n        }\n    }'\n    ```\n    \"\"\"\n    from litellm.proxy.proxy_server import (\n        litellm_proxy_admin_name,\n        premium_user,\n        prisma_client,\n    )\n\n    try:\n        if getattr(data, \"tags\", None) is not None and not premium_user:\n            raise HTTPException(\n                status_code=403,\n                detail={\n                    \"error\": \"Only premium users can add tags to projects. \" + CommonProxyErrors.not_premium_user.value\n                },\n            )\n\n        if not premium_user:\n            raise HTTPException(\n                status_code=403,\n                detail={\n                    \"error\": \"Project management is an enterprise feature. \" + CommonProxyErrors.not_premium_user.value\n                },\n            )\n\n        # ADD METADATA FIELDS\n        for field in LiteLLM_ManagementEndpoint_MetadataFields_Premium:\n            if getattr(data, field, None) is not None:\n                _set_object_metadata_field(","sourceCodeStart":344,"sourceCodeEnd":380,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/enterprise/litellm_enterprise/proxy/management_endpoints/project_endpoints.py#L344-L380","documentation":"Project management is enterprise-only and tags doubly so: /project/new and /project/update first reject non-premium users who send a tags field, then reject all non-premium use of project management itself. premium_user is only True with a valid LITELLM_LICENSE; the 403 detail embeds the not_premium_user help text with trial and pricing links.","triggerScenarios":"Any /project/* write on a proxy without a valid enterprise license, or specifically any request with \"tags\" set while premium_user is False (LITELLM_LICENSE unset, invalid, or expired).","commonSituations":"OSS litellm proxy given an enterprise-style config; license expired or the env var not passed into the container; CI environments provisioned without the license.","solutions":["Set LITELLM_LICENSE to a valid enterprise key in the proxy environment and restart","Get a 7-day trial key at https://www.litellm.ai/enterprise#trial to evaluate","Remove the tags field from project payloads if the license cannot be enabled (note core project management is also enterprise-only)"],"exampleFix":"# before\ndocker run -p 4000:4000 ghcr.io/berriai/litellm --config /app/config.yaml  # no license, tags sent -> 403\n\n# after\ndocker run -p 4000:4000 -e LITELLM_LICENSE=<your-key> ghcr.io/berriai/litellm --config /app/config.yaml","handlingStrategy":"validation","validationCode":"import os\n\nIS_PREMIUM = bool(os.environ.get(\"LITELLM_LICENSE\"))\ndef project_payload_safe(data: dict) -> dict:\n    if not IS_PREMIUM:\n        data.pop(\"tags\", None)  # tags are premium-only\n    return data","typeGuard":null,"tryCatchPattern":"try:\n    await post(\"/project/new\", json=data)\nexcept HTTPStatusError as e:\n    if e.response.status_code == 403 and \"premium\" in e.response.text:\n        # configuration gap: set LITELLM_LICENSE on the proxy, then retry\n        raise RuntimeError(\"project management requires LITELLM_LICENSE\")\n    raise","preventionTips":["Set LITELLM_LICENSE in every environment that manages projects","Strip enterprise-only fields (tags, premium metadata) from payloads in OSS setups","Keep license expiry dates on a calendar; renew before 403s appear"],"tags":["litellm","enterprise","licensing","projects","http-403"],"backgroundTag":"feature-requires-license","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}