Wind Turbine API
Access & limitsPublic, no key needed · Heavy▾
Open to everyone. A free API key from your profile raises the limits: send it in an X-API-Key header, or as api_key= in the address.
| 5 minutes | Hour | Day | |
|---|---|---|---|
| Without a key | 20 | 120 | 500 |
| With a key | 60 | 400 | 2,000 |
Each 900 square km of area counts as one request, so squares up to 30 km count once.
Log in to create a free key on your profile page.
Every answer carries X-RateLimit-Remaining and X-RateLimit-Reset. Over a limit, the answer is error 429 with retry_after in seconds. Refused requests do not count.
Every wind turbine within a square around a point, with its size: the height of its blade tips, its hub height and the diameter of its rotor, the same data the Wind Turbine Map draws. Ask for it as JSON for a web page or script, or as a small binary file a flight computer or ground station can carry, so a launch site's turbines can be built into firmware.
lat lon size_kmParameters
| Parameter | Meaning |
|---|---|
lat, lon | The middle of the square, decimal degrees (lng also accepted) |
size_km | The square's side in km, more than 0 and up to 50. Left out, 10. |
format | Optional. json (the default): a list of turbines. bin: a 32 byte header and 16 byte records, as a file. |
compress | Optional, for format=bin. none (the default), zlib or lzma (LZMA-alone, as on the Tree Canopy API). |
download | Optional. 1 makes a browser save a format=bin answer as a file, named for the square. |
The turbines
Each turbine is a point with its total height (the blade tip at its highest, above the ground at the tower), its hub height and its rotor diameter, all in metres, and 0 where no source records it. A turbine turns to face the wind, so its blade tips can be anywhere on a circle of the rotor's radius around the hub: for a hazard, treat the turbine as a sphere of that radius at hub height on top of its tower.
Where a country keeps a national register of its turbines, that is the source: the US Wind Turbine Database, the Canadian Wind Turbine Database, Germany's Marktstammdatenregister (units in operation or only temporarily shut down), the Danish Energy Agency's register (turbines not decommissioned), Sweden's Vindbrukskollen (turbines built), the Netherlands' RIVM turbine layer and Norway's NVE (turbines built). Everywhere else the turbines come from OpenStreetMap. Where a register and OpenStreetMap have the same turbine (within 40 m), the register's is kept. Each source is fetched again every three months.
The JSON answer
{
"success": true,
"lat", "lon", "size_km",
"built": true, false until the database is first built
"count": 12,
"turbines": [ nearest the middle first
{ "lat", "lon", "distance_m",
"total_m", "hub_m", "rotor_m", metres, 0 where not recorded
"source" } which source it came from
],
"meaning", "credits"
}
The binary file
With format=bin: a 32 byte header then one 16 byte record a turbine, nearest the middle first, little endian.
| Byte | Type | Value |
|---|---|---|
| 0 | char[4] | ACTB |
| 4 | uint8 | Version, 1 |
| 5 | uint8 | Record size, 16 |
| 6 | uint16 | 0 |
| 8 | uint32 | Records |
| 12 | int32 | The square's middle, latitude × 107 |
| 16 | int32 | The square's middle, longitude × 107 |
| 20 | uint32 | The square's side, metres |
| 24 | uint8[8] | 0, reserved |
| Record byte | Type | Value |
|---|---|---|
| 0 | int32 | Latitude × 107 |
| 4 | int32 | Longitude × 107 |
| 8 | uint16 | Total height, decimetres (0 not recorded) |
| 10 | uint16 | Hub height, decimetres (0 not recorded) |
| 12 | uint16 | Rotor diameter, decimetres (0 not recorded) |
| 14 | uint8 | Type: 1 wind turbine |
| 15 | uint8 | Source: 1 OpenStreetMap, 2 US Wind Turbine Database, 3 Marktstammdatenregister, 4 Energistyrelsen, 5 Vindbrukskollen, 6 Canadian Wind Turbine Database, 7 RIVM windturbines, 8 NVE vindkraft |
Examples
https://www.altimetercloud.com/api/turbines/?lat=54.35&lon=-2.95&size_km=10
https://www.altimetercloud.com/api/turbines/?lat=54.35&lon=-2.95&size_km=30&format=bin&download=1
Reading the file
On a device
// C
typedef struct __attribute__((packed)) {
char magic[4]; // "ACTB"
uint8_t version, rec_size; // 1, 16
uint16_t reserved0;
uint32_t count;
int32_t mid_lat_e7, mid_lon_e7;
uint32_t side_m;
uint8_t reserved[8];
} TurbineHeader;
typedef struct __attribute__((packed)) {
int32_t lat_e7, lon_e7;
uint16_t total_dm, hub_dm, rotor_dm; // decimetres, 0 not recorded
uint8_t type, source;
} Turbine;
// the nearest turbine's clearance: how far a point at alt_m above the tower's
// ground is from the sphere the blades can sweep (negative: inside it)
float clearanceM(const Turbine *t, double lat, double lon, float alt_m) {
float hub = t->hub_dm ? t->hub_dm / 10.0f : 100.0f; // a typical size where none is recorded
float r = t->rotor_dm ? t->rotor_dm / 20.0f : 60.0f;
double dy = (lat - t->lat_e7 / 1e7) * 111320.0;
double dx = (lon - t->lon_e7 / 1e7) * 111320.0 * cos(lat * M_PI / 180.0);
double dz = alt_m - hub;
return (float)(sqrt(dx * dx + dy * dy + dz * dz) - r);
}
The records come nearest the middle first, so a device that loaded the square around its launch site can stop at the first few.
On a computer
# Python
import requests, struct
r = requests.get('https://www.altimetercloud.com/api/turbines/',
params={'lat': 54.35, 'lon': -2.95, 'size_km': 30, 'format': 'bin'})
f = r.content
magic, ver, rec, _, n, mlat, mlon, side = struct.unpack('<4sBBHIiiI', f[:24])
for i in range(n):
la, lo, tot, hub, rot, typ, src = struct.unpack('<iiHHHBB', f[32 + 16 * i: 48 + 16 * i])
print(la / 1e7, lo / 1e7, tot / 10, hub / 10, rot / 10, src)
Errors
| Code | Meaning |
|---|---|
412 | A parameter is missing or not valid, or the square is more than 50 km |
429 | Too many requests from your address, or one still being answered |
501 | The compression asked for is not available just now |
Try it
The Wind Turbine Map has a download panel: move the map so the cross sits on your launch site, choose the size, and it saves the file from this API.
Turbine data credits
U.S. Wind Turbine Database, U.S. Geological Survey, Lawrence Berkeley National Laboratory and American Clean Power Association, public domain: Hoen, B.D., Diffendorfer, J.E., Rand, J.T., Kramer, L.A., Garrity, C.P., and Hunt, H.E., United States Wind Turbine Database, U.S. Geological Survey, doi:10.5066/F7TX3DN0.
Datenquelle: Marktstammdatenregister, Bundesnetzagentur, licensed under the Datenlizenz Deutschland, Namensnennung, Version 2.0.
Kilde: Energistyrelsen (Danish Energy Agency), stamdataregister for vindkraftanlæg.
Länsstyrelserna, Vindbrukskollen, CC0.
Contains information licensed under the Open Government Licence - Canada: Canadian Wind Turbine Database, Natural Resources Canada.
RIVM, Atlas Leefomgeving, Windturbines (public domain).
Contains data under the Norwegian licence for Open Government data (NLOD) made available by NVE (Norwegian Water Resources and Energy Directorate): vindkraft.
Contains OpenStreetMap data © OpenStreetMap contributors, available under the Open Database Licence (ODbL).
The sources are combined here and reduced to one point a turbine, which changes them: this is not the original data of any of them.
Licence of this data. Because it contains OpenStreetMap data, the data this API gives out is made available under the Open Database License (ODbL) 1.0. You may use it freely, commercially too, as long as you credit it as above and share any database you make from it under the same licence.
Crediting AltimeterCloud
Free to use. If you use this API, or anything made from the answers, in a commercial product or service, credit AltimeterCloud with a link to www.altimetercloud.com at the point of use: on the screen, page or printout where the data appears, for example “Data from AltimeterCloud.com”. Any credits the data's own sources ask for, listed on this page, apply as well.



















