predict.wick.pics · predict · api

Call the world model

The incentive world-model, callable over HTTP. Ask any yes/no question about the future — it maps the actors and their incentives, selects the reasoning lenses, runs the physics, and returns a probability with its full reasoning. JSON in, JSON out — built to be consumed by agents and apps, not just humans. Free and rate-limited while experimental.

Live forecast endpoint

A forecast runs several independent reasoning passes plus an Ising physics solve, so it takes ~30–60s. The call is therefore asynchronous: submit a question, get a jobId, then poll until it's done.

POST /api/ask  — submit

body{"question": "<8–280 chars>"} — a yes/no question about the future
200{"jobId": "j…"}
400question must be 8–280 characters
429rate limit: 8 questions/hour/IP
503engine busy (≥4 forecasts running) — retry shortly

GET /api/ask/{jobId}  — poll

200{"status": "running"|"done"|"error", "result": {…}, "elapsed": <sec>}
404no such job (jobs expire ~15 min after completion)

Example — submit then poll

# 1) submit
JID=$(curl -s -X POST https://predict.wick.pics/api/ask \
  -H 'content-type: application/json' \
  -d '{"question":"Will the US and China sign a major trade deal before mid-2027?"}' \
  | jq -r .jobId)

# 2) poll every 3s until done
while :; do
  R=$(curl -s https://predict.wick.pics/api/ask/$JID)
  [ "$(echo "$R" | jq -r .status)" = "done" ] && echo "$R" | jq .result && break
  sleep 3
done

Result schema

probabilitynumber 0–1 — P(the question resolves YES)
confidence"low"|"med"|"high" — from ensemble agreement + structural coherence
incentive_mapstring — the key actors and their real incentives driving the outcome
order_parametersstring[] — the 1–4 macro variables that actually govern the outcome
lenses_usedstring[] — which simplifying theories were applied (e.g. veto_players, incentives, base_rates)
archetypes / patternsstring[] — the actor archetypes & incentive patterns the model tagged
couplingobject|null — the Ising actor graph: {actors, couplings, structural_p, frustration} (frustration→genuine contestedness)
base_ratestring — how people behaved under similar incentives historically
reasoningstring — 2–4 sentences, leads with the lens logic
analogsstring[] — historical analogs
ensemble{passes:[{stance,p}], pooled} — the 3 reasoning stances + the pooled estimate
engine_versionstring — e.g. 0.8-outside-view
generated_atISO-8601 timestamp

Track record (static data)

The 50 standing forecasts are append-only and immutable once made, and will be externally scored as they resolve. That data is published as plain JSON:

forecasts.jsonall standing forecasts (claim, probability, reasoning, resolution criteria + date, status)
forecast/wm-NNNN.jsonone forecast in full — e.g. wm-0001.json
scoreboard.jsonBrier vs outcome and vs the crowd — populates as questions resolve (lower Brier = better; beating the market Brier = we add value)
index.jsonmachine-readable manifest

Health

GET /api/health{"ok":true,"engine":"0.8-outside-view","jobs":N}

For agents

Designed for autonomous agents: stable JSON schema, no auth or key required today, CORS open (Access-Control-Allow-Origin: *). Current limits are 8 forecasts/hour/IP and 4 concurrent. Pay-per-call (x402) for higher throughput is planned — if you're an agent or builder who wants that, this is the surface it will hang off.
Experimental. Forecasts are produced by a free-model reasoning ensemble grounded in incentives + history. Informational only — not financial advice. Don't trust, verify: the track record above is the whole point.