Older hosts
Before api.satellitedata.net, the service ran on two hosts. They keep working unchanged, and the web map uses them. They take the same keys as lean v1, sent as x-api-key, and count against the same limits. New code should use api.satellitedata.net/v1.
stac.satellitedata.net
Section titled “stac.satellitedata.net”Scene search, passed through to Element 84’s Earth Search catalog. It speaks STAC API with Earth Search’s collection ids: sentinel-2-c1-l2a and landsat-c2-l2.
curl -s -X POST https://stac.satellitedata.net/search \ -H "x-api-key: $SDN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"collections":["sentinel-2-c1-l2a"],"bbox":[0.6,40.55,1.0,40.85],"datetime":"2026-08-20T00:00:00Z/2026-08-31T23:59:59Z","limit":3,"query":{"eo:cloud_cover":{"lte":20}}}'Earth Search filters cloud cover only through the query extension and silently ignores CQL2 filter parameters.
tiles host
Section titled “tiles host”tiles.satellitedata.net runs TiTiler (titiler-stacapi) on AWS Lambda. It renders single scenes and mosaics by asset name:
curl -s -H "x-api-key: $SDN_API_KEY" -o s2.png \ "https://tiles.satellitedata.net/collections/sentinel-2-c1-l2a/items/S2A_T31TCF_20260829T105044_L2A/tiles/WebMercatorQuad/12/2056/1540.png?assets=visual"The display settings the web map uses:
| Preset | Sentinel-2 (sentinel-2-c1-l2a) |
Landsat (landsat-c2-l2) |
|---|---|---|
| True colour | assets=visual |
assets=red&assets=green&assets=blue&rescale=7273,18182 |
| False colour | assets=nir&assets=red&assets=green&rescale=1000,5000 |
assets=nir08&assets=red&assets=green&rescale=7273,21818 |
| NDVI | assets=nir&assets=red&expression=(b1-b2)/(b1%2Bb2-2000)&rescale=-0.2,0.8&colormap_name=rdylgn |
assets=nir08&assets=red&expression=(b1-b2)/(b1%2Bb2-14545.45)&rescale=-0.2,0.8&colormap_name=rdylgn |
- Band math names bands
b1,b2and so on, in the order theassetsare listed. - The NDVI expressions subtract each collection’s offset from the denominator (2 × 1,000 for Sentinel-2, 2 × 7,272.7 for Landsat), so Sentinel-2 and Landsat NDVI agree. A plain
(b1-b2)/(b1+b2)would be biased. - Mosaics are built from scene ids a search has already filtered (
ids=ID1,ID2,...), not from a cloud filter in the tile URL. Avoidsortbyon mosaic tiles. GET /healthzreports whether the STAC API behind it is online.
The first request after a quiet spell takes 5 to 10 seconds while Lambda starts; later ones take 1 to 3 seconds.
POST /downloads
Section titled “POST /downloads”POST https://tiles.satellitedata.net/downloads writes a GeoTIFF of one scene, or a mosaic of up to 6 scenes, over a box and returns links. POST /downloads/jobs and GET /downloads/jobs/{id} run larger requests in the background. The body, options and limits are in Download an area as GeoTIFF.
| Field | Meaning |
|---|---|
collection |
sentinel-2-c1-l2a or landsat-c2-l2 |
item |
one scene id, or |
items |
1 to 6 scene ids of one pass, or |
datetime |
a start/end window; every scene over the box from the clearest scene’s platform, at most 6 |
order |
least_cloud (default) or as_given |
bbox |
west, south, east, north in degrees |
bands, crs, resolution, resolution_deg, size |
what to read and the output grid |
units, harmonize, clamp |
see Values |
output |
multiband or per_band |
preview |
{"width": 64-2500} for a true-colour PNG |
Response
Section titled “Response”| Member | Meaning |
|---|---|
files |
one entry per file: url, filename, bytes, and band details (bands, scales, offsets, dtype, nodata; or per band band, scale, offset, valid_fraction, items_used) |
preview |
url, width, height, valid_fraction, when asked |
items_used, items_considered |
the scenes that supplied pixels, and the scenes read |
width, height, crs, bounds, transform, resolution |
the output grid |
units, harmonize, clamp, output |
the options applied |
seconds |
render time |
expires_in |
link lifetime in seconds (3600) |
A multiband answer also repeats the single file’s url, filename, bytes, bands, dtype, nodata, scales and offsets at the top level.
Errors
Section titled “Errors”The older hosts do not return problem documents:
| Status | When |
|---|---|
403 Forbidden |
missing or wrong key (from API Gateway) |
429 Too Many Requests |
over the per-second or monthly limit |
400 |
unknown bands, a band asked for twice, an unknown crs, or a box that misses the scenes |
404 |
no scenes over the box in the datetime window, or an unknown job id |
413 |
over the size cap, with the numbers; or more than 6 scenes in the datetime window |
422 |
a body that fails validation, or band-unavailable when a scene lacks a band (some Landsat Tier 2 scenes have no B10) |
502, 504 |
a render failure, or a render past about 29 seconds |
Download API errors are JSON with a detail member.