Global GFS + GEFS ensemble · 0.25° · new cycle daily (00z)

The weather of the whole planet,
one request away.

WeatherLabs turns the world's operational forecast into a fast JSON API. Any latitude and longitude, every variable we publish, 209 forecast steps — no GRIB, no Zarr, no pipeline to run.

Scroll
0.25° global resolution
209 forecast steps · 16 days
15+ variables & levels
1 tile read per point query
2 models · GFS + GEFS ensemble
daily fresh 00z cycle

A forecast to answer your business queries, in the shape your code already speaks.

Ask for a point, a region, a journey, or a whole global field. You get back clean JSON (or a binary grid) — units labelled, valid-times attached, ready to plot or pipe into your business logic. Not writing the code yourself? Put a live forecast on your website or in your spreadsheet — send this page to your developer, or start from a ready-made integration.

curl
Python
JavaScript

    
    
    
Detected from your locale — not your capital?
Full response — nothing truncated loading…

  

The API returns the model's native SI units — temperatures arrive in kelvin (°C = K − 273.15); the Explorer converts for display.

Point

One coordinate in, the full 16-day series out — multiple variables per call.

GET/v1/{model}/{cycle}/forecast?lat=…&lon=…&vars=t2m,tp

Journey

Every waypoint of a route in one call, legs fetched concurrently — same endpoint, POSTed.

POST/v1/{model}/{cycle}/forecast {"points":[…], "vars":"gust"}

Region

A country or continent aggregated at any step — true polygon boundaries, same endpoint.

GET/v1/{model}/{cycle}/forecast?region=uk&vars=gust&agg=max&steps=24

Bounding box

Any rectangle you can draw on a map — min/mean/max at the step you pick.

GET/v1/{model}/{cycle}/forecast?lat_s=49&lat_n=59&lon_w=-8&lon_e=2&vars=t2m&steps=24

Global grid

The whole planet for one step — JSON, or float32 binary for the GPU.

GET/v1/{model}/{cycle}/grid?var=t2m&step=8&format=bin

Honest metadata

Every response carries units, valid-times, and exactly what it read and billed.

units · valid_times · tiles_read · bytes_read · X-Billed-Bytes

Every variable we publish, one var= away.

Click a variable to see what it is and how to ask for it — then open it on the live globe. Surface fields are 2-D; pressure-level fields take a level= in hPa. On the gefs ensemble model, surface variables also come as _p10/_p90 spread percentiles alongside the mean — included from the Developer tier up.

See the forecast, not just the numbers.

The interactive Explorer renders a live global field on the GPU as a single texture — scrub through 16 days of forecast, switch peril, click for a point series, plot a route, or drag a box. Every interaction shows the exact API call it made, ready to copy.

Launch the Explorer →

One forecast endpoint. A few helpers.

Everything is a view of the same forecast: one endpoint answers “what's the weather going to be?”, and a small set of helpers reshape or describe it.

GET
/v1/{model}/{cycle}/forecast

The forecast series at any latitude/longitude — every variable, up to 209 steps, nearest-cell or bilinear, time-selectable with steps= (lead hours), time= or start/end. Pin {cycle} to an immutable run id, or use latest.

vars — comma-separated variables (required, up to 8)
lat, lon — a point · region / bbox — an aggregate
granularity — hourly | daily
level — hPa, pressure vars
interp — nearest | bilinear
steps / time / start+end — time selection
Shapes of the same endpoint
GET
…/forecast?granularity=daily

Daily min/max/mean and physically correct precip totals, derived server-side.

POST
…/forecast {"points":[…]}

A journey: one series per waypoint, fetched concurrently with shared-tile coalescing.

GET
…/forecast?region= | bbox

Aggregate a named polygon region or bounding box — one step per request, cold-fast.

GET
…/grid

The other endpoint: a full lat/lon field for one step — JSON or binary fast-path.

Discovery helpers
GET
/v1/models

Every published model, its grid and latest cycle.

GET
/v1/models/{m}/cycles

Every retained cycle — pin one for immutable URLs.

GET
…/cycle · …/vars · …/regions

Cycle metadata, the live variable list, and named regions.

GET
/v1/limits

Your tier, live quota and entitlements — costs almost nothing.

Full reference, parameters and examples in the documentation — or run them live in the Playground.

Time-major tiles. Read exactly what you ask for.

