I maintain signalk-windy-apiv2, an open-source plugin that reports weather from boats to Windy through the Stations API v2 (https://github.com/Peter-Petrik/signalk-windy-apiv2). A boat is a station that moves, so the plugin uses both the observation endpoint and the station update endpoint.
On October 10, 2026 I tested the live API against the API reference (https://stations.windy.com/api-reference) with a dedicated test station. Most of it matches, and several things have improved since spring: winddir=360 is accepted, an unknown station now answers 404, and the observation endpoint tells a wrong password apart from a password that belongs to a different station. Thank you for those.
Four places where the reference and the live API differ
Station endpoints, missing or wrong API key. For PUT /api/v2/pws/{id} the reference documents 401 "Missing API key in the Authorization header". The live API answers 403 for a missing key and 403 "Forbidden resource" for a wrong one. 403 is not among the documented responses.
Station record, numeric fields. The reference gives elev_m, agl_wind and agl_temp the type "number". The live API rejects a value that is not a whole number with 400.
Observation time in the future. The reference says the time must not be more than 2 hours in the past. The live API also rejects a time in the future: a ts 10 minutes ahead got 400. A device whose clock runs ahead has every observation rejected, and the reference gives no hint why. What tolerance applies?
Open data observations. GET /api/v2/opendata/station/{id}/observation?latestLimit=1 returned 8,532 points covering 30 days. The reference describes latestLimit as the N most recent observations (1 to 100) and limits fromTs to 7 days back.
Request: a way to update the position alone
For a moving station the only way to change the position is PUT /api/v2/pws/{id}, and that request replaces the whole station record. What I tested:
A body with only lat and lon is rejected with 400 and changes nothing.
PATCH answers 404 "Cannot PATCH".
An optional field left out of the PUT is removed from the record. An operator logo uploaded on the Windy site is gone after the next position update, unless the client sends the logo again as a base64 data URL with every update.
Either of these would solve it for boats, vans and any other moving station: a PATCH that accepts lat and lon, or a PUT that leaves omitted optional fields as they are. The plugin already limits how often it sends a position - only when the boat has moved more than a set distance, 300 m by default.
I asked about this in January (https://community.windy.com/topic/43411/pws-api-v2-updating-position-lat-lon), and a staff reply in July in another topic (https://community.windy.com/topic/45171) said no further changes are planned for now. If the behavior stays as it is, one sentence in the reference saying that PUT replaces the whole record, logo included, would already help other developers.
One question
Since version 1.6.0 the plugin sends softwaretype=signalk-windy-apiv2/1.6.2 with each observation. Does Windy use or show that field anywhere?
I can share the exact requests and responses, or the ID of the test station, if that is useful.