{"openapi":"3.1.0","info":{"title":"100percenta.io API","version":"1.0.0","description":"100percenta's own forecasts, picks with their proofs, ratings, seasons, slips and what the brain has learned, for your programs.\n\nSend your key in the `Authorization` header as `Bearer pct_…` (or in `X-Api-Key`). Call from your server: a key in a web page is a key anyone can copy.\n\nEach plan has a rate a minute and a quota a day (UTC), across all your keys; every response says what is left in `X-RateLimit-Remaining` and `X-Quota-Remaining`. Over a limit, the answer is 429 with `Retry-After`.\n\nMatches still to play: their forecasts, picks and slips are for paid plans. On the free plan they are listed, locked, and open at kick-off, like the public record.\n\nProbabilities, not promises. The data providers' raw data (line-ups, statistics, events, bookmakers' prices) is not served or resold here."},"servers":[{"url":"https://api.100percenta.com/api/public/v1"}],"security":[{"bearer":[]},{"apiKey":[]}],"tags":[{"name":"Account"},{"name":"Matches"},{"name":"Forecasts"},{"name":"Proofs"},{"name":"Record"},{"name":"Model"},{"name":"Notary"},{"name":"Forecasting league"},{"name":"Brain"}],"paths":{"/me":{"get":{"operationId":"me","tags":["Account"],"summary":"Your plan, limits and use today","description":"Which plan the key is on, until when it is paid, its limits, and requests left today.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Me"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"}}}},"/competitions":{"get":{"operationId":"competitions","tags":["Matches"],"summary":"Competitions followed","description":"Every competition the site forecasts.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Competitions"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"}}}},"/fixtures":{"get":{"operationId":"fixtures","tags":["Matches"],"summary":"Matches in a window","description":"Matches between two days (yesterday to three days ahead by default; 14 days at most), with the score once played.","parameters":[{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD (UTC), included.","schema":{"type":"string","format":"date"}},{"name":"competition","in":"query","required":false,"description":"A competition's id, from /competitions.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Fixtures"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/forecasts":{"get":{"operationId":"forecasts","tags":["Forecasts"],"summary":"Forecasts in a window","description":"Every priced match between two days (14 days at most), every market. Matches still to play are locked on the free plan.","parameters":[{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD (UTC), included.","schema":{"type":"string","format":"date"}},{"name":"competition","in":"query","required":false,"description":"A competition's id, from /competitions.","schema":{"type":"string","format":"uuid"}},{"name":"markets","in":"query","required":false,"description":"Only these markets, comma-separated (e.g. 1x2,over_under,btts).","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Forecasts"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/forecasts/{fixture}":{"get":{"operationId":"forecast","tags":["Forecasts"],"summary":"One match's forecast","description":"Every market, the likeliest scores, and what each part of the model said about the result.","parameters":[{"name":"fixture","in":"path","required":true,"description":"The match's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ForecastOne"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"404":{"$ref":"#/components/responses/E404"}}}},"/forecasts/{fixture}/proof":{"get":{"operationId":"forecastProof","tags":["Proofs"],"summary":"Proof of a forecast","description":"The latest committed forecast of a match: its canonical text, its leaf, the path to its batch's Merkle root, the day's roots and digest, and the digest's Bitcoin stamp. Before kick-off, paid plans only.","parameters":[{"name":"fixture","in":"path","required":true,"description":"The match's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ForecastProof"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"403":{"$ref":"#/components/responses/E403"},"404":{"$ref":"#/components/responses/E404"}}}},"/fixtures/{fixture}/reported":{"get":{"operationId":"reported","tags":["Matches"],"summary":"Facts from our reporters","description":"What two independent reporters at the ground agreed on -- score, half-time, formations, line-ups, goals, weather, pitch -- or the owner decided. 100percenta's own data.","parameters":[{"name":"fixture","in":"path","required":true,"description":"The match's id.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reported"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"}}}},"/picks":{"get":{"operationId":"picks","tags":["Record"],"summary":"Published picks","description":"Picks by kick-off between two days (a week back to three days ahead by default; 31 days at most), from the hash-chained ledger. Before kick-off: content on paid plans, the hash on the free plan.","parameters":[{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD (UTC), included.","schema":{"type":"string","format":"date"}},{"name":"tier","in":"query","required":false,"description":"banker, value or slip.","schema":{"type":"string","enum":["banker","value","slip"]}},{"name":"page","in":"query","required":false,"description":"Page, from 1.","schema":{"type":"integer"}},{"name":"per_page","in":"query","required":false,"description":"Up to 200.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Picks"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/picks/{sequence}":{"get":{"operationId":"pick","tags":["Record"],"summary":"One pick","description":"A pick by its number in the ledger; once revealed, with its salt and canonical text, so sha256(canonical) = hash.","parameters":[{"name":"sequence","in":"path","required":true,"description":"The pick's number.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PickOne"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"404":{"$ref":"#/components/responses/E404"}}}},"/picks/{sequence}/proof":{"get":{"operationId":"pickProof","tags":["Proofs"],"summary":"Proof of a pick","description":"The chain of picks from this one to the day's anchor, each with its canonical text once revealed, and the anchor's Bitcoin stamp.","parameters":[{"name":"sequence","in":"path","required":true,"description":"The pick's number.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PickProof"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"404":{"$ref":"#/components/responses/E404"}}}},"/proofs":{"get":{"operationId":"proofDays","tags":["Proofs"],"summary":"Days' digests","description":"Each day's digest of a kind of commitment (forecasts by default), newest first, with its Bitcoin stamp's state. No key needed.","parameters":[{"name":"kind","in":"query","required":false,"description":"forecasts (and other kinds as they come).","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"How many days, up to 366.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Digests"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"422":{"$ref":"#/components/responses/E422"},"429":{"$ref":"#/components/responses/E429"}},"security":[]}},"/proofs/{kind}/{day}":{"get":{"operationId":"proofDay","tags":["Proofs"],"summary":"A day's digest and its items","description":"The day's items in order (for forecasts, the batch roots), so anyone can rebuild the digest. No key needed.","parameters":[{"name":"kind","in":"path","required":true,"description":"forecasts, …","schema":{"type":"string"}},{"name":"day","in":"path","required":true,"description":"YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DigestDay"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"$ref":"#/components/responses/E404"},"429":{"$ref":"#/components/responses/E429"}},"security":[]}},"/proofs/{kind}/{day}.ots":{"get":{"operationId":"proofDayOts","tags":["Proofs"],"summary":"A day's OpenTimestamps file","description":"The .ots proof of the day's digest: check it with any OpenTimestamps client (ots verify). Not JSON. No key needed.","parameters":[{"name":"kind","in":"path","required":true,"description":"forecasts, …","schema":{"type":"string"}},{"name":"day","in":"path","required":true,"description":"YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Ots"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"404":{"$ref":"#/components/responses/E404"},"429":{"$ref":"#/components/responses/E429"}},"security":[]}},"/slips":{"get":{"operationId":"slips","tags":["Record"],"summary":"Slips","description":"The slips of the last few days (3 by default, 30 at most): odds, chance, payout; legs and booking codes before kick-off on paid plans.","parameters":[{"name":"days","in":"query","required":false,"description":"Days back, 1 to 30.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Slips"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/record":{"get":{"operationId":"record","tags":["Record"],"summary":"Track record","description":"Hit rate, return and calibration by tier and market, counted from the ledger; the daily anchors and their Bitcoin proofs.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Record"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"}}}},"/bookmakers/report":{"get":{"operationId":"bookmakerReport","tags":["Record"],"summary":"The bookmakers' report card","description":"Each bookmaker we read, on every played match it priced: margin, log loss of its chances with the margin out, how far behind the best book, how often it had the best price, and by price band how often its selections won and what a flat stake returned. League by league. Also how the site reads the market: the margin method and whether books are weighted, as the nightly test chose.","parameters":[{"name":"window","in":"query","required":false,"description":"Days: 90 or 365.","schema":{"type":"string","enum":["90","365"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/BookmakerReport"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/ratings":{"get":{"operationId":"ratings","tags":["Model"],"summary":"Team ratings in a competition","description":"Elo for every side; the goal model's goals for and against an average side on paid plans.","parameters":[{"name":"competition","in":"query","required":true,"description":"A competition's id, from /competitions.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Ratings"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/seasons":{"get":{"operationId":"seasons","tags":["Model"],"summary":"Seasons simulated","description":"Every league's rest of the season played 10,000 times: each side's chances of each place, the title, the top places and relegation.","parameters":[{"name":"competition","in":"query","required":false,"description":"A competition's id, from /competitions.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Seasons"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/notary/tipster":{"put":{"operationId":"notaryProfile","tags":["Notary"],"summary":"Your tipster handle","description":"Choose or change your handle, name, bio and link. The handle is written into every pick's proof, so it is fixed once a pick is locked.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TipsterOne"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"403":{"$ref":"#/components/responses/E403"},"409":{"$ref":"#/components/responses/E409"},"422":{"$ref":"#/components/responses/E422"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TipsterInput"}}}}}},"/notary/picks":{"post":{"operationId":"notaryLock","tags":["Notary"],"summary":"Lock a pick","description":"Locks a pick on one of our matches, by our clock, at least two minutes before kick-off and up to 14 days ahead, into the notary's hash chain. Your price makes the return count; your chance, if given, is scored. Sealed picks stay hidden until kick-off. Each plan locks a number a day.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/NotaryPickOne"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"403":{"$ref":"#/components/responses/E403"},"404":{"$ref":"#/components/responses/E404"},"409":{"$ref":"#/components/responses/E409"},"422":{"$ref":"#/components/responses/E422"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotaryPickInput"}}}}},"get":{"operationId":"notaryMine","tags":["Notary"],"summary":"Your locked picks","description":"Your notarised picks by kick-off between two days (a week back to 14 days ahead by default), with grades and closing prices.","parameters":[{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD (UTC), included.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/NotaryPicks"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"403":{"$ref":"#/components/responses/E403"},"422":{"$ref":"#/components/responses/E422"}}}},"/notary/tipsters/{handle}":{"get":{"operationId":"notaryTipster","tags":["Notary"],"summary":"A tipster's record","description":"A tipster's verified record -- won, lost, return at their prices, closing-line value, whether it is skill or luck -- and their latest picks (sealed ones hidden until kick-off).","parameters":[{"name":"handle","in":"path","required":true,"description":"The tipster's handle.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TipsterRecord"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"404":{"$ref":"#/components/responses/E404"}}}},"/league/forecasts":{"post":{"operationId":"leagueSubmit","tags":["Forecasting league"],"summary":"Give your chances for a match","description":"Home, draw and away (adding up to 100, as percentages or chances), and over 2.5 and both teams to score if you like, up to two minutes before kick-off. Give them again to change them; the last is scored. Nobody sees them, or the crowd's, before kick-off.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeagueForecastOne"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"404":{"$ref":"#/components/responses/E404"},"409":{"$ref":"#/components/responses/E409"},"422":{"$ref":"#/components/responses/E422"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeagueInput"}}}}},"get":{"operationId":"leagueMine","tags":["Forecasting league"],"summary":"Your chances and scores","description":"Your forecasts by kick-off between two days, each with its log loss once played, and your record: log loss, and your edge on the closing market and on the site.","parameters":[{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD (UTC), included.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeagueMine"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/league/board":{"get":{"operationId":"leagueBoard","tags":["Forecasting league"],"summary":"The league's board","description":"Forecasters ranked by their edge on the closing market less twice its standard error, once thirty matches are scored; and the crowd against the site and the market.","parameters":[{"name":"window","in":"query","required":false,"description":"Days: 30, 90, 365 or all.","schema":{"type":"string","enum":["30","90","365","all"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeagueBoard"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/league/crowd":{"get":{"operationId":"leagueCrowd","tags":["Forecasting league"],"summary":"The crowd's chances","description":"For matches that have kicked off, between two days: the league's forecasters pooled by their records and pushed out. Never before kick-off.","parameters":[{"name":"from","in":"query","required":false,"description":"First day, YYYY-MM-DD (UTC).","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Last day, YYYY-MM-DD (UTC), included.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeagueCrowd"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/brain/lessons":{"get":{"operationId":"brainLessons","tags":["Brain"],"summary":"What the brain has learned","description":"League by league and market by market: the model's log loss against what happened and against the market's, and the weight its own chances get in the blend.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Lessons"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"}}}},"/model/challengers":{"get":{"operationId":"modelChallengers","tags":["Brain"],"summary":"Challengers against the champion","description":"Every way of forecasting being tested beside the published one, on the same matches from the same moment: market by market, both log losses, the challenger's improvement and its p-value, and a verdict that survives the Benjamini-Hochberg correction. Whether each is being tested, live in the published forecasts, or set aside.","parameters":[{"name":"window","in":"query","required":false,"description":"Days: 90, 365 or all.","schema":{"type":"string","enum":["90","365","all"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Challengers"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/model/lead-times":{"get":{"operationId":"modelLeadTimes","tags":["Brain"],"summary":"Skill by lead time","description":"Log loss of the published forecasts as they stood a week, three days, a day, 12, 6, 3 and 1 hours before kick-off: the model's own, the final blend, and the market's on the matches it priced. On the site's matches or the brain's world.","parameters":[{"name":"scope","in":"query","required":false,"description":"main (the site's matches) or trial (the brain's world).","schema":{"type":"string","enum":["main","trial"]}},{"name":"window","in":"query","required":false,"description":"Days: 90, 365 or all.","schema":{"type":"string","enum":["90","365","all"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LeadTimes"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/model/drift":{"get":{"operationId":"modelDrift","tags":["Brain"],"summary":"Drift checks","description":"Last night's checks of the last two weeks against the three months before: skill against the market, calibration in the large, and goals a match, each with its z and status.","parameters":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Drift"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"}}}},"/model/changes":{"get":{"operationId":"modelChanges","tags":["Brain"],"summary":"The model change register","description":"Every change to how the published forecasts are made, newest first: what it was, what it became, why, the numbers behind it, and its hash chained to the one before; each day's hashes are stamped into Bitcoin with the day's digest (kind \"models\").","parameters":[{"name":"before","in":"query","required":false,"description":"Entries before this sequence number.","schema":{"type":"integer"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/ModelChanges"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/ranking/world":{"get":{"operationId":"rankingWorld","tags":["Model"],"summary":"The world ranking","description":"Every side the brain reads on one scale, from ratings that know how sure they are: rating, margin (twice its deviation), matches; and each busy league's home advantage month by month over two years. Made each night.","parameters":[{"name":"search","in":"query","required":false,"description":"Part of a side's, country's or league's name.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WorldRanking"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}},"/brain/verdicts":{"get":{"operationId":"brainVerdicts","tags":["Brain"],"summary":"The always-on brain against the bookmaker","description":"Its scores over a window: by market, reliability, over time, country by country and league by league, with a verdict only where the difference is clear.","parameters":[{"name":"window","in":"query","required":false,"description":"Days: 7, 30, 90, 365 or all.","schema":{"type":"string","enum":["7","30","90","365","all"]}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Verdicts"},"meta":{"$ref":"#/components/schemas/Meta"}}}}}},"401":{"$ref":"#/components/responses/E401"},"429":{"$ref":"#/components/responses/E429"},"422":{"$ref":"#/components/responses/E422"}}}}},"webhooks":{"pick.published":{"post":{"summary":"A pick was written to the ledger: its content (paid plans only have webhooks).","description":"Headers: X-100p-Event, X-100p-Event-Id (the same for every webhook that gets this event), X-100p-Delivery, X-100p-Signature. Answer 2xx within 5 seconds; anything else is tried again after 1, 5 and 30 minutes, 2, 6, 12 and 24 hours.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"200":{"description":"Taken."}}}},"pick.graded":{"post":{"summary":"A pick was graded: won, lost or void, with the score.","description":"Headers: X-100p-Event, X-100p-Event-Id (the same for every webhook that gets this event), X-100p-Delivery, X-100p-Signature. Answer 2xx within 5 seconds; anything else is tried again after 1, 5 and 30 minutes, 2, 6, 12 and 24 hours.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"200":{"description":"Taken."}}}},"slip.published":{"post":{"summary":"A slip was made: its odds, chance and the numbers of its picks.","description":"Headers: X-100p-Event, X-100p-Event-Id (the same for every webhook that gets this event), X-100p-Delivery, X-100p-Signature. Answer 2xx within 5 seconds; anything else is tried again after 1, 5 and 30 minutes, 2, 6, 12 and 24 hours.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"200":{"description":"Taken."}}}},"forecasts.committed":{"post":{"summary":"A batch of forecasts was committed: its root and the matches in it. Read them with /forecasts.","description":"Headers: X-100p-Event, X-100p-Event-Id (the same for every webhook that gets this event), X-100p-Delivery, X-100p-Signature. Answer 2xx within 5 seconds; anything else is tried again after 1, 5 and 30 minutes, 2, 6, 12 and 24 hours.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"200":{"description":"Taken."}}}},"ping":{"post":{"summary":"A test, sent when you ask for one.","description":"Headers: X-100p-Event, X-100p-Event-Id (the same for every webhook that gets this event), X-100p-Delivery, X-100p-Signature. Answer 2xx within 5 seconds; anything else is tried again after 1, 5 and 30 minutes, 2, 6, 12 and 24 hours.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"200":{"description":"Taken."}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Your key: Authorization: Bearer pct_…"},"apiKey":{"type":"apiKey","in":"header","name":"X-Api-Key"}},"responses":{"E401":{"description":"No key, or a key that does not work (missing_key, invalid_key).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"E403":{"description":"Your plan does not include this (plan_required).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"E404":{"description":"Not found (not_found).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"E409":{"description":"Too late or already done (e.g. kicked_off).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"E422":{"description":"The request is not valid (validation_failed); `details` says which field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"E429":{"description":"Over your rate a minute (rate_limited) or your quota a day (quota_exceeded); see Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"TipsterInput":{"type":"object","properties":{"handle":{"type":"string","pattern":"^[a-z0-9_]{3,24}$"},"name":{"type":"string"},"bio":{"oneOf":[{"type":"string"},{"type":"null"}]},"link":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"Tipster":{"type":"object","properties":{"handle":{"type":"string"},"name":{"type":"string"},"bio":{"oneOf":[{"type":"string"},{"type":"null"}]},"link":{"oneOf":[{"type":"string"},{"type":"null"}]},"since":{"type":"string","format":"date-time"}}},"TipsterOne":{"type":"object","properties":{"tipster":{"$ref":"#/components/schemas/Tipster"}}},"NotaryPickInput":{"type":"object","properties":{"fixture_id":{"type":"string","format":"uuid"},"market":{"type":"string"},"selection":{"type":"string"},"line":{"type":"string"},"price":{"type":"number","minimum":1.01,"maximum":1000},"probability":{"type":"number","minimum":0.01,"maximum":0.99},"stake":{"type":"integer","minimum":1,"maximum":10},"sealed":{"type":"boolean"}},"required":["fixture_id","market","selection"]},"NotaryPick":{"type":"object","properties":{"sequence":{"type":"integer"},"tipster":{"type":"string"},"hash":{"type":"string"},"previous_hash":{"type":"string"},"locked_at":{"type":"string","format":"date-time"},"kickoff_at":{"type":"string","format":"date-time"},"sealed":{"type":"boolean"},"revealed":{"type":"boolean"},"source":{"type":"string"},"fixture_id":{"type":"string"},"competition":{"type":"string"},"home_team":{"type":"string"},"away_team":{"type":"string"},"market":{"type":"string"},"selection":{"type":"string"},"line":{"type":"string"},"label":{"type":"string"},"price":{"oneOf":[{"type":"string"},{"type":"null"}]},"probability":{"oneOf":[{"type":"string"},{"type":"null"}]},"stake":{"type":"integer"},"closing":{"oneOf":[{"type":"object","properties":{"price":{"oneOf":[{"type":"string"},{"type":"null"}]},"chance":{"oneOf":[{"type":"string"},{"type":"null"}]},"clv":{"oneOf":[{"type":"number"},{"type":"null"}]}}},{"type":"null"}]},"grade":{"oneOf":[{"type":"object","properties":{"outcome":{"type":"string"},"home_goals":{"oneOf":[{"type":"integer"},{"type":"null"}]},"away_goals":{"oneOf":[{"type":"integer"},{"type":"null"}]}}},{"type":"null"}]},"canonical":{"type":"string","description":"sha256 of it is the hash."}},"required":["sequence","hash","locked_at","kickoff_at","sealed"]},"NotaryPickOne":{"type":"object","properties":{"pick":{"$ref":"#/components/schemas/NotaryPick"}}},"NotaryPicks":{"type":"object","properties":{"tipster":{"oneOf":[{"$ref":"#/components/schemas/Tipster"},{"type":"null"}]},"picks":{"type":"array","items":{"$ref":"#/components/schemas/NotaryPick"}}}},"TipsterRecord":{"type":"object","properties":{"tipster":{"$ref":"#/components/schemas/Tipster"},"record":{"type":"object","description":"picks, open, settled, won, lost, void, hit_rate, roi_staked, skill (bets, units, roi, clv, luck, verdict, needed), own_chances, markets."},"picks":{"type":"array","items":{"$ref":"#/components/schemas/NotaryPick"}}}},"LeagueInput":{"type":"object","properties":{"fixture_id":{"type":"string","format":"uuid"},"home":{"type":"number"},"draw":{"type":"number"},"away":{"type":"number"},"over25":{"oneOf":[{"type":"number"},{"type":"null"}]},"btts":{"oneOf":[{"type":"number"},{"type":"null"}]}},"required":["fixture_id","home","draw","away"]},"LeagueForecast":{"type":"object","properties":{"fixture_id":{"type":"string"},"home_p":{"type":"number"},"draw_p":{"type":"number"},"away_p":{"type":"number"},"over25_p":{"oneOf":[{"type":"number"},{"type":"null"}]},"btts_p":{"oneOf":[{"type":"number"},{"type":"null"}]},"submitted_at":{"type":"string","format":"date-time"},"changes":{"type":"integer"}}},"LeagueForecastOne":{"type":"object","properties":{"forecast":{"$ref":"#/components/schemas/LeagueForecast"}}},"LeagueMine":{"type":"object","properties":{"record":{"oneOf":[{"type":"object","description":"n, log_loss, brier, vs_market, vs_site, se, market_matches."},{"type":"null"}]},"forecasts":{"type":"array","items":{"$ref":"#/components/schemas/LeagueForecast"}}}},"LeagueBoard":{"type":"object","properties":{"ranked":{"type":"array","items":{"type":"object"}},"newer":{"type":"array","items":{"type":"object"}},"crowd":{"type":"object","properties":{"matches":{"type":"integer"},"log_loss":{"oneOf":[{"type":"number"},{"type":"null"}]},"site_log_loss":{"oneOf":[{"type":"number"},{"type":"null"}]},"market_log_loss":{"oneOf":[{"type":"number"},{"type":"null"}]}}},"window":{"type":"string"}}},"LeagueCrowd":{"type":"object","properties":{"crowd":{"type":"array","items":{"type":"object","properties":{"fixture_id":{"type":"string"},"kickoff_at":{"type":"string","format":"date-time"},"forecasters":{"type":"integer"},"home":{"type":"number"},"draw":{"type":"number"},"away":{"type":"number"},"over25":{"oneOf":[{"type":"number"},{"type":"null"}]},"btts":{"oneOf":[{"type":"number"},{"type":"null"}]},"extremize":{"type":"number"}}}}}},"Reported":{"type":"object","properties":{"fixture_id":{"type":"string"},"facts":{"type":"object","description":"score, half_time, formations, lineups, goals, weather, pitch: each { value, reports, decided_by, confirmed_at }."}}},"BookmakerReport":{"type":"object","properties":{"card":{"oneOf":[{"type":"object","description":"window, method, markets (1x2, ou25, btts: books with margin, log_loss, brier, behind_best, best_share, bands, competitions), brain, computed_at."},{"type":"null"}]},"market":{"type":"object","properties":{"method":{"type":"string"},"weighted":{"type":"boolean"},"test":{"oneOf":[{"type":"object"},{"type":"null"}]}}}}},"WorldRanking":{"type":"object","properties":{"ranking":{"oneOf":[{"type":"object","properties":{"scope":{"type":"string"},"teams":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer"},"team":{"type":"string"},"name":{"type":"string"},"country":{"oneOf":[{"type":"string"},{"type":"null"}]},"league":{"oneOf":[{"type":"string"},{"type":"null"}]},"rating":{"type":"number"},"margin":{"type":"number"},"played":{"type":"integer"}}}},"home":{"type":"array","items":{"type":"object","properties":{"league":{"type":"string"},"name":{"type":"string"},"matches":{"type":"integer"},"now":{"type":"number"},"months":{"type":"object","description":"Y-m => home advantage in rating points at the month's end."}}}},"average_home":{"type":"number"},"made_at":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"Challengers":{"type":"object","properties":{"min_matches":{"type":"integer"},"challengers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"about":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["testing","live","retired"]},"can_go_live":{"type":"boolean"},"can_promote":{"type":"boolean"},"rows":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string"},"market":{"type":"string"},"matches":{"type":"integer"},"champion_log_loss":{"type":"number"},"challenger_log_loss":{"type":"number"},"improvement":{"oneOf":[{"type":"number"},{"type":"null"}]},"se":{"oneOf":[{"type":"number"},{"type":"null"}]},"p_value":{"oneOf":[{"type":"number"},{"type":"null"}]},"verdict":{"type":"string","enum":["better","worse","too_close","too_few"]}}}}}}}}},"LeadTimes":{"type":"object","properties":{"scope":{"type":"string"},"buckets":{"type":"array","items":{"type":"integer"}},"markets":{"type":"object","description":"market => [{ bucket (hours), matches, model, final, priced, market, final_on_priced }], longest lead first."}}},"Drift":{"type":"object","properties":{"main":{"oneOf":[{"type":"object","description":"status (ok, watch, alarm, quiet), recent, baseline, checks [{ key, label, recent, reference, z, status }], checked_at."},{"type":"null"}]},"trial":{"oneOf":[{"type":"object"},{"type":"null"}]}}},"ModelChanges":{"type":"object","properties":{"changes":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"integer"},"changed_at":{"type":"string","format":"date-time"},"kind":{"type":"string"},"subject":{"type":"string"},"before":[],"after":[],"reason":{"type":"string"},"evidence":{"oneOf":[{"type":"object"},{"type":"null"}]},"by_owner":{"type":"boolean"},"previous":{"type":"string"},"hash":{"type":"string"}}}},"chain":{"type":"object","properties":{"ok":{"type":"boolean"},"checked":{"type":"integer"},"broken_at":{"oneOf":[{"type":"integer"},{"type":"null"}]}}}}},"Event":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object"}},"required":["id","type","created_at","data"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{"type":"object"}},"required":["code","message"]},"meta":{"$ref":"#/components/schemas/Meta"}}},"Meta":{"type":"object","properties":{"request_id":{"type":"string"},"note":{"type":"string"},"pagination":{"type":"object"}}},"Me":{"type":"object","properties":{"plan":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"paid_until":{"oneOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"per_minute":{"type":"integer"},"per_day":{"type":"integer"},"features":{"type":"array","items":{"type":"string"}}}},"key":{"type":"object","properties":{"name":{"type":"string"},"prefix":{"type":"string"}}},"today":{"type":"object","properties":{"requests":{"type":"integer"},"remaining":{"type":"integer"},"resets_at":{"type":"string","format":"date-time"}}}}},"Competition":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"country":{"oneOf":[{"type":"string"},{"type":"null"}]},"cup":{"type":"boolean"}}},"Competitions":{"type":"object","properties":{"competitions":{"type":"array","items":{"$ref":"#/components/schemas/Competition"}}}},"Fixture":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"competition":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"country":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"home":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"away":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}}},"kickoff_at":{"type":"string","format":"date-time"},"kickoff_estimated":{"type":"boolean"},"state":{"type":"string","description":"scheduled, live, finished, postponed, cancelled, …"},"score":{"oneOf":[{"type":"object","properties":{"home":{"type":"integer"},"away":{"type":"integer"}}},{"type":"null"}]},"half_time":{"oneOf":[{"type":"object","properties":{"home":{"type":"integer"},"away":{"type":"integer"}}},{"type":"null"}]}}},"Fixtures":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"fixtures":{"type":"array","items":{"$ref":"#/components/schemas/Fixture"}}}},"MarketProbability":{"type":"object","properties":{"key":{"type":"string","description":"market|selection|line, e.g. 1x2|home| or over_under|over|2.5"},"market":{"type":"string"},"selection":{"type":"string"},"line":{"type":"string"},"label":{"type":"string"},"probability":{"type":"number","description":"What the site publishes: the model blended with the market."},"model":{"type":"number","description":"The model's own."},"market_probability":{"oneOf":[{"type":"number","description":"The bookmakers' consensus, margin taken out."},{"type":"null"}]},"fair_price":{"oneOf":[{"type":"number"},{"type":"null"}]},"band":{"oneOf":[{"type":"object","properties":{"low":{"type":"number"},"high":{"type":"number"}},"description":"An honest margin, on the result, over/under 2.5 and both teams to score: the spread of the model's parts and the market, widened so that the market's last chance before kick-off landed inside it 80% of the time on past matches."},{"type":"null"}]}}},"Forecast":{"type":"object","properties":{"computed_at":{"type":"string","format":"date-time"},"stage":{"type":"string","enum":["early","lineups"]},"model_version":{"type":"string"},"thin":{"type":"boolean"},"expected_goals":{"type":"object","properties":{"home":{"type":"number"},"away":{"type":"number"}}},"missing_regulars":{"type":"object","properties":{"home":{"type":"integer"},"away":{"type":"integer"}}},"markets":{"type":"array","items":{"$ref":"#/components/schemas/MarketProbability"}},"likeliest_scores":{"type":"array","items":{"type":"object","properties":{"home":{"type":"integer"},"away":{"type":"integer"},"probability":{"type":"number"}}}},"components":{"type":"object","description":"Each part of the model's view of the result, and the match's context."}}},"ForecastItem":{"type":"object","properties":{"fixture":{"$ref":"#/components/schemas/Fixture"},"locked":{"type":"boolean"},"forecast":{"oneOf":[{"$ref":"#/components/schemas/Forecast"},{"type":"null"}]},"committed":{"oneOf":[{"type":"object","properties":{"leaf":{"type":"string"},"batch":{"type":"integer"},"committed_at":{"type":"string","format":"date-time"}}},{"type":"null"}]}}},"PathStep":{"type":"object","properties":{"side":{"type":"string","enum":["left","right"]},"hash":{"type":"string"}}},"DigestDay":{"type":"object","properties":{"day":{"type":"string"},"items":{"type":"array","items":{"type":"string"}},"digest":{"oneOf":[{"type":"string"},{"type":"null"}]},"bitcoin":{"oneOf":[{"type":"object","properties":{"status":{"type":"string"},"block":{"oneOf":[{"type":"integer"},{"type":"null"}]},"ots":{"type":"string"}}},{"type":"null"}]}}},"ForecastProof":{"type":"object","properties":{"fixture_id":{"type":"string"},"proof":{"type":"object","properties":{"canonical":{"type":"string"},"leaf":{"type":"string"},"committed_at":{"type":"string","format":"date-time"},"path":{"type":"array","items":{"$ref":"#/components/schemas/PathStep"}},"batch":{"type":"object","properties":{"sequence":{"type":"integer"},"root":{"type":"string"},"leaves":{"type":"integer"},"created_at":{"type":"string","format":"date-time"}}},"day":{"$ref":"#/components/schemas/DigestDay"},"how":{"type":"string"}}}}},"PickProof":{"type":"object","properties":{"proof":{"type":"object","properties":{"sequence":{"type":"integer"},"hash":{"type":"string"},"complete":{"type":"boolean"},"how":{"type":"string"},"proofs":{"type":"string"},"chain":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"integer"},"hash":{"type":"string"},"previous_hash":{"type":"string"},"canonical":{"oneOf":[{"type":"string"},{"type":"null"}]}}}},"anchor":{"oneOf":[{"type":"object","properties":{"day":{"type":"string"},"sequence":{"type":"integer"},"hash":{"type":"string"},"bitcoin":{"oneOf":[{"type":"object","properties":{"status":{"type":"string"},"block":{"oneOf":[{"type":"integer"},{"type":"null"}]},"ots":{"type":"string"}}},{"type":"null"}]}}},{"type":"null"}]}}}}},"Digests":{"type":"object","properties":{"kind":{"type":"string"},"kinds":{"type":"array","items":{"type":"string"}},"days":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"digest":{"type":"string"},"items":{"type":"integer"},"bitcoin":{"oneOf":[{"type":"object","properties":{"status":{"type":"string"},"block":{"oneOf":[{"type":"integer"},{"type":"null"}]}}},{"type":"null"}]}}}}}},"Ots":{"type":"string","format":"binary","description":"application/vnd.opentimestamps.v1"},"Forecasts":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"forecasts":{"type":"array","items":{"$ref":"#/components/schemas/ForecastItem"}},"locked":{"type":"integer"}}},"ForecastOne":{"$ref":"#/components/schemas/ForecastItem"},"Pick":{"type":"object","properties":{"sequence":{"type":"integer"},"tier":{"type":"string"},"stage":{"type":"string"},"kickoff_at":{"type":"string","format":"date-time"},"published_at":{"type":"string","format":"date-time"},"hash":{"type":"string","description":"sha256 of the canonical text"},"revealed":{"type":"boolean"},"fixture_id":{"type":"string"},"competition":{"type":"string"},"home_team":{"type":"string"},"away_team":{"type":"string"},"market":{"type":"string"},"selection":{"type":"string"},"line":{"type":"string"},"label":{"type":"string"},"probability":{"type":"string"},"price":{"type":"string"},"fair_price":{"oneOf":[{"type":"string"},{"type":"null"}]},"priced":{"type":"string"},"model_version":{"type":"string"},"grade":{"oneOf":[{"type":"object","properties":{"outcome":{"type":"string"},"home_goals":{"type":"integer"},"away_goals":{"type":"integer"}}},{"type":"null"}]},"salt":{"type":"string"},"previous_hash":{"type":"string"},"canonical":{"type":"string"}},"required":["sequence","hash","revealed"]},"Picks":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"picks":{"type":"array","items":{"$ref":"#/components/schemas/Pick"}}}},"PickOne":{"type":"object","properties":{"pick":{"$ref":"#/components/schemas/Pick"}}},"Slips":{"type":"object","properties":{"slips":{"type":"array","items":{"type":"object","description":"A slip: odds, chance, payout, legs (picks) and booking codes."}}}},"Record":{"type":"object","description":"Totals, tiers, markets, calibration, the ledger's head, slips, closing-line value and the daily anchors."},"Ratings":{"type":"object","properties":{"ratings":{"type":"array","items":{"type":"object","properties":{"team_id":{"type":"string"},"team":{"type":"string"},"elo":{"oneOf":[{"type":"integer"},{"type":"null"}]},"goals_for":{"oneOf":[{"type":"number"},{"type":"null"}]},"goals_against":{"oneOf":[{"type":"number"},{"type":"null"}]},"thin":{"type":"boolean"}}}},"model_version":{"oneOf":[{"type":"string"},{"type":"null"}]},"elo_weight":{"type":"number"}}},"Seasons":{"type":"object","properties":{"seasons":{"type":"array","items":{"type":"object","description":"A competition's projection: runs, played, remaining, standings with each side's chances."}}}},"Lessons":{"type":"object","properties":{"lessons":{"type":"array","items":{"type":"object","properties":{"competition":{"oneOf":[{"type":"string"},{"type":"null"}]},"competition_key":{"type":"string"},"market":{"type":"string"},"samples":{"type":"integer"},"priced":{"type":"integer"},"model_log_loss":{"type":"string"},"market_log_loss":{"oneOf":[{"type":"string"},{"type":"null"}]},"model_on_priced_log_loss":{"oneOf":[{"type":"string"},{"type":"null"}]},"weight":{"oneOf":[{"type":"string"},{"type":"null"}]},"verdict":{"type":"string"},"learned_at":{"type":"string","format":"date-time"}}}}}},"Verdicts":{"type":"object","properties":{"brain":{"oneOf":[{"type":"object","description":"status, window, totals, markets, reliability, trend, countries, leagues."},{"type":"null"}]}}}}}}