Skip to content

For partners & developers

Otterline API

Sports picks, records and Best Bets. One read-only feed, organized by league.

Request a private API

Partnerships 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.

GET/api/partners/ocula/v1/picks
curl '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 schema

What’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 complete before 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.