From 3e4a884b25eeebd76de3f4e850b816f0b3bdc2fe Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Fri, 4 Sep 2026 13:03:18 -0700 Subject: [PATCH 1/2] feat(organization): expose PATCH /v2/organization/{organization_id} in the OpenAPI schema --- .../management_endpoints/organization_endpoints.py | 1 - .../test_organization_endpoints.py | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/management_endpoints/organization_endpoints.py b/litellm/proxy/management_endpoints/organization_endpoints.py index 5e38a016099..35a1380a619 100644 --- a/litellm/proxy/management_endpoints/organization_endpoints.py +++ b/litellm/proxy/management_endpoints/organization_endpoints.py @@ -764,7 +764,6 @@ async def handle_update_object_permission( tags=["organization management"], dependencies=[Depends(user_api_key_auth)], response_model=LiteLLM_OrganizationTableWithMembers, - include_in_schema=False, ) async def update_organization_v2( organization_id: str, diff --git a/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py index e2d89a660c2..9218cec4308 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py @@ -726,6 +726,20 @@ async def _run_update_organization_v2( return mock_prisma_client +def test_v2_update_route_is_public_in_openapi(): + """PATCH /v2/organization/{organization_id} is a public route: hiding it again (include_in_schema=False) + would drop it from openapi.json, /docs, and the generated UI API types.""" + from fastapi import FastAPI + + from litellm.proxy.management_endpoints.organization_endpoints import router + + app = FastAPI() + app.include_router(router) + v2_path = app.openapi()["paths"].get("/v2/organization/{organization_id}") + assert v2_path is not None + assert "patch" in v2_path + + @pytest.mark.asyncio async def test_v2_update_clears_tpm_limit_and_metadata(monkeypatch): """A cleared tpm_limit is written to the budget row as None; a cleared metadata is written as {}.""" From 0eb2363074bef6fd413c598fa0de20b7d11f10b2 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Fri, 4 Sep 2026 13:10:37 -0700 Subject: [PATCH 2/2] test(organization): assert route publicity through the production OpenAPI generator --- .../management_endpoints/test_organization_endpoints.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py index 9218cec4308..6ce9e54cae0 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_organization_endpoints.py @@ -729,13 +729,9 @@ async def _run_update_organization_v2( def test_v2_update_route_is_public_in_openapi(): """PATCH /v2/organization/{organization_id} is a public route: hiding it again (include_in_schema=False) would drop it from openapi.json, /docs, and the generated UI API types.""" - from fastapi import FastAPI + from litellm.proxy.proxy_server import get_openapi_schema - from litellm.proxy.management_endpoints.organization_endpoints import router - - app = FastAPI() - app.include_router(router) - v2_path = app.openapi()["paths"].get("/v2/organization/{organization_id}") + v2_path = get_openapi_schema()["paths"].get("/v2/organization/{organization_id}") assert v2_path is not None assert "patch" in v2_path