{
  "info": {
    "_postman_id": "6281c465-d4f2-432b-e619-a27e2d633ea5",
    "name": "Kelly API 2026-10-05",
    "description": "Generated from the OpenAPI definition. Set KELLY_API_KEY in your Postman environment; never paste a key into a request.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{KELLY_API_KEY}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.askkelly.ai"
    },
    {
      "key": "KELLY_API_KEY",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "status",
      "item": [
        {
          "name": "Check that the service answers",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Api-Version",
                "value": "2026-10-05"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "health"
              ],
              "query": [],
              "variable": []
            },
            "description": "Always 200 while the process answers; the body says which dependencies are reachable. Served by both the API and the Wire service.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "See who is calling and what is left",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Api-Version",
                "value": "2026-10-05"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/status",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "status"
              ],
              "query": [],
              "variable": []
            },
            "description": "Your credential, mode, plan and scopes, your rate-limit window and your credits for the period, with the same values in the response headers. It costs nothing and is never refused for quota, so it is the call to make first, with or without a key.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "reference",
      "item": [
        {
          "name": "Search published reference entries",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Api-Version",
                "value": "2026-10-05"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/reference",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "reference"
              ],
              "query": [
                {
                  "key": "q",
                  "value": "",
                  "disabled": true,
                  "description": "Words to search for, such as 'is sports betting legal in New Jersey' or 'moneyline'. Matches titles, other phrasings, summaries, text and facts, and tolerates misspellings. Without q, the list is every published entry matching the filters, in topic order."
                },
                {
                  "key": "kind",
                  "value": "",
                  "disabled": true,
                  "description": "Only entries of this kind."
                },
                {
                  "key": "jurisdiction",
                  "value": "",
                  "disabled": true,
                  "description": "Only entries for this ISO 3166 code, such as US, US-NJ or CA-ON (any case)."
                },
                {
                  "key": "operator",
                  "value": "",
                  "disabled": true,
                  "description": "Only entries about this operator's own rules or policies, by its slug."
                },
                {
                  "key": "product",
                  "value": "",
                  "disabled": true,
                  "description": "Only entries covering this product."
                },
                {
                  "key": "limit",
                  "value": "10",
                  "disabled": true,
                  "description": "Entries per page, 1 to 25; default 10."
                },
                {
                  "key": "cursor",
                  "value": "",
                  "disabled": true,
                  "description": "The next_cursor of the previous page. Send the same filters with it; changed filters are refused with invalid_request."
                }
              ],
              "variable": []
            },
            "description": "Rules, laws, tax tables, operators' policies, terms, guides and help, each sourced and dated. Searches by words (full text and close spellings) and filters by kind, jurisdiction, operator and product. Results are in relevance order only. Only published entries are listed.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Get a published reference entry",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Api-Version",
                "value": "2026-10-05"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/reference/:topic_id",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "reference",
                ":topic_id"
              ],
              "query": [],
              "variable": [
                {
                  "key": "topic_id",
                  "value": "",
                  "description": "The topic's Kelly ID (ref_…), from a list or search result."
                }
              ]
            },
            "description": "One published entry: its answer, text, facts with their sources, review dates and, for law and tax, its notice. A topic that is unknown or still in review is not found.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "Kelly Wire",
      "item": [
        {
          "name": "Get a Kelly Wire ticket",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Api-Version",
                "value": "2026-10-05"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/wire/tickets",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "wire",
                "tickets"
              ],
              "query": [],
              "variable": []
            },
            "description": "Mints a single-use ticket that lives 60 seconds, for the socket (wss://wire.askkelly.ai/v1, sent in the first message) or for one stream (GET /v1/stream/{topic}?ticket=). Needs an API key with the wire:connect scope, or an OAuth token. Stream tickets name their topics; socket tickets may name some (bound to them) or none. Each topic is still checked against the plan when it is opened.",
            "auth": {
              "type": "noauth"
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"transport\": \"ws\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Stream one topic as server-sent events",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Api-Version",
                "value": "2026-10-05"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/stream/:topic",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "stream",
                ":topic"
              ],
              "query": [
                {
                  "key": "ticket",
                  "value": "",
                  "disabled": true,
                  "description": "A ticket minted for sse that names this topic (POST /v1/wire/tickets): single use, 60 seconds or less (STR-24). The one credential a URL may carry; never an API key. Omit it on askkelly.ai, where the session is used."
                },
                {
                  "key": "last_event_id",
                  "value": "",
                  "disabled": true,
                  "description": "The same as Last-Event-ID, for a new EventSource, which can't set the header; the header wins when both are sent."
                }
              ],
              "variable": [
                {
                  "key": "topic",
                  "value": "",
                  "description": "The topic, such as game:gm_… or market:mkt_… (the Wire topics in the AsyncAPI document)."
                }
              ]
            },
            "description": "One topic as server-sent events (STR-21), for widgets, simple clients and cards whose host blocks sockets. Each event's `id` is the topic's seq: first `event: snapshot` (the topic's state, its last seq, expected latency and liveness), then one event per change, named by its type (game.state, market.update, market.suspended, ...), each seq the previous + 1. Send `Last-Event-ID` to resume: missed changes replay while they are within the 120-second window, else a fresh snapshot comes first. A gap is answered with a fresh snapshot. A comment line pings every 20 seconds; `event: drain` comes 30 seconds before the stream's 24-hour limit, and `event: error` (a catalogue code) when the topic is no longer available, after which the stream ends. Off askkelly.ai streams carry engine-computed values only. Each open stream costs wire_topic_hour credits when it opens and each hour it stays open.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "answers",
      "item": [
        {
          "name": "Ask a question",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Api-Version",
                "value": "2026-10-05"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/v1/answers",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "answers"
              ],
              "query": [],
              "variable": []
            },
            "description": "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.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        }
      ]
    }
  ]
}
