Docs menu
Getting started

Quickstart

Your first call in five minutes.

1. Create a key

In the app, open Settings → API, accept the API terms and click Create API key. The key is shown once. Store it somewhere safe, then make it available to your code as an environment variable:

export KELLYIQ_API_KEY="kiqa_…"

2. Check it works

curl https://api.kellyiq.com/v1/me \
  -H "Authorization: Bearer $KELLYIQ_API_KEY"

You get back your plan and today’s allowance (trimmed):

{
  "tier": "sharp",
  "limits": {
    "optimize": {
      "perDay": 250,
      "usedToday": 3,
      "remainingToday": 247,
      "resetsAt": "2026-10-20T04:00:00Z",
      "maxConcurrentPerAccount": 1,
      "perMinute": 10
    }
  }
}

3. Size a slate

Send your bankroll and your bets. For each bet: the sport (a key from GET /v1/sports), both teams, both sides’ American odds (both are needed to remove the bookmaker’s margin) and how strongly you rate it.

curl https://api.kellyiq.com/v1/optimize \
  -H "Authorization: Bearer $KELLYIQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "bankroll": 1000,
  "picks": [
    {
      "id": "lad",
      "sport": "baseball_mlb",
      "team": "Dodgers",
      "opponent": "Padres",
      "odds": -145,
      "opponentOdds": 125,
      "confidence": "STRONG_EDGE"
    },
    {
      "id": "chc",
      "sport": "baseball_mlb",
      "team": "Cubs",
      "opponent": "Cardinals",
      "odds": 120,
      "opponentOdds": -140,
      "confidence": "MODERATE_EDGE"
    }
  ]
}'
Your stakes are in allocation.stakes
The first thing in every response: a dollar stake for each bet that gets one, and the total.
{
  "allocation": {
    "kellyMultiplier": 1,
    "riskConstraintMet": true,
    "totalStake": 65.07,
    "stakes": [
      {
        "pickIndex": 0,
        "id": "lad",
        "team": "Dodgers",
        "betType": "MONEYLINE",
        "line": null,
        "odds": -145,
        "fraction": 0.055356,
        "stake": 55.36
      },
      {
        "pickIndex": 1,
        "id": "chc",
        "team": "Cubs",
        "betType": "MONEYLINE",
        "line": null,
        "odds": 120,
        "fraction": 0.009715,
        "stake": 9.71
      }
    ]
  }
}

That’s it. Next, the first-optimize recipe walks through the whole response, and the reference lists every field.