{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://betfireai.com/api/public/decision-ledger.schema.json","title":"VS Predicts public decision ledger","description":"Sanitized policy-timed records describing what VS Predicts evaluated and why it qualified, watched, passed, or abstained. Selection-free event status may appear at evaluation time; opportunity detail is delayed until event start. The feed intentionally excludes model probabilities, edge/EV, thresholds, weights, gate traces, configuration hashes, and raw provider payloads.","type":"object","additionalProperties":false,"required":["schema","generated_at","disclosure_policy","reason_taxonomy","records"],"properties":{"schema":{"const":"betfire.public-decision-ledger.v1"},"generated_at":{"type":"string","format":"date-time"},"schema_url":{"type":"string","format":"uri"},"disclosure_policy":{"type":"object","additionalProperties":false,"required":["active_pregame_selection_details_exposed","selection_free_event_status_available_from","opportunity_records_available_from","sport_health_records_available_from","status_is_point_in_time"],"properties":{"active_pregame_selection_details_exposed":{"const":false},"selection_free_event_status_available_from":{"const":"evaluation_time"},"opportunity_records_available_from":{"const":"event_start"},"sport_health_records_available_from":{"const":"evaluation_time"},"status_is_point_in_time":{"const":true}}},"reason_taxonomy":{"const":[{"code":"qualified_opportunity","meaning":"At least one opportunity cleared the governed decision boundary; the official-pick ledger remains the authority for publication."},{"code":"evaluated_no_bet","meaning":"The event was evaluated and had no official VS Predicts instruction at the stated evaluation time."},{"code":"watch_price_only","meaning":"Worth monitoring, but did not qualify as an official instruction."},{"code":"below_official_threshold","meaning":"Valid market evidence did not clear the official decision boundary."},{"code":"below_minimum_edge","meaning":"Estimated separation from the market was not sufficient."},{"code":"negative_expected_value","meaning":"The offered price did not support positive expected value."},{"code":"price_stale","meaning":"The executable price was not fresh enough for publication."},{"code":"event_already_started","meaning":"The event had started before the decision could be published."},{"code":"event_too_close","meaning":"The event was inside the protected pre-start publication buffer."},{"code":"book_unavailable","meaning":"The apparent price came from a venue excluded from execution."},{"code":"invalid_event_time","meaning":"Required event timing could not be verified."},{"code":"safety_gate_blocked","meaning":"Run-level market-quality safeguards blocked publication."},{"code":"insufficient_market_evidence","meaning":"The event lacked a complete comparable market set."},{"code":"unverified_competition_membership","meaning":"Participant or competition identity was outside verified product scope."},{"code":"no_current_slate","meaning":"The provider answered successfully but no eligible current slate was available."},{"code":"no_verified_in_scope_events","meaning":"The provider returned events, but none could be verified inside VS Predicts' declared competition scope."},{"code":"provider_unavailable","meaning":"The sport was not evaluated because its provider request failed."}]},"records":{"type":"array","items":{"$ref":"#/$defs/record"}}},"$defs":{"record":{"type":"object","additionalProperties":false,"required":["id","schema_version","run_id","record_scope","sport","decision_state","reason_code","health_state","evaluated_at","disclose_at","disclosure_state","data_provenance","model_version","integrity_hash"],"properties":{"id":{"type":"string","format":"uuid"},"schema_version":{"const":"betfire.public-decision.v1"},"run_id":{"type":"string","format":"uuid"},"record_scope":{"enum":["opportunity","event","sport"]},"sport":{"enum":["mlb","nfl","nba","nhl","cfb","cbb","soccer"]},"decision_state":{"enum":["qualified_opportunity","evaluated_no_bet","watch_price","evaluated_pass","out_of_scope","no_current_slate","degraded","not_evaluated"]},"reason_code":{"type":"string"},"health_state":{"enum":["evaluated","no_current_slate","degraded","not_evaluated"]},"event_id":{"type":["string","null"]},"game":{"type":["string","null"]},"market":{"type":["string","null"]},"selection":{"type":["string","null"]},"executable_venue":{"type":["string","null"]},"observed_american_odds":{"type":["integer","null"]},"evaluated_at":{"type":"string","format":"date-time"},"observed_at":{"type":["string","null"],"format":"date-time"},"event_start":{"type":["string","null"],"format":"date-time"},"disclose_at":{"type":"string","format":"date-time"},"disclosure_state":{"enum":["operational","pregame_status","post_start"]},"data_provenance":{"type":"string"},"model_version":{"type":"string"},"integrity_hash":{"type":"string","pattern":"^[0-9a-f]{64}$"},"supersedes_id":{"type":["string","null"],"format":"uuid"}}}}}