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.