Skip to content
Kelly

Developers

askkelly.aiGet a key

answers

Copy page

Ask a question in words and get a sourced answer, and the method behind any number.

MethodPathTitleAccessPriceMCP tool
POST/v1/answersAsk a questionrun:answers[object Object]none

POST /v1/answers

Ask a questionLink to this section

scope run:answers · [object Object] credits, not charged during the beta · status live

Kelly's answer to a question in words, with every figure's source and time. Send Accept: text/event-stream to stream it as server-sent events, one per answer event; otherwise the finished answer comes back as JSON with 201. Needs an API key with run:answers, never the keyless tier. A key answers from public data only: odds maths and payouts, no-vig and hold, lines, games, players, and reviewed terms, house rules, tax and the law; other questions get a polite not-yet. end_user_id (optional, opaque, up to 64 characters) names the caller's own user and grants nothing; it becomes required with league-aware answers, which will need the league owner's OAuth token with read:league and an explicit league_id (trifecta.md F2). Answer IDs are random handles, never minted from natural keys (ARCH-8). The question is never logged or stored.

ParametersLink to this section

Body, application/json (required):

questionstring

The question, in words.

min length 1 · max length 1000

statestringnullable

The person's US state, two letters, for the helpline and the law.

pattern ^[A-Za-z]{2}$

end_user_idstringnullable

Your own opaque ID for the person asking (G1-F02). It grants nothing, and the slice reads no league with it; it becomes required when answers read a league.

min length 1 · max length 64

ResponseLink to this section

200 The answer as server-sent events, when Accept: text/event-stream is sent: answer.started, then each sentence's new answer.citations and its answer.delta, then answer.completed (the answer:{id} topic's events in the AsyncAPI document; each id counts from 1). A failure after the stream starts ends it with event: error, whose data is a problem object.

text/event-stream: Server-sent events; each data line is one answer event's data.

ErrorsLink to this section

invalid_request · credential_in_url · unsupported_api_version · unauthenticated · method_not_allowed · rate_limited · internal_error · service_unavailable · quota_exhausted · insufficient_scope · not_entitled · payload_too_large

ExampleLink to this section

Request
POST https://api.askkelly.ai/v1/answers
Authorization: Bearer $KELLY_API_KEY
Content-Type: application/json

{ "question": "What's the no-vig on Chiefs -110 and Bills -110?", "state": "NJ" }

Response, 201
{
  "object": "answer",
  "answer_id": "ans_gqpvxwaqdbdxwfndzq7k",
  "status": "completed",
  "category": 17,
  "playbook": null,
  "tier": "standard",
  "supersedes": null,
  "summary": "No-vig probability, Chiefs: 50.0% (Kelly, 17:30 UTC).",
  "sentences": [
    {
      "index": 0,
      "text": "Each side is 50.0% with the vig removed.",
      "citations": [
        "c1"
      ]
    }
  ],
  "citations": [
    {
      "citation_id": "c1",
      "kind": "calculation",
      "label": "Kelly remove vig calculation",
      "source": "Kelly",
      "as_of": "2026-10-04T17:30:00Z",
      "ref": null,
      "url": null,
      "reviewed_at": null,
      "formulas": [
        "F1.7@1",
        "F2.4@1"
      ]
    }
  ],
  "figures": [
    {
      "figure_id": "f1",
      "field": "calculation_result.result.fair_probs",
      "label": "No-vig probability, Chiefs",
      "value": 0.5000000000000001,
      "display": "50.0%",
      "unit": "probability",
      "as_of": "2026-10-04T17:30:00Z",
      "source": "Kelly",
      "citation_id": "c1",
      "topic": null,
      "selection_id": null,
      "edge_status": null
    },
    {
      "figure_id": "f2",
      "field": "calculation_result.result.fair_probs",
      "label": "No-vig probability, Bills",
      "value": 0.5000000000000001,
      "display": "50.0%",
      "unit": "probability",
      "as_of": "2026-10-04T17:30:00Z",
      "source": "Kelly",
      "citation_id": "c1",
      "topic": null,
      "selection_id": null,
      "edge_status": null
    }
  ],
  "live_topics": [],
  "rg_line": "21+ · Help: 1-800-MY-RESET",
  "assumptions": [],
  "links": {},
  "as_of": "2026-10-04T17:30:00Z",
  "source": "Kelly",
  "attribution": null,
  "created_at": "2026-10-04T17:30:00Z",
  "completed_at": "2026-10-04T17:30:00Z"
}
  1. Kelly · as of 2026-10-04T17:30:00Z
  2. Kelly · as of 2026-10-04T17:30:00Z
  3. Kelly · as of 2026-10-04T17:30:00Z
  4. Kelly · as of 2026-10-04T17:30:00Z
