Quickstart
The Skyfora API provides access to GNSS measurement data, reference station metadata, and network information for integration into your applications and workflows.
This guide walks you through creating an API key, discovering available stations, and pulling measurement data.
1. Create an API key
Sign in to the Skyfora Portal and create an API key under your organization settings. The key is scoped to your organization and grants access to the stations and networks you are entitled to.
Include the key in every API request:
X-API-Key: your-api-key-here
2. List your stations
Before querying measurements, find out which stations are available to you. The stations endpoint returns metadata for all stations your organization is entitled to, including the mountpoint identifier you will need for measurement queries.
curl https://api.skyfora.com/api/v1/stations \
-H "X-API-Key: your-api-key-here"
Response:
{
"stations": [
{
"id": "a1b2c3d4-...",
"mountpoint": "STATION_A",
"display_name": "Bergstadt",
"country_code": "DE",
"latitude": 50.94,
"longitude": 6.96
},
{
"id": "e5f6a7b8-...",
"mountpoint": "STATION_B",
"display_name": "Seedorf",
"country_code": "DE",
"latitude": 52.52,
"longitude": 13.41
}
],
"pagination": { "page": 1, "page_size": 20, "total_count": 2 }
}
Use the mountpoint values (e.g. STATION_A) when querying measurements in the next step.
You can filter stations by country, network, bounding box, or search term — see the Stations API reference for details.
3. Query measurements
Use the measurements endpoint to retrieve observation data for your stations. Specify a time range, one or more mountpoints, and the variables you want.
Available variables
Most variables are derived from GNSS observations and updated every 30 seconds on standard receivers, or every 1 second on Skyfora StreamGNSS receivers. PWV is updated every 5 minutes.
| Variable | Description | Unit | Update interval (standard) | Update interval (Skyfora StreamGNSS)¹ |
|---|---|---|---|---|
ztd |
Zenith Total Delay | mm | 30 s | 1 s |
ztd_sigma |
ZTD uncertainty (standard deviation) | mm | 30 s | 1 s |
pwv |
Precipitable Water Vapour | mm | 5 min | 5 min |
snr |
Signal-to-noise ratio (per satellite, per signal band) | dB-Hz | 30 s | 1 s |
el |
Satellite elevation (per satellite) | degrees | 30 s | 1 s |
az |
Satellite azimuth (per satellite) | degrees | 30 s | 1 s |
prn |
Satellite PRN identifiers | — | 30 s | 1 s |
¹ For stations served by Skyfora StreamGNSS receivers, variables other than pwv are currently produced at 1 s cadence. This rate will be reduced to 30 s in a future release to align with other stations.
How PWV is derived: Precipitable Water Vapour (PWV) is estimated from GNSS zenith total delay (ZTD) using surface pressure, air temperature at 2 m, and relative humidity from the nearest suitable meteorological observation or a numerical weather prediction (NWP) model, depending on availability, with values height-adjusted to the GNSS site. These meteorological inputs are not returned in the API response and are not necessarily measured at the GNSS station itself.
Response formats
The API supports two response formats via content negotiation:
- NetCDF-4 (default) — binary scientific data format with CF-1.8 conventions. Returned when no
Acceptheader is set, or withAccept: application/x-netcdf. - JSON — returned when
Accept: application/jsonis set.
NetCDF-4 is the recommended format for data analysis workflows. It can be read directly by Python xarray, MATLAB, R ncdf4, and other NetCDF-compatible tools.
Download a NetCDF file
curl -X POST https://api.skyfora.com/api/v1/measurements/query \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key-here" \
-o measurements.nc \
-d '{
"start_time": "2026-03-20T00:00:00Z",
"end_time": "2026-03-21T00:00:00Z",
"mountpoints": ["STATION_A"],
"data_vars": ["ztd", "ztd_sigma", "pwv"]
}'
Fetch measurements as JSON
curl -X POST https://api.skyfora.com/api/v1/measurements/query \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-API-Key: your-api-key-here" \
-d '{
"start_time": "2026-03-20T00:00:00Z",
"end_time": "2026-03-20T01:00:00Z",
"mountpoints": ["STATION_A"],
"data_vars": ["ztd", "ztd_sigma", "pwv"]
}'
Response:
{
"data": [
{
"timestamp": "2026-03-20T00:00:00.000Z",
"receiver_id": "STATION_A",
"ztd": 2353.5,
"ztd_sigma": 4.0,
"pwv": 12.3
},
{
"timestamp": "2026-03-20T00:15:00.000Z",
"receiver_id": "STATION_A",
"ztd": 2354.0,
"ztd_sigma": 4.0,
"pwv": 12.4
}
],
"count": 2
}
4. Analyze the data
Read NetCDF with Python
import xarray as xr
ds = xr.open_dataset("measurements.nc")
# Inspect the dataset
print(ds)
# Access ZTD values for a specific station
ztd = ds.sel(station="STATION_A").ztd
print(ztd.values)
# Convert to a pandas DataFrame
df = ds.to_dataframe().reset_index()
print(df.head())
Query multiple stations
curl -X POST https://api.skyfora.com/api/v1/measurements/query \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key-here" \
-o measurements.nc \
-d '{
"start_time": "2026-03-20T00:00:00Z",
"end_time": "2026-03-21T00:00:00Z",
"mountpoints": ["STATION_A", "STATION_B"],
"data_vars": ["ztd", "pwv"]
}'
Access control
Your API key is scoped to your organization. You can only access stations and measurement data for networks your organization is entitled to. Requests for stations outside your entitlements will return a 403 error.
Limits
The API returns all observations matching your query in a single response. If the resulting file exceeds 150 MB, the request will return a 413 error.
As a rough guide, querying all 7 variables for 50 stations over 30 days produces approximately 60 MB. At 100 stations with the same parameters and time range, you would approach the limit. Numeric-only queries (ztd, ztd_sigma, pwv) are much smaller and can cover more stations and longer time ranges in a single request.
If your query exceeds the limit, split it into multiple requests — for example by time range or by groups of mountpoints — and combine the results on your side.
Insight dashboard
All measurement variables available through the API — ZTD, ZTD uncertainty, PWV, satellite elevation, azimuth, and SNR — are also visualized in the Skyfora Insight dashboard, provided your organization has access to the corresponding parameters.