Coming from StatHat? You're about five minutes from a live chart.
Same /ez, /c and /v wire format — same params, same response. Only the base URL and your key change; stats auto-create on the first POST, so there's nothing to re-instrument.
Exactly two things:
- 1. The base URL:
api.stathat.com→api.ezstat.dev. - 2. The key: your EzStat API key instead of your StatHat one.
Nothing else.
1. Get your EzStat API key
Sign up, then open the dashboard Settings page and copy your API key (about 30 seconds). The legacy /ez, /c and /v endpoints use this key; the newer v1 REST API uses a Bearer token generated in the same place.
2. Change one base URL
Most StatHat client libraries let you override the base URL, so this is often a one-line config change rather than a find-and-replace. If you hardcoded the host, the blunt swap is:
sed -i 's#api.stathat.com#api.ezstat.dev#g' your-code/Or override the base URL in your client — the same languages StatHat shipped SDKs in:
# curl
curl -X POST https://api.ezstat.dev/ez -d "ezkey=KEY" -d "stat=signups" -d "count=1"
// Go — set the base URL to https://api.ezstat.dev
// Python — requests.post("https://api.ezstat.dev/ez", data={...})
// Node — fetch("https://api.ezstat.dev/ez", { method: "POST", body })
// Ruby — Net::HTTP.post_form(URI("https://api.ezstat.dev/ez"), ...)Then swap the StatHat key for your EzStat key — your old StatHat identity is not a credential here.
3. POST one point and watch it land
# BEFORE — your existing StatHat call
curl -X POST https://api.stathat.com/ez \
-d "ezkey=YOUR_STATHAT_KEY" -d "stat=signups" -d "count=1"
# AFTER — EzStat. Change the host, use your EzStat key.
curl -X POST https://api.ezstat.dev/ez \
-d "ezkey=YOUR_EZSTAT_KEY" -d "stat=signups" -d "count=1"Refresh your EzStat dashboard — your stat auto-created and your first point is on the chart. That's it — you're live.
4. Endpoint compatibility
The StatHat wire format maps one-to-one. Stats auto-create on the first POST — no pre-registration.
| Endpoint | Purpose | Params |
|---|---|---|
| /ez | EZ counter or value | ezkey = your EzStat API key · stat = name · count or value · t = unix timestamp (optional) |
| /c | Classic counter | key = stat name · ukey = your EzStat API key · count · t = unix timestamp (optional) |
| /v | Classic value | key = stat name · ukey = your EzStat API key · value · t = unix timestamp (optional) |
The one gotcha: Classic /c and /v take the API key in ukey — EzStat maps ukey to your EzStat API key. Full reference in the docs.
5. Bring your history (optional)
A live token-pull is not possible — StatHat's API is offline. But if you saved your CSV or JSON export before shutdown, upload it and EzStat recreates each stat and backfills its points. Use ?dryRun=1 to preview first.
- → POST your export to
/api/v1/import/stathator use the dashboard import UI. - → Limits: 8MB / 500,000 points per file, quota-trimmed. Backfilling into an existing stat does not cost stat quota.
- → Or backfill live points by passing a unix
ttimestamp on ingest. - ◦ Not a one-click bulk importer — it recreates stats from the file you upload.
Bringing a large history or a team? We'll help you migrate.
6. Troubleshooting
401 / invalid key — you're using your old StatHat key. Use your EzStat key (from Settings), not your StatHat one.
Stat not appearing — confirm you POSTed to api.ezstat.dev, not the app subdomain.
Rate limited — limits are per plan tier; move up a tier if you consistently hit them.
Building something new? — use the v1 REST API with Bearer auth.
No live StatHat pull — StatHat's API is offline, so history moves via your saved export, not a token.
Alerts / digest / AI — coming soon; don't wire alerting expecting them yet.
Month-to-month, cancel any time, CSV/JSON export any time — no lock-in. Try it against real traffic before you commit.
Migration questions
Will my existing code break?
No. EzStat's /ez, /c and /v endpoints are wire-compatible with StatHat — same parameters, same response shape. You change the base URL to api.ezstat.dev and use your EzStat API key; the rest of your client code is unchanged. Stats auto-create on the first POST.
Can I import my StatHat history?
If you saved your StatHat CSV or JSON export before it closed, upload it to the importer and EzStat recreates each stat and backfills its points within your plan quota (limits: 8MB / 500,000 points per file, quota-trimmed). It is not a one-click bulk importer, and a live token-pull is not possible because StatHat's API is offline. You can also backfill live points by passing a unix t timestamp on ingest.
How do I verify it worked?
POST one point to api.ezstat.dev and refresh your EzStat dashboard — the stat auto-creates and your first point appears on the chart. If you get a 401, you're still using your old StatHat key; use your EzStat key instead.
Is it really one URL?
Yes — the two things that change are the base URL (api.stathat.com to api.ezstat.dev) and the key. Most StatHat client libraries let you override the base URL, so it is often a one-line config change rather than a find-and-replace.
That's the whole migration — change one base URL and use your EzStat key. Most StatHat clients let you override the base URL in one line; hardcoded hosts need a find-and-replace.