Record export schema
NuroPicks publishes the full pick ledger as raw data so any third party (Pikkit, Pyckio, Action Network reviewers, quant Twitter, custom audit scripts) can compute their own ROI, yield, hit rate, and CLV without our cooperation. Raw data IS the credibility signal.
Endpoints
- JSON:
https://nuropicks.com/record/export.json - CSV:
https://nuropicks.com/record/export.csv
Both endpoints return the same rows in two formats. Choose whichever is easier to pipe into your stack.
Query parameters
| Param | Type | Default | Notes |
|---|---|---|---|
| since | ISO date string | none | Filter to picks posted on or after this timestamp. |
| sport | string (lowercase) | none | Filter to a single sport key (e.g. nba, nfl). |
| limit | integer | 1000 | Max rows. Capped at 5000. |
Examples:
/record/export.json?since=2026-01-01&sport=nba&limit=500
/record/export.csv?since=2026-04-01&limit=2000
Fields
| Field | Type | Notes |
|---|---|---|
| id | integer | Stable per-pick identifier. Permalinks at /record/{id}. |
| sport | string | NBA, NFL, MLB, NHL, NCAAF, NCAAB, WNBA, MMA, soccer, tennis. |
| game | string | Human-readable matchup, e.g. "BOS @ NYK". |
| market | string | spread, total, moneyline, prop, parlay-leg, etc. |
| pick | string | The actual selection text shown on the public permalink. |
| odds_american | integer | American odds at post time. Locked. |
| closing_odds_american | integer or null | Closing odds captured at game lock. Null if pre-close. |
| clv_bps | integer or null | Closing Line Value in basis points. Positive = beat close. |
| stake_units | number | Stake in units (1.0 base). Reflects model confidence sizing. |
| result | string | pending, win, loss, push, void. |
| posted_at | ISO timestamp | Server time the pick was locked into the ledger. |
| graded_at | ISO timestamp or null | Server time the pick was graded. Null if still pending. |
| permalink | URL | Public detail page for this pick. |
| source | string (JSON only) | Discord channel or web surface that originated the pick. |
Append-only contract
Rows are locked at post time by a Postgres trigger. We do not retroactively edit or delete settled picks. Anything you read here today reads the same way next week. Schema columns are append-only too: new columns will be added at the end so existing scripts keep working.
CLV computation
CLV in basis points uses decimal odds:
opening_decimal = odds > 0 ? 1 + odds/100 : 1 - 100/odds
closing_decimal = same formula on closing_odds_american
clv_bps = round(((closing_decimal / opening_decimal) - 1) * 10_000)
A pick at +110 (decimal 2.10) that closes at +100 (decimal 2.00) has CLV of ((2.00/2.10) - 1) * 10_000 = -476 bps. Negative CLV means the line moved against you after you bet; positive means you beat the close.
Cache and rate limits
Both endpoints use Cache-Control: public, s-maxage=900, stale-while-revalidate=3600. Reviewers polling every 15 minutes will hit cached responses. CORS is wide open (Access-Control-Allow-Origin: *) so browser-based audit tools work without a proxy.
If the database is unreachable at request time, the JSON response sets db_reachable: false and the CSV body includes a comment row marking the outage after the header.
Stable contract
This endpoint and its schema are versioned by URL path. We will never make a breaking change to /record/export.json or /record/export.csv. Future schema versions land at /record/export.v2.json.