formulas-and-strategies
Copy page
Look up the formulas, strategies and recipes behind the calculations.
On this page
| Method | Path | Title | Access | Price | MCP tool |
|---|---|---|---|---|---|
| GET | /v1/strategies | List strategies | public | 1 | none |
| GET | /v1/strategies/{strategy_id} | Get a strategy | public | 1 | none |
| POST | /v1/strategies/{strategy_id}:check | Check a strategy on your numbers | public | 1 | check_strategy |
| GET | /v1/recipes | List recipes | public | 1 | none |
| GET | /v1/recipes/{recipe_id} | Get a recipe | public | 1 | none |
GET /v1/strategies
List strategiesLink to this section
public, no key needed · 1 credit, not charged during the beta · status live
Strategy records in ledger order (family, then ledger row), filterable by family, verdict and route: each with its verdict, decisive figure, evidence date and grade, inputs, checks and chains. No edges and no rankings.
ParametersLink to this section
familystring · queryOnly this family, B1 to B14 or F1 to F9.
pattern ^[BF][0-9]{1,2}$
verdictstring · queryOnly this verdict.
One of: robust, conditional, weak, myth, prohibited (open: new values may be added).
routestring · queryOnly this route.
One of: execute, check_then_execute, warn_first, decline, refuse (open: new values may be added).
ResponseLink to this section
200 Every matching strategy, in ledger order.
dataarray of objectrequiredThe strategies, by family then ledger row; never ordered by a betting measure.
Show 21 fields
idstringrequiredThe registry ID, a slug such as line-shopping.
public_idstringThe Kelly ID (stg_…), stable for ever.
namestringrequiredThe strategy's name.
ledger_rowintegernullableIts row in the verdict ledger (1 to 134), or null for a Part I verdict without a row.
familystringThe family: B1 to B14 for betting, F1 to F9 for fantasy.
family_namestringThe family's name.
verdictstringrequiredThe verdict.
One of: robust, conditional, weak, myth, prohibited (open: new values may be added).
verdict_textstringThe ledger's full wording, such as Robust, limited.
routestringrequiredWhat a check does: run it, check then run, warn first, decline with the evidence, or refuse.
One of: execute, check_then_execute, warn_first, decline, refuse (open: new values may be added).
route_by_rulestringnullableThe rule that sets the route, when a rule does rather than the verdict.
decisive_figurestringrequiredThe figure the verdict rests on, in words.
evidenceobjectrequiredThe grade (and the grade in words), the month the evidence runs through, review dates, a summary and the sources.
flip_conditionsarray of objectThe evidence that would change the verdict, each with the verdict it would flip to.
inputsarray of objectThe inputs it takes: execution_input true means never assumed (D28).
preconditionsarray of objectThe typed checks it runs, with the sentence shown when one fails.
chainsarray of objectThe decision chains that run it (C1 to C46), each with its name and whether it runs today.
formulasarray of stringThe formula cards it uses, by card ID.
price_basisstringuser (your own price), consensus or none (D27).
alternativeobjectnullableFor a Weak or Myth strategy: the robust one to run instead and what Kelly never produces.
aliasesarray of stringOther names it goes by.
versionintegerrequiredThe verdict's version, bumped when the verdict or its evidence changes.
has_morebooleanrequiredAlways false: every match comes in one page.
next_cursorstringrequirednullableAlways null: every match comes in one page.
registry_versionstringrequiredThe registry's version.
as_ofstringThe registry's as-of date, at midnight UTC.
format date-time
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted
ExampleLink to this section
GET https://api.askkelly.ai/v1/strategies?family=B1&verdict=robust
Authorization: Bearer $KELLY_API_KEY{
"data": [
{
"id": "line-shopping",
"public_id": "stg_8ermmkdkdash36dpv8t4",
"name": "Line shopping and reduced juice",
"ledger_row": 1,
"family": "B1",
"family_name": "Price shopping and market-relative betting",
"verdict": "robust",
"verdict_text": "Robust",
"route": "execute",
"route_by_rule": null,
"decisive_figure": "−110 to −105 cuts the break-even from 52.38% to 51.22%.",
"evidence": {
"grade": "peer_reviewed",
"grade_words": "peer-reviewed",
"through": "2026-10",
"reviewed_at": "2026-10-16",
"review_due": "2027-10-16",
"summary": "exact arithmetic",
"sources": [
"sports-betting-and-fantasy-strategies.md Part I ledger, row 1",
"strategy-playbooks.md §6 B1"
],
"stale": false
},
"flip_conditions": [
{
"id": "none-arithmetic",
"evidence": "None; the break-even is arithmetic. Only a change in how books price (no hold) would reopen it.",
"to": null
}
],
"inputs": [
{
"id": "selection",
"execution_input": true,
"what": "The selection or options the user names (D21, D29: never inferred from a slate)",
"note": null
},
{
"id": "slip_price",
"execution_input": true,
"what": "The price on the user's slip, with its time",
"note": "off-site: the prices the user sees, pasted with their time"
},
{
"id": "jurisdiction",
"execution_input": true,
"what": "The state, and any per-bet fee",
"note": "books the user can legally use"
},
{
"id": "market_reference",
"execution_input": false,
"what": "The sharp-weighted no-vig consensus, or Pinnacle where available",
"note": null
},
{
"id": "odds_format",
"execution_input": false,
"what": "American odds as the display format",
"note": null
}
],
"preconditions": [
{
"id": "price-pasted-off-site",
"check": "user_price_given",
"threshold": null,
"card": null,
"on_fail": "Paste the prices you see, and Kelly runs the comparison; live per-book prices are on askkelly.ai."
}
],
"chains": [
{
"id": "C1",
"name": "bet a side at a soft book",
"runs": true
}
],
"formulas": [
"F1.1",
"F1.4",
"F1.7",
"F1.8",
"F3.1"
],
"price_basis": "user",
"alternative": null,
"aliases": [
"line shopping",
"reduced juice",
"best price",
"shop the line"
],
"version": 1
},
{
"id": "soft-books-against-de-vigged",
"public_id": "stg_967dcdhf4hcz459zp1y8",
"name": "Soft books against de-vigged sharp or consensus prices",
"ledger_row": 2,
"family": "B1",
"family_name": "Price shopping and market-relative betting",
"verdict": "robust",
"verdict_text": "Robust, limited",
"route": "check_then_execute",
"route_by_rule": null,
"decisive_figure": "The named bet must stay +EV under the least favourable de-vig method; winning this way gets accounts limited: 0.64% of Massachusetts bettors were limited in data shown to regulators in September 2025.",
"evidence": {
"grade": "unrefereed",
"grade_words": "unrefereed or one season",
"through": "2025-12",
"reviewed_at": "2026-10-16",
"review_due": "2027-10-16",
"summary": "one unrefereed academic test (Kaunitz 2017), practitioner backtests (Pinho)",
"sources": [
"sports-betting-and-fantasy-strategies.md Part I ledger, row 2",
"strategy-playbooks.md §6 B1",
"strategy-map.md §1a, #2"
],
"stale": false
},
"flip_conditions": [
{
"id": "refereed-null",
"evidence": "A refereed out-of-sample test in which bets beating the worst-case no-vig consensus fail to return above zero after the hold",
"to": "conditional"
}
],
"inputs": [
{
"id": "selection",
"execution_input": true,
"what": "The selection or options the user names (D21, D29: never inferred from a slate)",
"note": null
},
{
"id": "slip_price",
"execution_input": true,
"what": "The price on the user's slip, with its time",
"note": "the soft-book price, with its time"
},
{
"id": "jurisdiction",
"execution_input": true,
"what": "The state, and any per-bet fee",
"note": "books the user can legally use"
},
{
"id": "user_probability",
"execution_input": true,
"what": "The user's own probability",
"note": "only if a stake is wanted (B3)"
},
{
"id": "market_reference",
"execution_input": false,
"what": "The sharp-weighted no-vig consensus, or Pinnacle where available",
"note": null
},
{
"id": "devig_method",
"execution_input": false,
"what": "The de-vig method by market shape, named, with a worst-case screen",
"note": null
},
{
"id": "odds_format",
"execution_input": false,
"what": "American odds as the display format",
"note": null
}
],
"preconditions": [
{
"id": "selection-named",
"check": "selection_named",
"threshold": null,
"card": null,
"on_fail": "Kelly checks selections you name; it doesn't screen slates. Name the bet and Kelly checks it against the no-vig market."
},
{
"id": "sharp-reference",
"check": "sharp_reference_exists",
"threshold": null,
"card": null,
"on_fail": "There's no sharp no-vig market for this selection, so Kelly shows the hold and your break-even only."
},
{
"id": "devig-fits",
"check": "devig_method_fits",
"threshold": null,
"card": "F2.10",
"on_fail": "Both de-vig methods are shown and the power figure is used on a longshot board."
},
{
"id": "worst-case-ev",
"check": "worst_case_ev_positive",
"threshold": null,
"card": "F2.9",
"on_fail": "No bet at {price}: the break-even {be} sits above the worst-case no-vig {p}."
},
{
"id": "price-live",
"check": "price_fresh",
"threshold": null,
"card": null,
"on_fail": "Price from {time}; recheck the slip."
},
{
"id": "kelly-probability-off-site",
"check": "first_party_surface",
"threshold": null,
"card": null,
"on_fail": "Here the no-vig market gives {m}%, and your price of {price} needs {break-even}%; `edge_status` is {status}. Kelly's own probability is on askkelly.ai."
}
],
"chains": [
{
"id": "C1",
"name": "bet a side at a soft book",
"runs": true
}
],
"formulas": [
"F1.1",
"F1.4",
"F1.7",
"F1.8",
"F2.2",
"F2.4",
"F2.5",
"F2.9",
"F2.10",
"F3.1",
"F3.6"
],
"price_basis": "user",
"alternative": null,
"aliases": [
"+EV betting",
"positive EV betting",
"beat the soft book",
"sharp vs soft",
"value betting"
],
"version": 1
},
{
"id": "power-shin-devig",
"public_id": "stg_jcsf1rj62t6h5nxd79r0",
"name": "Power or Shin de-vig for n-way markets",
"ledger_row": 4,
"family": "B1",
"family_name": "Price shopping and market-relative betting",
"verdict": "robust",
"verdict_text": "Robust",
"route": "execute",
"route_by_rule": null,
"decisive_figure": "On a +120/+250/+400/+600 board the +600 outcome is fair at +696 by power against +658 multiplicative.",
"evidence": {
"grade": "peer_reviewed",
"grade_words": "peer-reviewed",
"through": "2026-10",
"reviewed_at": "2026-10-16",
"review_due": "2027-10-16",
"summary": "peer-reviewed comparison of de-vig methods (Clarke et al. 2017)",
"sources": [
"sports-betting-and-fantasy-strategies.md Part I ledger, row 4"
],
"stale": false
},
"flip_conditions": [
{
"id": "method-calibration-reversal",
"evidence": "A peer-reviewed calibration study in which multiplicative de-vig beats power and Shin on n-way boards",
"to": "conditional"
}
],
"inputs": [
{
"id": "selection",
"execution_input": true,
"what": "The selection or options the user names (D21, D29: never inferred from a slate)",
"note": null
},
{
"id": "slip_price",
"execution_input": true,
"what": "The price on the user's slip, with its time",
"note": null
},
{
"id": "devig_method",
"execution_input": false,
"what": "The de-vig method by market shape, named, with a worst-case screen",
"note": null
}
],
"preconditions": [],
"chains": [
{
"id": "C2",
"name": "future or outright",
"runs": true
},
{
"id": "C9",
"name": "cross-market, alternate, derivative or live line",
"runs": true
}
],
"formulas": [
"F2.4",
"F2.5",
"F2.10",
"F8.1"
],
"price_basis": "user",
"alternative": null,
"aliases": [
"power de-vig",
"Shin de-vig",
"de-vig this board"
],
"version": 1
},
{
"id": "early-lines-news-latency",
"public_id": "stg_cetsmqj4qems795cb8bn",
"name": "Early lines and news latency",
"ledger_row": 37,
"family": "B1",
"family_name": "Price shopping and market-relative betting",
"verdict": "robust",
"verdict_text": "Robust for informed bettors; limited at retail",
"route": "check_then_execute",
"route_by_rule": null,
"decisive_figure": "Runs on the user's post-news probability; a stale −110 is worth 0.70% of a unit per opportunity at 3 points of dispersion (RT).",
"evidence": {
"grade": "research_team",
"grade_words": "research-team computation (RT)",
"through": "2026-10",
"reviewed_at": "2026-10-16",
"review_due": "2027-10-16",
"summary": "Thorp–Walden theorem (peer-reviewed), window values a research-team computation (RT); F25.3 theoretical only",
"sources": [
"sports-betting-and-fantasy-strategies.md Part I ledger, row 37",
"strategy-playbooks.md §6 B1"
],
"stale": false
},
"flip_conditions": [
{
"id": "latency-voided",
"evidence": "Dated evidence that books now void or reprice stale-line bets placed before their own update as a rule, so the window cannot be taken at retail",
"to": "conditional"
}
],
"inputs": [
{
"id": "selection",
"execution_input": true,
"what": "The selection or options the user names (D21, D29: never inferred from a slate)",
"note": null
},
{
"id": "slip_price",
"execution_input": true,
"what": "The price on the user's slip, with its time",
"note": "the price taken or available, with its time"
},
{
"id": "user_probability",
"execution_input": true,
"what": "The user's own probability",
"note": "the user's post-news probability; Kelly's news-adjusted probability is never the input off-site"
},
{
"id": "market_reference",
"execution_input": false,
"what": "The sharp-weighted no-vig consensus, or Pinnacle where available",
"note": null
}
],
"preconditions": [
{
"id": "selection-named",
"check": "selection_named",
"threshold": null,
"card": null,
"on_fail": "Kelly checks bets you name; it doesn't scan the board or rank edges. Name the bet and Kelly runs the stale-price check on it."
},
{
"id": "post-news-probability",
"check": "post_news_probability",
"threshold": null,
"card": null,
"on_fail": "A stale-price check needs your post-news probability; Kelly's own isn't used here."
},
{
"id": "price-live",
"check": "price_fresh",
"threshold": null,
"card": null,
"on_fail": "Price from {time}; recheck the slip."
},
{
"id": "kelly-probability-off-site",
"check": "first_party_surface",
"threshold": null,
"card": null,
"on_fail": "Here the no-vig market gives {m}%, and your price of {price} needs {break-even}%; `edge_status` is {status}. Kelly's own probability is on askkelly.ai."
}
],
"chains": [
{
"id": "C1",
"name": "bet a side at a soft book",
"runs": true
},
{
"id": "C9",
"name": "cross-market, alternate, derivative or live line",
"runs": true
},
{
"id": "C17",
"name": "add after a line move, or wait",
"runs": true
}
],
"formulas": [
"F2.2",
"F13.11",
"F3.1",
"F3.6",
"F3.11",
"F25.3"
],
"price_basis": "user",
"alternative": null,
"aliases": [
"bet before the news hits",
"stale line after injury news",
"beat the line move"
],
"version": 1
},
{
"id": "cross-market-consistency-screens-implied",
"public_id": "stg_0s0kd6zhntk580afkhjf",
"name": "Cross-market consistency screens (implied σ, intensities, ladders, props)",
"ledger_row": 56,
"family": "B1",
"family_name": "Price shopping and market-relative betting",
"verdict": "robust",
"verdict_text": "Robust as screens; conditional as edges",
"route": "check_then_execute",
"route_by_rule": null,
"decisive_figure": "Checks the named market's ladder and implied σ; normal-model alternates misprice crossings of 3 and 7 by 5–8 points (RT).",
"evidence": {
"grade": "research_team",
"grade_words": "research-team computation (RT)",
"through": "2026-02",
"reviewed_at": "2026-10-16",
"review_due": "2027-10-16",
"summary": "research-team computation on nflverse closes (RT); whether US books still use smooth curves is unsourced",
"sources": [
"sports-betting-and-fantasy-strategies.md Part I ledger, row 56",
"strategy-playbooks.md §6 B1"
],
"stale": false
},
"flip_conditions": [
{
"id": "books-use-empirical-pmf",
"evidence": "Dated evidence that US books price alternates from an empirical key-number distribution, or an out-of-sample record of flagged rungs that fails against the close",
"to": "conditional"
}
],
"inputs": [
{
"id": "selection",
"execution_input": true,
"what": "The selection or options the user names (D21, D29: never inferred from a slate)",
"note": "the related markets or rungs the user names"
},
{
"id": "slip_price",
"execution_input": true,
"what": "The price on the user's slip, with its time",
"note": null
},
{
"id": "market_reference",
"execution_input": false,
"what": "The sharp-weighted no-vig consensus, or Pinnacle where available",
"note": null
},
{
"id": "devig_method",
"execution_input": false,
"what": "The de-vig method by market shape, named, with a worst-case screen",
"note": null
}
],
"preconditions": [
{
"id": "selection-named",
"check": "selection_named",
"threshold": null,
"card": null,
"on_fail": "Kelly checks bets you name; it doesn't scan the board or rank edges. Name the market and its rungs, and Kelly checks them for consistency."
},
{
"id": "related-consistent",
"check": "related_prices_consistent",
"threshold": null,
"card": "F19.12",
"on_fail": "The rung at {line} breaks the ladder: a stale price, or across two books an arbitrage handed to the arbitrage check."
}
],
"chains": [
{
"id": "C9",
"name": "cross-market, alternate, derivative or live line",
"runs": true
}
],
"formulas": [
"F2.4",
"F36.5",
"F16.15",
"F19.12",
"F4.10",
"F4.7",
"F6.1",
"F3.1"
],
"price_basis": "user",
"alternative": null,
"aliases": [
"alt line pricing",
"ladder check",
"implied sigma",
"related markets disagree"
],
"version": 1
}
],
"has_more": false,
"next_cursor": null,
"registry_version": "2026.10.2",
"as_of": "2026-10-17T00:00:00Z"
}GET /v1/strategies/{strategy_id}
Get a strategyLink to this section
public, no key needed · 1 credit, not charged during the beta · status live
One strategy: what it claims, the evidence and its verdict, the evidence that would change it, the inputs it needs and the chains that run it.
ParametersLink to this section
strategy_idstring · pathrequiredThe registry ID (line-shopping), from the list.
pattern ^[a-z0-9]+(-[a-z0-9]+)*$ · max length 80
ResponseLink to this section
200 The strategy.
idstringrequiredThe registry ID, a slug such as line-shopping.
public_idstringThe Kelly ID (stg_…), stable for ever.
namestringrequiredThe strategy's name.
ledger_rowintegernullableIts row in the verdict ledger (1 to 134), or null for a Part I verdict without a row.
familystringThe family: B1 to B14 for betting, F1 to F9 for fantasy.
family_namestringThe family's name.
verdictstringrequiredThe verdict.
One of: robust, conditional, weak, myth, prohibited (open: new values may be added).
verdict_textstringThe ledger's full wording, such as Robust, limited.
routestringrequiredWhat a check does: run it, check then run, warn first, decline with the evidence, or refuse.
One of: execute, check_then_execute, warn_first, decline, refuse (open: new values may be added).
route_by_rulestringnullableThe rule that sets the route, when a rule does rather than the verdict.
decisive_figurestringrequiredThe figure the verdict rests on, in words.
evidenceobjectrequiredThe grade (and the grade in words), the month the evidence runs through, review dates, a summary and the sources.
flip_conditionsarray of objectThe evidence that would change the verdict, each with the verdict it would flip to.
inputsarray of objectThe inputs it takes: execution_input true means never assumed (D28).
preconditionsarray of objectThe typed checks it runs, with the sentence shown when one fails.
chainsarray of objectThe decision chains that run it (C1 to C46), each with its name and whether it runs today.
formulasarray of stringThe formula cards it uses, by card ID.
price_basisstringuser (your own price), consensus or none (D27).
alternativeobjectnullableFor a Weak or Myth strategy: the robust one to run instead and what Kelly never produces.
aliasesarray of stringOther names it goes by.
versionintegerrequiredThe verdict's version, bumped when the verdict or its evidence changes.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · not_found
ExampleLink to this section
GET https://api.askkelly.ai/v1/strategies/no-such-thing
Authorization: Bearer $KELLY_API_KEY{
"type": "https://docs.askkelly.ai/problems/not_found",
"title": "Not found",
"status": 404,
"code": "not_found",
"detail": "No strategy has that ID; GET /v1/strategies lists them.",
"param": "strategy_id",
"doc_url": "https://docs.askkelly.ai/problems/not_found",
"request_id": "req_5e3ee64267173eb87368ab0d",
"retryable": false,
"display_message": "That could not be found."
}GET https://api.askkelly.ai/v1/strategies/line-shopping
Authorization: Bearer $KELLY_API_KEY{
"id": "line-shopping",
"public_id": "stg_8ermmkdkdash36dpv8t4",
"name": "Line shopping and reduced juice",
"ledger_row": 1,
"family": "B1",
"family_name": "Price shopping and market-relative betting",
"verdict": "robust",
"verdict_text": "Robust",
"route": "execute",
"route_by_rule": null,
"decisive_figure": "−110 to −105 cuts the break-even from 52.38% to 51.22%.",
"evidence": {
"grade": "peer_reviewed",
"grade_words": "peer-reviewed",
"through": "2026-10",
"reviewed_at": "2026-10-16",
"review_due": "2027-10-16",
"summary": "exact arithmetic",
"sources": [
"sports-betting-and-fantasy-strategies.md Part I ledger, row 1",
"strategy-playbooks.md §6 B1"
],
"stale": false
},
"flip_conditions": [
{
"id": "none-arithmetic",
"evidence": "None; the break-even is arithmetic. Only a change in how books price (no hold) would reopen it.",
"to": null
}
],
"inputs": [
{
"id": "selection",
"execution_input": true,
"what": "The selection or options the user names (D21, D29: never inferred from a slate)",
"note": null
},
{
"id": "slip_price",
"execution_input": true,
"what": "The price on the user's slip, with its time",
"note": "off-site: the prices the user sees, pasted with their time"
},
{
"id": "jurisdiction",
"execution_input": true,
"what": "The state, and any per-bet fee",
"note": "books the user can legally use"
},
{
"id": "market_reference",
"execution_input": false,
"what": "The sharp-weighted no-vig consensus, or Pinnacle where available",
"note": null
},
{
"id": "odds_format",
"execution_input": false,
"what": "American odds as the display format",
"note": null
}
],
"preconditions": [
{
"id": "price-pasted-off-site",
"check": "user_price_given",
"threshold": null,
"card": null,
"on_fail": "Paste the prices you see, and Kelly runs the comparison; live per-book prices are on askkelly.ai."
}
],
"chains": [
{
"id": "C1",
"name": "bet a side at a soft book",
"runs": true
}
],
"formulas": [
"F1.1",
"F1.4",
"F1.7",
"F1.8",
"F3.1"
],
"price_basis": "user",
"alternative": null,
"aliases": [
"line shopping",
"reduced juice",
"best price",
"shop the line"
],
"version": 1
}POST /v1/strategies/{strategy_id}:check
Check a strategy on your numbersLink to this section
public, no key needed · 1 credit, not charged during the beta · MCP tool check_strategy · status live
Runs one strategy's chain on the inputs you send and returns its verdict first, then your inputs and what was assumed, each check, each step and the values. purpose=execute needs every execution input, and a missing one answers 422 missing_execution_input naming all of them; betting chains run on your own price with its time. A Myth returns the evidence and the alternative, never its output. stake is null for API callers (D34).
ParametersLink to this section
strategy_idstring · pathrequiredThe registry ID (line-shopping), from the list.
pattern ^[a-z0-9]+(-[a-z0-9]+)*$ · max length 80
Body, application/json:
purposestringexecute needs every execution input; learn runs the steps it can and names the rest.
One of: learn, execute (open: new values may be added).
default "execute"
inputsobjectThe chain's inputs, by ID, in the shapes GET /v1/strategies/{strategy_id} lists: a price is {"american": -110, "as_of": "…"}, a bankroll {"amount": 2000, "currency": "USD"}.
chainstringOne of the strategy's chains; default its first.
pattern ^C[0-9]{1,2}$
market_idstringA market whose Kelly consensus becomes the reference, listed under assumed.
pattern ^mkt_[0123456789abcdefghjkmnpqrstvwxyz]{20}$
ResponseLink to this section
200 The check, verdict first. A check that didn't pass is a result, not an error.
blockstringrequiredThe answer block, verdict first: show it as written.
outcomestringrequiredWhat happened.
One of: ok, failed_check, blocked, refused, declined (open: new values may be added).
purposestringrequiredlearn or execute.
lead_linestringnullableThe rebuttal's lead line, when the route has one.
registry_versionstringrequiredThe registry's version.
strategyobjectrequiredThe verdict, decisive figure, evidence and alternative.
resultobjectnullableThe chain's run: chain and status, your_inputs and assumed kept apart, read_as, checks, steps, value, valid_at_or_better, stake (null here, D34) and stake_reason, price_basis, fallback, unavailable_inputs, warnings and formulas. Null when nothing ran.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · not_found · payload_too_large · missing_execution_input · invalid_inputs
ExampleLink to this section
POST https://api.askkelly.ai/v1/strategies/longshot-bias-spreads:check
Authorization: Bearer $KELLY_API_KEY
Content-Type: application/json{
"purpose": "execute",
"inputs": {}
}
{
"strategy": {
"id": "longshot-bias-spreads",
"name": "Longshot-bias corrections on spreads and totals",
"ledger_row": 5,
"family": "B1",
"verdict": "myth",
"verdict_text": "Myth",
"route": "decline",
"decisive_figure": "The favourite–longshot bias lives in moneylines: extreme moneyline underdogs returned −22.6%, while spread deciles ran −2.8% to −6.3% with no pattern (2005–13).",
"alternative": {
"id": "power-shin-devig",
"name": "Power or Shin de-vig for n-way markets",
"verdict": "robust",
"never_produced": "A longshot-adjusted fair price for a spread or total"
},
"version": 1,
"evidence": {
"grade": "peer_reviewed",
"grade_words": "peer-reviewed",
"through": "2013-12",
"review_due": "2027-10-16",
"stale": false
}
},
"purpose": "execute",
"registry_version": "2026.10.2",
"outcome": "declined",
"lead_line": "The favourite–longshot bias lives in moneylines: extreme moneyline underdogs returned −22.6%, while spread deciles ran −2.8% to −6.3% with no pattern (2005–13).",
"result": null,
"block": "Longshot-bias corrections on spreads and totals: Myth. The favourite–longshot bias lives in moneylines: extreme moneyline underdogs returned −22.6%, while spread deciles ran −2.8% to −6.3% with no pattern (2005–13).\nEvidence: peer-reviewed, through 2013-12.\nKelly doesn't produce a longshot-adjusted fair price for a spread or total. What runs instead: Power or Shin de-vig for n-way markets (power-shin-devig)."
}POST https://api.askkelly.ai/v1/strategies/line-shopping:check
Authorization: Bearer $KELLY_API_KEY
Content-Type: application/json{
"purpose": "execute",
"inputs": {}
}
{
"type": "https://docs.askkelly.ai/problems/missing_execution_input",
"title": "Missing execution input",
"status": 422,
"code": "missing_execution_input",
"detail": "selection is required to execute this chain. Kelly never assumes these (D28).",
"param": "inputs.selection",
"doc_url": "https://docs.askkelly.ai/problems/missing_execution_input",
"request_id": "req_59cfc319f3827540fe950fa6",
"retryable": false,
"display_message": "One more number is needed from you before this can be worked out.",
"missing": [
{
"id": "selection",
"what": "The selection or options the user names (D21, D29: never inferred from a slate)",
"note": null,
"example": "Chiefs −3"
},
{
"id": "slip_price",
"what": "The price on the user's slip, with its time",
"note": "off-site: the prices the user sees, pasted with their time",
"example": {
"american": -110,
"as_of": "2026-10-18T17:00:00Z"
}
}
]
}POST https://api.askkelly.ai/v1/strategies/line-shopping:check
Authorization: Bearer $KELLY_API_KEY
Content-Type: application/json{
"purpose": "execute",
"inputs": {
"selection": "Chiefs",
"slip_price": {
"american": 120,
"as_of": "2026-10-04T17:00:00Z"
},
"market_reference": {
"prices": {
"Chiefs": {
"american": -125
},
"Bills": {
"american": 105
}
},
"side": "Chiefs"
}
}
}
{
"strategy": {
"id": "line-shopping",
"name": "Line shopping and reduced juice",
"ledger_row": 1,
"family": "B1",
"verdict": "robust",
"verdict_text": "Robust",
"route": "execute",
"decisive_figure": "−110 to −105 cuts the break-even from 52.38% to 51.22%.",
"alternative": null,
"version": 1,
"evidence": {
"grade": "peer_reviewed",
"grade_words": "peer-reviewed",
"through": "2026-10",
"review_due": "2027-10-16",
"stale": false
}
},
"purpose": "execute",
"registry_version": "2026.10.2",
"outcome": "ok",
"lead_line": null,
"result": {
"chain": "C1",
"status": "ok",
"read_as": [
[
"selection",
"Chiefs"
],
[
"slip_price",
"+120 (decimal 2.200)"
],
[
"market_reference",
"reference market Chiefs −125 / Bills +105"
],
[
"devig_method",
"de-vig worst_case (two-way)"
]
],
"your_inputs": {
"selection": "Chiefs",
"slip_price": {
"american": 120,
"as_of": "2026-10-04T17:00:00Z"
}
},
"assumed": {
"market_reference": {
"prices": {
"Chiefs": {
"american": -125
},
"Bills": {
"american": 105
}
},
"side": "Chiefs",
"source": null
},
"devig_method": "worst_case"
},
"checks": [
{
"id": "selection_named",
"check": "selection_named",
"value": "Chiefs",
"threshold": "named by the user",
"status": "pass",
"card": null
},
{
"id": "user_price_given",
"check": "user_price_given",
"value": "+120",
"threshold": "the user's price with its time",
"status": "pass",
"card": null
},
{
"id": "sharp_reference_exists",
"check": "sharp_reference_exists",
"value": 2,
"threshold": "a two-way or complete n-way reference",
"status": "pass",
"card": null
},
{
"id": "devig_method_fits",
"check": "devig_method_fits",
"value": "worst_case",
"threshold": "F2.10 by market shape",
"status": "pass",
"card": "F2.10"
},
{
"id": "worst_case_ev_positive",
"check": "worst_case_ev_positive",
"value": 0.1714285714285717,
"threshold": 0,
"status": "pass",
"card": "F2.9"
}
],
"steps": [
{
"name": "break_even",
"value": 0.45454545454545453,
"formula": "break_even = 1 / O",
"inputs": {
"price": {
"american": 120
},
"decimal": 2.2
},
"formulas": [
"F1.4@1"
],
"details": {},
"warnings": []
},
{
"name": "reference_hold",
"value": {
"booksum": 1.043360433604336,
"overround": 0.04336043360433606,
"hold": 0.04155844155844157
},
"formula": "Σr = Σ 1/O_i; M = Σr − 1; H = 1 − 1/Σr",
"inputs": {
"prices": {
"Chiefs": {
"american": -125
},
"Bills": {
"american": 105
}
}
},
"formulas": [
"F1.7@1"
],
"details": {},
"warnings": []
},
{
"name": "worst_case_devig",
"value": {
"selection": "Chiefs",
"fair_prob": 0.5324675324675325,
"fair_method": "multiplicative",
"break_even": 0.45454545454545453,
"ev_per_unit": 0.1714285714285717,
"prob_over_break_even": 0.077922077922078,
"min_price": {
"american": -113.88888888888893,
"decimal": 1.8780487804878045
},
"reference_hold": 0.04155844155844157,
"by_method": {
"multiplicative": 0.5324675324675325,
"additive": 0.5338753387533876,
"power": 0.5345862274328823,
"odds_ratio": 0.533939444035328,
"probit": 0.5339256899467332
}
},
"formula": "EV = p·O − 1; break_even = 1/O; O_min = (1 + e)/p",
"inputs": {
"price": {
"american": 120
},
"decimal": 2.2,
"reference_prices": {
"Chiefs": {
"american": -125
},
"Bills": {
"american": 105
}
},
"selection": "Chiefs",
"devig_method": "worst_case",
"p_push": 0,
"required_edge": 0
},
"formulas": [
"F1.1@1",
"F1.4@1",
"F1.5@1",
"F1.7@1",
"F2.1@1",
"F2.2@1",
"F2.4@1",
"F2.6@1",
"F2.8@1",
"F2.9@1",
"F3.1@1",
"F3.5@1"
],
"details": {
"booksum": 1.043360433604336,
"overround": 0.04336043360433606,
"method_params": {
"power_k": 1.065458397378173,
"odds_ratio_c": 1.0910894511799618,
"probit_c": 0.054568449530477806
},
"ev_by_method": {
"multiplicative": 0.1714285714285717,
"additive": 0.17452574525745268,
"power": 0.17608970035234117,
"odds_ratio": 0.1746667768777217,
"probit": 0.1746365178828131
},
"excluded_methods": []
},
"warnings": []
},
{
"name": "ev_vs_no_vig",
"value": {
"ev_per_unit": 0.1714285714285717,
"break_even": 0.45454545454545453,
"win_prob": 0.5324675324675325,
"push_prob": 0,
"loss_prob": 0.46753246753246747,
"win_prob_no_push": 0.5324675324675325,
"prob_over_break_even": 0.077922077922078
},
"formula": "EV = p·O − 1",
"inputs": {
"p": 0.5324675324675325,
"price": {
"american": 120
},
"decimal": 2.2,
"p_push": 0
},
"formulas": [
"F3.1@1",
"F1.4@1"
],
"details": {},
"warnings": []
}
],
"value": {
"break_even": 0.45454545454545453,
"worst_case_prob": 0.5324675324675325,
"worst_case_method": "multiplicative",
"no_vig_by_method": {
"multiplicative": 0.5324675324675325,
"additive": 0.5338753387533876,
"power": 0.5345862274328823,
"odds_ratio": 0.533939444035328,
"probit": 0.5339256899467332
},
"shape_method": "additive",
"no_vig": 0.5338753387533876,
"reference_hold": 0.04155844155844157,
"ev_vs_no_vig": 0.1714285714285717,
"ev_by_method": {
"multiplicative": 0.1714285714285717,
"additive": 0.17452574525745268,
"power": 0.17608970035234117,
"odds_ratio": 0.1746667768777217,
"probit": 0.1746365178828131
},
"valid_at_or_better": {
"american": -113
}
},
"valid_at_or_better": [
{
"leg": "Chiefs",
"valid_at_or_better": {
"american": -113
},
"expires": "kickoff"
}
],
"stake": null,
"price_basis": "user",
"fallback": null,
"unavailable_inputs": [],
"warnings": [],
"formulas": [
"F1.4@1",
"F1.7@1",
"F1.1@1",
"F1.5@1",
"F2.1@1",
"F2.2@1",
"F2.4@1",
"F2.6@1",
"F2.8@1",
"F2.9@1",
"F3.1@1",
"F3.5@1"
],
"chain_name": "bet a side at a soft book",
"stake_reason": null
},
"block": "Line shopping and reduced juice: Robust. −110 to −105 cuts the break-even from 52.38% to 51.22%.\nEvidence: peer-reviewed, through 2026-10.\nEvery check passed on bet a side at a soft book (C1)."
}GET /v1/recipes
List recipesLink to this section
public, no key needed · 1 credit, not charged during the beta · status live
One recipe per decision chain (C1 to C46): the question it answers, the strategies that run on it, the inputs they take and the calls for MCP and for the API.
ResponseLink to this section
200 Every recipe, C1 to C46.
dataarray of objectrequiredC1 to C46, in order.
Show 7 fields
idstringrequiredThe chain's ID, C1 to C46.
namestringrequiredThe question it answers.
runsbooleanrequiredWhether it runs today (C27 doesn't yet).
strategiesarray of stringThe strategies on this chain, in ledger order.
execution_inputsarray of stringInputs never assumed (D28).
assumed_inputsarray of stringInputs Kelly may assume and lists as assumed.
callsobjectThe MCP tool call and the API call that run it.
has_morebooleanrequiredAlways false: every recipe comes in one page.
next_cursorstringrequirednullableAlways null: every recipe comes in one page.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted
ExampleLink to this section
GET https://api.askkelly.ai/v1/recipes
Authorization: Bearer $KELLY_API_KEY{
"data": [
{
"id": "C1",
"name": "bet a side at a soft book",
"runs": true,
"strategies": [
"line-shopping",
"soft-books-against-de-vigged",
"early-lines-news-latency",
"steam-chasing-stale-line-sniping",
"fading-markets-bye-week-bump",
"high-total-nfl-unders",
"nba-back-back-early-season",
"mlb-umpire-angles",
"cold-weather-unders",
"west-coast-night-games",
"golf-matchups-three-balls"
],
"execution_inputs": [
"selection",
"slip_price",
"jurisdiction",
"user_probability",
"record"
],
"assumed_inputs": [
"market_reference",
"odds_format",
"devig_method"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "line-shopping",
"chain": "C1"
}
},
"api": "POST /v1/strategies/line-shopping:check"
}
},
{
"id": "C2",
"name": "future or outright",
"runs": true,
"strategies": [
"power-shin-devig",
"blind-futures",
"win-totals-post-news-numbers",
"golf-outrights"
],
"execution_inputs": [
"selection",
"slip_price",
"horizon",
"user_probability",
"bankroll"
],
"assumed_inputs": [
"devig_method",
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "power-shin-devig",
"chain": "C2"
}
},
"api": "POST /v1/strategies/power-shin-devig:check"
}
},
{
"id": "C3",
"name": "exotic or top-k from win prices",
"runs": true,
"strategies": [
"pricing-exotics-top-k-markets",
"place-show-priced-off-win"
],
"execution_inputs": [
"pool_terms",
"selection",
"slip_price",
"bankroll"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "pricing-exotics-top-k-markets",
"chain": "C3"
}
},
"api": "POST /v1/strategies/pricing-exotics-top-k-markets:check"
}
},
{
"id": "C4",
"name": "player prop",
"runs": true,
"strategies": [
"distribution-based-prop-pricing",
"props-edge",
"blind-unders"
],
"execution_inputs": [
"selection",
"slip_price",
"jurisdiction"
],
"assumed_inputs": [
"market_reference",
"devig_method"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "distribution-based-prop-pricing",
"chain": "C4"
}
},
"api": "POST /v1/strategies/distribution-based-prop-pricing:check"
}
},
{
"id": "C5",
"name": "buy a half point",
"runs": true,
"strategies": [
"buying-off-3-20-7"
],
"execution_inputs": [
"selection",
"slip_price",
"user_probability"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "buying-off-3-20-7",
"chain": "C5"
}
},
"api": "POST /v1/strategies/buying-off-3-20-7:check"
}
},
{
"id": "C6",
"name": "Wong teaser",
"runs": true,
"strategies": [
"dog-side-wong-teaser-legs",
"favorite-side-wong-teaser-legs"
],
"execution_inputs": [
"selection",
"teaser_terms",
"slip_price",
"jurisdiction"
],
"assumed_inputs": [
"reference_table"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "dog-side-wong-teaser-legs",
"chain": "C6"
}
},
"api": "POST /v1/strategies/dog-side-wong-teaser-legs:check"
}
},
{
"id": "C7",
"name": "same-game parlay",
"runs": true,
"strategies": [
"correlated-same-game-parlays"
],
"execution_inputs": [
"selection",
"slip_price",
"user_probability"
],
"assumed_inputs": [
"market_reference",
"devig_method"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "correlated-same-game-parlays",
"chain": "C7"
}
},
"api": "POST /v1/strategies/correlated-same-game-parlays:check"
}
},
{
"id": "C8",
"name": "middle or arbitrage",
"runs": true,
"strategies": [
"prediction-market-making-cross-venue",
"middles-across-3-7",
"arbitrage"
],
"execution_inputs": [
"venue_terms",
"jurisdiction",
"slip_price",
"user_probability",
"tickets"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "prediction-market-making-cross-venue",
"chain": "C8"
}
},
"api": "POST /v1/strategies/prediction-market-making-cross-venue:check"
}
},
{
"id": "C9",
"name": "cross-market, alternate, derivative or live line",
"runs": true,
"strategies": [
"power-shin-devig",
"early-lines-news-latency",
"steam-chasing-stale-line-sniping",
"cross-market-consistency-screens-implied",
"high-wind-unders-before-market",
"starting-pitcher-first-five-pricing"
],
"execution_inputs": [
"selection",
"slip_price",
"user_probability",
"record"
],
"assumed_inputs": [
"devig_method",
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "power-shin-devig",
"chain": "C9"
}
},
"api": "POST /v1/strategies/power-shin-devig:check"
}
},
{
"id": "C10",
"name": "convert a bonus bet",
"runs": true,
"strategies": [
"promo-bonus-conversion"
],
"execution_inputs": [
"promotion_terms",
"tickets",
"slip_price",
"jurisdiction"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "promo-bonus-conversion",
"chain": "C10"
}
},
"api": "POST /v1/strategies/promo-bonus-conversion:check"
}
},
{
"id": "C11",
"name": "fixed or balance target with −EV bets",
"runs": true,
"strategies": [
"bold-play-toward-fixed-balance",
"promo-bonus-conversion"
],
"execution_inputs": [
"bankroll",
"slip_price",
"promotion_terms",
"tickets",
"jurisdiction"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "bold-play-toward-fixed-balance",
"chain": "C11"
}
},
"api": "POST /v1/strategies/bold-play-toward-fixed-balance:check"
}
},
{
"id": "C12",
"name": "hedge a future",
"runs": true,
"strategies": [],
"execution_inputs": [],
"assumed_inputs": [],
"calls": {
"mcp": null,
"api": null
}
},
{
"id": "C13",
"name": "series price or series cash-out",
"runs": true,
"strategies": [],
"execution_inputs": [],
"assumed_inputs": [],
"calls": {
"mcp": null,
"api": null
}
},
{
"id": "C14",
"name": "trade an event contract",
"runs": true,
"strategies": [
"prediction-market-making-cross-venue",
"recalibrating-prediction-market-prices-before"
],
"execution_inputs": [
"venue_terms",
"jurisdiction",
"slip_price",
"user_probability",
"horizon"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "prediction-market-making-cross-venue",
"chain": "C14"
}
},
"api": "POST /v1/strategies/prediction-market-making-cross-venue:check"
}
},
{
"id": "C15",
"name": "quote as a maker",
"runs": true,
"strategies": [
"prediction-market-making-cross-venue",
"selling-skewed-side-laying-longshots"
],
"execution_inputs": [
"venue_terms",
"jurisdiction",
"slip_price",
"user_probability",
"selection"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "prediction-market-making-cross-venue",
"chain": "C15"
}
},
"api": "POST /v1/strategies/prediction-market-making-cross-venue:check"
}
},
{
"id": "C16",
"name": "size a bet",
"runs": true,
"strategies": [
"fractional-kelly-0-2-0",
"fractional-kelly-raw-unshrunk-model",
"joint-slate-kelly-common-shock",
"cushion-drawdown-constrained-kelly",
"pre-committed-fixed-fraction-stakes"
],
"execution_inputs": [
"user_probability",
"slip_price",
"bankroll",
"record",
"selection"
],
"assumed_inputs": [
"market_reference",
"devig_method",
"sizing_defaults"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "fractional-kelly-0-2-0",
"chain": "C16"
}
},
"api": "POST /v1/strategies/fractional-kelly-0-2-0:check"
}
},
{
"id": "C17",
"name": "add after a line move, or wait",
"runs": true,
"strategies": [
"early-lines-news-latency",
"sizing-total-position-after-favorable"
],
"execution_inputs": [
"selection",
"slip_price",
"user_probability",
"tickets",
"bankroll"
],
"assumed_inputs": [
"market_reference",
"sizing_defaults"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "early-lines-news-latency",
"chain": "C17"
}
},
"api": "POST /v1/strategies/early-lines-news-latency:check"
}
},
{
"id": "C18",
"name": "does a record show skill",
"runs": true,
"strategies": [
"proving-edge-e-process-frozen"
],
"execution_inputs": [
"record",
"slip_price"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "proving-edge-e-process-frozen",
"chain": "C18"
}
},
"api": "POST /v1/strategies/proving-edge-e-process-frozen:check"
}
},
{
"id": "C19",
"name": "screen many angles, touts or models",
"runs": true,
"strategies": [
"screening-many-touts-angles-models"
],
"execution_inputs": [
"selection",
"record",
"slip_price"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "screening-many-touts-angles-models",
"chain": "C19"
}
},
"api": "POST /v1/strategies/screening-many-touts-angles-models:check"
}
},
{
"id": "C20",
"name": "allocate volume across untested angles",
"runs": true,
"strategies": [
"thompson-sampling-across-untested-angles"
],
"execution_inputs": [
"selection",
"record",
"slip_price"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "thompson-sampling-across-untested-angles",
"chain": "C20"
}
},
"api": "POST /v1/strategies/thompson-sampling-across-untested-angles:check"
}
},
{
"id": "C21",
"name": "grade a population for skill",
"runs": true,
"strategies": [
"single-expert-beating-consensus",
"skill-tests-split-half-ex",
"three-to-five-percent-long-run-winners",
"head-to-head-record-skill"
],
"execution_inputs": [
"selection",
"record",
"league_settings"
],
"assumed_inputs": [
"linked_league"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "single-expert-beating-consensus",
"chain": "C21"
}
},
"api": "POST /v1/strategies/single-expert-beating-consensus:check"
}
},
{
"id": "C22",
"name": "grade a bettor by CLV",
"runs": true,
"strategies": [
"clv-against-no-vig-sharp"
],
"execution_inputs": [
"record",
"slip_price"
],
"assumed_inputs": [
"market_reference",
"devig_method"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "clv-against-no-vig-sharp",
"chain": "C22"
}
},
"api": "POST /v1/strategies/clv-against-no-vig-sharp:check"
}
},
{
"id": "C23",
"name": "evaluate or blend a model",
"runs": true,
"strategies": [
"fundamental-model-blended-market",
"online-blending-close-expert",
"model-selection-calibration-over-accuracy",
"calibrating-model-probabilities-before-staking",
"late-odds-changes-model-feature"
],
"execution_inputs": [
"record",
"slip_price"
],
"assumed_inputs": [
"market_reference",
"devig_method"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "fundamental-model-blended-market",
"chain": "C23"
}
},
"api": "POST /v1/strategies/fundamental-model-blended-market:check"
}
},
{
"id": "C24",
"name": "test a model against the close",
"runs": true,
"strategies": [
"poisson-standalone-soccer-edge"
],
"execution_inputs": [
"record",
"slip_price"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "poisson-standalone-soccer-edge",
"chain": "C24"
}
},
"api": "POST /v1/strategies/poisson-standalone-soccer-edge:check"
}
},
{
"id": "C25",
"name": "build or test a power rating",
"runs": true,
"strategies": [
"nfl-home-field-1-6",
"turnover-close-game-regression",
"standalone-elo-state-space-ratings",
"ratings-updated-closing-odds"
],
"execution_inputs": [
"selection",
"slip_price",
"record"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "nfl-home-field-1-6",
"chain": "C25"
}
},
"api": "POST /v1/strategies/nfl-home-field-1-6:check"
}
},
{
"id": "C26",
"name": "value a player's absence",
"runs": true,
"strategies": [
"starter-minus-backup-qb-value"
],
"execution_inputs": [
"selection",
"slip_price",
"user_probability",
"bankroll"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "starter-minus-backup-qb-value",
"chain": "C26"
}
},
"api": "POST /v1/strategies/starter-minus-backup-qb-value:check"
}
},
{
"id": "C27",
"name": "validate a live win-probability model",
"runs": false,
"strategies": [
"live-state-models-low-attention"
],
"execution_inputs": [],
"assumed_inputs": [],
"calls": {
"mcp": null,
"api": null
}
},
{
"id": "C28",
"name": "publish a projection",
"runs": true,
"strategies": [
"opportunity-over-efficiency-touchdown-regression",
"distributions-checked-pit-crps"
],
"execution_inputs": [
"selection",
"league_settings",
"record"
],
"assumed_inputs": [
"linked_league"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "opportunity-over-efficiency-touchdown-regression",
"chain": "C28"
}
},
"api": "POST /v1/strategies/opportunity-over-efficiency-touchdown-regression:check"
}
},
{
"id": "C29",
"name": "evaluate a fantasy projection",
"runs": true,
"strategies": [
"distributions-checked-pit-crps",
"scoring-projections-consistent-loss"
],
"execution_inputs": [
"selection",
"record"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "distributions-checked-pit-crps",
"chain": "C29"
}
},
"api": "POST /v1/strategies/distributions-checked-pit-crps:check"
}
},
{
"id": "C30",
"name": "after-tax edge",
"runs": true,
"strategies": [
"after-tax-break-even-2026"
],
"execution_inputs": [
"slip_price",
"tax_status",
"jurisdiction"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "after-tax-break-even-2026",
"chain": "C30"
}
},
"api": "POST /v1/strategies/after-tax-break-even-2026:check"
}
},
{
"id": "C31",
"name": "draft pick",
"runs": true,
"strategies": [
"vbd-vorp-baseline-drafting-adp",
"zero-rb",
"hero-anchor-rb",
"robust-rb",
"elite-te-te-premium-large",
"late-te",
"late-round-qb-one-qb",
"tiers",
"handcuffs-draft-priority"
],
"execution_inputs": [
"league_settings",
"draft_position",
"selection",
"contest_terms"
],
"assumed_inputs": [
"linked_league"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "vbd-vorp-baseline-drafting-adp",
"chain": "C31"
}
},
"api": "POST /v1/strategies/vbd-vorp-baseline-drafting-adp:check"
}
},
{
"id": "C32",
"name": "auction bid",
"runs": true,
"strategies": [
"bid-value-auctions",
"stars-scrubs",
"keeper-inflation-math",
"paying-markets-full-top-pick"
],
"execution_inputs": [
"league_settings",
"draft_position",
"selection",
"horizon"
],
"assumed_inputs": [
"linked_league"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "bid-value-auctions",
"chain": "C32"
}
},
"api": "POST /v1/strategies/bid-value-auctions:check"
}
},
{
"id": "C33",
"name": "FAAB bid",
"runs": true,
"strategies": [
"faab-bid-shading",
"guillotine-floor-early-reserve-faab"
],
"execution_inputs": [
"league_settings",
"faab_state",
"selection"
],
"assumed_inputs": [
"linked_league",
"current_slate"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "faab-bid-shading",
"chain": "C33"
}
},
"api": "POST /v1/strategies/faab-bid-shading:check"
}
},
{
"id": "C34",
"name": "start/sit",
"runs": true,
"strategies": [
"streaming-kicker-defense",
"variance-aware-start-sit"
],
"execution_inputs": [
"league_settings",
"selection"
],
"assumed_inputs": [
"linked_league",
"current_slate",
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "streaming-kicker-defense",
"chain": "C34"
}
},
"api": "POST /v1/strategies/streaming-kicker-defense:check"
}
},
{
"id": "C35",
"name": "evaluate a trade",
"runs": true,
"strategies": [
"trades-playoff-title-odds-two",
"winning-the-trade-chart"
],
"execution_inputs": [
"league_settings",
"selection"
],
"assumed_inputs": [
"linked_league"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "trades-playoff-title-odds-two",
"chain": "C35"
}
},
"api": "POST /v1/strategies/trades-playoff-title-odds-two:check"
}
},
{
"id": "C36",
"name": "trade a dynasty pick",
"runs": true,
"strategies": [
"rb-age-cliff-around-30",
"dynasty-buy-picks-season-sell",
"dynasty-top-three-rookie-pick",
"dynasty-current-year-firsts-overpriced",
"paying-markets-full-top-pick",
"dynasty-rebuild-punt-default",
"dynasty-precise-age-curves",
"calculators-as-truth"
],
"execution_inputs": [
"selection",
"league_settings",
"horizon",
"draft_position"
],
"assumed_inputs": [
"linked_league"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "rb-age-cliff-around-30",
"chain": "C36"
}
},
"api": "POST /v1/strategies/rb-age-cliff-around-30:check"
}
},
{
"id": "C37",
"name": "best-ball pick",
"runs": true,
"strategies": [
"zero-rb",
"hero-anchor-rb",
"robust-rb",
"best-ball-week-17-game",
"best-ball-wr-heavy-two",
"best-ball-zero-rb",
"best-ball-uniqueness-own-sake"
],
"execution_inputs": [
"league_settings",
"draft_position",
"contest_terms",
"selection",
"jurisdiction"
],
"assumed_inputs": [
"linked_league"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "zero-rb",
"chain": "C37"
}
},
"api": "POST /v1/strategies/zero-rb:check"
}
},
{
"id": "C38",
"name": "cash lineup",
"runs": true,
"strategies": [
"dfs-cash-chalk-points-per",
"dfs-10-bankroll-per-day"
],
"execution_inputs": [
"jurisdiction",
"contest_terms",
"selection",
"demonstrated_rate",
"bankroll"
],
"assumed_inputs": [
"current_slate",
"sizing_defaults"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "dfs-cash-chalk-points-per",
"chain": "C38"
}
},
"api": "POST /v1/strategies/dfs-cash-chalk-points-per:check"
}
},
{
"id": "C39",
"name": "tournament lineups",
"runs": true,
"strategies": [
"dfs-gpp-qb-stacks-no",
"dfs-gpp-ownership-leverage",
"dfs-duplicates-maximum-entropy-roster",
"dfs-mass-multi-entry-inherently"
],
"execution_inputs": [
"jurisdiction",
"contest_terms",
"selection"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "dfs-gpp-qb-stacks-no",
"chain": "C39"
}
},
"api": "POST /v1/strategies/dfs-gpp-qb-stacks-no:check"
}
},
{
"id": "C40",
"name": "pick'em slip",
"runs": true,
"strategies": [
"pickem-de-vigged-legs-plus",
"pickem-correlated-power-plays"
],
"execution_inputs": [
"jurisdiction",
"pickem_terms",
"selection",
"user_probability",
"bankroll"
],
"assumed_inputs": [
"reference_table",
"devig_method",
"market_reference",
"sizing_defaults"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "pickem-de-vigged-legs-plus",
"chain": "C40"
}
},
"api": "POST /v1/strategies/pickem-de-vigged-legs-plus:check"
}
},
{
"id": "C41",
"name": "survivor pick",
"runs": true,
"strategies": [
"survivor-ev-odds-popularity-future",
"survivor-partial-horizon-planning",
"survivor-always-biggest-favorite"
],
"execution_inputs": [
"pool_rules",
"selection",
"jurisdiction"
],
"assumed_inputs": [
"market_reference",
"current_slate"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "survivor-ev-odds-popularity-future",
"chain": "C41"
}
},
"api": "POST /v1/strategies/survivor-ev-odds-popularity-future:check"
}
},
{
"id": "C42",
"name": "pick'em or confidence pool",
"runs": true,
"strategies": [
"pickem-pools-contrarianism-scaled-pool"
],
"execution_inputs": [
"pool_rules",
"selection",
"jurisdiction"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "pickem-pools-contrarianism-scaled-pool",
"chain": "C42"
}
},
"api": "POST /v1/strategies/pickem-pools-contrarianism-scaled-pool:check"
}
},
{
"id": "C43",
"name": "bracket",
"runs": true,
"strategies": [
"brackets-contrarian-champion-large-pools",
"chalk-large-bracket-pool"
],
"execution_inputs": [
"pool_rules",
"selection",
"jurisdiction"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "brackets-contrarian-champion-large-pools",
"chain": "C43"
}
},
"api": "POST /v1/strategies/brackets-contrarian-champion-large-pools:check"
}
},
{
"id": "C44",
"name": "Calcutta bid",
"runs": true,
"strategies": [
"calcutta-share-times-pot"
],
"execution_inputs": [
"pool_rules",
"selection",
"jurisdiction"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "calcutta-share-times-pot",
"chain": "C44"
}
},
"api": "POST /v1/strategies/calcutta-share-times-pot:check"
}
},
{
"id": "C45",
"name": "lottery or shared prize",
"runs": true,
"strategies": [
"lotteries-unpopular-numbers",
"lotteries-roll-down-large-rollover"
],
"execution_inputs": [
"pool_terms"
],
"assumed_inputs": [],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "lotteries-unpopular-numbers",
"chain": "C45"
}
},
"api": "POST /v1/strategies/lotteries-unpopular-numbers:check"
}
},
{
"id": "C46",
"name": "ATS-contest pick",
"runs": true,
"strategies": [
"ats-contests-stale-contest-lines"
],
"execution_inputs": [
"contest_terms",
"selection",
"jurisdiction"
],
"assumed_inputs": [
"market_reference"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "ats-contests-stale-contest-lines",
"chain": "C46"
}
},
"api": "POST /v1/strategies/ats-contests-stale-contest-lines:check"
}
}
],
"has_more": false,
"next_cursor": null
}GET /v1/recipes/{recipe_id}
Get a recipeLink to this section
public, no key needed · 1 credit, not charged during the beta · status live
One recipe and its calls.
ParametersLink to this section
recipe_idstring · pathrequiredThe chain's ID, C1 to C46.
pattern ^[Cc][0-9]{1,2}$
ResponseLink to this section
200 The recipe.
idstringrequiredThe chain's ID, C1 to C46.
namestringrequiredThe question it answers.
runsbooleanrequiredWhether it runs today (C27 doesn't yet).
strategiesarray of stringThe strategies on this chain, in ledger order.
execution_inputsarray of stringInputs never assumed (D28).
assumed_inputsarray of stringInputs Kelly may assume and lists as assumed.
callsobjectThe MCP tool call and the API call that run it.
ErrorsLink to this section
invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · not_found
ExampleLink to this section
GET https://api.askkelly.ai/v1/recipes/C16
Authorization: Bearer $KELLY_API_KEY{
"id": "C16",
"name": "size a bet",
"runs": true,
"strategies": [
"fractional-kelly-0-2-0",
"fractional-kelly-raw-unshrunk-model",
"joint-slate-kelly-common-shock",
"cushion-drawdown-constrained-kelly",
"pre-committed-fixed-fraction-stakes"
],
"execution_inputs": [
"user_probability",
"slip_price",
"bankroll",
"record",
"selection"
],
"assumed_inputs": [
"market_reference",
"devig_method",
"sizing_defaults"
],
"calls": {
"mcp": {
"tool": "check_strategy",
"arguments": {
"strategy": "fractional-kelly-0-2-0",
"chain": "C16"
}
},
"api": "POST /v1/strategies/fractional-kelly-0-2-0:check"
}
}Generated from Kelly API 2026-10-05.