# answers

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

| Method | Path | Title | Access | Price | MCP tool |
| --- | --- | --- | --- | --- | --- |
| POST | [`/v1/answers`](#create-answer) | Ask a question | `run:answers` | [object Object] | none |

`POST /v1/answers`

## Ask a question
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.

### Parameters
Body, `application/json` (required):

- `question` string  
  The question, in words.  
  min length 1 · max length 1000
- `state` string · nullable  
  The person's US state, two letters, for the helpline and the law.  
  pattern ^[A-Za-z]{2}$
- `end_user_id` string · nullable  
  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

### Response
`200` The answer as server-sent events, when `Accept: text/event-stream` is sent: `answer.started`, then each sentence's new `answer.citation`s 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.

### Errors
[`invalid_request`](/problems/invalid_request) · [`credential_in_url`](/problems/credential_in_url) · [`unsupported_api_version`](/problems/unsupported_api_version) · [`unauthenticated`](/problems/unauthenticated) · [`method_not_allowed`](/problems/method_not_allowed) · [`rate_limited`](/problems/rate_limited) · [`internal_error`](/problems/internal_error) · [`service_unavailable`](/problems/service_unavailable) · [`quota_exhausted`](/problems/quota_exhausted) · [`insufficient_scope`](/problems/insufficient_scope) · [`not_entitled`](/problems/not_entitled) · [`payload_too_large`](/problems/payload_too_large)

### Example
```http
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"
}
```

```json
{
  "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"
}
```

Where each value comes from:

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

```http
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"
}
```

```json
{
  "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."
}
```

```http
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"
}
```

```json
{
  "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."
}
```

```http
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"
}
```

```json
"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.

---

Generated from Kelly API 2026-10-05

Support: support@askkelly.ai · Security and disclosure: https://docs.askkelly.ai/security

Information is the edge. Odds are information, not advice · 21+ · Get help
