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

FieldTypeMeansNull or absent means
meta.modelive | demoWhether rows are live or fictional.Never null.
meta.next_cursorstring | nullCursor for the next page.This is the last page.
meta.observed_atdatetime | nullTime of the latest board collection, not of each row.No collection is recorded yet.
meta.source_statusfresh | partial | stale | failed | not_configuredBoard health. Demo responses read demo.Never null.
meta.plan_limitobject, optionalWhat your plan left out of these real rows.Absent: no plan limit changed this answer.

Projection

FieldTypeMeansNull or absent means
idstringStable projection ID. Use it as your key.Never null.
linenumberThe base PrizePicks line.Never null.
statusactive | unavailableWhether the offer is current.Never null.
player.id, team, positionstring | nullWho the line is on.Not reported. Do not derive a team from a name.
event.id, opponent, starts_atstring | nullThe game the line belongs to.Not reported on this row.
observed_atdatetimeWhen we last confirmed the row.Never null.
source_updated_atdatetime | nullThe source update time for the line.The source gave none. If you substitute observed_at, record that you did.
source_board_timedatetime | nullBoard time when present.Not present on this read.
popularityobject | nullLatest sampled pick count for the line.None reported since recording began.
popularity.change_1hinteger | nullRise over the hour before observed_at.No earlier sample to compare.
game_stateobject | nullWhat the board reports about a game in play.Game not in play, or no state recorded. Not a scoreboard.
live_scoreobject, optionalA streamed score for this projection, with feed_connected and stale.No score has been received for it.

Selections, one per side

FieldTypeMeansNull or absent means
sidemore | lessWhich outcome the entry describes.Never null.
availableboolean | nullWhether this side is offered.Not established, which is different from unavailable.
tierstandard | goblin | demon | unknownDifficulty label for this side.Never null. unknown means the board omitted it.
payout_multipliernumber | nullAn observed multiplier, never synthesized.The board publishes no per-offer payout. Use /api/v1/payouts for standard tables.

line_context

FieldTypeMeansNull or absent means
opening_linenumber | nullThe first line we recorded, not necessarily the first ever offered.No recorded history for this offer.
previous_linenumber | nullThe line before the most recent move.The line never moved.
last_moved_atdatetime | nullWhen the line last moved.The line never moved.
closing_linenumber | nullThe last line recorded at or before the start.The event has not started.
closed_atdatetime | nullThe start, or when a pulled offer left the board.Not closed yet.

source_fields

FieldTypeMeansNull or absent means
any fieldvalue | nullWhat the board reports on the row, normalized.The source omitted it.
trending_countinteger | nullReported pick count, definition unverified.None reported, not zero.
popularity_rankinteger | nullRow position on a board sorted by start time. Not popularity.Not reported.
todayboolean | nulltrue 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

FieldTypeMeansNull or absent means
previous_linenumber | nullThe line before this version or event.First record, such as offer.new.
line_movedbooleanWhether this version changed the number.Never null. Tier or availability changes can add a version with false.
game_state (history)object | nullIn-play state at that moment.None recorded, or before capture began.
source_updated_at (history)datetime | nullSource update time at that version.The source gave none.

Results and training rows

FieldTypeMeansNull or absent means
resultover | under | push | void | nullThe grade against the closing line.status is ungraded. Read reason.
reasonstring | nullWhy a row is void or ungraded.The row is graded normally.
actual_valuenumber | nullThe final stat. Voids carry it too, for audit.No box-score value is available.
line, opening_line, closing_linenumber | nullRecorded lines used for the grade.Not recorded for this row.
minutesinteger | nullMinutes played. Post-game, never a pre-game input.Not available from the box score.
rest_daysinteger | nullFull days the team had off.We cannot prove it, such as the first game we hold for a team.
home_awayhome | away | nullWhere the team played.The team cannot be placed, as on a combined two-team row.
tier (training)standard | goblin | demon | nullThe tier on the more side.Not established for this row.
trending_count_at_startinteger | nullLast pick count at or before the start.None reported, or before recording began.
sides.more.outcome, sides.less.outcomehit | miss | push | void | nullThe outcome per side.That side has no outcome, such as an ungraded row.

Game logs and team stats

FieldTypeMeansNull or absent means
stats.<name>number, key may be absentA box-score stat.A missing key was not reported. It is not zero.
confirmedbooleanfalse for about four days after a game, while numbers can still change.Never null.
minutesnumber | nullMinutes 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.

FileShows
projections.demo.jsonProjections, full view. 12 demo rows, including goblin and demon tiers.
projections-compact.demo.jsonProjections, compact view. The live compact shape, built from demo rows.
history.demo.jsonProjection history. Changes-only versions of one offer.
changes.demo.jsonChange feed. offer.new and offer.changed events.
results.sample.jsonGraded results. A graded, a void and an ungraded row.
training-set.sample.jsonTraining set. One flat graded row.
coverage.demo.jsonCoverage. Leagues and markets on the demo board.
payouts.demo.jsonPayouts. Standard payout tables.

Prefer a real response? The first-call path gets you one in three steps.