{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://oddsflow.ai/schemas/signal-log.schema.json", "title": "OddsFlow Signal Log", "type": "object", "additionalProperties": false, "required": [ "match_id", "timestamp", "market", "selection", "odds", "model_version", "schema_version" ], "properties": { "match_id": { "type": "string", "minLength": 1 }, "timestamp": { "type": "string", "format": "date-time", "description": "ISO 8601 with timezone" }, "league": { "type": "string" }, "home_team": { "type": "string" }, "away_team": { "type": "string" }, "market": { "type": "string", "enum": ["1X2", "AH", "OU"] }, "selection": { "type": "string", "minLength": 1 }, "line": { "type": ["number", "null"] }, "odds": { "type": "number", "minimum": 1.01 }, "odds_source": { "type": ["string", "null"] }, "model_version": { "type": "string", "minLength": 1 }, "schema_version": { "type": "string", "minLength": 1 }, "status": { "type": "string", "enum": ["open", "settled", "void"], "default": "open" }, "result": { "type": ["string", "null"] }, "notes": { "type": ["string", "null"] } }, "allOf": [ { "if": { "properties": { "market": { "const": "1X2" } }, "required": ["market"] }, "then": { "properties": { "line": { "const": null } } } }, { "if": { "properties": { "market": { "enum": ["AH", "OU"] } }, "required": ["market"] }, "then": { "required": ["line"], "properties": { "line": { "type": "number" } } } } ] }