BYTETOOLS

Bright Sky (DWD) API

Free Bright Sky API with no key: current weather, hourly forecasts and historical records from Germany's national weather service, back to 2010. Tested.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-20

What is the Bright Sky (DWD) API?

Bright Sky is a free, key-free JSON API that exposes open weather data from Deutscher Wetterdienst, Germany's national meteorological service, covering current conditions, forecasts and historical records back to 2010.

DWD publishes excellent open data but in awkward formats — FTP archives and specialist encodings. Bright Sky wraps all of that in a clean JSON API, which makes German weather data genuinely usable without writing a parser.

Historical coverage is the standout. Records go back to 2010 with hourly resolution from real weather stations, which is unusual for a free API and valuable for anything involving trend analysis rather than just a forecast.

Quick facts

Base URL
https://api.brightsky.dev
Authentication
No API key required.
Rate limit
No published hard limit; the maintainers ask for reasonable use.
Pricing
Free and open source. DWD data is open under its own licence, attribution required.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the Bright Sky (DWD) API

Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.

1. Fetch current weather for a location

GET https://api.brightsky.dev/current_weather?lat=52.52&lon=13.41

curl
curl 'https://api.brightsky.dev/current_weather?lat=52.52&lon=13.41'
JavaScript (fetch)
const res = await fetch("https://api.brightsky.dev/current_weather?lat=52.52&lon=13.41");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.brightsky.dev/current_weather?lat=52.52&lon=13.41", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "weather": {
    "source_id": 303711,
    "timestamp": "2026-08-19T21:00:00+00:00",
    "cloud_cover": 100,
    "condition": "rain",
    "dew_point": 16.14,
    "solar_10": 0.0,
    "solar_30": 0.0,
    "solar_60": 0.0,
    "precipitation_10": 0.0,
    "precipitation_30": 0.0,
    "precipitation_60": 0.0,
    "pressure_msl": 1002.7,
    "relative_humidity": 89,
    "visibility": 26286,
    "wind_direction_10": 170,
    "wind_direction_30": 170,
    "wind_direction_60": 178,
    "wind_speed_10": 6.1,
    "wind_speed_30": 5.8,
    "wind_speed_60": 5.0,
    "wind_gust_direction_10": 190,
    "wind_gust_direction_30": 190,
    "wind_gust_direction_60": 190,
    "wind_gust_speed_10": 10.1,
    "wind_gust_speed_30": 10.1,
    "wind_gust_speed_60": 10.1,
    "sunshine_30": 0.0,
    "sunshine_60": 0.0,
    "temperature": 18.0,
    "fallback_source_ids": {
      "solar_30": 254907,
      "sunshine_30": 254907,
      "sunshine_60": 254907,
      "solar_60": 254907,
      "solar_10": 254907
    },
    "icon": "cloudy"
  },
  "sources": [
    {
      "id": 303711,
      "dwd_station_id": "00433",
      "observation_type": "synop",
      "lat": 52.4676,
      "lon": 13.402,
      "height": 47.7,
      "station_name": "Berlin-Tempelhof",
      "wmo_station_id": "10384",
      "first_record": "2026-08-18T14:30:00+00:00",
      "last_record": "2026-08-19T21:00:00+00:00",
      "distance": 5858.0
    },
    {
      "id": 254907,
      "dwd_station_id": "03987",
      "observation_type": "synop",
      "lat": 52.3813,
      "lon": 13.0622,
      "height": 80.9,
      "station_name": "Pot

Parameters

ParameterTypeRequiredDescription
lat / lonfloatRequiredCoordinates within or near Germany. 52.52
datestringOptionalISO date for historical or forecast data on /weather. 2026-08-01
last_datestringOptionalEnd of a date range. 2026-08-07
dwd_station_idstringOptionalQuery a specific DWD station instead of coordinates. 01766
unitsstringOptionaldwd or si unit conventions. dwd

Response fields

weather.timestampstring
Observation time in ISO 8601.
weather.temperaturenumber
Temperature in Celsius.
weather.conditionstring
Text condition such as rain, dry or fog.
weather.cloud_covernumber
Cloud cover percentage.
weather.wind_speed / wind_directionnumber
Wind speed and bearing.
weather.precipitationnumber
Precipitation in millimetres.
sourcesarray
Which DWD stations the values came from, with distance.

What you can build with the Bright Sky (DWD) API

  • Build German weather features backed by the national service
  • Analyse historical weather trends back to 2010
  • Compare readings from specific DWD weather stations
  • Add accurate local forecasts to a German-market product

Common errors and how to fix them

404 or empty weather

Coordinates are outside DWD's coverage area.

Fix: Bright Sky covers Germany and nearby regions; use Open-Meteo for global coverage.

Null values in fields

Not every station reports every parameter.

Fix: Check the `sources` array — a distant station may be filling gaps, and some values will be null.

Unexpected units

DWD and SI conventions differ.

Fix: Set the `units` parameter explicitly rather than assuming.

Bright Sky (DWD) API — frequently asked questions

Is Bright Sky free?

Yes, free and open source with no API key. It exposes Deutscher Wetterdienst open data, which requires attribution.

What area does it cover?

Germany and immediately surrounding regions, since it is built on DWD station data. For global coverage use Open-Meteo or MET Norway.

How far back does the historical data go?

To 2010, at hourly resolution from real weather stations — unusually deep for a free API.

What is the sources array for?

It tells you which DWD stations supplied each value and how far away they are. A distant source means the reading is less locally representative.

Tools that pair with this API

Bright Sky (DWD) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.