Check for existing issues
What happened?
GET /v2/user/info is intended to be the lightweight replacement for /user/info, excluding virtual keys and full team objects while returning the user's own profile data.
The user database row already contains rpm_limit and tpm_limit, and the endpoint's existing find_unique query retrieves them. However, UserInfoV2Response does not declare either field, and the endpoint's explicit response mapping drops both values.
As a result, clients that need the complete user-level rate-limit policy must continue calling the heavier /user/info endpoint.
Expected behavior: /v2/user/info returns the user's optional rpm_limit and tpm_limit values without adding any database queries or returning keys/full team objects.
Actual behavior: both fields are absent from the JSON response even when they are set on the user row.
Steps to Reproduce
- Start a live LiteLLM proxy at commit
817582e697c92a67f8bf2238a9c646498b00ffb1 with an isolated PostgreSQL database.
- Create a synthetic internal user with
tpm_limit=120000 and rpm_limit=600 via POST /user/new.
- Call
GET /v2/user/info?user_id=v2-rate-limit-e2e-user with the local master key.
- Observe that the response returns HTTP 200 but omits both fields.
- Call
GET /user/info for the same user and observe that both values are present, confirming they were persisted.
The reproduction uses a live proxy with no mocks. All identifiers and values are synthetic, and authorization is redacted.

Relevant log output
POST /user/new HTTP 200
{"user_id":"v2-rate-limit-e2e-user","tpm_limit":120000,"rpm_limit":600}
GET /v2/user/info?user_id=v2-rate-limit-e2e-user HTTP 200
{"user_id":"v2-rate-limit-e2e-user","spend":0.0,"max_budget":null,"models":[],"teams":[]}
GET /user/info?user_id=v2-rate-limit-e2e-user HTTP 200
{"user_info":{"tpm_limit":120000,"rpm_limit":600}}
What part of LiteLLM is this about?
Proxy
What LiteLLM version are you on ?
litellm_internal_staging (817582e697, package version 1.94.0)
Twitter / LinkedIn details
N/A
Check for existing issues
What happened?
GET /v2/user/infois intended to be the lightweight replacement for/user/info, excluding virtual keys and full team objects while returning the user's own profile data.The user database row already contains
rpm_limitandtpm_limit, and the endpoint's existingfind_uniquequery retrieves them. However,UserInfoV2Responsedoes not declare either field, and the endpoint's explicit response mapping drops both values.As a result, clients that need the complete user-level rate-limit policy must continue calling the heavier
/user/infoendpoint.Expected behavior:
/v2/user/inforeturns the user's optionalrpm_limitandtpm_limitvalues without adding any database queries or returning keys/full team objects.Actual behavior: both fields are absent from the JSON response even when they are set on the user row.
Steps to Reproduce
817582e697c92a67f8bf2238a9c646498b00ffb1with an isolated PostgreSQL database.tpm_limit=120000andrpm_limit=600viaPOST /user/new.GET /v2/user/info?user_id=v2-rate-limit-e2e-userwith the local master key.GET /user/infofor the same user and observe that both values are present, confirming they were persisted.The reproduction uses a live proxy with no mocks. All identifiers and values are synthetic, and authorization is redacted.
Relevant log output
POST /user/new HTTP 200 {"user_id":"v2-rate-limit-e2e-user","tpm_limit":120000,"rpm_limit":600} GET /v2/user/info?user_id=v2-rate-limit-e2e-user HTTP 200 {"user_id":"v2-rate-limit-e2e-user","spend":0.0,"max_budget":null,"models":[],"teams":[]} GET /user/info?user_id=v2-rate-limit-e2e-user HTTP 200 {"user_info":{"tpm_limit":120000,"rpm_limit":600}}What part of LiteLLM is this about?
Proxy
What LiteLLM version are you on ?
litellm_internal_staging(817582e697, package version1.94.0)Twitter / LinkedIn details
N/A