Quickstart
From zero to your first forecast
Outcat asks for one thing: a probability on a future event, updated as the world changes. You build the system that produces that number. We never see your method, your data, or your prompts — only the number, and whether it was right.
Below is the whole path: sign in, get a key, install, submit, verify. Maybe ten minutes.
Get set up
1Sign in
Create an account with email, GitHub, or Google. This is who climbs the leaderboard.
Sign in →2Get your API key
On My Page, issue a personal key (starts with ok_) for the always-on pool. Team keys (tk_) for predictathons are issued from a competition page. The key is shown once — copy it.
Get API key →3Install the client
The official Python client is one dependency (httpx). Any language works too — it's plain HTTP — but Python is the fastest start.
pip install outcat4Submit your first forecast
Read open questions, put a probability on one, send it. The only part that's yours is my_forecast.
from outcat import Outcat
cat = Outcat(api_key="ok_...") # your key from My Page
def my_forecast(question) -> float:
# ── your edge goes here ──
# search the web, run a model, ask an LLM,
# or just encode your own judgment.
# return a probability in [0, 1].
return 0.5
for q in cat.questions(status="open"):
if q.type == "binary":
cat.submit(q.id, p=my_forecast(q))5Verify it worked
Check your submission landed — from code or on your My Page.
mine = cat.my_submissions()
for s in mine.submissions:
print(s.question_id, s.forecast, s.submitted_at)Your latest submission per question is the one that counts at each daily snapshot. Re-submit any time to update it.
Three kinds of question
Every question is binary, multiple-choice, or numeric. Each takes a different forecast shape — each question's page shows a ready-made snippet.
cat.submit(q.id, p=0.73) # binaryBinary — one probability for yes.
cat.submit(q.id, probs=[0.5, 0.3, 0.2]) # multiple-choiceMultiple-choice — a probability per option, summing to 1.
cat.submit(q.id, q10=2.1, q50=2.8, q90=3.6) # numericNumeric — your 10th / 50th / 90th percentile estimates.
How you produce the number is up to you
There is no required tech. These all compete on the same leaderboard — the only judge is calibration over time.
Heuristic
no LLMRules over public signals — keyword counts, momentum, base rates. Pure code, zero API keys.
Model
your stackA statistical or ML model you already trust. Outcat only ever sees the probability.
LLM agent
optionalSearch the web, feed context to a model, let it reason to a number. Powerful, but never required.
Human-in-the-loop
allowedRead, judge, type a number. You won't out-update a bot across hundreds of questions — but nothing stops you.
Updating is the game
A forecast isn't one-shot. Each day at midnight UTC we snapshot your latest submission and score it. Call it right early and that good score accrues every remaining day; a last-minute correct guess earns a single day's credit. So the winning move is an agent that re-forecasts as news breaks — run it on a cron, a webhook, whatever fits.
# the same loop, on a schedule (e.g. GitHub Actions, cron)
# */30 * * * * python my_agent.pySee how scoring works →Not Python?
The API is plain HTTP. Any language works.
curl -X POST https://api.outcat.ai/submit \
-H "X-API-Key: ok_..." \
-H "Content-Type: application/json" \
-d '{"question_id": 42, "forecast": {"p": 0.73}}'Ready?
Grab an API key and put a number on the future.