Onboarding & quickstart
Get from zero to a live LLM cost dashboard in about two minutes. Everything here is free while your tracked model spend stays under $300/mo — no credit card required.
The whole flow
sign up → create an account-scoped API key → wrap your client → watch cost land
That's it. The agent reads the token-usage numbers your provider SDK already returns and ships metadata only (model id, token counts, timestamp) — never your prompts or responses.
1. Create a free account
Go to llmintel.ai/dashboard and sign up with email + password. An account is provisioned for you automatically on the Free tier.
2. Create an API key
In the dashboard, open API keys → Create key. Copy the secret (shown once) — it looks like:
li_XXXXXXXXXXXXXXXXXXXX
Important: telemetry ingestion requires an account-scoped key created from the dashboard, so usage is attributed to your account. Any other key is rejected with
403.
Set it in your app's environment:
# PowerShell: $env:LLMINTEL_API_KEY = "li_..."
# macOS/Linux: export LLMINTEL_API_KEY="li_..."
3. Install the agent and wrap your client
pnpm add @llmintel/telemetry
# provider SDKs are peer deps — install only the ones you use, e.g.
pnpm add openai
OpenAI / Azure OpenAI / Anthropic — one line
import OpenAI from "openai";
import { instrument } from "@llmintel/telemetry";
const openai = instrument(new OpenAI(), { environment: "prod" }); // environment is optional
// use the client exactly as before — usage is captured and flushed automatically
await openai.chat.completions.create({
model: "gpt-4o",
messages: [{ role: "user", content: "hi" }],
});
instrument() returns the same client, wired in place. It is best-effort: a missing key,
offline network, or flush error is swallowed (routed to an optional onError) — telemetry never
throws or slows the app it observes.
Serverless? (Vercel / AWS Lambda / Cloudflare Workers) — the runtime freezes right after your response is sent, so a background flush may never fire and your dashboard stays empty even though the code is correct. This is the #1 reason data doesn't appear. Use
@llmintel/telemetryv0.3+, which auto-detects serverless and flushes per request (via your platform'swaitUntilwhen available, otherwise inline). No config needed for the common case; see the serverless guide forwaitUntiland thewithTelemetry()wrapper.
Google Gemini / AWS Bedrock — one record() call
These SDKs don't expose a single stable method to wrap, so record usage explicitly:
import { instrument, extractBedrock } from "@llmintel/telemetry";
const t = instrument({}, { environment: "prod" }); // handle only
const out = await bedrock.send(command);
const rec = extractBedrock(out, "anthropic.claude-3-5-sonnet-20241022-v2:0");
if (rec) t.__llmintel.record(rec);
4. Watch cost land
Within a few minutes your dashboard shows spend by model, by environment — and optimization suggestions when a cheaper, same-capability-class model is available for something you run.
Prefer plain HTTP?
The agent is optional. Any client can POST the same shape directly:
curl https://llmintel.ai/v1/telemetry \
-H "Authorization: Bearer $LLMINTEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"records":[{"model":"gpt-4o-2024-05-13","inputTokens":12000,"outputTokens":3400}]}'
See the full request/response schema in the interactive API reference.
When do I pay?
Nothing until your rolling-30-day tracked spend crosses $300/mo. At that point ingestion returns
a clear 402 naming the recommended plan, and the dashboard prompts you to pick the spend band that
matches your usage. Plans start at $29/mo and stay a small single-digit-percent slice of the
model bill they help you cut. See Pricing for the full ladder.
Reliability is free for everyone, independent of spend: every model you run is tracked automatically from your telemetry, and you get webhook/Slack/PagerDuty retirement alerts on any plan — so you never learn about a retirement from a 4xx, even on the free tier.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
403 forbidden on ingest | Key isn't account-scoped | Create the key from the dashboard so it's tied to your account |
401 unauthorized | Missing/invalid/revoked key | Check LLMINTEL_API_KEY is set to a live key |
402 payment_required | Tracked spend over the free ceiling | Pick the recommended plan in the dashboard |
| No data appears (serverless) | Runtime froze before the background flush fired | Upgrade to @llmintel/telemetry v0.3+ (auto-flush), or wrap with withTelemetry() / pass waitUntil |
| No data appears (long-running) | Buffer hasn't flushed yet | Call await client.__llmintel.flush() or wait for the interval |