{"record":{"id":"45c675d45dd3db0b","repo":"BerriAI/litellm","slug":"project-management-is-an-enterprise-feature-you-m","errorCode":null,"errorMessage":"Project management is an enterprise feature. 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":"Project management is an enterprise feature\\. 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":345,"sourceCode":"    ```\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(\n                    object_data=data,\n                    field_name=field,\n                    value=getattr(data, field),\n                )\n                delattr(data, field)\n\n        if prisma_client is None:\n            raise HTTPException(","sourceCodeStart":327,"sourceCodeEnd":363,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/enterprise/litellm_enterprise/proxy/management_endpoints/project_endpoints.py#L327-L363","documentation":"All project management endpoints are a paid LiteLLM Enterprise feature. On POST /project/new the global premium_user flag is checked; without a verified LITELLM_LICENSE the proxy returns HTTP 403 before doing any work, with pointers to the trial and pricing pages.","triggerScenarios":"POST /project/new on a proxy without a premium license (premium_user is False), regardless of payload. Also fires when the license key is expired, malformed, or not loaded into the process that serves the request.","commonSituations":"Running the open-source proxy image and hitting enterprise endpoints, license env var set in the wrong container/shell, or a license that lapsed after renewal.","solutions":["Set LITELLM_LICENSE to a valid enterprise key in the proxy's env and restart it","Verify the license is loaded (proxy startup logs show premium user status) before calling project endpoints","Obtain a 7-day trial key from https://www.litellm.ai/enterprise#trial for evaluation","If you do not need projects, use team/key management endpoints from the OSS tier instead"],"exampleFix":"# before\ndocker run litellm/litellm --config /config.yaml  # no license\ncurl -X POST http://0.0.0.0:4000/project/new ...\n# after\ndocker run -e LITELLM_LICENSE=sk-... litellm/litellm --config /config.yaml\ncurl -X POST http://0.0.0.0:4000/project/new ...","handlingStrategy":"validation","validationCode":"async def enterprise_ready(client) -> bool:\n    # probe an enterprise endpoint cheaply or track proxy premium status via /health/liveliness + config\n    try:\n        await client.get('/project/list')\n        return True\n    except Exception as e:\n        if getattr(e, 'status_code', None) == 403:\n            return False\n        raise","typeGuard":"const isEnterpriseError = (e) =>\n  e.status === 403 && /Enterprise user/.test(e.body?.detail?.error ?? '');","tryCatchPattern":"catch (e) {\n  if (e.status === 403 && /not_premium_user|Enterprise user/.test(e.body?.detail?.error ?? '')) {\n    throw new Error('Proxy lacks LITELLM_LICENSE: set it and restart before using project endpoints');\n  }\n  throw e;\n}","preventionTips":["Set LITELLM_LICENSE via secret manager so every proxy replica sees it","Add a startup smoke test in deployment pipelines that calls one enterprise endpoint"],"tags":["litellm","enterprise","licensing","http-403"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}