The serving store is laid out so a point's entire forecast lives in one compressed tile: a point query is a single object read — typically tens of milliseconds cold, sub-millisecond warm server-side. Don't take our word for it: measure it from your own browser, right here.

new cycle daily — the 00z run published each morning (UTC) edge-cached via CloudFront beta — no SLA yet

One point, one variable

GET …/forecast?lat&lon&vars=t2m — full 209-step series
1 tile read · one ~200 KB object, decoded once
press “Measure from my browser”

One point, every variable

GET …/forecast?vars=t2m,u10,v10,… — the full surface state of one place
~1,500 values · tiles fetched concurrently
press “Measure from my browser”

Binary grid — Europe

GET …/grid?var=t2m&region=…&format=bin — float32, straight to a typed array
1 GET · zero parsing, zero copies on decode
press “Measure from my browser”
Times include your network round-trip — that's the honest number your users would see.

“Stateless and cacheable” — what that actually buys you

  • No sessions, no cookies, no state. Every request stands alone, so any GET is retry-safe: time out, fire again, nothing breaks. Load balancers and serverless callers need zero affinity.
  • Pinned cycles never change. /v1/gfs/2026070500/… is immutable — cache it in your CDN, your browser, or a plain dict; the bytes never change.
  • Reproducible while retained. A pinned URL returns identical bytes for as long as its cycle is retained — we keep the newest 12 cycles per model (~12 days at the current daily cadence) — so recent-cycle comparisons, audits and “what did the forecast say at the time?” questions have a stable source of truth.
  • Cheaper at scale. Fan 10,000 requests over one cycle and the CDN absorbs the repeats — you pay quota for what's decoded at the origin, and identical URLs collapse to cache hits.

Weather intelligence for every industry the atmosphere touches.

Hover a tile to see the kind of question it answers — and the exact call that answers it. Click to open that query on the live globe.

Pay for the data you decode.

Simple, metered plans: billing is by the volume of decoded forecast data your requests return, and quotas are per account. No per-seat fees, no overage surprises — when you hit your allowance, requests pause until reset or you upgrade.

In everyday terms: a website showing a five-day outlook for one town fits Free; prototyping with coarse grids and regions is Developer (£3); a 10-day outlook in a small product is Hobby; production dashboards drawing native-resolution grids start at Starter.

Beta Beta — no SLA yet. WeatherLabs is in early access: prices and quotas may change, and there is no uptime guarantee yet. The Free tier is live today · paid checkout is launching soon — pick a plan below and we'll onboard you by email in the meantime. VAT is handled at checkout by Paddle (our merchant of record) once billing is live.
Free
£0
10 MB decoded / day
Point & daily forecasts to learn the API. No card required.
  • Point + daily endpoints
  • Basic perils — temp, precip, wind
  • GFS only
  • 00z cycle · 120 h horizon (5 days)
  • 1 request / second
  • Community support
Create account
Developer
£3/mo
50 MB decoded / day
Prototype with grids and regions — first month on us.
  • + grid & region endpoints
  • Every variable · every published cycle
  • GFS + GEFS ensemble (mean + p10/p90)
  • 1.0° resolution · 120 h
  • 5 requests / second
  • Community support
Get onboarded →
Starter
£250/mo
5 GB decoded / mo
For production apps and dashboards.
  • All endpoints · all variables
  • GFS + GEFS ensemble (mean + p10/p90)
  • 0.25° native · 384 h (16 days)
  • 20 requests / second
  • Email support
Get onboarded →
Growth
£750/mo
50 GB decoded / mo
High-volume, native-resolution access.
  • All endpoints · all variables
  • GFS + GEFS ensemble (mean + p10/p90)
  • 0.25° native · 384 h (16 days)
  • 50 requests / second
  • Priority email support
Get onboarded →
Scale
£1,500/mo
Unlimited (fair use)
Everything, plus a meteorologist on call.
  • Unlimited data · all endpoints
  • GFS + GEFS ensemble (mean + p10/p90)
  • 0.25° native · 384 h
  • 100 requests / second
  • Bespoke perils & consultancy — ask your meteorologist
  • Dedicated onboarding & priority support
Contact sales

Resolution caps apply to gridded shapes (grid and region) only — point queries sample the native 0.25° grid on every tier, including Free (which has no gridded endpoints, hence no resolution figure on its card).

