For partners & developers
Otterline API
Sports picks, records and Best Bets. One read-only feed, organized by league.
Request a private APIPartnerships and custom feeds: team@otterline.club
Access
Partner keys are issued privately and work only with the agreed feed. Keep the key on your server—not in browser code, URLs, screenshots or public repositories.
/api/partners/ocula/v1/pickscurl 'https://otterline.club/api/partners/ocula/v1/picks' \
-H 'Authorization: Bearer YOUR_PARTNER_KEY'This version serves the current day. No date or other query parameters are required.
OpenAPI schemaWhat’s included
- sports.NHL / MLB / NBA / NFL
- Each sport’s current picks, source status, board links and records.
- picks[].categories
- Consensus, featured categories and Mladek Spotlight. Matching selections appear once with every applicable tag.
- picks[].categoryResults
- Separate saved grades when the same selection appears in more than one category.
- records.seasonToDate
- Current-season consensus wins, losses, pending count and win rate. The reporting window and coverage travel with the record.
- records.yesterday
- The previous sports date’s consensus record—not results that happened to be graded yesterday.
- bestBets
- The saved cross-sport selections, their records and 4 a.m. Atlantic expiry. The API never captures or replaces selections.
- complete / deadline.readiness
- Whether all required current data is available now. Check at the daily deadline; this does not claim a historical on-time delivery.
Each selection includes matchup, start time, tier, result and available article or Polymarket links. Model confidence and market probability are separate fields. Missing values stay null.
Daily updates
The daily readiness target is 11:30 a.m. Atlantic — America/Halifax. It follows daylight saving time. The feed continues updating as saved picks and grades change.
Poll every five minutes around the morning window. A successful response can still have complete: false: inspect each sport’s state and issues, and retry when a source is late. Do not present partial data as a full board.
Offseason sports and confirmed no-game days have empty pick lists. A failed source is marked unavailable, not treated as no games. Saved Best Bets remain available through results until 4 a.m. Atlantic.
Sports dates roll over at 5 a.m. Eastern, matching the source boards. The readiness deadline and separate 4 a.m. Best Bets cutoff use Atlantic time.
Response layout
Illustrative structure only. Pick and record contents are omitted here.
{
"apiVersion": "ocula-picks-v1",
"sportsDate": "2026-10-26",
"generatedAt": "2026-10-26T14:25:00Z",
"complete": true,
"deadline": {
"localTime": "11:30",
"timeZone": "America/Halifax",
"readiness": "ready"
},
"leagueOrder": ["NHL", "MLB", "NBA", "NFL"],
"sports": {
"NHL": { "state": "ready", "picks": [], "records": {} },
"MLB": { "state": "ready", "picks": [], "records": {} },
"NBA": { "state": "ready", "picks": [], "records": {} },
"NFL": { "state": "no_games", "picks": [], "records": {} }
},
"bestBets": { "state": "ready", "picks": [], "records": {} }
}Status codes
- 200
- Feed returned. Check
completebefore using it as a full slate. - 400
- Unsupported query parameters.
- 401
- Missing or invalid partner key.
- 503
- Feed not configured or temporarily unavailable. Retry without inventing missing data.
Win rate excludes pending selections. Records describe the stated sport, window and saved selection family. Category tags can overlap. Model signals do not guarantee a result.