{"openapi":"3.1.0","info":{"title":"Matchflow Customer API","version":"1.0.0","description":"Scoped match snapshots and odds. No cursor pagination or durable stream replay is provided. Redistribution and white-label rights were confirmed by the operator on 2026-10-27; contract originals were not inspected."},"servers":[{"url":"https://api.matchflow.oraunku.com"}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key"},"bearerAuth":{"type":"http","scheme":"bearer"}}},"paths":{"/v1/matches":{"get":{"summary":"List snapshots for one local calendar date","parameters":[{"name":"date","in":"query","required":true,"description":"Required local calendar date YYYY-MM-DD","schema":{"type":"string","format":"date"}},{"name":"timezone","in":"query","required":false,"description":"IANA timezone","schema":{"type":"string"}},{"name":"sport","in":"query","required":false,"description":"Sport identifier; defaults to soccer","schema":{"type":"string"}},{"name":"bookmakers","in":"query","required":false,"description":"Comma-separated entitled bookmaker aliases","schema":{"type":"string"}},{"name":"markets","in":"query","required":false,"description":"Comma-separated market identifiers","schema":{"type":"string"}},{"name":"mainOnly","in":"query","required":false,"description":"true or 1 restricts results to main lines","schema":{"type":"string","enum":["true","false","1","0"]}},{"name":"oddsLimit","in":"query","required":false,"description":"Per-book embedded pre-match price limit: default 100, capped at 500; values below 1 become 1","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"limit","in":"query","required":false,"description":"Bounded result count; no next cursor or offset","schema":{"type":"integer","minimum":1,"maximum":500,"default":200}}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"sport":{"type":"string"},"date":{"type":"string"},"timezone":{"type":"string"},"utcRange":{"type":"object"},"matches":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/matches/{matchId}":{"get":{"summary":"Get one match snapshot","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Canonical Matchflow match identifier"},{"name":"sport","in":"query","required":false,"description":"Sport identifier; defaults to soccer","schema":{"type":"string"}},{"name":"bookmakers","in":"query","required":false,"description":"Comma-separated entitled bookmaker aliases","schema":{"type":"string"}},{"name":"markets","in":"query","required":false,"description":"Comma-separated market identifiers","schema":{"type":"string"}},{"name":"mainOnly","in":"query","required":false,"description":"true or 1 restricts results to main lines","schema":{"type":"string","enum":["true","false","1","0"]}},{"name":"timezone","in":"query","required":false,"description":"IANA timezone","schema":{"type":"string"}},{"name":"oddsLimit","in":"query","required":false,"description":"Per-book embedded pre-match price limit: default 100, capped at 500; values below 1 become 1","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Match snapshot","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"404":{"description":"Match not found","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/matches/{matchId}/odds":{"get":{"summary":"Get current odds","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Canonical Matchflow match identifier"},{"name":"sport","in":"query","required":false,"description":"Sport identifier; defaults to soccer","schema":{"type":"string"}},{"name":"bookmakers","in":"query","required":false,"description":"Comma-separated entitled bookmaker aliases","schema":{"type":"string"}},{"name":"markets","in":"query","required":false,"description":"Comma-separated market identifiers","schema":{"type":"string"}},{"name":"mainOnly","in":"query","required":false,"description":"true or 1 restricts results to main lines","schema":{"type":"string","enum":["true","false","1","0"]}},{"name":"oddsLimit","in":"query","required":false,"description":"Per-book embedded pre-match price limit: default 100, capped at 500; values below 1 become 1","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"matchId":{"type":"string"},"count":{"type":"integer"},"odds":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/stream-tokens":{"post":{"summary":"Issue a short-lived Socket.IO token","parameters":[],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"expiresIn":{"type":"integer","const":120}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sports":{"type":"array","items":{"type":"string"}},"bookmakers":{"type":"array","items":{"type":"string"}},"matches":{"type":"array","items":{"type":"string"}}}}}}}}},"/v1/tracker/{widgetId}/updates":{"get":{"summary":"Tracker snapshot invalidation stream; refetch snapshot on resync","parameters":[{"name":"widgetId","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"SSE resync notifications; no replay or cursor","content":{"text/event-stream":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"servers":[{"url":"https://tracker.matchflow.oraunku.com"}]}},"/v1/widget-tokens":{"post":{"summary":"Issue a short-lived tracker token","parameters":[],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"}},"required":["token","expiresAt"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["widgetId","matchId","sport","origin"],"properties":{"widgetId":{"type":"string"},"matchId":{"type":"string","format":"uuid"},"sport":{"type":"string"},"origin":{"type":"string","format":"uri"}}}}}}}},"/v1/tracker/{widgetId}/snapshot":{"get":{"summary":"Get the tracker token’s one-match snapshot","parameters":[{"name":"widgetId","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"servers":[{"url":"https://tracker.matchflow.oraunku.com"}]}},"/v1/matches/{matchId}/odds/history":{"get":{"summary":"Get recent odds history, newest first","parameters":[{"name":"matchId","in":"path","required":true,"schema":{"type":"string","format":"uuid"},"description":"Canonical Matchflow match identifier"},{"name":"sport","in":"query","required":false,"description":"Sport identifier; defaults to soccer","schema":{"type":"string"}},{"name":"bookmakers","in":"query","required":false,"description":"Comma-separated entitled bookmaker aliases","schema":{"type":"string"}},{"name":"mainOnly","in":"query","required":false,"description":"true or 1 restricts results to main lines","schema":{"type":"string","enum":["true","false","1","0"]}},{"name":"marketId","in":"query","required":false,"description":"Single market identifier","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Bounded recent history; no pagination cursor","schema":{"type":"integer","minimum":1,"maximum":2000,"default":500}}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"matchId":{"type":"string"},"count":{"type":"integer"},"history":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing, invalid, expired or revoked credential","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"403":{"description":"Credential scope does not permit this operation","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate or quota exceeded","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"503":{"description":"Required service unavailable","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}}}