LiteLLM
What Plutus imports
Section titled “What Plutus imports”- Spend by model
- Spend by upstream provider (OpenAI, Anthropic, Bedrock, …)
- Spend by virtual key
- Spend by team
- Input and output token counts
- Also emits
litellm.tokens.input/litellm.tokens.outputusage metrics — see Usage Explorer
Connecting
Section titled “Connecting”Method: Plutus Agent (runs beside your gateway)
LiteLLM is almost always self-hosted, on a network Plutus can’t reach. So Plutus doesn’t pull this data: you run a small collector alongside your proxy, it reads the proxy’s own spend tables over your internal network, and it pushes one daily aggregate out over HTTPS. Your gateway never needs to be reachable from the internet, and nothing per-request leaves your network.
-
In Plutus, go to Cost Sources → LiteLLM and click Generate API Key. This requires an account admin — a member can view the panel but won’t see the button.
-
Plutus shows the key once, along with a ready-to-run command. Run it wherever it can reach your proxy:
Terminal window docker run -d --name plutus-litellm-collector \-e PLUTUS_API_KEY=<the key shown above> \-e LITELLM_BASE_URL=http://litellm:4000 \-e LITELLM_MASTER_KEY=<your-litellm-master-key> \ghcr.io/plutus-cloud/plutus-litellm-collector:mainPoint
LITELLM_BASE_URLat your proxy on your own network, andLITELLM_MASTER_KEYat a key with admin scope — the collector uses it to read spend and nothing else. -
Decide which upstream providers Plutus should count. After the collector’s first push, the Upstream providers panel on the same page lists every provider your gateway routes to. For each one:
- Count from gateway — Plutus builds your totals from the gateway’s figures for that provider.
- Reported by… then Don’t count — the provider’s own connector owns its spend, and the gateway’s figures for it are not counted. You have to name which connector reports it.
- Undo returns a provider to undecided.
Nothing is counted until you decide. A provider stays out of your totals while it’s undecided, which is deliberate: if you already have the Anthropic connector and Plutus also counted Anthropic spend from the gateway, the same money would arrive twice and inflate your AI spend with nothing on screen explaining it.
-
Once the first push succeeds, the connection panel shows Receiving data with the last push time. If it still shows No data received yet after a few minutes, see Notes below.
LiteLLM prices each request from its own model price map, so these figures are an estimate and won’t match a provider invoice to the penny — that map doesn’t know your negotiated rates or committed-use discounts. The value is the breakdown, which a provider invoice can’t give you at all. See Estimated vs. invoiced cost.
Token counts are recorded for every provider whatever you decide about its spend. A provider whose dollars you track through its own connector still shows per-team and per-key token usage here. Deciding that the invoice owns a provider’s money doesn’t discard what the gateway knows about it.
Switching a provider from counted to not-counted removes the gateway’s figures for it — all of them, not just recent days. Plutus asks you to confirm this. Token counts are kept.
Spend that LiteLLM reports without the dimension a breakdown needs — a call made with the master key rather than a virtual key, or a key with no team — is shown as Unattributed rather than dropped, so the breakdown always adds up to the total.
Two things reliably go wrong first:
- The master key needs admin scope. A key that makes inference calls authenticates fine and then fails on every billing route.
- The proxy needs a database. A LiteLLM proxy running without one serves traffic normally and keeps no spend history, so there’s nothing for the collector to read. If the first push reports no rows and no error, check that before anything else.