Weather — entry 031 of 31
wttr.in
wttr.in returns weather reports as ASCII art directly to curl, wget, or a plain browser request, so there's no client UI to build. It's a standalone open-source Go service with plain-text, colorized ANSI, PNG, and JSON output modes, and needs no signup or API key.
wttr.in is a single free-form endpoint that renders weather for a location as ANSI terminal art, a one-line string, a PNG, or JSON — the output format is chosen by query params and by sniffing whether the caller looks like curl or a browser.
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
Formatsplain text, ANSI, PNG, JSONResponses can be requested as plain text or ANSI or PNG or JSON.
GreatAPIs Score
Score80
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats15/15Supports 4 response formats
Freshness20/20Verified within 6 months
Auth quickstart
- No API key required — requests are public and keyless.
Stored keyNo key stored
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Structured forecast for a city as JSON
GEThttps://wttr.in/Berlin?format=j1
{
"current_condition": [
{
"FeelsLikeC": "13",
"FeelsLikeF": "55",
"cloudcover": "12",
"humidity": "61",
"observation_time": "02:07 AM",
"precipMM": "0.0",
"pressure": "1004",
"temp_C": "18",
"temp_F": "65",
"uvIndex": "0",
"visibility": "10",
"weatherCode": "113",
"weatherDesc": [{ "value": "Clear " }],
"winddir16Point": "W",
"windspeedKmph": "8"
}
],
"nearest_area": [
{
"areaName": [{ "value": "Berlin" }],
"country": [{ "value": "Germany" }],
"latitude": "52.517",
"longitude": "13.400",
"population": "3426354",
"region": [{ "value": "Berlin" }]
}
],
"weather": [
{
"date": "2026-07-26",
"avgtempC": "21",
"avgtempF": "71",
"astronomy": [
{
"moon_illumination": "88",
"moon_phase": "Waxing Gibbous",
"sunrise": "05:17 AM",
"sunset": "09:08 PM"
}
],
"hourly": [ "...3-hourly breakdown, each with chanceofrain/chanceofsnow/etc..." ]
}
]
}Developer reference
Base URL
https://wttr.inGotchas & limits
- `format=j1` still responds with `content-type: text/plain`, not `application/json`, even though the body is genuine JSON — parse it as JSON regardless of the declared content type
- Without a `format` query param, the response is chosen by User-Agent sniffing: `curl`/`Wget` get ANSI-colored terminal art (256-color escape codes), a plain browser gets an HTML/PNG page — plan for that if you're calling wttr.in from a non-terminal HTTP client
- `?format=3` returns a compact one-liner (e.g. `Berlin: ☀️ +65°F`), handy for status bars and scripts that don't want to parse JSON at all
- Locations aren't limited to city names — airport codes, `~landmark` names, `@domain.com` (geolocates the domain's server), and raw `lat,lon` coordinates are all accepted in the same path segment