Request
POST https://api.askkelly.ai/v1/answers
Authorization: Bearer $KELLY_API_KEY
Content-Type: application/json

{ "question": "What's the no-vig on Chiefs -110 and Bills -110?", "state": "NJ" }

Response, 403
{
  "type": "https://docs.askkelly.ai/problems/insufficient_scope",
  "title": "Insufficient scope",
  "status": 403,
  "code": "insufficient_scope",
  "detail": "This needs the run:answers scope.",
  "param": "run:answers",
  "doc_url": "https://docs.askkelly.ai/problems/insufficient_scope",
  "request_id": "req_37db7038a23dd1ab2e0cdbd4",
  "retryable": false,
  "display_message": "This app needs one more permission to do that."
}
Request
POST https://api.askkelly.ai/v1/answers
Authorization: Bearer $KELLY_API_KEY
Content-Type: application/json

{ "question": "What's the no-vig on Chiefs -110 and Bills -110?", "state": "Ohio" }

Response, 400
{
  "type": "https://docs.askkelly.ai/problems/invalid_request",
  "title": "Invalid request",
  "status": 400,
  "code": "invalid_request",
  "detail": "state: String should match pattern '^[A-Za-z]{2}$'",
  "param": "state",
  "doc_url": "https://docs.askkelly.ai/problems/invalid_request",
  "request_id": "req_34424fb3e3f0737c228d3168",
  "retryable": false,
  "display_message": "Something in that request was not understood."
}
Request
POST https://api.askkelly.ai/v1/answers
Authorization: Bearer $KELLY_API_KEY
Accept: text/event-stream
Content-Type: application/json

{ "question": "What's the no-vig on Chiefs -110 and Bills -110?", "state": "NJ" }

Response, 200
"event: answer.started\nid: 1\ndata: {\"answer_id\":\"ans_z2dw1zfpzg0hg9cx1c4b\",\"status\":\"streaming\",\"category\":null,\"playbook\":null,\"tier\":\"standard\",\"supersedes\":null,\"live_topics\":[],\"created_at\":\"2026-10-04T17:30:00Z\"}\n\nevent: answer.citation\nid: 2\ndata: {\"answer_id\":\"ans_z2dw1zfpzg0hg9cx1c4b\",\"citation_id\":\"c1\",\"kind\":\"calculation\",\"label\":\"Kelly remove vig calculation\",\"source\":\"Kelly\",\"as_of\":\"2026-10-04T17:30:00Z\",\"ref\":null,\"url\":null,\"reviewed_at\":null,\"formulas\":[\"F1.7@1\",\"F2.4@1\"]}\n\nevent: answer.delta\nid: 3\ndata: {\"answer_id\":\"ans_z2dw1zfpzg0hg9cx1c4b\",\"index\":0,\"text\":\"Each side is 50.0% with the vig removed.\",\"citations\":[\"c1\"]}\n\nevent: answer.completed\nid: 4\ndata: {\"answer_id\":\"ans_z2dw1zfpzg0hg9cx1c4b\",\"status\":\"completed\",\"summary\":\"No-vig probability, Chiefs: 50.0% (Kelly, 17:30 UTC).\",\"rg_line\":\"21+ · Help: 1-800-MY-RESET\",\"assumptions\":[],\"links\":{},\"sentence_count\":1,\"live_topics\":[],\"as_of\":\"2026-10-04T17:30:00Z\",\"source\":\"Kelly\",\"attribution\":null,\"completed_at\":\"2026-10-04T17:30:00Z\"}\n\n"

Generated from Kelly API 2026-10-05.

Support: support@askkelly.ai · Security and disclosure