{"openapi":"3.1.0","info":{"title":"WagerUp Public API","version":"1.0.0","description":"Read-only beta. Public product documents are available without a key. Market and trader snapshots require a scoped Bearer API key and enabled data access. Limits per serving instance: 30 requests/minute anonymously, 120/key, 180/IP and 600 globally. No billing quota or availability SLA is offered. Data licensing and client approval are separate from API authentication. Documentation: https://wagerup.com/developers."},"servers":[{"url":"https://wagerup.com/api/v1"}],"security":[],"paths":{"/":{"get":{"operationId":"getApiInfo","summary":"API version, links and data availability","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Info"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/status":{"get":{"operationId":"getApiStatus","summary":"API availability (not an upstream data health check)","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Info"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/products":{"get":{"operationId":"listProducts","summary":"List public WagerUp product documents","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Document"}},"meta":{"$ref":"#/components/schemas/CatalogMeta"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/search":{"get":{"operationId":"searchDocuments","summary":"Search WagerUp product documents (all query terms must match)","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":200}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["results","meta"],"properties":{"results":{"type":"array","items":{"type":"object","required":["id","title","url"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}}}},"meta":{"$ref":"#/components/schemas/CatalogMeta"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/documents/{id}":{"get":{"operationId":"getDocument","summary":"Fetch one public product document","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","enum":["wagerup","pilot","terminalup","trading-tools","developers"]}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Document"},"meta":{"$ref":"#/components/schemas/CatalogMeta"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/markets":{"get":{"operationId":"listMarkets","summary":"Tracked sports market snapshot","description":"Requires markets:read. Sorted by 24-hour volume, maximum 50 per response. Not an exhaustive exchange feed. Probabilities are 0 to 1; volume and liquidity are USDC. Unknown values are null. asOf is the WagerUp cache snapshot time, not an exchange quote timestamp. Pagination can shift between snapshots.","security":[{"apiKey":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000,"default":0}},{"name":"sport","in":"query","schema":{"type":"string","minLength":1,"maxLength":40},"description":"Case-insensitive exact label, for example Baseball or Soccer."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Market"}},"meta":{"$ref":"#/components/schemas/SnapshotMeta"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/traders":{"get":{"operationId":"listTraders","summary":"All-time sports trader leaderboard snapshot","description":"Requires traders:read. Up to 100 public wallets from the all-time sports leaderboard. P&L may be negative. Currency fields are USDC, unknown values are null. Pagination can shift between snapshots.","security":[{"apiKey":[]}],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":20}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":100,"default":0}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Trader"}},"meta":{"$ref":"#/components/schemas/SnapshotMeta"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","summary":"Download this OpenAPI 3.1 specification","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/mcp":{"post":{"operationId":"mcpRequest","summary":"Stateless Streamable HTTP MCP endpoint","description":"Use an MCP client. Accept must include application/json and text/event-stream. Supports initialize, tools/list and tools/call via the MCP SDK. Public search and fetch tools require no key. Scoped data tools are listed only when enabled and authorized. JSON-RPC notifications may return 202. GET and DELETE return 405.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","method"],"properties":{"jsonrpc":{"const":"2.0"},"id":{"type":["string","number"]},"method":{"type":"string"},"params":{"type":"object"}}}}}},"responses":{"200":{"description":"MCP JSON-RPC response","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Notification accepted"},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing scope or rejected origin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"405":{"description":"Method not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit reached; honor Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data access or a recent snapshot is unavailable; retry snapshot failures after 30 seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"wu_<64 lowercase hex characters>","description":"Approved API key. Send in Authorization, never in a URL. Permissions and expiry are configured per key."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}}}},"Info":{"type":"object","required":["name","version","status","dataAccess","links","limits"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"status":{"const":"beta"},"dataAccess":{"enum":["restricted","available"]},"links":{"type":"object","additionalProperties":{"type":"string","format":"uri"}},"limits":{"type":"object","properties":{"anonymousPerMinute":{"type":"integer"},"keyPerMinute":{"type":"integer"},"scope":{"type":"string"}}}}},"Document":{"type":"object","required":["id","title","url","summary","text"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"url":{"type":"string","format":"uri"},"summary":{"type":"string"},"text":{"type":"string"}},"additionalProperties":false},"CatalogMeta":{"type":"object","required":["version","source"],"properties":{"version":{"const":"1"},"source":{"const":"https://wagerup.com"}}},"SnapshotMeta":{"type":"object","required":["version","asOf","requestedAt","stale","total","nextOffset","source","coverage"],"properties":{"version":{"const":"1"},"asOf":{"type":"string","format":"date-time"},"requestedAt":{"type":"string","format":"date-time"},"stale":{"type":"boolean"},"total":{"type":"integer"},"nextOffset":{"type":["integer","null"]},"source":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}},"coverage":{"type":"string"},"period":{"const":"ALL"},"category":{"const":"sports"}}},"Market":{"type":"object","required":["id","question","sport","url","bidProbability","askProbability","midProbability","volume24hUsdc","volumeUsdc","liquidityUsdc","scheduledStart"],"additionalProperties":false,"properties":{"id":{"type":"string"},"question":{"type":"string"},"sport":{"type":"string"},"url":{"type":"string","format":"uri"},"bidProbability":{"type":["number","null"],"minimum":0,"maximum":1},"askProbability":{"type":["number","null"],"minimum":0,"maximum":1},"midProbability":{"type":["number","null"],"minimum":0,"maximum":1},"volume24hUsdc":{"type":["number","null"],"minimum":0},"volumeUsdc":{"type":["number","null"],"minimum":0},"liquidityUsdc":{"type":["number","null"],"minimum":0},"scheduledStart":{"type":["string","null"],"format":"date-time"}}},"Trader":{"type":"object","required":["address","rank","name","pnlUsdc","volumeUsdc","url"],"additionalProperties":false,"properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"rank":{"type":"number"},"name":{"type":"string"},"pnlUsdc":{"type":["number","null"]},"volumeUsdc":{"type":["number","null"],"minimum":0},"url":{"type":"string","format":"uri"}}}}}}