Skip to content

Browse World Cup Games

GET /browse/topics/world-cup/games

Server: https://api.openfish.me (port 3002)

Auth: None

Tags: Browse, Market Data

The endpoint returns World Cup markets grouped by game and section. It is intended for pages and agents that need a tournament view rather than a flat market list.


NameInTypeDescription
sectionquerystringOptional comma-separated section filter. Omit it, use all, or pass values such as winner, total, or spread.
eventSlugquerystringOptional game/event slug filter.
localequerystringOptional display locale. Supports en, zh, ja, ko, fr, es and BCP-47 aliases such as zh-CN or ja-JP. If omitted, Accept-Language may be used; otherwise the API falls back to English.
viewquerystringOptional response projection. Use list for a lightweight match-list payload that preserves full rollup counts but includes only match-result (winner) markets and winner price stream tokens. Omit it for the default full topic payload.

200 — Topic document with game, market, outcome, and stream metadata.

{
"topic": {
"slug": "world-cup-games",
"title": "世界杯",
"canonicalTitle": "World Cup",
"source": "openfish:mv_world_cup_games_topic",
"updatedAt": "2026-06-15T00:00:00Z"
},
"localization": {
"requestedLocale": "zh",
"locale": "zh",
"fallbackLocale": "en",
"source": "query",
"translated": true,
"supportedLocales": ["en", "zh", "ja", "ko", "fr", "es"],
"contentSources": {
"marketTranslations": "clob_markets.translations",
"fallbackTemplates": "world_cup_deterministic_v1"
},
"fallbackCounts": {
"topic": 0,
"events": 0,
"sections": 0,
"markets": 0,
"outcomes": 0
}
},
"summary": {
"eventCount": 64,
"marketCount": 320,
"activeMarketCount": 320,
"liveMarketCount": 320,
"volume": "0",
"volume24h": "0"
},
"view": "list",
"listMode": {
"includedSections": ["winner"],
"preservesFullRollups": true,
"lazyEventMarkets": true,
"eventMarketsEndpoint": "/browse/topics/world-cup/games?eventSlug=<eventSlug>"
},
"dates": [
{
"date": "2026-06-11",
"eventCount": 1,
"activeMarketCount": 5,
"liveMarketCount": 5
}
],
"events": [
{
"eventId": "fifwc-team-a-team-b-2026-06-11",
"eventSlug": "fifwc-team-a-team-b-2026-06-11",
"title": "西班牙 对 佛得角",
"canonicalTitle": "Spain vs. Cabo Verde",
"homeTeam": "Spain",
"awayTeam": "Cabo Verde",
"homeTeamDisplay": "西班牙",
"awayTeamDisplay": "佛得角",
"startTime": "2026-06-11T20:00:00Z",
"eventDate": "2026-06-11",
"status": "upcoming",
"marketCount": 5,
"sections": [
{
"key": "winner",
"title": "胜平负",
"canonicalTitle": "Winner",
"markets": [
{
"conditionId": "0x...",
"questionText": "2026-06-11 西班牙 会获胜吗?",
"canonicalQuestionText": "Will Spain win on 2026-06-11?",
"status": "LIVE",
"openfishLive": true,
"outcomes": [
{
"tokenId": "71321045...",
"label": "",
"canonicalLabel": "Yes",
"price": "0.52",
"bestBid": "0.51",
"bestAsk": "0.53",
"pct": "52.0"
}
]
}
]
}
]
}
],
"priceStream": {
"type": "websocket",
"publicEndpoint": "wss://api.openfish.me/ws/market",
"assetIdField": "events[].sections[].markets[].outcomes[].tokenId"
}
}

The topic response is cached for 300 seconds per filter. It is a discovery and initial-render response, not a real-time price feed.

Locale and view are part of the cache key. ?locale=en, ?locale=zh, and ?view=list are cached independently.

For current prices:

  • Use tokenId with GET /price, POST /prices, GET /book, or POST /books.
  • Use priceStream.publicEndpoint and subscribe to token IDs for near-real-time updates.
  • Use conditionId with /prices-history?market={condition_id} for persisted snapshot history.

Terminal window
curl "https://api.openfish.me/browse/topics/world-cup/games"
curl "https://api.openfish.me/browse/topics/world-cup/games?locale=zh"
curl "https://api.openfish.me/browse/topics/world-cup/games?view=list&locale=zh"
curl "https://api.openfish.me/browse/topics/world-cup/games?section=winner"
curl "https://api.openfish.me/browse/topics/world-cup/games?eventSlug=fifwc-team-a-team-b-2026-06-11"

Use the default full payload for agents or integrations that need every market. Use view=list for match list pages: it keeps summary, dates, and each event’s marketCount/liveMarketCount based on the full topic, but returns only the three match-result markets per game. Fetch the full markets for one expanded game with eventSlug.

Localized display text is best-effort. World Cup localization uses three layers: clob_markets.translations when present, deterministic World Cup templates and team dictionaries, then canonical English fallback. Machine fields such as conditionId, tokenId, eventSlug, section.key, status, prices, and WebSocket payloads remain language-neutral.

Event status is normalized for schedule filters. Source final/live statuses are preserved; otherwise Openfish derives upcoming, live, or ended from startTime using a three-hour live window. If the normalized status differs from the raw source value, the original value is returned as sourceStatus.