Dashboard Get started

TokenID ships a free local app: a single binary that starts a capturing proxy on :8080 and a live web dashboard on http://localhost:7878, backed by SQLite at ~/.tokenid/data.db. Point any Anthropic or OpenAI client at the proxy and your usage shows up in the dashboard in real time — no account required to start, and one click in the dashboard upgrades you to the hosted plan when you outgrow local.

Install

```bash brew tap blokid/tap brew install tokenid ``` Upgrade with `brew update && brew upgrade tokenid`.
```bash docker run --rm \ -p 8080:8080 \ -v tokenid-data:/data \ ghcr.io/blokid/tokenid:latest ``` Multi-arch image (`linux/amd64`, `linux/arm64`). Distroless base — ~14 MB. The container runs the proxy only; the dashboard is loopback-only and not exposed.
```bash sudo install -d -m 0755 /etc/apt/keyrings curl -fsSL https://deb.token.audit.id/key.gpg \ | sudo gpg --dearmor -o /etc/apt/keyrings/tokenid.gpg echo "deb [signed-by=/etc/apt/keyrings/tokenid.gpg] https://deb.token.audit.id ./" \ | sudo tee /etc/apt/sources.list.d/tokenid.list sudo apt-get update sudo apt-get install -y tokenid ```
```bash sudo rpm --import https://rpm.token.audit.id/key.gpg sudo tee /etc/yum.repos.d/tokenid.repo > /dev/null <<'EOF' [tokenid] name=TokenID Repository baseurl=https://rpm.token.audit.id enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://rpm.token.audit.id/key.gpg EOF sudo dnf install -y tokenid ```
Download the matching archive from the [releases page](https://github.com/blokid/tokenid/releases) — builds are published for `darwin/amd64`, `darwin/arm64`, `linux/amd64`, `linux/arm64`, and `windows/amd64`. ```bash curl -fsSLO https://github.com/blokid/tokenid/releases/latest/download/tokenid_linux_amd64.tar.gz tar -xzf tokenid_linux_amd64.tar.gz sudo mv tokenid /usr/local/bin/ tokenid version ```

First run

tokenid start

The first time you start the app it asks for your email and opens a verification link. Click it once and the local license is saved to ~/.tokenid/license.json. From then on, tokenid start boots straight into the proxy and dashboard.

After verification, the dashboard is at http://localhost:7878. The proxy listens on 127.0.0.1:8080.

Command What it does
tokenid start Proxy + dashboard
tokenid proxy Proxy only — headless servers, CI, containers
tokenid version Print build version
The dashboard is bound to loopback only and is unauthenticated — anyone with shell access to your machine can see your captured events. Don't run `tokenid start` on a shared host.

Capture usage — no SDK swap

Point your existing LLM client at the local proxy. One env var, no code changes.

# Anthropic — any client, including Claude Code
ANTHROPIC_BASE_URL=http://127.0.0.1:8080 claude

# OpenAI
OPENAI_BASE_URL=http://127.0.0.1:8080 python my_app.py

Your upstream API key (ANTHROPIC_API_KEY, OPENAI_API_KEY, …) is forwarded to the provider unchanged. The proxy parses request and response bodies, records cost and token counts to SQLite, and streams a live event onto the dashboard.

Environment variables

Variable Default Purpose
TOKENID_PROXY_ADDR 127.0.0.1:8080 Proxy listen address
TOKENID_REPORT_ADDR 127.0.0.1:7878 Dashboard listen address
TOKENID_DB_PATH ~/.tokenid/data.db SQLite database location
TOKENID_BACKEND_URL https://token-api.audit.id Backend used for license verification and (when upgraded) cloud sync

To bind on a non-loopback interface — only inside an isolated container, never on a shared host — set TOKENID_ALLOW_NONLOOPBACK_PROXY=1.

Upgrade to hosted

The free local app captures and stores everything on your machine — zero cloud round-trips, full SQLite ownership. Upgrade to the hosted plan when you need any of:

  • Multi-developer rollups, team and per-project attribution
  • Budget caps and policy controls that fire alerts before spend lands
  • Signed Merkle audit trails for compliance and auditor handoff
  • Long-term retention beyond what your laptop can hold
  • Slack / webhook alerts and scheduled PDF reports

Click Upgrade in the dashboard nav. The local app opens token.audit.id/upgrade for Stripe checkout. After payment, your existing local events keep flowing to SQLite and also mirror to your hosted account — no migration step, no re-instrumentation.