This document is moving to paper.wellbianlabs.io/weatherfi.
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 Data Index, a composite) and TDI (Temperature Data Index), on fixed, versioned 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 — three fetched directly (KWeather, METAR, MET Norway) and eight through Open-Meteo — and reduces each metric (temperature, humidity, wind, precipitation) to one consensus value. The oracle names its estimator as a median with MAD outlier rejection; its parameters, tolerances and weights are proprietary, and this site does not describe or approximate them (oracle terms, section 7-b). What each run decided — the value, the sources it excluded, the verdict — is on the page.
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. Because a consensus ticket settles only on an eligible hour, every ladder shows how often that happened in its city over the last seven days (the oracle's own figure), and a city below 40% offers the METAR baseline only — there a consensus ticket would mostly be refunded.
Every run is checked against the observation class — airport METAR and KWeather's station and GTS feed — and graded verified (more fresh observations agree than disagree, and at least two agree), single_source, mixed, mismatch or unverified; whether the hour is settlement-eligible, overall and per metric, is the oracle's call. Each run is serialised, SHA-256 hashed and anchored on Flare mainnet in the SnapshotAnchor contract, the anchor of record since 23 September 2026; earlier runs also carry a first-generation anchor on BNB Chain. The run id and the anchor transaction are shown next to every value and verdict on this site. The full design is in the whitepaper.
With its subscription the simulator keeps each run it reads per city (consensus, indices, verdict, eligibility) so index markets can settle on the value published for their hour and the charts can show recent runs; the subscription licenses that, the free tier would not. Forecast depth is 16 days, re-cut on the station's local day where a product needs it.
METAR, measured
Many weather markets settle on METAR — the report an airport station sends, roughly once an hour — and treat it as the truth. It is a real measurement, but not a continuous one: reports go missing, arrive late, or are already an hour old when a value is taken from them. That is rarely published by the data suppliers behind weather markets. Weather Data Market records every METAR every five minutes and checks each hourly consensus run against the measurements — METAR together with KWeather's official stations and GTS bulletins, never one station alone — and every run is hashed and anchored on Flare.
This site keeps, for every run and city, whether the METAR was there, whether it was usable and how old it was, and publishes the record on METAR watch: the share of runs with no usable or current report, hour by hour, and airport by airport. The principle is the reason this platform exists: do not trust a brand — trust data you can check.
How products and payouts are set
Nobody sets a line, a price or a payout by hand. Every product on the board is generated, priced and — for covers — given its payout ratio automatically, from one input: the forecast the oracle publishes for each city. That forecast merges KWeather's forecast — built from official stations, ICAO METAR and GTS bulletins together with several national numerical models, AI methods and terrain data — with Open-Meteo's. Where both cover a day the two are averaged and the row carries the number of contributing sources (2); further out Open-Meteo carries the day alone (1). The forecast refreshes every few hours and the catalogue runs every hour, so new products are always priced from the latest forecast.
- Expected value at the hour. From the day's forecast high and low the model draws the day's curve (peaking mid-afternoon local time) and reads the expected temperature at the target hour; humidity runs opposite to temperature; wind is the day's mean; rain is the day's total spread over the hours.
- Uncertainty that grows with lead time. One standard deviation widens by day: temperature
1.4 + 0.35·d °C, humidity8 + 1.2·d %, wind1.3 + 0.25·d m/s. A station's daily high or low is priced about 15% wider than a single hour. - A probability for any line. P(value ≥ line) =
1 − Φ((line − expected) / σ); rain uses the chance the hour is wet times the chance it is wet enough. Every probability is kept between 3% and 97%. - Choosing the lines. For each city and date the generator tries a ladder of candidate lines and keeps the one whose probability lands nearest the product's target: about 50% for the even-money temperature, humidity and rain markets, about 25% for the hot and cold tails, about 40% for wind. A line that cannot land inside its band (a bone-dry week has no interesting rain question) is not listed. US cities get whole-°F lines.
- The opening price. The market maker is seeded so the first YES price equals that probability. From then on trades move it; the forecast's own number stays beside the price as Model, and the gap is shown as Edge.
- Temperature ladders. The same expected value and σ spread one unit of probability over whole degrees: each degree opens at the chance the reading lands in it.
- Cover premiums and payout ratios. A cover pays its full amount when the condition is met, so its fair price is the probability times the coverage. The premium adds a 15% loading and a 0.5% fee, and the payout ratio is what the premium buys back:
premium = p × coverage × (1 + 0.15) + coverage × 0.005 (at least 1 sUSDT) payout ratio = coverage ÷ premium ≈ 1 ÷ (1.15·p + 0.005) example: p = 20%, coverage 1,000 sUSDT premium = 0.20 × 1,000 × 1.15 + 1,000 × 0.005 = 235 sUSDT payout = 1,000 sUSDT if met → 4.26× the premium
The rarer the event in the forecast, the smaller the premium and the higher the payout ratio; as the forecast moves, a new quote moves with it, while a policy already bought keeps the premium it was sold at. Index markets are the one exception to the forecast: they open from the index's own values at the same hour over the last seven days of runs, because an index has no forecast of its own.
None of this touches settlement. The forecast decides where a product opens and what a cover costs; what pays is the oracle's published value for the hour — the consensus of eleven feeds — and nothing else.
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, and take temperature-ladder tickets, 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; 10-city sample without a city |
| metered | 16 days | official (x-api-key) | yes | 0.04 USD a call, paid in XRP |
| subscription (in use) | 16 days | official (Bearer token), included | yes | 25 USD / 30 days or 200 / year per city, in XRP; about 60 calls a minute |
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 terms (section 7). Wherever a consensus value, verdict, run id or anchor is displayed the site shows “Powered by Weather Data Market”. The data is served to this site's own pages through its own backend; it is not offered to anyone as a feed, API, dataset or bulk download, and the routes above exist for these pages, not as a data service. Free-tier data is not settlement-grade and is never accumulated.
Data provider: KWeather Co., Ltd. Operator of the oracle platform and of this simulator: Wellbian Labs Pte. Ltd., under delegation from KWeather. Technical questions: admin@wellbianlabs.io.