{"openapi":"3.1.0","info":{"title":"PREDICTIONS.md API","version":"1.0","description":"PREDICTIONS.md is a plain Markdown file of yes/no questions: how each one resolves, by when, and every forecast an agent or person made, as a probability. The tools convert odds, compute odds ratios, pool several agents' forecasts, apply Bayes' rule and score resolved forecasts, using only the numbers you send. For information only: not betting, trading or investment advice. Read-only, no key, nothing stored. For information only. Use at your own risk. predictions.md is provided as is, without warranty. Information here may be inaccurate, incomplete or not current, and is not verified; figures are estimates from the numbers you send and the formulas stated. Everything here is for information only. Nothing here is betting, trading, investment, financial, legal or tax advice, or a recommendation to act on any forecast. predictions.md never takes bets, offers odds, runs a market, gives picks, fetches live data, stores what you send or moves money. Check everything yourself before you act on it.","termsOfService":"https://www.predictions.md/terms","license":{"name":"MIT","identifier":"MIT"}},"servers":[{"url":"https://www.predictions.md"}],"paths":{"/predictions.md":{"get":{"operationId":"getSkill","summary":"The PREDICTIONS.md skill as Markdown. Add a preset or any setting to write your settings in; notes on clamped or ignored values come back in the X-Settings-Notes header.","parameters":[{"name":"preset","in":"query","required":false,"schema":{"type":"string","enum":["core","recommended","team","strict"]}},{"name":"act_on_forecasts","in":"query","required":false,"description":"Using a forecast to decide something: never (Never: forecasts are information only), ask (Ask the person first, every time). Default never.","schema":{"type":"string","enum":["never","ask"]}},{"name":"share","in":"query","required":false,"description":"Sharing forecasts outside the team's file: never (Never), ask (Ask first), allowed (Allowed, labeled as forecasts). Optional; unset clears it.","schema":{"type":"string","enum":["never","ask","allowed","unset"]}},{"name":"pool","in":"query","required":false,"description":"Combine forecasts with: geo_odds (The average of log-odds (geometric mean of odds)), mean (The average probability), median (The median). Default geo_odds.","schema":{"type":"string","enum":["geo_odds","mean","median"]}},{"name":"independent_first","in":"query","required":false,"description":"Each agent forecasts before reading the others': yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"min_forecasters","in":"query","required":false,"description":"Combine only with at least (forecasts). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"disagree_pts","in":"query","required":false,"description":"Flag when forecasts differ by more than (points). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":5,"maximum":60}},{"name":"extremize","in":"query","required":false,"description":"Push the combined forecast away from 50% by a factor of (x). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":1,"maximum":2.5}},{"name":"base_rate_first","in":"query","required":false,"description":"Start every forecast from a base rate: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"min_sources","in":"query","required":false,"description":"Independent sources behind each forecast (sources). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":0,"maximum":10}},{"name":"stale_minutes","in":"query","required":false,"description":"Treat data as stale after (minutes). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":10080}},{"name":"timestamps","in":"query","required":false,"description":"Give the time of every data point: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"update_on","in":"query","required":false,"description":"Update forecasts: evidence (When new evidence arrives), daily (Once a day), weekly (Once a week). Optional; unset clears it.","schema":{"type":"string","enum":["evidence","daily","weekly","unset"]}},{"name":"p_format","in":"query","required":false,"description":"Write probabilities as: percent (Percentages (61%)), decimal (Decimals (0.61)). Default percent.","schema":{"type":"string","enum":["percent","decimal"]}},{"name":"floor_pct","in":"query","required":false,"description":"Never go below this, or above 100% minus it (%). Default 1. Out-of-range values are clamped.","schema":{"type":"number","minimum":0.1,"maximum":10}},{"name":"decimals","in":"query","required":false,"description":"Decimal places (digits). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":0,"maximum":3}},{"name":"show_odds","in":"query","required":false,"description":"Also show the odds: no (No), odds_for (Odds for (3:2)), decimal (Decimal odds (1.67)). Optional; unset clears it.","schema":{"type":"string","enum":["no","odds_for","decimal","unset"]}},{"name":"score_rule","in":"query","required":false,"description":"Score with: brier (Brier score), log (Log score), both (Both). Optional; unset clears it.","schema":{"type":"string","enum":["brier","log","both","unset"]}},{"name":"bins","in":"query","required":false,"description":"Calibration table: 5 (5 bins of 20 points), 10 (10 bins of 10 points). Optional; unset clears it.","schema":{"type":"string","enum":["5","10","unset"]}},{"name":"review_days","in":"query","required":false,"description":"Review scores every (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":90}}],"responses":{"200":{"description":"The skill","content":{"text/markdown":{"schema":{"type":"string"}}}}}}},"/api/v1/settings":{"get":{"operationId":"listSettings","summary":"Every setting (group, kind, unit, range, options, default) and the presets.","responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}}}}},"/api/v1/convert_odds":{"get":{"operationId":"convertOddsGet","summary":"Convert odds and probabilities","description":"Converts one value between probability, percent, decimal odds, fractional odds, American odds, odds for (3:2) and log-odds. With compare_to, it also gives the odds ratio, the risk ratio and the difference in points between the two. Arithmetic only, for information; it offers no odds and fetches nothing.","parameters":[{"name":"value","in":"query","required":true,"description":"The value: 0.61, 61%, 1.64, 2/3, -156, +150 or 3:2.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"How to read value. auto (default) guesses from its shape.","schema":{"type":"string","enum":["auto","probability","percent","decimal","fractional","american","odds_for"]}},{"name":"compare_to","in":"query","required":false,"description":"Optional second value, read the same way, for an odds ratio and a risk ratio.","schema":{"type":"string"}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"convertOdds","summary":"Convert odds and probabilities","description":"Converts one value between probability, percent, decimal odds, fractional odds, American odds, odds for (3:2) and log-odds. With compare_to, it also gives the odds ratio, the risk ratio and the difference in points between the two. Arithmetic only, for information; it offers no odds and fetches nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","maxLength":40,"description":"The value: 0.61, 61%, 1.64, 2/3, -156, +150 or 3:2."},"from":{"type":"string","enum":["auto","probability","percent","decimal","fractional","american","odds_for"],"default":"auto","description":"How to read value. auto (default) guesses from its shape."},"compare_to":{"type":"string","maxLength":40,"description":"Optional second value, read the same way, for an odds ratio and a risk ratio."}},"required":["value"]},"example":{"value":"+150","compare_to":"55%"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/implied_probabilities":{"get":{"operationId":"impliedProbabilitiesGet","summary":"Turn a set of odds into probabilities","description":"Takes the odds quoted for every outcome of one event (mutually exclusive, one must happen) and returns each one's implied probability, how far their total is over 100%, and the probabilities scaled to add up to exactly 100%. Arithmetic only, for information; it fetches no odds and recommends nothing.","parameters":[{"name":"outcomes","in":"query","required":true,"description":"Every outcome: [{ \"label\": \"Home\", \"odds\": \"2.10\" }, ...]. Odds in any form convert_odds reads. URL-encoded JSON.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"How to read every odds value. Default auto.","schema":{"type":"string","enum":["auto","probability","percent","decimal","fractional","american","odds_for"]}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"impliedProbabilities","summary":"Turn a set of odds into probabilities","description":"Takes the odds quoted for every outcome of one event (mutually exclusive, one must happen) and returns each one's implied probability, how far their total is over 100%, and the probabilities scaled to add up to exactly 100%. Arithmetic only, for information; it fetches no odds and recommends nothing.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"outcomes":{"type":"array","description":"Every outcome: [{ \"label\": \"Home\", \"odds\": \"2.10\" }, ...]. Odds in any form convert_odds reads.","items":{"type":"object","properties":{"label":{"type":"string","maxLength":60},"odds":{"type":"string","maxLength":40}},"required":["odds"]},"minItems":2,"maxItems":30},"from":{"type":"string","enum":["auto","probability","percent","decimal","fractional","american","odds_for"],"default":"auto","description":"How to read every odds value. Default auto."}},"required":["outcomes"]},"example":{"outcomes":[{"label":"Example Rovers","odds":"2.10"},{"label":"Draw","odds":"3.40"},{"label":"Example City","odds":"3.60"}]}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/combine_forecasts":{"get":{"operationId":"combineForecastsGet","summary":"Combine several agents' forecasts","description":"Pools forecasts of one yes/no question from several agents or people: the average of log-odds (geometric mean of odds), the average probability and the median, with optional weights and an optional extremizing factor. Returns the spread and flags a disagreement over your threshold. Arithmetic on the numbers you send.","parameters":[{"name":"forecasts","in":"query","required":true,"description":"Forecasts: [{ \"who\": \"agent:ratings\", \"p\": 0.61, \"weight\": 1 }]. p as 0.61, 61 or \"61%\". URL-encoded JSON.","schema":{"type":"string"}},{"name":"method","in":"query","required":false,"description":"Which result leads the summary. All three are returned.","schema":{"type":"string","enum":["geo_odds","mean","median"]}},{"name":"extremize","in":"query","required":false,"description":"Multiply the pooled log-odds by this (1 = no change).","schema":{"type":"number","minimum":1,"maximum":3}},{"name":"disagree_pts","in":"query","required":false,"description":"Flag when the highest and lowest differ by more than this many points.","schema":{"type":"number","minimum":0,"maximum":100}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"combineForecasts","summary":"Combine several agents' forecasts","description":"Pools forecasts of one yes/no question from several agents or people: the average of log-odds (geometric mean of odds), the average probability and the median, with optional weights and an optional extremizing factor. Returns the spread and flags a disagreement over your threshold. Arithmetic on the numbers you send.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forecasts":{"type":"array","description":"Forecasts: [{ \"who\": \"agent:ratings\", \"p\": 0.61, \"weight\": 1 }]. p as 0.61, 61 or \"61%\".","items":{"type":"object","properties":{"who":{"type":"string","maxLength":40},"p":{"type":"number"},"weight":{"type":"number","minimum":0}},"required":["p"]},"minItems":1,"maxItems":100},"method":{"type":"string","enum":["geo_odds","mean","median"],"default":"geo_odds","description":"Which result leads the summary. All three are returned."},"extremize":{"type":"number","minimum":1,"maximum":3,"default":1,"description":"Multiply the pooled log-odds by this (1 = no change)."},"disagree_pts":{"type":"number","minimum":0,"maximum":100,"default":20,"description":"Flag when the highest and lowest differ by more than this many points."}},"required":["forecasts"]},"example":{"forecasts":[{"who":"agent:form","p":0.58},{"who":"agent:ratings","p":0.61},{"who":"person","p":0.55}],"method":"geo_odds"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/bayes_update":{"get":{"operationId":"bayesUpdateGet","summary":"Update a probability on evidence","description":"Bayes' rule in odds form: posterior odds = prior odds x likelihood ratio, one piece of evidence at a time. Give each piece a likelihood ratio, or the chance of seeing it if the answer is yes and if it is no. Returns every step. Arithmetic on the numbers you send.","parameters":[{"name":"prior","in":"query","required":true,"description":"The starting probability: 0.45, or 45 for 45%.","schema":{"type":"number","minimum":0,"maximum":100}},{"name":"evidence","in":"query","required":true,"description":"Evidence, in order: [{ \"label\": \"...\", \"lr\": 1.8 }] or [{ \"label\": \"...\", \"p_if_yes\": 0.7, \"p_if_no\": 0.4 }]. URL-encoded JSON.","schema":{"type":"string"}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"bayesUpdate","summary":"Update a probability on evidence","description":"Bayes' rule in odds form: posterior odds = prior odds x likelihood ratio, one piece of evidence at a time. Give each piece a likelihood ratio, or the chance of seeing it if the answer is yes and if it is no. Returns every step. Arithmetic on the numbers you send.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prior":{"type":"number","minimum":0,"maximum":100,"description":"The starting probability: 0.45, or 45 for 45%."},"evidence":{"type":"array","description":"Evidence, in order: [{ \"label\": \"...\", \"lr\": 1.8 }] or [{ \"label\": \"...\", \"p_if_yes\": 0.7, \"p_if_no\": 0.4 }].","items":{"type":"object","properties":{"label":{"type":"string","maxLength":80},"lr":{"type":"number","minimum":0},"p_if_yes":{"type":"number","minimum":0,"maximum":1},"p_if_no":{"type":"number","minimum":0,"maximum":1}}},"minItems":1,"maxItems":50}},"required":["prior","evidence"]},"example":{"prior":0.45,"evidence":[{"label":"home team, strong at home","lr":1.4},{"label":"two starters out","p_if_yes":0.3,"p_if_no":0.45}]}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/score_forecasts":{"get":{"operationId":"scoreForecastsGet","summary":"Score resolved forecasts","description":"Scores forecasts whose questions have resolved: Brier score (lower is better), log score (higher is better), the base rate, Brier skill against always forecasting the base rate, and a calibration table, overall and per forecaster. Statistics on the numbers you send; past scores don't promise future accuracy.","parameters":[{"name":"forecasts","in":"query","required":true,"description":"Resolved forecasts: [{ \"who\": \"agent:news\", \"p\": 0.82, \"outcome\": \"yes\" }]. outcome yes/no or 1/0. URL-encoded JSON.","schema":{"type":"string"}},{"name":"bins","in":"query","required":false,"description":"Calibration bins. Default 10.","schema":{"type":"integer","minimum":2,"maximum":20}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"scoreForecasts","summary":"Score resolved forecasts","description":"Scores forecasts whose questions have resolved: Brier score (lower is better), log score (higher is better), the base rate, Brier skill against always forecasting the base rate, and a calibration table, overall and per forecaster. Statistics on the numbers you send; past scores don't promise future accuracy.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"forecasts":{"type":"array","description":"Resolved forecasts: [{ \"who\": \"agent:news\", \"p\": 0.82, \"outcome\": \"yes\" }]. outcome yes/no or 1/0.","items":{"type":"object","properties":{"who":{"type":"string","maxLength":40},"p":{"type":"number"},"outcome":{"type":"string","enum":["yes","no","1","0"]}},"required":["p","outcome"]},"minItems":1,"maxItems":200},"bins":{"type":"integer","minimum":2,"maximum":20,"default":10,"description":"Calibration bins. Default 10."}},"required":["forecasts"]},"example":{"forecasts":[{"who":"agent:news","p":0.82,"outcome":"yes"},{"who":"agent:news","p":0.3,"outcome":"no"},{"who":"agent:news","p":0.65,"outcome":"no"},{"who":"agent:ratings","p":0.7,"outcome":"yes"},{"who":"agent:ratings","p":0.2,"outcome":"no"},{"who":"agent:ratings","p":0.55,"outcome":"yes"}],"bins":5}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/check_predictions_md":{"get":{"operationId":"checkPredictionsMdGet","summary":"Check a PREDICTIONS.md file","description":"Checks a PREDICTIONS.md file against the format: every question says how it resolves and by when, forecasts are dated with a probability and who made it, resolved questions have an outcome. Warns about 0% or 100%, certainty language, overdue questions, forecasts after the resolve date and text that reads like instructions. Returns each question's latest forecasts, the combined forecast and scores for resolved questions.","parameters":[{"name":"text","in":"query","required":true,"description":"The PREDICTIONS.md file (up to 60,000 characters).","schema":{"type":"string"}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"checkPredictionsMd","summary":"Check a PREDICTIONS.md file","description":"Checks a PREDICTIONS.md file against the format: every question says how it resolves and by when, forecasts are dated with a probability and who made it, resolved questions have an outcome. Warns about 0% or 100%, certainty language, overdue questions, forecasts after the resolve date and text that reads like instructions. Returns each question's latest forecasts, the combined forecast and scores for resolved questions.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":60000,"description":"The PREDICTIONS.md file (up to 60,000 characters)."}},"required":["text"]},"example":{"text":"---\npredictions: 1\nupdated: 2026-10-16\n---\n\n# Will Example Rovers beat Example City on Saturday?\n\nA made-up match, for the example.\n\n- id: rovers-city\n- resolves: yes if Example Rovers win in regular time, per the league's published result\n- resolve_by: 2026-10-18\n- status: open\n- base_rate: 45%\n- tags: sports\n\n## Forecasts\n\n- 2026-10-16 09:00 · agent:form · 58% · recent form, two injuries\n- 2026-10-16 09:04 · agent:ratings · 61% · rating model, home edge\n- 2026-10-16 09:20 · person · 55% · gut check\n\n# Will the Example coffee index close above 4.50 on December 1?\n\n- id: coffee-index\n- resolves: yes if the index's published close on 2026-12-01 is above 4.50\n- resolve_by: 2026-12-01\n- status: open\n- tags: prices\n\n## Forecasts\n\n- 2026-10-15 · agent:prices · 34% · 4.20 now, 30-day range 3.95 to 4.41\n- 2026-10-16 · agent:news · 40% · harvest report due\n\n# Will the Example City council approve the bike-lane plan by June 30?\n\n- id: bike-lanes\n- resolves: yes if the council votes to approve the plan on or before June 30, per the published minutes\n- resolve_by: 2026-06-30\n- status: resolved\n- outcome: yes\n- tags: events\n\n## Forecasts\n\n- 2026-05-01 · agent:news · 70% · two committees in favor\n- 2026-06-10 · agent:news · 82% · final committee passed it\n- 2026-06-12 · person · 75%\n\n# Will the Example Arena show sell out by November 1?\n\n- id: arena-sellout\n- resolves: yes if the venue lists the show as sold out by November 1\n- resolve_by: 2026-11-01\n- status: void\n- tags: events\n\n## Notes\n\nVoided: the show moved to another date, so the question no longer applies.\n"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}},"/api/v1/build_settings":{"get":{"operationId":"buildSettingsGet","summary":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of PREDICTIONS.md. Every setting is a number or a fixed choice; the catalog is at https://www.predictions.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","parameters":[{"name":"preset","in":"query","required":false,"description":"Starting point: core, recommended, team, strict. Applied first; each setting overrides it.","schema":{"type":"string","enum":["core","recommended","team","strict"]}},{"name":"act_on_forecasts","in":"query","required":false,"description":"Using a forecast to decide something: never (Never: forecasts are information only), ask (Ask the person first, every time). Default never.","schema":{"type":"string","enum":["never","ask"]}},{"name":"share","in":"query","required":false,"description":"Sharing forecasts outside the team's file: never (Never), ask (Ask first), allowed (Allowed, labeled as forecasts). Optional; unset clears it.","schema":{"type":"string","enum":["never","ask","allowed","unset"]}},{"name":"pool","in":"query","required":false,"description":"Combine forecasts with: geo_odds (The average of log-odds (geometric mean of odds)), mean (The average probability), median (The median). Default geo_odds.","schema":{"type":"string","enum":["geo_odds","mean","median"]}},{"name":"independent_first","in":"query","required":false,"description":"Each agent forecasts before reading the others': yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"min_forecasters","in":"query","required":false,"description":"Combine only with at least (forecasts). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":50}},{"name":"disagree_pts","in":"query","required":false,"description":"Flag when forecasts differ by more than (points). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":5,"maximum":60}},{"name":"extremize","in":"query","required":false,"description":"Push the combined forecast away from 50% by a factor of (x). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"number","minimum":1,"maximum":2.5}},{"name":"base_rate_first","in":"query","required":false,"description":"Start every forecast from a base rate: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"min_sources","in":"query","required":false,"description":"Independent sources behind each forecast (sources). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":0,"maximum":10}},{"name":"stale_minutes","in":"query","required":false,"description":"Treat data as stale after (minutes). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":10080}},{"name":"timestamps","in":"query","required":false,"description":"Give the time of every data point: yes (Yes), no (No). Optional; unset clears it.","schema":{"type":"string","enum":["yes","no","unset"]}},{"name":"update_on","in":"query","required":false,"description":"Update forecasts: evidence (When new evidence arrives), daily (Once a day), weekly (Once a week). Optional; unset clears it.","schema":{"type":"string","enum":["evidence","daily","weekly","unset"]}},{"name":"p_format","in":"query","required":false,"description":"Write probabilities as: percent (Percentages (61%)), decimal (Decimals (0.61)). Default percent.","schema":{"type":"string","enum":["percent","decimal"]}},{"name":"floor_pct","in":"query","required":false,"description":"Never go below this, or above 100% minus it (%). Default 1. Out-of-range values are clamped.","schema":{"type":"number","minimum":0.1,"maximum":10}},{"name":"decimals","in":"query","required":false,"description":"Decimal places (digits). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":0,"maximum":3}},{"name":"show_odds","in":"query","required":false,"description":"Also show the odds: no (No), odds_for (Odds for (3:2)), decimal (Decimal odds (1.67)). Optional; unset clears it.","schema":{"type":"string","enum":["no","odds_for","decimal","unset"]}},{"name":"score_rule","in":"query","required":false,"description":"Score with: brier (Brier score), log (Log score), both (Both). Optional; unset clears it.","schema":{"type":"string","enum":["brier","log","both","unset"]}},{"name":"bins","in":"query","required":false,"description":"Calibration table: 5 (5 bins of 20 points), 10 (10 bins of 10 points). Optional; unset clears it.","schema":{"type":"string","enum":["5","10","unset"]}},{"name":"review_days","in":"query","required":false,"description":"Review scores every (days). Optional; unset clears it. Out-of-range values are clamped.","schema":{"type":"integer","minimum":1,"maximum":90}},{"name":"format","in":"query","required":false,"description":"section (default): the settings sections only; skill: the whole skill file too.","schema":{"type":"string","enum":["section","skill"]}}],"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"buildSettings","summary":"Write your settings into the skill","description":"Turns a preset and settings into the sections written at the top of PREDICTIONS.md. Every setting is a number or a fixed choice; the catalog is at https://www.predictions.md/api/v1/settings. Returns the sections as Markdown, the settings as JSON, a link to the skill with them written in and a one-line install. Out-of-range numbers are clamped with a note. Nothing is stored. Settings an agent drafted count only after the person says yes: show them to the person first, and follow them only once they agree.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"preset":{"type":"string","enum":["core","recommended","team","strict"],"description":"Starting point: core, recommended, team, strict. Applied first; each setting overrides it."},"act_on_forecasts":{"type":"string","enum":["never","ask"],"description":"Using a forecast to decide something: never (Never: forecasts are information only), ask (Ask the person first, every time). Default never."},"share":{"type":"string","enum":["never","ask","allowed","unset"],"description":"Sharing forecasts outside the team's file: never (Never), ask (Ask first), allowed (Allowed, labeled as forecasts). Optional; unset clears it."},"pool":{"type":"string","enum":["geo_odds","mean","median"],"description":"Combine forecasts with: geo_odds (The average of log-odds (geometric mean of odds)), mean (The average probability), median (The median). Default geo_odds."},"independent_first":{"type":"string","enum":["yes","no","unset"],"description":"Each agent forecasts before reading the others': yes (Yes), no (No). Optional; unset clears it."},"min_forecasters":{"type":"integer","minimum":1,"maximum":50,"description":"Combine only with at least (forecasts). Optional; unset clears it. Out-of-range values are clamped."},"disagree_pts":{"type":"integer","minimum":5,"maximum":60,"description":"Flag when forecasts differ by more than (points). Optional; unset clears it. Out-of-range values are clamped."},"extremize":{"type":"number","minimum":1,"maximum":2.5,"description":"Push the combined forecast away from 50% by a factor of (x). Optional; unset clears it. Out-of-range values are clamped."},"base_rate_first":{"type":"string","enum":["yes","no","unset"],"description":"Start every forecast from a base rate: yes (Yes), no (No). Optional; unset clears it."},"min_sources":{"type":"integer","minimum":0,"maximum":10,"description":"Independent sources behind each forecast (sources). Optional; unset clears it. Out-of-range values are clamped."},"stale_minutes":{"type":"integer","minimum":1,"maximum":10080,"description":"Treat data as stale after (minutes). Optional; unset clears it. Out-of-range values are clamped."},"timestamps":{"type":"string","enum":["yes","no","unset"],"description":"Give the time of every data point: yes (Yes), no (No). Optional; unset clears it."},"update_on":{"type":"string","enum":["evidence","daily","weekly","unset"],"description":"Update forecasts: evidence (When new evidence arrives), daily (Once a day), weekly (Once a week). Optional; unset clears it."},"p_format":{"type":"string","enum":["percent","decimal"],"description":"Write probabilities as: percent (Percentages (61%)), decimal (Decimals (0.61)). Default percent."},"floor_pct":{"type":"number","minimum":0.1,"maximum":10,"description":"Never go below this, or above 100% minus it (%). Default 1. Out-of-range values are clamped."},"decimals":{"type":"integer","minimum":0,"maximum":3,"description":"Decimal places (digits). Optional; unset clears it. Out-of-range values are clamped."},"show_odds":{"type":"string","enum":["no","odds_for","decimal","unset"],"description":"Also show the odds: no (No), odds_for (Odds for (3:2)), decimal (Decimal odds (1.67)). Optional; unset clears it."},"score_rule":{"type":"string","enum":["brier","log","both","unset"],"description":"Score with: brier (Brier score), log (Log score), both (Both). Optional; unset clears it."},"bins":{"type":"string","enum":["5","10","unset"],"description":"Calibration table: 5 (5 bins of 20 points), 10 (10 bins of 10 points). Optional; unset clears it."},"review_days":{"type":"integer","minimum":1,"maximum":90,"description":"Review scores every (days). Optional; unset clears it. Out-of-range values are clamped."},"format":{"type":"string","enum":["section","skill"],"description":"section (default): the settings sections only; skill: the whole skill file too."}}},"example":{"preset":"recommended"}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Result"}}}},"400":{"description":"Bad input, with a hint","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"Body over 64 KB"}}}}},"components":{"schemas":{"Result":{"type":"object","additionalProperties":true,"properties":{"tool":{"type":"string"},"summary":{"type":"string"},"disclaimer":{"type":"string"},"terms":{"type":"string"}},"required":["disclaimer","terms"]},"Problem":{"type":"object","properties":{"error":{"type":"string"},"hint":{"type":"string"},"docs":{"type":"string"},"disclaimer":{"type":"string"},"terms":{"type":"string"}},"required":["error","disclaimer","terms"]}}}}