Already run a self-hosted LiteLLM? Connect it, and Jents reads its exact cost and usage. Your traffic and your provider keys stay in your gateway; Jents becomes the observability + ROI layer on top — nothing re-routes through us.
There are two halves, and they are independent — you can do either without the other:
| What you do | What Jents gets | |
|---|---|---|
| The feed | Point LiteLLM's logs at our webhook | Every call: cost, tokens, model, who ran it |
| Admin access | Give us its URL + master key | Jents can create keys, register models and set budgets on your gateway — and can pull your last 90 days of calls in, once |
⚠️ Only the feed keeps the numbers moving. Admin access is not silent — it lets Jents pull your last 90 days of calls in one go (exact cost and tokens, straight out of your gateway's own records) and read your key list with each key's spend. But that is a one-time catch-up plus a 6-hourly key check; nothing streams from it. Set up admin access and skip the feed, and your costs freeze at whatever that one import found and never move again.
Other gateways (Portkey, Cloudflare AI Gateway, Helicone) aren't supported right now — we checked each one and couldn't give you instructions that actually work. Talk to us if you're on one.
1. Connect it in Jents
Settings → Gateways → Connect. Jents shows two things — copy both:
- your webhook URL:
https://app.jents.io/api/gateway/byo - an Authorization header carrying a one-time ingest secret:
Bearer jgw_…
The secret is shown only once. It's how Jents knows which workspace a spend batch belongs to — the workspace is tied to the secret, never to anything inside the data (so no one can misattribute spend). Store it in your gateway's config; rotate it anytime from the same screen.
2. Point LiteLLM's logs at Jents — this is the half that carries the money
LiteLLM can forward every call it prices to a URL you choose. Turn its generic logger on in litellm_config.yaml:
litellm_settings:
success_callback: ["generic_api"]
turn_off_message_logging: True # optional — stops your prompts and responses being sent to us
…then point it at Jents with two environment variables on the proxy:
GENERIC_LOGGER_ENDPOINT=https://app.jents.io/api/gateway/byo
GENERIC_LOGGER_HEADERS="Authorization=Bearer <your secret from step 1>"
That is the exact pair Jents' own production gateway runs on, which is why it is the shape we hand you.
Four things that will otherwise cost you an afternoon:
- The callback is called
generic_api— not a name of your own choosing. LiteLLM matches that string against the loggers it ships with, so anything else is simply not recognised, and an unrecognised callback is skipped in silence. GENERIC_LOGGER_HEADERSis required. Leave it out and LiteLLM skips the callback silently: no error, no warning, and no spend ever arrives.- You need the proxy install (
litellm[proxy]or the official Docker image). A barepip install litellmdoesn't include this logger, and it fails quietly. - Logs are sent in the background, batched — by default every 5 seconds or every 512 calls. Expect a short delay before the first spend shows up, not an instant one.
3. LiteLLM only — add control
Want Jents to also manage your gateway (mint per-agent keys, register models, set budgets on it)? On Settings → Gateways, open "Add control" and paste your LiteLLM's URL + admin (master) key. Jents verifies it, and from then on your agents' keys + models provision on your gateway, not ours.
The admin key is encrypted at rest and never shown again. Besides acting on your gateway it unlocks two reads: the one-time 90-day history import ("Bring in the calls from before you connected", on this same screen) and the 6-hourly check that spots keys created in your gateway outside Jents, with each key's spend. The ongoing cost and tokens still come from step 2, and only from step 2.
4. You don't have to register anything first
Nothing needs a record before it counts. Every call your gateway prices arrives as spend — exact cost, by model and by user — and lands in your totals, your per-person breakdown and your budgets from the first batch.
- Unregistered isn't uncounted. Spend Jents can't tie to a record still shows up and still adds to the total. Creating a record later gives that money a name, an owner and a team — it doesn't change the number.
- Name the ones you care about. For a workload you want to follow on its own page, add it with Add AI source and give it the name your team already uses for it.
5. Confirm
Make a call through your gateway. Within a minute the connection flips to "Working ✓" on Settings → Gateways, and the spend — exact cost, by model + user — appears in Observability and Impact. Any record you've named shows its own calls on its page in your Inventory.
Why this beats telemetry: the cost is the real number your gateway computed, not an estimate. And because you keep your own gateway, your provider keys never leave your environment and none of your traffic re-routes through us — the enterprise data-residency answer.
One thing to be clear-eyed about: the feed sends your prompts and responses to Jents along with the cost unless you set turn_off_message_logging: True in step 2. Set it and every number still arrives — you just keep the content.