diff --git a/docs/proxy/forward_client_headers.md b/docs/proxy/forward_client_headers.md index d96f37aef..dd2baf6fe 100644 --- a/docs/proxy/forward_client_headers.md +++ b/docs/proxy/forward_client_headers.md @@ -112,7 +112,7 @@ general_settings: forward_llm_provider_auth_headers: true # Enable BYOK ``` -For **Claude Code**, see [Claude Code BYOK](../tutorials/claude_code_byok.md). Use `ANTHROPIC_CUSTOM_HEADERS="x-litellm-api-key: $LITELLM_API_KEY"` to pass your LiteLLM key. A configured Anthropic API key is sent as `x-api-key` and needs `forward_llm_provider_auth_headers` above to be forwarded; `/login` instead sends an OAuth token as `Authorization: Bearer `, which LiteLLM forwards regardless of this setting. +For **Claude Code**, see [Claude Code BYOK](../tutorials/claude_code_byok.md). Use `ANTHROPIC_CUSTOM_HEADERS="x-litellm-api-key: $LITELLM_API_KEY"` to pass your LiteLLM key. A configured Anthropic API key is sent as `x-api-key` and needs `forward_llm_provider_auth_headers` above to be forwarded; `/login` instead sends an OAuth token as `Authorization: Bearer `, which LiteLLM forwards regardless of this setting. From LiteLLM v1.105.0, each spend log row records which credential the upstream call used in `metadata.used_client_oauth_token` (`true` for a forwarded OAuth token, `false` for the deployment's configured key, never the token itself), filterable on the Logs page **Credential** dropdown or with `GET /spend/logs/ui?used_client_oauth_token=true`. Client request: ```bash diff --git a/docs/tutorials/claude_code_max_subscription.md b/docs/tutorials/claude_code_max_subscription.md index f94173138..cc99773a7 100644 --- a/docs/tutorials/claude_code_max_subscription.md +++ b/docs/tutorials/claude_code_max_subscription.md @@ -312,6 +312,21 @@ curl -X POST "http://localhost:4000/key/generate" \ }' ``` +### Seeing Which Requests Were Billed to a Seat + +Every spend log row records which credential the upstream call used in `metadata.used_client_oauth_token`: `true` when the request went to Anthropic with the developer's forwarded OAuth token (the Max seat paid for it), `false` when it went out with the deployment's configured `api_key`. The token itself is never written to the log. The field needs LiteLLM v1.105.0 or later (first in `v1.105.0-rc.1`), and rows written by an earlier version have no value, so they match neither filter below. A request the router sends to a Bedrock or Vertex deployment reads `false` even when the client sent an OAuth token, since only the direct Anthropic route forwards it + +`spend` stays at the model's list price on both kinds of rows, so budgets and rate limits keep working across seat-billed and key-billed traffic. To get the real API bill, subtract the seat-billed rows + +Filter the Logs page at `http://localhost:4000/ui/?page=logs` with the **Credential** dropdown (**Client OAuth token** or **Configured key**); the row's detail drawer shows the same value under Request Details. The same filter is available on the spend logs API: + +```bash showLineNumbers title="List Seat-Billed Requests" +curl "http://localhost:4000/spend/logs/ui?used_client_oauth_token=true" \ + -H "Authorization: Bearer $LITELLM_MASTER_KEY" +``` + +Pass `used_client_oauth_token=false` for the requests the configured key paid for + ## Troubleshooting ### OAuth Token Not Being Forwarded