All notable changes to the sharpapi Python SDK are documented here.
OddsLine,EVOpportunity, andClosingOddsLinegain two optional fields:team_side— the raw structured side ("home"|"away"|"draw") decomposed out of the compoundselection_typevocabulary. Prefer this over parsing compound prefixes like"home_over".market_segment— the canonical contest slice ("full_game","1st_half","1st_5_innings", ...).
- Both are additive and default to
None; existing code is unaffected. The API continues to emit the compoundselection_typefor back-compat.
OddsLine.timestamp/ArbitrageLeg.timestampdocumented as the delivery / last-refreshed feed-freshness timestamp (advances every ingest cycle), matching OpticOdds'timestamp— NOT a price-last-changed time. The API now populates this field (previously alwaysnull). The removedodds_changed_at/last_seen_at/wire_received_atwere never modeled by this SDK, so no model change is needed. (SHA-1048)
OddsLine.is_active(bool, defaultTrue).Falseindicates the market is suspended/closed with the price frozen — mirrors OpticOddslocked-oddsbut as a queryable field. Absent on the wire is treated asTrue.
- Additive optional field with a
Truedefault — existing code is unaffected, and older API servers that omit the key parse as active.
- Update
RepositoryandChangelogURLs in package metadata to use the canonicalSharpAPI-Pythonrepo name (was lowercasesharpapi-python, redirected by GitHub but worth making canonical on PyPI). Metadata-only release; no code changes.
TeamRef now exposes five additional optional fields:
logo— full CDN URL. ~93% of teams are populated.city— e.g."Arizona"for the Diamondbacks.mascot— e.g."Diamondbacks".conference— e.g."NL","AFC","Western".division— e.g."West Division","NL East","Pacific Division".
All five default to None and are additive — existing 0.3.0 code keeps
working unchanged.
Every odds row, opportunity row, and reference-list row may now carry
optional structured reference objects alongside the existing flat fields.
All new fields are optional and additive — clients on older API
versions (or talking to older API servers) see None and behave
identically.
New models:
TeamRef—id,numerical_id,name,abbreviation(latter only on team-sport competitors)SportRef—id,name,numerical_idEntityRef—id,label,numerical_id(used for league / market / sportsbook refs)
New optional fields:
OddsLine,EVOpportunity,ArbitrageOpportunity,MiddleOpportunity,LowHoldOpportunity— all gainhome,away,sport_ref,league_ref,market_ref,sportsbook_ref(legs / opps without a single book skipsportsbook_ref).ArbitrageLeg— gainssportsbook_ref.ClosingOddsLine— gainsmarket_ref,sportsbook_ref.ClosingSnapshot— gainshome,away,sport_ref,league_ref.Sport,League,Sportsbook,Market— gainnumerical_id.Event— gainshome,away,sport_ref,league_ref.
New reference model:
Team— for the/teamsreference endpoint, includes optionalabbreviationandnumerical_id.
No existing field was renamed, retyped, or removed. Code that does not reference the new attributes continues to work without changes.