{"openapi":"3.1.0","info":{"title":"Backd API","version":"1","description":"Read-only, public, no key needed. Chances are 0 to 1. Profit is in US dollars; in the private beta every call is tracked at $10. Backd routes backed calls to Polymarket and never holds money.","contact":{"url":"https://backd.market/docs/api"}},"servers":[{"url":"https://backd.market"}],"tags":[{"name":"Markets"},{"name":"Records"},{"name":"Utilities"}],"paths":{"/api/v1/markets":{"get":{"operationId":"markets","summary":"List markets","description":"Open events, busiest first. Filter by category, league or a search word. Each event carries its top three markets; fetch the event for all of them.","tags":["Markets"],"parameters":[{"name":"category","in":"query","required":false,"description":"One of Football, Sport, Crypto, Politics, Economy, Tech, Culture. Leave out for trending.","schema":{"type":"string"},"example":"Football"},{"name":"league","in":"query","required":false,"description":"A league or coin key from the response’s `leagues` list, e.g. epl, ucl, nfl, bitcoin. Overrides category.","schema":{"type":"string"},"example":"epl"},{"name":"q","in":"query","required":false,"description":"Search the event title and market questions (case-insensitive, up to 80 characters).","schema":{"type":"string"},"example":"arsenal"},{"name":"limit","in":"query","required":false,"description":"How many events, 1 to 60. Default 24.","schema":{"type":"integer"},"example":"10"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"live":true,"count":2,"categories":["Sport","Football","Crypto","Politics","Economy","Tech","Culture"],"leagues":[{"group":"Football","label":"Premier League","league":"epl"},"…"],"events":[{"slug":"…","title":"…","category":"Football","markets":["…up to 3…"],"market_count":12,"url":"…"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/markets/{eventSlug}":{"get":{"operationId":"market","summary":"Get an event","description":"One event with every market, live prices in every odds format, and how Backd callers are split on each market.","tags":["Markets"],"parameters":[{"name":"eventSlug","in":"path","required":true,"description":"The event’s slug, as in a Backd or Polymarket URL.","schema":{"type":"string"},"example":"unl-esp-hrv-2026-09-29"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"live":true,"event":{"slug":"unl-esp-hrv-2026-09-29","title":"Spain vs. Croatia","category":"Football","closes_at":"2026-09-29T18:45:00Z","volume":2610000,"game":{"live":true,"score":"2-1","clock":"41","period":"1H","league":"UEFA Nations League","teams":[{"name":"Spain","abbreviation":"ESP","home":true},{"name":"Croatia","abbreviation":"HRV","home":false}]},"markets":[{"id":"4609859","question":"Will Spain win on 2026-09-29?","label":"Spain","kind":"moneyline","outcomes":[{"name":"Yes","chance":0.895,"odds":{"percent":"90%","decimal":"1.12","fractional":"1/9","american":"−852","price":"90¢"}},{"name":"No","chance":0.105,"odds":{"percent":"11%","decimal":"9.52","fractional":"17/2","american":"+752","price":"11¢"}}],"backd_split":[14,3],"closes_at":"2026-09-29T18:45:00Z","closed":false,"change_24h":0.31,"url":"https://backd.market/m/unl-esp-hrv-2026-09-29?o=4609859"}],"market_count":3,"url":"https://backd.market/match/unl-esp-hrv-2026-09-29"}}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/markets/{eventSlug}/history":{"get":{"operationId":"history","summary":"Price history","description":"The chance of a market’s first outcome over time, for charts.","tags":["Markets"],"parameters":[{"name":"eventSlug","in":"path","required":true,"description":"The event’s slug.","schema":{"type":"string"}},{"name":"market","in":"query","required":false,"description":"Which market in the event. Defaults to the first.","schema":{"type":"string"},"example":"4609859"},{"name":"range","in":"query","required":false,"description":"1d, 1w, 1m or max. Default 1w.","schema":{"type":"string"},"example":"1d"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"market_id":"4609859","question":"Will Spain win on 2026-09-29?","outcome":"Yes","range":"1d","points":[{"t":1790640000,"chance":0.82},{"t":1790640600,"chance":0.83},"…"]}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/live":{"get":{"operationId":"live","summary":"Live matches","description":"Every match in play right now, with the score, the clock and the chance of each result.","tags":["Markets"],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"count":12,"matches":[{"slug":"unl-esp-hrv-2026-09-29","title":"Spain vs. Croatia","league":"UEFA Nations League","score":"2-1","clock":"41","period":"1H","teams":[{"name":"Spain","abbreviation":"ESP","home":true},{"name":"Croatia","abbreviation":"HRV","home":false}],"result":[{"label":"Spain","chance":0.895,"market_id":"4609859"},{"label":"Draw","chance":0.085,"market_id":"4609860"},{"label":"Croatia","chance":0.033,"market_id":"4609861"}],"markets":80,"url":"https://backd.market/match/unl-esp-hrv-2026-09-29"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/calls":{"get":{"operationId":"calls","summary":"List calls","description":"Public calls across Backd, newest first. Filter to one market to see who called it, and the split.","tags":["Records"],"parameters":[{"name":"market","in":"query","required":false,"description":"A market id. Adds `backd_split` to the response.","schema":{"type":"string"},"example":"4609859"},{"name":"limit","in":"query","required":false,"description":"1 to 100. Default 25.","schema":{"type":"integer"},"example":"50"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"count":2,"backd_split":[14,3],"calls":[{"id":"5f1c…","user":{"handle":"edge","avatar":null},"market_id":"4609859","event":"unl-esp-hrv-2026-09-29","question":"Spain: Will Spain win on 2026-09-29?","outcome":"Yes","outcome_index":0,"chance_at_call":0.82,"thesis":"Croatia have nothing to play for.","copied_from":null,"is_fade":false,"status":"open","profit_on_10":null,"made_at":"2026-09-29T18:02:11Z","settled_at":null,"url":"https://backd.market/c/5f1c…"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/calls/{id}":{"get":{"operationId":"call","summary":"Get a call","description":"One public call, with any updates the caller added to their thesis.","tags":["Records"],"parameters":[{"name":"id","in":"path","required":true,"description":"The call id, as in a backd.market/c/… link.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"call":{"id":"5f1c…","user":{"handle":"edge"},"question":"…","outcome":"Yes","chance_at_call":0.82,"status":"won","profit_on_10":2.2,"thesis":"Croatia have nothing to play for.","thesis_updates":[{"body":"2-0 up at half time. Holding.","at":"2026-09-29T19:35:00Z"}],"url":"…"}}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/users/{handle}":{"get":{"operationId":"user","summary":"Get a record","description":"Someone’s public record: right %, profit on $10 calls, XP, streak and follows.","tags":["Records"],"parameters":[{"name":"handle","in":"path","required":true,"description":"Their handle, with or without the @.","schema":{"type":"string"},"example":"edge"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"user":{"handle":"edge","display_name":"Edge","avatar":null,"calls":412,"settled":380,"won":243,"right_pct":64,"profit_on_10":1284.5,"profit_7d":96.2,"xp":7120,"streak":5,"followers":1840,"following":186,"copies":1400,"bio":"Premier League first.","interests":["Football","Football: Premier League"],"joined_at":"2026-03-02T10:00:00Z","url":"https://backd.market/u/edge"}}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/users/{handle}/calls":{"get":{"operationId":"user-calls","summary":"Someone’s calls","description":"A person’s public calls, newest first, optionally by status.","tags":["Records"],"parameters":[{"name":"handle","in":"path","required":true,"description":"Their handle.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"open, won, lost or void. Leave out for all.","schema":{"type":"string"},"example":"won"},{"name":"limit","in":"query","required":false,"description":"1 to 100. Default 25.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"handle":"edge","count":3,"calls":["…same shape as List calls…"]}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/leaderboard":{"get":{"operationId":"leaderboard","summary":"Leaderboard","description":"Public records ranked on settled calls. Nobody can buy their way up.","tags":["Records"],"parameters":[{"name":"sort","in":"query","required":false,"description":"profit (default), right (needs 5+ settled), xp or week (profit in the last 7 days).","schema":{"type":"string"},"example":"right"},{"name":"limit","in":"query","required":false,"description":"1 to 100. Default 25.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"sort":"right","count":3,"rows":[{"rank":1,"handle":"sharpside","right_pct":71,"settled":405,"profit_on_10":4128,"…":"…"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/combos":{"get":{"operationId":"combos","summary":"List combos","description":"Public combos (2 to 6 picks that all have to happen), newest first.","tags":["Records"],"parameters":[{"name":"status","in":"query","required":false,"description":"open (default), won, lost or void.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"1 to 50. Default 20.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"status":"open","count":1,"combos":[{"id":"9a2b…","user":{"handle":"oddsgoblin"},"chance":0.267,"wins_on_10":37.42,"status":"open","xp_awarded":0,"legs":[{"market_id":"…","question":"Arsenal to win","outcome":"Yes","outcome_index":0,"chance_at_call":0.58,"status":"open"},"…"],"made_at":"2026-09-29T17:10:00Z","url":"https://backd.market/combo/9a2b…"}]}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}},"/api/v1/odds":{"get":{"operationId":"odds","summary":"Convert odds","description":"One chance in every odds format, with what $10 wins and the XP a right call would earn.","tags":["Utilities"],"parameters":[{"name":"chance","in":"query","required":true,"description":"A chance between 0 and 1.","schema":{"type":"number"},"example":"0.58"}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"ok":true,"chance":0.58,"wins_on_10":17.24,"profit_on_10":7.24,"xp_if_right":17,"odds":{"percent":"58%","decimal":"1.72","fractional":"8/11","american":"−138","price":"58¢"}}}}},"400":{"description":"Bad request","content":{"application/json":{"example":{"ok":false,"error":{"code":"bad_request","message":"…"}}}}},"404":{"description":"Not found"},"429":{"description":"Rate limited (120 requests a minute per IP)"}}}}}}