statb.io/board.html?board=my-board
my-board
Connected
$ curl 'https://statb.io/b/my-board/push?steps=+1&loss=0.0031&gpu_temp=71'

Push data. See it live.

One curl to push. One URL to watch. Real-time dashboards for scripts, cron jobs, AI agents, and anything that runs unattended. No signup required.

bash
# Push data — board is created on first request
$ curl 'https://statb.io/b/my-board/push?steps=+1&loss=0.0031&gpu_temp=71'
{"ok":true}

# Read via API
$ curl 'https://statb.io/b/my-board/get'
{"board_id":"my-board","data":{"steps":4217.0,"loss":0.0023,"gpu_temp":72.0}, ...}

# Or just open the board
$ open https://statb.io/board.html?board=my-board

Built for machines, readable by humans

No dashboarding frameworks. No time-series databases. No YAML configs. Just HTTP GET and a board that updates itself.

One-Liner Push

Any language that can make an HTTP GET can push data. curl, wget, Python urllib, fetch — all work. Query string is the API.

👤

Anonymous & Instant

No signup, no API keys, no config files. Pick a board name, start pushing. Your board is created on first request.

📡

Real-Time WebSocket

Board viewer connects via WebSocket. Every push triggers a live delta — sub-second latency, animated transitions.

🤖

Agent-Friendly

Perfect for AI agents, background workers, CI pipelines, IoT sensors. Anything unattended that needs a heartbeat.

Increment / Decrement

Use +N and -N syntax to accumulate counters without reading current state.

🪶

Zero Dependencies

Server is a single Python file using only stdlib asyncio. Self-host in seconds. No Redis, no Postgres, no Docker.

Complete API Reference

Everything you need to integrate statb into your workflow.

Push Data

Send numeric key-value pairs to any board. The board is created automatically on first push. Both GET and POST work.

endpoint GET /b/{board_id}/push?key=value&key2=+1&key3=-0.5 POST /b/{board_id}/push?key=value

board_id can be any URL-safe string. Think of it as a namespace for your metrics.

Value Syntax

SyntaxBehaviorExample
42Set — overwrite with value?cpu=72.5
+NIncrement — add N (starts at 0)?requests=+1
-NDecrement — subtract N?stock=-3
Only numeric values (int / float) are accepted. Non-numeric values are silently skipped. Multiple keys per request are fine.

Read Data

Retrieve the current state of a board. Optionally filter to a single key.

endpoint GET /b/{board_id}/get GET /b/{board_id}/get?key=requests
response { "board_id": "my-agent", "data": { "steps": 4217.0, "loss": 0.0031, "gpu_temp": 71.0 }, "updated_at": 1718900000.12, "created_at": 1718890000.45 }
Returns 404 if the board has not been created or has expired.

WebSocket (Real-Time)

Connect to receive live updates. The board viewer uses this internally.

connect ws://HOST/b/{board_id}/ws

On connect → full snapshot. After that → deltas with only changed keys.

server → client // Full state on connect {"type":"snapshot","board_id":"demo","data":{...},"updated_at":...,"created_at":...} // Changed keys only {"type":"delta","board_id":"demo","data":{"requests":148.0},"updated_at":...}
client → server // Request full re-sync at any time {"type":"snapshot"}

Board Viewer

Open /board.html?board=your-board in any browser. Live cards, animated values, trend badges, stale detection, fullscreen mode.

Usage Examples

Works with anything that can make an HTTP request. No SDK needed.

bash — cron # Monitor nightly backup curl "https://statb.io/b/backups/push?last_run=$(date +%s)&size_mb=2048"
python — AI import urllib.request url = f"https://statb.io/b/agent-7/push?epoch=+1&loss={loss:.4f}" urllib.request.urlopen(url)
IoT loop while true; do T=$(cat /sys/class/thermal/thermal_zone0/temp) curl -s "https://statb.io/b/rpi/push?temp_c=$(echo "$T/1000"|bc -l)" sleep 60 done

Board Lifecycle & TTL

Boards are created on first push. If no push arrives within the TTL window (default 60 min on free tier), the board is garbage-collected. Connected viewers receive an empty snapshot on expiry.

The built-in _stats board is never collected. View live server metrics at /board.html?board=_stats.

Self-Hosting

Single-file server, zero dependencies. Python 3.11+ stdlib only.

run git clone https://github.com/user/statb.git && cd statb python3 statb-server.py --port 8000 --ttl 60
FlagDefaultDescription
--host0.0.0.0Bind address
--port8000Bind port
--ttl60Board idle TTL (minutes)

Per board. Simple as the product.

Each board is billed independently. Start free, upgrade the boards that matter.

Free

For quick experiments and personal scripts

$0
per board / forever
  • Up to 16 data keys per board
  • Real-time WebSocket viewer
  • Increment / decrement / set
  • Anonymous — no signup
  • No data persistence (in-memory only)
  • Low-frequency push (≤ 1 req / 5 sec)
  • Board expires after 60 min idle
Try it now

Need custom limits, SSO, or on-prem? Contact us