20 models.61 cities.Every 60 seconds.
minute-by-minute forecast data for prediction market traders. See when the market is pricing the wrong bracket — before it corrects.
REST & WebSocket APIs built for trading bots · Kalshi / Robinhood / Polymarket / IBKR
Purpose-built for prediction market traders
Beat the Market
NWS forecasts miss by 2-5°F. Our multi-model view shows the gap before odds adjust.
Spot the Signal
When 8 of 10 models converge, that's not noise. That's your edge.
Speed Wins
Every other platform lags by 20 minutes. We update every 60 seconds.
Everything you need.
Nothing you don't.
Settlement-grade observations
Sourced from official METAR observations and ASOS stations — the same data that settles your Kalshi and Polymarket contracts.
20 forecast models
GFS, HRRR, ECMWF, NAM, NBM, ICON — all in one view.
61 cities
Coverage across major US and international temperature markets on Kalshi, Robinhood, Polymarket, and IBKR.
Model consensus
See when models converge — that convergence is your signal.
Market odds overlay
Kalshi and Polymarket brackets on the chart. Spot divergence instantly.
60-second updates
The only platform that refreshes every minute. Competitors lag by 20 min+.
Hour-by-hour breakdown
Pin down exactly when temps cross key thresholds. Time your bets.
The all-in-one weather API
for automated trading.
REST and WebSocket APIs designed from day one for trading bots. 20 forecast models, ASOS station observations, and market bracket data — one endpoint, one key, zero parsing headaches.
import requests
API = "https://api.minutetemp.com/api/v1"
KEY = {"X-API-Key": API_KEY}
# Get latest observation + daily high/low for a station
obs = requests.get(
f"{API}/stations/KORD/observations/latest",
headers=KEY,
).json()["data"]
print(f"{obs['station']['name']}")
print(f" Temp: {obs['observation']['temperature_f']}°F")
print(f" High: {obs['daily_high_f']}°F Low: {obs['daily_low_f']}°F")
# Get all 20 forecast models for that station
fcst = requests.get(
f"{API}/stations/KORD/forecast",
headers=KEY,
).json()["data"]
for bundle in fcst["forecasts"]:
hour = bundle["hourly"][0]
print(f" {bundle['model_id']}: {hour['temperature_2m_f']}°F")import axios from "axios";
const API = "https://api.minutetemp.com";
// 1. Get a WebSocket ticket (valid 90s)
const { data } = await axios.post(
`${API}/api/v1/ws-ticket`,
null,
{ headers: { "X-API-Key": API_KEY } },
);
// 2. Connect to 1-min unified stream
const ws = new WebSocket(
`${API}/ws/api/1m`,
["bearer", data.data.ticket],
);
// 3. Subscribe to cities (all stations included)
ws.onopen = () => {
ws.send(JSON.stringify({
type: "subscribe", cities: ["chi", "nyc"],
}));
};
ws.onmessage = (e) => {
const msg = JSON.parse(e.data);
if (msg.type === "observation") {
// { station_id: "KORD", temperature_f: 72.5, ... }
updateSignal(msg);
}
};Transparent pricing.
Start free. Upgrade when you need the edge.
Free
Starter
Pro
Clanker
Pro
All plans include 61 cities. Starter includes a free trial with 24-hour no-card and 7-day card options. Cancel anytime. Use code FOUNDER50 at checkout — 50% off your first 3 months on monthly plans. Annual saves 20%.
Join the trading community
Share strategies, get model alerts, and connect with other weather market traders. Our Discord is where the edge gets sharper.
Every Minute You Wait,
Someone Else Has the Data.
Start with a free plan, or use code FOUNDER50 for 50% off your first 3 months on any monthly plan.