How it works · settlement rules
Everything on this site — every market price, every premium, every payout — is a function of one thing: a Weather Data Market determination on a condition like “Seoul temperature ≥ 30°C at 06:00 UTC”. This page explains the data, the pricing models and the rules that decide who gets paid.
What this simulator is
WeatherMarket Simulator is a sandbox for weather-contingent products. You start with 10,000 sUSDT, a virtual unit with no monetary value, and can trade YES/NO shares on prediction markets or buy parametric insurance covers on any of 167 cities. Balances cannot be deposited, withdrawn or exchanged. Nothing here is an offer to bet, trade or insure; it exists to test how products built on an objective weather oracle behave. See the simulator terms.
Data & oracle
Units and indices. Every value is measured, stored and settled in °C, mm, m/s and %. Temperatures are shown in the unit each city's country reads in — °F in the United States and a few others, °C elsewhere — and the switch in the header overrides that for everything at once; a threshold typed in °F is converted before the oracle sees it. Alongside the four metrics the oracle publishes two indices, WDI (weather discomfort) and TDI (thermal discomfort), on fixed weights identical for every city and season, so they are unit-free and comparable everywhere; the operator picks which one leads. Their history and sources are on weathermarket.ai, one link from each city page.
The oracle is Weather Data Market (weathermarket.ai). It covers 167 cities and, every hour, pulls 11 feeds per city (official observations, model outputs and commercial providers). The feeds are combined into a consensus value per metric — temperature, humidity, wind, precipitation — using the median with MAD outlier rejection: values more than a scaled median-absolute-deviation from the median are discarded before the final median is taken.
Every city page and every market page carries the live consensus feed: the run the oracle published for the current hour, with each of the eleven readings next to the METAR baseline and the consensus, the outliers it excluded, the measured-only figure, the corroboration between the measured sources and the verdict per metric, plus the same readings for the last twelve runs. It refreshes once a minute, names the run and the fetch time, and links to the city's dashboard on weathermarket.ai and to the anchor of the run. The rule that turns the readings into one number is the oracle's; what it decided is on the page before a market settles on it.
Pick the temperature is the ladder product: one city, one target hour, whole degrees in the city's unit from about five below the forecast to five above, open-ended at both ends. A ticket buys shares in as many degrees as it likes and names the reading that judges it — the oracle's consensus for the hour, or the station's METAR baselineinside the same run. Each reference is its own market maker (LMSR over the bins), so the two crowds are visible side by side: the page shows the live determination data the oracle is producing in one window and the index the tickets are producing in the other. The degree the chosen reading lands in pays 1 sUSDT a share; a reference that cannot be read for the hour (an hour that is not settlement-eligible, or a run without a METAR) refunds its pool at cost. Tickets close an hour before the target hour; settlement uses the oracle's stored run and its per-source record, nothing else.
An hour is marked verified only when both measurement feeds corroborate the consensus; otherwise it is mixed or withheld and is not settlement-eligible. Each hourly run is serialised, SHA-256 hashed and anchored on BNB Chain. The run id and the anchor transaction are shown next to every value and every verdict on this site, so any number you see can be traced to an immutable snapshot.
The simulator caches only the latest run per city (an upsert, never a history) and the daily forecast rows it needs to price products. Forecast depth is 3 days on the free tier and 16 days with a credential.
Prediction markets
The catalogue is generated per city from that city's own forecast, at four horizons — next day, 3 days, 7 days and 14 days ahead, each targeting 06:00 UTC. Thresholds are not round numbers picked in advance: the pricing model's expected value at the target hour becomes the threshold, so a temperature market opens near even money instead of at 3% where nobody would trade it. Each horizon carries a different mix — the next-day slot adds a hotter temperature variant and a wind market, the longer horizons keep temperature and precipitation.
A determination is a unit of work on the oracle, and a market only needs one when it settles. Markets are therefore created without one, and the settlement job opens the official determination a few hours before the target hour. A market you open by hand asks for its determination immediately, so you can see the official id straight away.
Settlement reliability. The oracle publishes, per city, the share of recent hours that were settlement-eligible. Every market and quote carries it as a badge — settles reliably at 70% and above, settlement risk between 50% and 70%, and a red badge below that. On the first day of official settlement, cities above the line had 29% of determinations withheld; cities below it, 56–59%. The next-day set is listed automatically only for cities above the line, because a market that voids after a day of trading is the worst outcome for everyone; the 3-, 7- and 14-day sets are listed for every city, and a next-day market on any city can still be opened by hand.
Daily products. Each city's next-day set covers every category the oracle reports: an even-money temperature market, a hotter and a colder tail, precipitation, wind and humidity — six questions on one hour, all settled by the same run. Filter the board by category or by horizon to see one day's products across cities.
Simulated participants. Twenty-four simulated accounts trade the board twice an hour, each buying the side the price underrates against its own reading of the latest forecast. They are ordinary accounts making ordinary trades through the same market maker, so prices drift toward the forecast as it updates and the tape has something on it between your trades. They are labelled as participants in the ledger and hold no advantage: they see the same forecast you do.
Each market is a binary question on one condition at one whole UTC hour, between 2 hours and 16 days ahead. Prices come from an LMSR (logarithmic market scoring rule) automated market maker with liquidity b = 1000 sUSDT. The YES price is e^(qYes/b) / (e^(qYes/b) + e^(qNo/b)), the cost of a trade is the difference in b · ln(e^(qYes/b) + e^(qNo/b)) before and after, and buying moves the price against you smoothly. There is no order book and no counterparty risk.
Opening price. The market is seeded so that its first price equals the event probability derived from the daily forecast:
- Expected value at the hour. Temperature follows a diurnal cosine between the day's forecast min and max, peaking at ~15:00 local solar time (from the city's longitude). Humidity moves in anti-phase with an amplitude of 12 points. Wind uses the daily mean. Precipitation uses the mean hourly rate (daily total ÷ 24).
- Lead-time-dependent sigma. Uncertainty (1σ) grows linearly with lead time in days: temperature
1.4 + 0.35·d °C, humidity8 + 1.2·d %, wind1.3 + 0.25·d m/s, capped at 16 days. P(value ≥ threshold) is1 − Φ((threshold − μ) / σ). - Precipitation uses a two-part model: probability the hour is wet
daily / (daily + 6)(bounded 2–85%), then an exponential intensity with meanmax(0.3, daily/6) mm/hgiven wet. - Probabilities are clamped to
3–97%. With no forecast row for the date the prior is 50% (15% for rain).
Trading. Buy with an amount of sUSDT (min 1, max 100,000) or sell shares you hold. Trading closes 1 hour before the target hour; the market then waits for the determination.
Settlement. Met → each YES share pays 1 sUSDT, NO pays 0. Not met → NO pays 1, YES pays 0. Withheld → the market is void and every position is refunded at its cost basis.
Parametric insurance
A parametric cover pays the full coverage amount when the condition is met — no loss assessment. Five products are offered; you can change the threshold, the target hour and the coverage.
| Product | Condition | Default |
|---|---|---|
| 🌡️ Heat cover | Pays the full cover if the consensus temperature at the target hour is at or above the threshold. | temp ≥ 33°C |
| 🥶 Cold snap cover | Pays if the consensus temperature at the target hour is at or below the threshold. | temp ≤ -5°C |
| 🌧️ Rain cover | Pays if precipitation at the target hour is at or above the threshold. | rain ≥ 2mm |
| 💨 Wind cover | Pays if wind speed at the target hour is at or above the threshold. | wind ≥ 10m/s |
| 💧 Humidity cover | Pays if humidity at the target hour is at or above the threshold. | humi ≥ 85% |
Premium. With p the event probability from the same model that seeds markets:
premium = p × coverage × (1 + 0.15) ← pure premium + 15% loading
+ coverage × 0.005 ← 0.5% fee on the covered amount
premium = max(1, round(premium, 0.01))Limits. Coverage 10–10,000 sUSDT per policy; target hour between 2 hours and 16 days ahead; the premium is debited immediately and must fit your balance.
Settlement. Met → paid, the full coverage is credited. Not met → expired, the premium is kept. Withheld → void, the premium is refunded in full.
Determinations policy
The simulator inherits the determination policy of Weather Data Market without modification:
- Determinations are final. Once an outcome is issued it is not revised, even if a feed later corrects its data.
- Same condition + same hour → same outcome. Every market and policy on the same condition shares one determination.
- The report explains, it does not rule. The consensus value, verdict and anchor are evidence of how the outcome was reached; the outcome itself is the rule.
- Withheld is nobody's loss. When the hour is not verifiable, markets are void and premiums are refunded.
- The risk is shown, not hidden. Each city's recent settlement-eligibility rate is on every market and quote, so a void is never a surprise.
- Station-day markets settle on the station's record. A condition on the daily high or low of one ICAO station's local calendar day (daylight saving applied) settles on the oracle's station record: the extreme over the METAR observations in that window — with the observation that produced it and its raw text — or the official NWS climate value when the market chose it and the oracle carries it. A day with a gap over six hours or fewer than twelve observations is withheld and refunded. Every US city gets its next local day's high and low in the catalogue on whole °F; the station can be changed per market (KNYC for New York, KDCA for Washington).
- Index markets settle on the published run. The determinations API takes temperature, humidity, wind and rain only, so an operator's market on WDI or TDI settles on the value the oracle published for the target hour's collection run — hashed and anchored like every run. An eligible hour settles met or not met on that value; a hour graded not settlement-eligible, or with no run, is withheld and refunded. It is labelled as an index settlement, not an official determination.
- Credentialed mode registers an official determination via
POST /api/v1/determinationson weathermarket.ai and reads its resolution back. - Free tier produces a simulated determination: the public consensus at the target hour is read and evaluated locally. It is clearly labelled “simulated · public consensus” wherever it appears and is not an official determination.
Access modes
| Mode | Forecast depth | Determinations | Verdict visible | Rate |
|---|---|---|---|---|
| free | 3 days | simulated from public consensus | no (labelled “free tier”) | 120 req/hour, budget-guarded |
| metered | 16 days | official (x-api-key) | yes | per request |
| subscription | 16 days | official (Bearer token) | yes | plan limits |
The current mode is shown on the home page and on /api/sim/oracle. On the free tier, probabilities beyond day 3 use the last cached forecast day with lead-time sigma growth (no climatology), so premiums for distant hours are conservative.
Simulator API reference
All routes return JSON. Reading is open: the city, market and oracle routes answer anyone. Anything that touches an account — your portfolio, a trade, buying cover, opening a market — needs a signed-in session and answers 401 without one. Money fields are sUSDT numbers; times are ISO-8601 UTC.
| Method | Route | Purpose |
|---|---|---|
| GET | /api/sim/me | Your simulated account: id, balance, displayName. Returns { signedIn: false } when nobody is signed in. |
| POST | /api/sim/me | { action: "reset" } — wipe positions, policies and ledger; balance back to 10,000 sUSDT. |
| GET | /api/sim/oracle | Oracle status: weathermarket.ai health, latest anchored snapshot, credential mode, free-tier budget. |
| GET | /api/sim/cities | City list with latest consensus and open-market counts. ?continent=&q=&sort=name|temp|grade |
| GET | /api/sim/cities/[slug] | City dashboard: latest consensus (refreshed when stale), anchor, forecast rows, markets. |
| GET | /api/sim/markets | List markets. ?status=open|closed|resolved|all &category= &city= &continent= &q= &sort=featured|closing|volume|newest &page= &pageSize= |
| POST | /api/sim/markets | { citySlug, metric, op, threshold, targetHour } — open a market on a condition (201 { market }). |
| GET | /api/sim/markets/[id] | Market detail: market, recent trades, your positions, anchor for the resolving run. |
| GET | /api/sim/markets/[id]/quote | ?side=YES|NO&action=BUY&spend=100 or &action=SELL&shares=12.3 — LMSR quote without trading. |
| POST | /api/sim/markets/[id]/trade | { side, action: "BUY"|"SELL", spend?, shares? } — execute against the market maker. |
| POST | /api/sim/insurance/quote | { citySlug, productKey, threshold?, targetHour, coverage } → { quote } with premium, pEvent, payoutRatio, condition. |
| POST | /api/sim/insurance/buy | Same body → 201 { policy, balance }. Charges the premium and attaches a determination. |
| GET | /api/sim/policies | Your policies, newest first → { policies }. |
| GET | /api/sim/policies/[id] | One of your policies → { policy, ledger, anchor } (404 if not yours). |
| GET | /api/sim/portfolio | Account, summary tiles, positions valued at the current LMSR price, policies, last 100 ledger entries. |
Operational routes (/api/cron/ingest, /api/cron/markets, /api/cron/settle, /api/admin/sim) require a cron secret or the admin password.
Attribution & licence
Oracle data is provided by Weather Data Market under its public terms. Wherever a consensus value, verdict, run id or anchor is displayed the site shows “Powered by Weather Data Market”. Free-tier values are shown with that attribution and are not accumulated into a history: only the latest run per city is stored. Free-tier data is not settlement-grade; simulated determinations built on it are for demonstration only.
Operator: Wellbian Labs Pte. Ltd. in partnership with KWeather Co., Ltd. Questions: admin@wellbianlabs.io.