Schema glossary.
For developers writing a parser or a model: what each field means, and what its null means. For generated types, use openapi.json. For every parameter, use the API reference.
Read this first
- null and a missing key never mean zero.
- null means we do not know, the source did not report it, or it does not apply yet. The row below says which.
- false is a statement. available: false says a side is not offered; available: null says that was not established.
- unknown is a value too. A tier of unknown means the board omitted it, so do not treat it as standard.
- Timestamps are ISO 8601 UTC instants. Store them as instants, and keep observed_at beside any line you persist.
Response meta
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| meta.mode | live | demo | Whether rows are live or fictional. | Never null. |
| meta.next_cursor | string | null | Cursor for the next page. | This is the last page. |
| meta.observed_at | datetime | null | Time of the latest board collection, not of each row. | No collection is recorded yet. |
| meta.source_status | fresh | partial | stale | failed | not_configured | Board health. Demo responses read demo. | Never null. |
| meta.plan_limit | object, optional | What your plan left out of these real rows. | Absent: no plan limit changed this answer. |
Projection
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| id | string | Stable projection ID. Use it as your key. | Never null. |
| line | number | The base PrizePicks line. | Never null. |
| status | active | unavailable | Whether the offer is current. | Never null. |
| player.id, team, position | string | null | Who the line is on. | Not reported. Do not derive a team from a name. |
| event.id, opponent, starts_at | string | null | The game the line belongs to. | Not reported on this row. |
| observed_at | datetime | When we last confirmed the row. | Never null. |
| source_updated_at | datetime | null | The source update time for the line. | The source gave none. If you substitute observed_at, record that you did. |
| source_board_time | datetime | null | Board time when present. | Not present on this read. |
| popularity | object | null | Latest sampled pick count for the line. | None reported since recording began. |
| popularity.change_1h | integer | null | Rise over the hour before observed_at. | No earlier sample to compare. |
| game_state | object | null | What the board reports about a game in play. | Game not in play, or no state recorded. Not a scoreboard. |
| live_score | object, optional | A streamed score for this projection, with feed_connected and stale. | No score has been received for it. |
Selections, one per side
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| side | more | less | Which outcome the entry describes. | Never null. |
| available | boolean | null | Whether this side is offered. | Not established, which is different from unavailable. |
| tier | standard | goblin | demon | unknown | Difficulty label for this side. | Never null. unknown means the board omitted it. |
| payout_multiplier | number | null | An observed multiplier, never synthesized. | The board publishes no per-offer payout. Use /api/v1/payouts for standard tables. |
line_context
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| opening_line | number | null | The first line we recorded, not necessarily the first ever offered. | No recorded history for this offer. |
| previous_line | number | null | The line before the most recent move. | The line never moved. |
| last_moved_at | datetime | null | When the line last moved. | The line never moved. |
| closing_line | number | null | The last line recorded at or before the start. | The event has not started. |
| closed_at | datetime | null | The start, or when a pulled offer left the board. | Not closed yet. |
source_fields
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| any field | value | null | What the board reports on the row, normalized. | The source omitted it. |
| trending_count | integer | null | Reported pick count, definition unverified. | None reported, not zero. |
| popularity_rank | integer | null | Row position on a board sorted by start time. Not popularity. | Not reported. |
| today | boolean | null | true when the board marks the line as today. It is never false. | Not marked. Do not read it as a different day. |
History and change events
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| previous_line | number | null | The line before this version or event. | First record, such as offer.new. |
| line_moved | boolean | Whether this version changed the number. | Never null. Tier or availability changes can add a version with false. |
| game_state (history) | object | null | In-play state at that moment. | None recorded, or before capture began. |
| source_updated_at (history) | datetime | null | Source update time at that version. | The source gave none. |
Results and training rows
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| result | over | under | push | void | null | The grade against the closing line. | status is ungraded. Read reason. |
| reason | string | null | Why a row is void or ungraded. | The row is graded normally. |
| actual_value | number | null | The final stat. Voids carry it too, for audit. | No box-score value is available. |
| line, opening_line, closing_line | number | null | Recorded lines used for the grade. | Not recorded for this row. |
| minutes | integer | null | Minutes played. Post-game, never a pre-game input. | Not available from the box score. |
| rest_days | integer | null | Full days the team had off. | We cannot prove it, such as the first game we hold for a team. |
| home_away | home | away | null | Where the team played. | The team cannot be placed, as on a combined two-team row. |
| tier (training) | standard | goblin | demon | null | The tier on the more side. | Not established for this row. |
| trending_count_at_start | integer | null | Last pick count at or before the start. | None reported, or before recording began. |
| sides.more.outcome, sides.less.outcome | hit | miss | push | void | null | The outcome per side. | That side has no outcome, such as an ungraded row. |
Game logs and team stats
| Field | Type | Means | Null or absent means |
|---|---|---|---|
| stats.<name> | number, key may be absent | A box-score stat. | A missing key was not reported. It is not zero. |
| confirmed | boolean | false for about four days after a game, while numbers can still change. | Never null. |
| minutes | number | null | Minutes played. | Not reported. |
Sample JSON files
Fictional rows with the same field names and types as the live API. Safe for fixtures and parser tests.
| File | Shows |
|---|---|
| projections.demo.json | Projections, full view. 12 demo rows, including goblin and demon tiers. |
| projections-compact.demo.json | Projections, compact view. The live compact shape, built from demo rows. |
| history.demo.json | Projection history. Changes-only versions of one offer. |
| changes.demo.json | Change feed. offer.new and offer.changed events. |
| results.sample.json | Graded results. A graded, a void and an ungraded row. |
| training-set.sample.json | Training set. One flat graded row. |
| coverage.demo.json | Coverage. Leagues and markets on the demo board. |
| payouts.demo.json | Payouts. Standard payout tables. |
Prefer a real response? The first-call path gets you one in three steps.