Anyone can try the Explorer and Playground free — no key needed during the beta. You only need an account key to call the API from your own code.

How billing works — honest cost per request
RequestBilled (32 KiB minimum)Of a 500 MB plan
Point / daily query32 KiB (the floor)~0.006%
Region aggregate (one step)32 KiB (the floor)~0.006%
Global grid step · 1.0°254.5 KiB~0.05%
Global grid step · 0.5°~1 MB~0.2%
Global grid step · 0.25° native4.15 MB~0.8%

Billing counts the values a response decodes (values × 4 bytes), with a 32 KiB floor per request — the floor is a billing minimum, not a payload size (a single-variable point actually decodes well under 1 KiB). Quotas use SI units (1 GB = 10⁹ bytes) and are shared across your whole account. Every response carries X-Billed-Bytes and live quota headers, so there are no surprises. Full breakdown in the pricing & billing docs.

Full pricing details & billing docs →

Weather moves every market. We make it one request away.

A valuable forecast is often the most important data an industry consumes — it prices power, routes ships, schedules harvests, and settles insurance. Yet using it still means wrestling GRIB files, regridding pipelines and petabyte archives. WeatherLabs exists to delete that work. Each day we ingest the operational global forecast, regrid and consolidate it into a time-major tiled store, and serve it through a stateless Rust API — the hard parts happen once, on our side, so they never happen on yours.

Today

NOAA GFS, end to end

The full operational GFS run — every variable, every level we publish, 16 days ahead at native 0.25° — published daily (the 00z run) and served from memory-speed tiles.

Today

Two models, one API

The same paths, a second {model}: gefs, the 31-member GEFS ensemble — mean plus p10/p90 bounds, surface variables, 3-hourly to +240 h. Additional physical and AI models are on the roadmap and will join the same way.

Research

NWP + AI, physics first

We're building towards world-leading research on next-generation forecasting — machine learning grounded in atmospheric physics.

Always

Ultra-fast, constantly tuned

Speed is a feature of the data, not a tier. We profile and optimise the serving path relentlessly — tile layout, caches, binary formats — so the fastest query is the default one.

Do I need an API key to try it?
No — the Explorer and Playground work without signing up during the beta. You only need your own (free) key to call the API from your code.
Where does the data come from?
From NOAA's operational Global Forecast System (GFS), which is public domain. What you pay for is the processing and delivery: decoding, regridding, consolidation, and a fast, reliable API on top. WeatherLabs is not affiliated with NOAA/NWS.
How is this different from free weather APIs such as open-meteo?
It's the same public-domain GFS data — we say so plainly. What you pay for is the serving contract around it: pinned, immutable cycles carrying generation metadata so a URL answers identically every time; many variables in a single call; point, journey, region and grid shapes from one endpoint; the GEFS ensemble with p10/p90 bounds in the same API; and per-account keys, quotas and fair-use isolation with real support. Billing is by decoded bytes, so you pay for what you read — no request-shape lottery. If a free service already covers your needs, use it; we're built for people who want that contract and predictability.
How fresh is the forecast?
NOAA initialises a new GFS cycle every 6 hours (00/06/12/18 UTC) and publishes the full run roughly 3.5–4 hours after init. WeatherLabs currently publishes the 00z cycle once a day — queryable each morning (UTC). The architecture supports 6-hourly publication, and we plan to increase the cadence as usage grows. The hero badge above shows the exact cycle being served right now.
How far ahead should I trust the forecast?
Forecast skill decays with lead time — the further out, the more uncertain. The hourly detail is most useful in roughly the first five days; beyond that, prefer the daily aggregates and lean on the GEFS p10/p90 bounds to bracket the range of plausible outcomes rather than reading any single value. Treat the longest ranges as broad guidance, not precision.
Can I cache responses?
Please do. Responses scoped to a pinned cycle (/v1/gfs/2026070500/…) are immutable and carry year-long Cache-Control headers; latest URLs revalidate every ~30 s. We retain the newest 12 cycles per model (~12 days at the current daily cadence) — a pinned URL answers identically while its cycle is retained.
Is this suitable for safety-of-life decisions?
No. The data is automatically processed model output provided “as is” — it may be wrong, late or missing, and must not be the sole basis for decisions involving risk to life or property (aviation, marine navigation, emergency management). See our Terms.