/status
Health + version + counts
Click Run.
Quick cURL
Copy/paste with your base URL
Notes
How this UI expects your worker to behave
- GET endpoints: return JSON with ok,data,meta,error
- Worker base defaults to the saved value in your browser.
- Spread inputs are home spread (negative = home favorite).
Slate Builder
Paste your slate text → Upload → Enrich CSV → Sim → Anchors
Tip: your paste format can use “-”, “–”, or “—”. The worker normalizes it.
Enriched CSV Preview (first 2000 chars)
—
Sim Meta
—
Anchors
Anchors JSON
—
Minutes Rotation Upload
Paste Rotowire minutes table (CSV/TSV/text) → /minutes/upload (alias of /minutes/rotowire/upload)
Default is today in NY.
Required (abbr).
Response
—
Usage
POST /minutes/upload?team=ATL&date=YYYY-MM-DD GET /minutes/rotowire/status?date=YYYY-MM-DD GET /minutes/rotowire/export.json?date=YYYY-MM-DD&team=ATL Then, in Props Sim use: POST /props/sim?season=2026&minutes_date=YYYY-MM-DD (or omit minutes_date for default today).
Best Bets Card
Calls /slate/card and renders top sides + totals + units
Card Preview
UI-ready summary
Click Run.
Games Lookup
Find game IDs + slate by date
Games
Raw
—
Players Search
Find player_id fast (name → ID)
Matches
Raw
—
Game Script
Pace • whistle • blowout • totals/spread calibration
Script Summary
Raw
—
Slate Sim (Daily)
Runs Game Script across the full slate (ranked). Use Open Tab on iPhone.
Top Edges
Full Slate
Raw
—
Props Script (Player)
Baseline season avgs → adjusted by game script + minutes/usage
Projections
Raw
—
Props Grade (Latest)
GET /props/grade — grades the latest uploaded props stored in RTP_PROPS
Used by the worker for season-context features. Example: 2025 or 2026.
Leave blank to use worker default (today). Example: 2026-01-06
Slate Builder (Paste → Enrich → Sim)
Paste your slate → upload to /props/upload → download enriched CSV → run /props/sim
Strict=1 requires player team to match Home/Away. If you paste mixed games, use strict=0 or upload per-game.
Looks for “vs” / “@” in the paste and sets Home/Away.
Parsed preview
Upload result
—
Enriched CSV (first 2000 chars)
—
Sim Output (first 2000 chars)
—
Anchors
Client-side extraction from the sim CSV (needs proj + line + edge columns).
—
—
/props/sim
Post a props CSV → get a simulated output CSV (and download it)
Upload your props CSV (recommended). If you don’t upload, the textarea will be used.
Preview (first 2000 chars)
—
Raw JSON (if returned)
—
Anchors (from simulated CSV)
Top edges + grades pulled from the /props/sim output.
—
/props/eval
Post a props CSV → get evaluation summary (JSON)
Upload the scored CSV (or raw) you want evaluated.
—
/teams/export.csv
Build team feature table (CSV download)
Build writes TeamWell to KV/cache. Download pulls the current TeamWell CSV.
—
/shots/team/upload
Paste PBPStats shot table to compute three/rim/mid rates (KV)
Paste the full table (including headers is fine). Parser will detect team rows like
ATL ....
—
/props/export.csv
Download current props table from KV/R2 (CSV)
If your worker hasn’t cached anything yet, this may return an empty file.
—
/game-lines
Latest lines snapshot (JSON)
—
/backtests
List stored backtest CSVs in R2 and download/run them
Files
Tip: click a row to fill the key input.
Raw
—
Run result
—
/bdl/nba/v1/*
Call any BallDontLie endpoint through your worker (no key in browser)
—
Backtest
Replay a past date → compare grades vs actual (worker endpoint)
Results
Raw
—
Download JSON
Turn any JSON output into a file
Tip: use this for sharing results fast.
Troubleshoot
Common pitfalls / fixes
- Blank page? This UI is static — errors show in the output boxes. Hit Ping first.
- Not found routes: Make sure your worker has the routes this UI calls (see Status → Quick cURL).
- Team mismatch: Set Strict=0 to preview projections while flagged, then fix matchup teams.
- 502/500: Usually upstream provider throttle; retry or adjust per_page smaller.
Console
Live request log (client-side)