NBA
NBA Lab
Elite script + props engine • worker UI
/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)