#30635 [Bug]: Batch API cost never tracked โ background check_batch_cost poller gets 403 "User None does not have access" on managed batch retrieve (regression from #27004)
### What happened?
On a self-hosted LiteLLM proxy (OSS docker image, `STORE_MODEL_IN_DB=true`), per-request cost for OpenAI-style **managed batches** (`/v1/files` + `/v1/batches` with `custom_llm_provider: vertex_ai`) is **never tracked**. A virtual key that only runs batch jobs shows **$0 spend**, even after the batch completes successfully and produces an output file.
The background `check_batch_cost` scheduler job fires, but its retrieve of the completed managed batch is rejected by the managed-files access hook with `403 "User None does not have access to the object โฆ"`. Instead of a `batch_success` cost row, a `failure` SpendLog row is written on each poll cycle.
### Root cause
`CheckBatchCost.check_batch_cost` (`enterprise/litellm_enterprise/proxy/common_utils/check_batch_cost.py`) calls `llm_router.aretrieve_batch(...)`, which routes through the proxy `retrieve_batch` endpoint โ `pre_call_hook` โ `litellm_enterprise/proxy/hooks/managed_files.py::async_pre_call_hook` โ `can_user_call_unified_object_id` โ `can_access_resource` (`litellm/llms/base_llm/managed_resources/isolation.py`).
The poller's internal retrieve runs with an empty auth context โ `user_api_key_dict.user_โฆ