Skip to content

SkySight satellite tiles

The two SkySight calls the satellite cloud overlay needs. The forecast catalogue, regions and layers are in SkySight layers and vulture-web /api/skysight; the cloud overlay uses none of them.

POST https://skysight.io/api/auth

HeaderValue
X-API-KEYVulture (the app’s static key)
Content-Typeapplication/json
{ "username": "pilot@example.com", "password": "…" }

Success (200):

{ "key": "<session key>", "allowed_regions": ["EUROPE", "…"] }

Any failure is shown as skysight.error.labels.invalid (“The given credentials are incorrect.”). The session key is only needed for the forecast API (X-API-KEY: <key>); the satellite tiles do not use it.

iOS source: vulture-ios/Packages/SkySight/Sources/SkySight/Requests/Authenticate/SkySightAuthenticationRequest.swift, vulture-ios/Modules/App/Sources/Services/SkySight/SkySightManager.swift (authenticate).

GET https://satellite.skysight.io/tiles/{z}/{x}/{y}@2x?date={yyyy}/{MM}/{dd}/{HHmm}&mtg=true

  • date is the frame time in UTC, yyyy/MM/dd/HHmm (slashes not escaped).
  • mtg=true asks for the Meteosat Third Generation imagery (clouds with rain).
  • Response: 200 image/jpeg, 512 × 512, roughly 10–100 KB. A tile the archive does not have is 404. iOS also treats a body of 100 bytes or less as a failure.
  • No key, no cookie. Checked on 2026-10-19: the tile answers 200 with and without Origin: https://skysight.io. iOS adds the header to every *.skysight.io request anyway (SkySightHttpInterceptor.swift); doing the same is harmless.

Which tiles and dates to ask for: Satellite cloud frames.

iOS source: vulture-ios/Packages/Flights/Sources/Flights/Satellite/SatelliteTileManager.swift (tileURL, tileURLTemplate), base URL Vulture.satelliteBaseURL (vulture-ios/Packages/Preferences/Sources/Preferences/Vulture.swift).