{"openapi":"3.1.0","info":{"title":"Machina World Cup Intelligence APIs","version":"0.2.0-preview","summary":"World Cup Intelligence APIs for apps and agents (developer preview).","description":"Ask anything about any match, get a grounded, source-cited answer you can put on air, publish, show in-app, or analyze. One MCP tool call or one REST request.\n\nFixture-scoped endpoints accept plain-English inputs (event/team/opponent/date) and player endpoints accept player names, no URNs or provider ids needed. Every fixture response echoes the resolved event_urn for chaining. Signal, edge, and forecast outputs are informational research only, not betting advice.\n\nThis schema is partial and published for the developer preview. Remaining request/response schemas will be expanded before general availability. x402 per-call payment is coming soon.","contact":{"email":"support@machina.gg","url":"https://machina.gg/contact"}},"servers":[{"url":"https://api.machina.gg/world-cup/v1"}],"tags":[{"name":"skills","description":"Composite, grounded, source-cited cards, served fresh from cache or authored on demand. Work in Claude and any AI agent."},{"name":"match-context","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context."},{"name":"markets","description":"Search Kalshi and Polymarket in one normalized shape, with live order-book depth, price history, and movers."},{"name":"intelligence","description":"Grounded briefs, price-move explanations, fan sentiment, and cross-venue market comparisons, with sources, confidence, and caveats. Informational, not betting advice."},{"name":"forecast-signals","description":"Dixon-Coles model probabilities, the live model-vs-market gap, model outputs (de-vigged probabilities and expected value), and a published accuracy track record. Informational, not betting advice."},{"name":"health","description":"Free service health / whoami check (no credits)."}],"paths":{"/skills/match-preview":{"post":{"operationId":"worldcup-match-preview","tags":["skills"],"summary":"Match Preview","description":"Grounded preview: form, key men, group context, market snapshot.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Identify the fixture in plain English, pass `event` free text, or `team` (+ optional `opponent` + `date`). No URNs or provider ids needed; unresolved inputs return an explicit warning, ambiguous ones return candidates. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it.","properties":{"event":{"type":"string","description":"Plain-English fixture, e.g. \"Brazil vs Morocco\" (also accepts \"v\" / \"x\" / \"-\" separators)."},"team":{"type":"string","description":"Team name, e.g. \"Morocco\". Use with optional `opponent` and `date`."},"opponent":{"type":"string","description":"Optional opponent name to disambiguate the fixture."},"date":{"type":"string","format":"date","description":"Optional fixture date as YYYY-MM-DD."},"event_urn":{"type":"string","description":"Canonical event URN, if you already have one (every fixture response echoes it). Plain-English inputs above make this optional."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/skills/match-recap":{"post":{"operationId":"worldcup-match-recap","tags":["skills"],"summary":"Match Recap","description":"Post-match recap, authored once the final whistle blows.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Identify the fixture in plain English, pass `event` free text, or `team` (+ optional `opponent` + `date`). No URNs or provider ids needed; unresolved inputs return an explicit warning, ambiguous ones return candidates. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Recaps are authored only once the match has finished.","properties":{"event":{"type":"string","description":"Plain-English fixture, e.g. \"Brazil vs Morocco\" (also accepts \"v\" / \"x\" / \"-\" separators)."},"team":{"type":"string","description":"Team name, e.g. \"Morocco\". Use with optional `opponent` and `date`."},"opponent":{"type":"string","description":"Optional opponent name to disambiguate the fixture."},"date":{"type":"string","format":"date","description":"Optional fixture date as YYYY-MM-DD."},"event_urn":{"type":"string","description":"Canonical event URN, if you already have one (every fixture response echoes it). Plain-English inputs above make this optional."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/skills/player-spotlight":{"post":{"operationId":"worldcup-player-spotlight","tags":["skills"],"summary":"Player Spotlight","description":"Grounded player card with performance context and narrative.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Identify the player by name, no URNs or ids needed. The resolver is accent/case-insensitive; ambiguity is returned as `candidates`. The response echoes the resolved `player_urn` (and `resolved_player`) for chaining.","required":["player"],"properties":{"player":{"type":"string","description":"Player name, e.g. \"Vinícius Júnior\"."},"team":{"type":"string","description":"Optional team name to disambiguate the player."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/skills/fan-pulse":{"post":{"operationId":"worldcup-fan-pulse","tags":["skills"],"summary":"Fan Pulse","description":"Social and news sentiment around a team, player, or match.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Identify the fixture in plain English, pass `event` free text, or `team` (+ optional `opponent` + `date`). No URNs or provider ids needed; unresolved inputs return an explicit warning, ambiguous ones return candidates. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Also accepts a free-text `query` for team/player-level pulse.","properties":{"event":{"type":"string","description":"Plain-English fixture, e.g. \"Brazil vs Morocco\" (also accepts \"v\" / \"x\" / \"-\" separators)."},"team":{"type":"string","description":"Team name, e.g. \"Morocco\". Use with optional `opponent` and `date`."},"opponent":{"type":"string","description":"Optional opponent name to disambiguate the fixture."},"date":{"type":"string","format":"date","description":"Optional fixture date as YYYY-MM-DD."},"event_urn":{"type":"string","description":"Canonical event URN, if you already have one (every fixture response echoes it). Plain-English inputs above make this optional."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/skills/market-watch":{"post":{"operationId":"worldcup-market-watch","tags":["skills"],"summary":"Market Watch","description":"Biggest movers plus informational market context, summarized. Informational research only, not betting or financial advice.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/resolve":{"post":{"operationId":"worldcup-resolve","tags":["match-context"],"summary":"worldcup resolve","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Resolve any provider id (api_football, sportradar, opta, entain, espn) or canonical machina URN to the entity it identifies, with all cross-provider ids attached.","required":["id"],"properties":{"id":{"type":"string","description":"Provider id or canonical URN, e.g. \"sr:competitor:4748\", \"1489417\", or \"urn:machina:sport:soccer:team:brazil:bra\"."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/get-schedule":{"post":{"operationId":"worldcup-get-schedule","tags":["match-context"],"summary":"worldcup get schedule","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Filter fixtures by plain-English team names and date range. Returns fixtures with their canonical `event_urn`, the discovery primitive for every fixture-scoped endpoint.","properties":{"team":{"type":"string","description":"Team name, e.g. \"Brazil\"."},"opponent":{"type":"string","description":"Optional opponent name to narrow to a single fixture."},"date_from":{"type":"string","format":"date","description":"Start of the date window (YYYY-MM-DD)."},"date_to":{"type":"string","format":"date","description":"End of the date window (YYYY-MM-DD)."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/get-event-context":{"post":{"operationId":"worldcup-get-event-context","tags":["match-context"],"summary":"worldcup get event context","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Identify the fixture in plain English, pass `event` free text, or `team` (+ optional `opponent` + `date`). No URNs or provider ids needed; unresolved inputs return an explicit warning, ambiguous ones return candidates. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it.","properties":{"event":{"type":"string","description":"Plain-English fixture, e.g. \"Brazil vs Morocco\" (also accepts \"v\" / \"x\" / \"-\" separators)."},"team":{"type":"string","description":"Team name, e.g. \"Morocco\". Use with optional `opponent` and `date`."},"opponent":{"type":"string","description":"Optional opponent name to disambiguate the fixture."},"date":{"type":"string","format":"date","description":"Optional fixture date as YYYY-MM-DD."},"event_urn":{"type":"string","description":"Canonical event URN, if you already have one (every fixture response echoes it). Plain-English inputs above make this optional."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/get-standings":{"post":{"operationId":"worldcup-get-standings","tags":["match-context"],"summary":"worldcup get standings","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/get-squads":{"post":{"operationId":"worldcup-get-squads","tags":["match-context"],"summary":"worldcup get squads","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/get-injuries":{"post":{"operationId":"worldcup-get-injuries","tags":["match-context"],"summary":"worldcup get injuries","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/get-player-performance-context":{"post":{"operationId":"worldcup-get-player-performance-context","tags":["match-context"],"summary":"worldcup get player performance context","description":"Resolve any provider id to a canonical entity, then pull fixtures, standings, squads, injuries, and enriched match context.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/search-markets":{"post":{"operationId":"worldcup-search-markets","tags":["markets"],"summary":"worldcup search markets","description":"Search Kalshi and Polymarket in one normalized shape, with live order-book depth, price history, and movers.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/get-market-state":{"post":{"operationId":"worldcup-get-market-state","tags":["markets"],"summary":"worldcup get market state","description":"Search Kalshi and Polymarket in one normalized shape, with live order-book depth, price history, and movers.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/market-movers":{"post":{"operationId":"worldcup-market-movers","tags":["markets"],"summary":"worldcup market movers","description":"Search Kalshi and Polymarket in one normalized shape, with live order-book depth, price history, and movers.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/compare-market-sources":{"post":{"operationId":"worldcup-compare-market-sources","tags":["markets"],"summary":"worldcup compare market sources","description":"Search Kalshi and Polymarket in one normalized shape, with live order-book depth, price history, and movers.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/generate-market-brief":{"post":{"operationId":"worldcup-generate-market-brief","tags":["intelligence"],"summary":"worldcup generate market brief","description":"Grounded briefs, price-move explanations, fan sentiment, and cross-venue market comparisons, with sources, confidence, and caveats. Informational, not betting advice.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/explain-market-move":{"post":{"operationId":"worldcup-explain-market-move","tags":["intelligence"],"summary":"worldcup explain market move","description":"Grounded briefs, price-move explanations, fan sentiment, and cross-venue market comparisons, with sources, confidence, and caveats. Informational, not betting advice.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/fan-sentiment-context":{"post":{"operationId":"worldcup-fan-sentiment-context","tags":["intelligence"],"summary":"worldcup fan sentiment context","description":"Grounded briefs, price-move explanations, fan sentiment, and cross-venue market comparisons, with sources, confidence, and caveats. Informational, not betting advice.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/find-market-edges":{"post":{"operationId":"worldcup-find-market-edges","tags":["intelligence"],"summary":"worldcup find market edges","description":"Grounded briefs, price-move explanations, fan sentiment, and cross-venue market comparisons, with sources, confidence, and caveats. Informational, not betting advice.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/get-match-forecast":{"post":{"operationId":"worldcup-get-match-forecast","tags":["forecast-signals"],"summary":"worldcup get match forecast","description":"Dixon-Coles model probabilities, the live model-vs-market gap, model outputs (de-vigged probabilities and expected value), and a published accuracy track record. Informational, not betting advice.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/get-signal":{"post":{"operationId":"worldcup-get-signal","tags":["forecast-signals"],"summary":"worldcup get signal","description":"Dixon-Coles model probabilities, the live model-vs-market gap, model outputs (de-vigged probabilities and expected value), and a published accuracy track record. Informational, not betting advice.","security":[{"bearerAuth":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","description":"Identify the fixture in plain English, pass `event` free text, or `team` (+ optional `opponent` + `date`). No URNs or provider ids needed; unresolved inputs return an explicit warning, ambiguous ones return candidates. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Informational research only, not betting or financial advice.","properties":{"event":{"type":"string","description":"Plain-English fixture, e.g. \"Brazil vs Morocco\" (also accepts \"v\" / \"x\" / \"-\" separators)."},"team":{"type":"string","description":"Team name, e.g. \"Morocco\". Use with optional `opponent` and `date`."},"opponent":{"type":"string","description":"Optional opponent name to disambiguate the fixture."},"date":{"type":"string","format":"date","description":"Optional fixture date as YYYY-MM-DD."},"event_urn":{"type":"string","description":"Canonical event URN, if you already have one (every fixture response echoes it). Plain-English inputs above make this optional."}}}}}},"responses":{"200":{"description":"Structured World Cup intelligence. The response echoes the resolved `event_urn` (and `resolved_fixture`) so follow-up calls can chain on it. Response schemas are partial during the developer preview."}}}},"/backtest-forecasts":{"post":{"operationId":"worldcup-backtest-forecasts","tags":["forecast-signals"],"summary":"worldcup backtest forecasts","description":"Dixon-Coles model probabilities, the live model-vs-market gap, model outputs (de-vigged probabilities and expected value), and a published accuracy track record. Informational, not betting advice.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Structured World Cup intelligence. Schemas are partial during the developer preview."}}}},"/health":{"get":{"operationId":"worldcup-health","tags":["health"],"summary":"Health / whoami","description":"Service health and key smoke-check. Free, does not consume credits.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Service is healthy; echoes the caller identity."}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key passed as a Bearer token: Authorization: Bearer $MACHINA_API_KEY. The MCP server takes the same key as an X-Api-Token header. x402 per-call payment coming soon."}}}}