What we document
We are a transparent proxy. Every parameter, response field, streaming event, and error code matches the upstream API exactly, and re-documenting several hundred pages of someone else’s reference would only create a second source of truth to go stale.
So we document our deltas and nothing else. For request and response semantics, read the provider’s own reference. It is authoritative for us too.
If you ever find a behavioural difference between us and upstream that is not on this page, that is a bug and we want the request ID. It is not a documentation gap.
Base URLs
| Surface | Base URL | Auth header |
|---|---|---|
| Anthropic Messages | https://api.lowcostllm.com | x-api-key |
| OpenAI Chat / Responses | https://api.lowcostllm.com/v1 | Authorization: Bearer |
| Management API | https://api.lowcostllm.com/v1/keys | Authorization: Bearer |
Response headers
We add headers; we never remove upstream ones. Everything the provider returns reaches you untouched.
| Header | Example | Meaning |
|---|---|---|
x-lcllm-request-id | req_01HZX… | Our trace ID. Include it in any support request. |
x-lcllm-cost-usd | 0.004120 | What this call cost you, after discount. |
x-lcllm-list-cost-usd | 0.008240 | What the same call would have cost at provider list price. |
x-lcllm-upstream-ms | 1284 | Time spent at the provider. Subtract from total to see our overhead. |
x-lcllm-balance-usd | 412.88 | Remaining credit after this call. |
Request IDs
Ours are prefixed req_ followed by a lexicographically sortable ULID. The upstream provider’s own request ID is passed through unchanged in its original header, so you can correlate an incident with the provider’s status page without going through us.
Usage endpoint
One endpoint that is genuinely ours rather than a pass-through: aggregated spend, grouped however you need it.
curl "https://api.lowcostllm.com/v1/usage?start=2026-08-01&end=2026-08-31&group_by=model" \
-H "Authorization: Bearer $LOWCOSTLLM_API_KEY"group_byacceptsmodel,key,day, or a comma separated combination.- Every bucket returns both
cost_usdandlist_cost_usd, so you can report savings without recomputing them.
See cost monitoring for budget caps and webhook alerts built on top of this.