No key required.
Read-only endpoints use JSON, explicit units, ISO timestamps, and permissive CORS. Minute requests are capped at 31 days; larger windows use daily resolution.
/api/v1/current/api/v1/history?from=&to=&resolution=minute/api/v1/forecast/api/v1/air-qualitycurl https://coltonweather.com/api/v1/current
const response = await fetch(
"https://coltonweather.com/api/v1/current"
);
const weather = await response.json();Stable, versioned JSON.
Missing measurements are returned as null, never invented. Device IDs, exact coordinates, and private network details are omitted.
{
"schemaVersion": "1.0",
"mode": "live",
"observedAt": "2026-07-25T23:14:00.000Z",
"freshnessSeconds": 2,
"conditions": {
"temperatureF": 68.4,
"humidityPct": 62,
"windSpeedMph": 11.2,
"windDirectionDeg": 247,
"solarRadiationWm2": 426,
"uvIndex": 4.2
},
"quality": {
"fresh": true,
"rapidFeedConnected": true
}
}Wind every 2.5 seconds.
The WeatherLink LAN broadcast terminates at the home collector. Tailscale then shares only that collector—not the camera, WeatherLink device, or home subnet.
- WebSocket:
wss://collector.<tailnet>.ts.net/v1/live - UDP: send
{"type":"subscribe","ttl":60}to collector port 22222 and renew once a minute. - REST snapshot:
/v1/current
Stale is a real state.
Every response includes source and receipt times. Wind and rain rapid packets are normally 2.5 seconds apart; the full current-conditions document is polled every 10 seconds. Clients should check quality.fresh andfreshnessSeconds.