{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/oddsrelay/main/json-schema/oddsrelay-coverage-summary-schema.json", "title": "CoverageSummary", "description": "The keyless view.", "x-generated": "2026-10-09", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/oddsrelay-openapi.yml#/components/schemas/CoverageSummary", "type": "object", "required": [ "region", "generated_at", "products", "markets" ], "properties": { "region": { "type": "string" }, "generated_at": { "type": "string" }, "products": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "object", "required": [ "bookmaker", "sport", "status" ], "properties": { "bookmaker": { "type": "string", "description": "Venue key, bookmakers then exchanges." }, "sport": { "type": "string", "description": "Sport key base." }, "status": { "type": "string", "enum": [ "live", "interrupted_24h" ], "description": "`live`: we are publishing odds for this venue and sport right now. `interrupted_24h`: we are not — no rows at this instant, or the venue's feed is interrupted now; it was publishing within the last 24 hours, which is why it is listed at all." } } } } }, "markets": { "type": "object", "description": "Per product the region serves, the market keys it carries, sorted: each one a value that product's `markets` filter takes while this document is current (2up, each-way, extra-place and bog carry one each). A key under one product and not another is 400 `unknown_market` on the other's route when that route does not know it, naming the products that carry it in `products`.", "additionalProperties": { "type": "array", "items": { "type": "string" } } } } }