Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ to bump. Every change to API paths or response schemas gets a one-line entry her
the [OpenAPI Version Check](.github/workflows/openapi-version-check.yml) CI job
enforces that a bump has a matching entry.

## 3.0.0 — 2026-06-02

- **BREAKING:** the `Odds` response now exposes a single per-odd `timestamp` field and no longer emits `odds_changed_at`, `last_seen_at`, or `wire_received_at`. `timestamp` is the **delivery / last-refreshed** stamp (advances every ingest cycle — a feed-freshness/liveness signal, matching OpticOdds' `timestamp`), **not** a price-last-changed time. **Migration:** anyone reading `odds_changed_at` / `last_seen_at` / `wire_received_at` should read `timestamp`. Note there is no longer a field for *when the price last moved* (CLV / line-movement) — full OpticOdds-parity. Supersedes the 2.3.0 deprecations. SHA-1048.

## 2.3.0 — 2026-06-01

- Add `odds_changed_at` to the `Odds` schema — the canonical per-row freshness field (previously undocumented; also the only per-odd freshness timestamp OpticOdds exposes). Deprecate `last_seen_at`, `wire_received_at`, and the stale `timestamp` prop (`deprecated: true`) — being internalized; read `odds_changed_at` for freshness. Removal tracked in sharp-api-go #743.
Expand Down
13 changes: 6 additions & 7 deletions content/de/api-reference/events-odds.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,7 @@ Alle Antworten enthalten Standard-Header für Rate Limit und Metadaten:
| `odds.american` | number | American Odds (z. B. -110, +150) |
| `odds.decimal` | number | Dezimalquoten (z. B. 1.909) |
| `odds.probability` | number | Implizite Wahrscheinlichkeit (z. B. 0.5238) |
| `last_seen_at` | string | ISO-8601-Zeitstempel, wann unsere Pipeline diese Zeile zuletzt beobachtet hat. Verwenden Sie diesen als Aktualitätssignal der Pipeline. |
| `odds_changed_at` | string | ISO-8601-Zeitstempel, wann sich der Preis, die Linie oder das `is_live`-Flag zuletzt tatsächlich geändert hat. Vom Sportsbook bereitgestellt, sofern verfügbar; bei Pinnacle wird er über unveränderte Refreshes hinweg fortgeschrieben — siehe [Pinnacles `odds_changed_at` verstehen](/de/concepts/pinnacle-odds-changed-at/). |
| `timestamp` | string | ISO-8601-Zeitpunkt, zu dem SharpAPI diese Quote zuletzt durch seine Pipeline aktualisiert hat — wird in jedem Ingest-Zyklus weitergeschaltet. Ein Feed-Aktualitäts- / Liveness-Signal (entspricht OpticOdds' `timestamp`); es ist NICHT der Zeitpunkt, zu dem sich der Preis zuletzt geändert hat. Siehe [`timestamp` verstehen](/de/concepts/pinnacle-odds-changed-at/). |

## Beispielanfragen

Expand Down Expand Up @@ -221,7 +220,7 @@ print(f"Fetched all {len(all_odds)} odds")
"decimal": 1.556,
"odds_probability": 0.643
},
"last_seen_at": "2026-02-08T12:05:00Z"
"timestamp": "2026-02-08T12:05:00Z"
},
{
"id": "dk_evt_nba_bos_lal_20260208_ml_away",
Expand All @@ -236,7 +235,7 @@ print(f"Fetched all {len(all_odds)} odds")
"decimal": 2.55,
"odds_probability": 0.392
},
"last_seen_at": "2026-02-08T12:05:00Z"
"timestamp": "2026-02-08T12:05:00Z"
},
{
"id": "pin_evt_nba_bos_lal_20260208_ml_home",
Expand All @@ -251,7 +250,7 @@ print(f"Fetched all {len(all_odds)} odds")
"decimal": 1.571,
"odds_probability": 0.636
},
"last_seen_at": "2026-02-08T12:03:00Z"
"timestamp": "2026-02-08T12:03:00Z"
},
{
"id": "dk_evt_nba_bos_lal_20260208_spread_home",
Expand All @@ -266,7 +265,7 @@ print(f"Fetched all {len(all_odds)} odds")
"decimal": 1.909,
"odds_probability": 0.524
},
"last_seen_at": "2026-02-08T12:05:00Z"
"timestamp": "2026-02-08T12:05:00Z"
},
{
"id": "dk_evt_nba_bos_lal_20260208_total_over",
Expand All @@ -281,7 +280,7 @@ print(f"Fetched all {len(all_odds)} odds")
"decimal": 1.909,
"odds_probability": 0.524
},
"last_seen_at": "2026-02-08T12:05:00Z"
"timestamp": "2026-02-08T12:05:00Z"
}
],
"meta": {
Expand Down
9 changes: 4 additions & 5 deletions content/de/api-reference/odds-batch.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ if result['data']['missing_events']:
"odds_american": -210,
"odds_decimal": 1.476,
"line": null,
"last_seen_at": "2026-01-26T10:15:00.000Z"
"timestamp": "2026-01-26T10:15:00.000Z"
},
{
"sportsbook": "draftkings",
Expand All @@ -150,7 +150,7 @@ if result['data']['missing_events']:
"odds_american": 175,
"odds_decimal": 2.75,
"line": null,
"last_seen_at": "2026-01-26T10:15:00.000Z"
"timestamp": "2026-01-26T10:15:00.000Z"
}
]
},
Expand All @@ -170,7 +170,7 @@ if result['data']['missing_events']:
"odds_american": -130,
"odds_decimal": 1.769,
"line": null,
"last_seen_at": "2026-01-26T10:15:05.000Z"
"timestamp": "2026-01-26T10:15:05.000Z"
}
]
}
Expand Down Expand Up @@ -289,8 +289,7 @@ Jedes Element im `data.events`-Array ist ein Event-Objekt mit verschachtelten Qu
| `odds_american` | number | Amerikanische Quoten |
| `odds_decimal` | number | Dezimalquoten |
| `line` | number \| null | Linienwert |
| `last_seen_at` | string | ISO 8601 Zeitstempel, wann unsere Pipeline diese Zeile zuletzt beobachtet hat. Verwenden Sie dies als Frische-Signal für die Pipeline. |
| `odds_changed_at` | string | ISO 8601 Zeitstempel, wann sich der Preis, die Linie oder das `is_live`-Flag zuletzt tatsächlich geändert haben. Wird vom Sportsbook bereitgestellt, sofern verfügbar; bei Pinnacle wird er über unveränderte Aktualisierungen hinweg übertragen — siehe [Understanding Pinnacle's `odds_changed_at`](/de/concepts/pinnacle-odds-changed-at/). |
| `timestamp` | string | ISO-8601-Zeitpunkt, zu dem SharpAPI diese Quote zuletzt durch seine Pipeline aktualisiert hat — wird in jedem Ingest-Zyklus weitergeschaltet. Ein Feed-Aktualitäts- / Liveness-Signal (entspricht OpticOdds' `timestamp`); es ist NICHT der Zeitpunkt, zu dem sich der Preis zuletzt geändert hat. Siehe [`timestamp` verstehen](/de/concepts/pinnacle-odds-changed-at/). |

## Anwendungsfälle

Expand Down
18 changes: 6 additions & 12 deletions content/de/api-reference/odds-best.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -110,32 +110,28 @@ for item in result['data']:
"book": "fanduel",
"odds": { "american": -105, "decimal": 1.952 },
"edge": 0.007,
"line": -6.5,
"last_seen_at": "2026-01-26T10:30:00.000Z"
"line": -6.5
},
{
"book": "draftkings",
"odds": { "american": -110, "decimal": 1.909 },
"edge": 0.0,
"line": -6.5,
"last_seen_at": "2026-01-26T10:29:55.000Z"
"line": -6.5
},
{
"book": "betmgm",
"odds": { "american": -108, "decimal": 1.926 },
"edge": 0.003,
"line": -6.5,
"last_seen_at": "2026-01-26T10:29:50.000Z"
"line": -6.5
},
{
"book": "pinnacle",
"odds": { "american": -108, "decimal": 1.926 },
"edge": 0.003,
"line": -6.5,
"last_seen_at": "2026-01-26T10:29:45.000Z"
"line": -6.5
}
],
"last_seen_at": "2026-01-26T10:30:00.000Z"
"timestamp": "2026-01-26T10:30:00.000Z"
}
],
"meta": {
Expand Down Expand Up @@ -211,9 +207,7 @@ X-Request-Id: req_best_789xyz
| `all_books[].odds` | object | Odds-Objekt (`american`, `decimal`) |
| `all_books[].edge` | number | Edge gegenüber den schlechtesten verfügbaren Quoten (Prozentpunkte) |
| `all_books[].line` | number \| null | Linie bei diesem Sportwettenanbieter |
| `all_books[].last_seen_at` | string | Wann unsere Pipeline die Zeile dieses Buches zuletzt beobachtet hat — Aktualitätssignal der Pipeline |
| `all_books[].odds_changed_at` | string | Wann sich der Preis, die Linie oder das `is_live`-Flag dieses Buches zuletzt tatsächlich geändert hat. Bei Pinnacle wird dies über unveränderte Aktualisierungen hinweg fortgeführt — siehe [Pinnacles `odds_changed_at` verstehen](/de/concepts/pinnacle-odds-changed-at/). |
| `last_seen_at` | string | ISO-8601-Zeitstempel der Best-Odds-Bestimmung |
| `timestamp` | string | ISO-8601-Zeitstempel der Best-Odds-Bestimmung |
| `player_name` | string\|undefined | Spielername (nur bei Player-Prop-Märkten) |
| `stat_category` | string\|undefined | Statistik-Kategorie, z. B. `points`, `rebounds` (nur bei Player-Prop-Märkten) |

Expand Down
21 changes: 10 additions & 11 deletions content/de/api-reference/odds-comparison.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -127,22 +127,22 @@ for market in event['markets']:
"fanduel": {
"odds_american": -145,
"odds_decimal": 1.690,
"last_seen_at": "2026-01-26T02:10:20.000Z"
"timestamp": "2026-01-26T02:10:20.000Z"
},
"draftkings": {
"odds_american": -150,
"odds_decimal": 1.667,
"last_seen_at": "2026-01-26T02:10:24.000Z"
"timestamp": "2026-01-26T02:10:24.000Z"
},
"betmgm": {
"odds_american": -155,
"odds_decimal": 1.645,
"last_seen_at": "2026-01-26T02:10:18.000Z"
"timestamp": "2026-01-26T02:10:18.000Z"
},
"pinnacle": {
"odds_american": -148,
"odds_decimal": 1.676,
"last_seen_at": "2026-01-26T02:10:15.000Z"
"timestamp": "2026-01-26T02:10:15.000Z"
}
},
"best_book": "fanduel",
Expand All @@ -159,22 +159,22 @@ for market in event['markets']:
"draftkings": {
"odds_american": 130,
"odds_decimal": 2.300,
"last_seen_at": "2026-01-26T02:10:24.000Z"
"timestamp": "2026-01-26T02:10:24.000Z"
},
"fanduel": {
"odds_american": 125,
"odds_decimal": 2.250,
"last_seen_at": "2026-01-26T02:10:20.000Z"
"timestamp": "2026-01-26T02:10:20.000Z"
},
"betmgm": {
"odds_american": 128,
"odds_decimal": 2.280,
"last_seen_at": "2026-01-26T02:10:18.000Z"
"timestamp": "2026-01-26T02:10:18.000Z"
},
"pinnacle": {
"odds_american": 126,
"odds_decimal": 2.260,
"last_seen_at": "2026-01-26T02:10:15.000Z"
"timestamp": "2026-01-26T02:10:15.000Z"
}
},
"best_book": "draftkings",
Expand Down Expand Up @@ -253,8 +253,7 @@ Jeder Eintrag im `books`-Objekt:
|-------|------|-------------|
| `odds_american` | number | American Odds |
| `odds_decimal` | number | Dezimal-Quoten |
| `last_seen_at` | string | Wann unsere Pipeline die Zeile dieses Buchmachers zuletzt beobachtet hat — Pipeline-Aktualitätssignal |
| `odds_changed_at` | string | Wann sich der Preis, die Linie oder das `is_live`-Flag dieses Buchmachers zuletzt tatsächlich geändert hat. Bei Pinnacle wird dieser Wert über unveränderte Aktualisierungen hinweg fortgeführt — siehe [Pinnacles `odds_changed_at` verstehen](/de/concepts/pinnacle-odds-changed-at/). |
| `timestamp` | string | ISO-8601-Zeitpunkt, zu dem SharpAPI die Quote dieses Buchmachers zuletzt durch seine Pipeline aktualisiert hat — wird in jedem Ingest-Zyklus weitergeschaltet. Ein Feed-Aktualitäts- / Liveness-Signal (entspricht OpticOdds' `timestamp`); es ist NICHT der Zeitpunkt, zu dem sich der Preis zuletzt geändert hat. Siehe [`timestamp` verstehen](/de/concepts/pinnacle-odds-changed-at/). |

## Hold verstehen

Expand Down Expand Up @@ -293,7 +292,7 @@ curl "https://api.sharpapi.io/api/v1/odds/comparison?event=33483153&market=sprea

### Veraltete Linien identifizieren

Suchen Sie nach Buchmachern, die ihre Quoten kürzlich nicht aktualisiert haben, indem Sie das `last_seen_at` jedes Buchmachers prüfen. Ein Buchmacher mit veralteten Quoten reagiert möglicherweise langsam auf Anpassungen und schafft so vorübergehenden Wert.
Suchen Sie nach Buchmachern, die ihre Quoten kürzlich nicht aktualisiert haben, indem Sie das `timestamp` jedes Buchmachers prüfen. Ein Buchmacher mit veralteten Quoten reagiert möglicherweise langsam auf Anpassungen und schafft so vorübergehenden Wert.

### Markteffizienz

Expand Down
2 changes: 1 addition & 1 deletion content/de/api-reference/odds-delta.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ while True:
"odds_probability": 0.60,
"line": null,
"event_start_time": "2026-02-11T19:00:00Z",
"last_seen_at": "2026-02-11T12:00:15.125Z",
"timestamp": "2026-02-11T12:00:15.125Z",
"is_live": false,
"status": "upcoming"
}
Expand Down
16 changes: 9 additions & 7 deletions content/de/api-reference/odds.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ Erfordert einen API key. Verfügbar für **alle Tarife**.
Welche Sportwettenanbieter in Ihren Ergebnissen zurückgegeben werden, hängt von Ihrem Abonnement-Tarif ab. Nutzer des Free-Tarifs erhalten ausschließlich Quoten von DraftKings und FanDuel. Siehe [Anbieterzugang nach Tarif](#book-access-by-tier) weiter unten.
</Callout>

<Callout type="warning">
Geändert in v3.0.0: Die Quotenantwort führt jetzt ein einziges `timestamp`-Feld (Auslieferung / Feed-Aktualität, passend zu OpticOdds). Die früheren Felder `odds_changed_at`, `last_seen_at` und `wire_received_at` wurden entfernt — lesen Sie stattdessen `timestamp`. Es gibt kein Feld mehr dafür, wann sich der Preis zuletzt bewegt hat.
</Callout>

## Query-Parameter

| Parameter | Typ | Standard | Beschreibung |
Expand Down Expand Up @@ -195,7 +199,7 @@ Cursor sind undurchsichtig — parsen oder konstruieren Sie sie nicht. Sie kodie
"odds_probability": 0.60,
"line": null,
"event_start_time": "2026-01-26T19:00:00Z",
"last_seen_at": "2026-01-26T02:10:24.125Z",
"timestamp": "2026-01-26T02:10:24.125Z",
"is_live": false
},
{
Expand All @@ -214,7 +218,7 @@ Cursor sind undurchsichtig — parsen oder konstruieren Sie sie nicht. Sie kodie
"odds_probability": 0.4348,
"line": null,
"event_start_time": "2026-01-26T19:00:00Z",
"last_seen_at": "2026-01-26T02:10:24.125Z",
"timestamp": "2026-01-26T02:10:24.125Z",
"is_live": false
}
],
Expand Down Expand Up @@ -314,9 +318,7 @@ X-Request-Id: req_abc123def456
| `line` | number \| null | Spread- oder Total-Linienwert (`null` bei Moneyline) |
| `is_alternate_line` | boolean\|undefined | `true`, wenn das `line` dieser Zeile von der kanonischen Hauptlinie für ihre `(event, market_type, player)`-Gruppe abweicht. Immer `false` für Märkte ohne Linie (Moneyline, Outright). Stabil auf [`/opportunities/ev`](/de/api-reference/opportunities-ev/) heute; Rollout auf `/odds`-Zeilen läuft. Verwenden Sie es, um Haupt- und Alternativlinien-Snapshots zu trennen. |
| `event_start_time` | string | ISO 8601 Event-Startzeit |
| `last_seen_at` | string | ISO 8601 Zeitstempel der letzten Beobachtung dieser Zeile durch unseren Adapter. Wird in jedem Ingest-Zyklus aktualisiert — dies ist das Pipeline-Frische-Signal. |
| `odds_changed_at` | string | ISO 8601 Zeitstempel der quelleneigenen Aktualisierung des Sportwettenanbieters für diese Linie, sofern verfügbar. Bei Pinnacle wird er fortgeführt, solange Preis/Linie/`is_live`-Flag unverändert bleiben (siehe [Pinnacles `odds_changed_at` verstehen](/de/concepts/pinnacle-odds-changed-at/)). Verwenden Sie `last_seen_at` für die Pipeline-Frische. |
| `wire_received_at` | string\|undefined | ISO 8601 Zeitstempel des Zeitpunkts, an dem sharp-api-go zuletzt eine Inhaltshash-Änderung für diese Zeile beobachtet hat — der Pipeline-Eingangsstempel. Unterschiedlich von `last_seen_at` (Adapter-Beobachtung) und `odds_changed_at` (quelleneigene Aktualisierung des Sportwettenanbieters). |
| `timestamp` | string | ISO-8601-Zeitpunkt, zu dem SharpAPI diese Quote zuletzt durch seine Pipeline aktualisiert hat — wird in jedem Ingest-Zyklus weitergeschaltet. Ein Feed-Aktualitäts- / Liveness-Signal (entspricht OpticOdds' `timestamp`); es ist NICHT der Zeitpunkt, zu dem sich der Preis zuletzt geändert hat. |
| `is_live` | boolean | Ob das Event derzeit live läuft |
| `event_uuid` | string\|undefined | Stabile kanonische Event-UUID aus dem SharpAPI-Atlas, sofern das Event gemappt ist. Während `event_id` die primäre Event-Kennung des Adapters trägt (oft die des ursprünglichen Sportwettenanbieters), ist `event_uuid` ein feed-stabiler Hash für Cross-Feed-Joins. Fehlt bei nicht gemappten Events. |
| `external_event_id` | string\|undefined | Die native Event-ID des Sportwettenanbieters, sofern sie sich von `event_id` unterscheidet. Nützlich, um Zeilen in die UI oder API des Sportwettenanbieters zurückzuverknüpfen. |
Expand Down Expand Up @@ -377,7 +379,7 @@ curl "https://api.sharpapi.io/api/v1/odds?sort=event_start_time" \
-H "X-API-Key: YOUR_API_KEY"
```

Gültige Sortierfelder: `odds_american`, `odds_decimal`, `odds_probability`, `event_start_time`, `last_seen_at`, `sportsbook`, `league`, `sport`.
Gültige Sortierfelder: `odds_american`, `odds_decimal`, `odds_probability`, `event_start_time`, `timestamp`, `sportsbook`, `league`, `sport`.

## Feldauswahl

Expand Down Expand Up @@ -447,7 +449,7 @@ curl "https://api.sharpapi.io/api/v1/odds?league=nba&group_by=event" \
"odds_decimal": 1.667,
"odds_probability": 0.60,
"line": null,
"last_seen_at": "2026-01-26T02:10:24.125Z"
"timestamp": "2026-01-26T02:10:24.125Z"
}
]
}
Expand Down
2 changes: 1 addition & 1 deletion content/de/api-reference/sportsbooks.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -400,7 +400,7 @@ Das Feld `requires_tier` gibt die Mindest-Abonnementstufe an, die benötigt wird
{/* AUTO:END:sharp-books */}

<Callout type="info">
**Pinnacle-Zeitstempel lesen.** `odds_changed_at` in einer Pinnacle-Zeile ist der Zeitstempel ihres Trading-Desks, nicht der unserer Pipeline. Pinnacle hält die Linien stabil, wenn sich der Markt nicht bewegt hat — ein Leerlaufwert von 30+ Minuten ist bei MLB-Spieler-Props und NBA-Märkten üblich. Verwenden Sie `last_seen_at` für die Pipeline-Aktualität. Siehe [Pinnacles `odds_changed_at` verstehen](/de/concepts/pinnacle-odds-changed-at/) dafür, was "veraltet" in ihrem Feed tatsächlich bedeutet.
**Pinnacle-Zeitstempel lesen.** `timestamp` in einer Pinnacle-Zeile ist der Auslieferungs- / Feed-Aktualitätsstempel — wann SharpAPI diese Quote zuletzt durch seine Pipeline aktualisiert hat —, nicht der Zeitpunkt, zu dem sich der Preis zuletzt bewegt hat. Pinnacle hält die Linien stabil, wenn sich der Markt nicht bewegt hat, aber `timestamp` wird trotzdem in jedem Ingest-Zyklus weitergeschaltet. Siehe [`timestamp` verstehen](/de/concepts/pinnacle-odds-changed-at/) dafür, wie SharpAPI Feed-Aktualität bereitstellt.
</Callout>

### International
Expand Down
Loading