Migrating from Sentinel Hub
The POST /v1/process body copies the shape of the Sentinel Hub Process API, minus evalscripts, and sits on standard STAC and tile routes. Most of a Sentinel Hub request carries over; the evalscript is the part you replace.
Request mapping
Section titled “Request mapping”| Sentinel Hub | satellitedata.net | Status |
|---|---|---|
| Catalog API search | POST /v1/search (STAC API 1.0) |
Now |
| Process API | POST /v1/process, same input.bounds, input.data[].type, dataFilter, processing and output blocks |
Now (GeoTIFF) |
| Large Process outputs | POST /v1/process/jobs |
Now |
| Evalscript | Named presets for tiles; bands for process |
Now |
| Evalscript band math | expression or an index id such as ndvi in process |
Later |
| Processing units (PU) | Requests: every request counts as one | Now |
| Processing units (PU) | Units, computed with the same formula as PU | Later |
| OGC WMS/WMTS layers | XYZ tiles and TileJSON per preset | Now |
| WMTS | .../WMTSCapabilities.xml per preset |
Later |
| Statistical API | POST /v1/statistics |
Later |
| OAuth client credentials | X-API-Key header |
Now |
| OAuth client credentials | POST /oauth/token, one-hour tokens, the key as client secret |
Later |
Collection ids
Section titled “Collection ids”| Sentinel Hub | satellitedata.net |
|---|---|
S2L2A |
sentinel-2-l2a (S2L2A works as an alias) |
LOTL2 |
landsat-ot-l2 (LOTL2 works as an alias) |
See Collections and ids. Sentinel Hub’s band names for these collections, such as B04, B8A, SCL and CLD, resolve as native names.
Replacing an evalscript
Section titled “Replacing an evalscript”An evalscript does three jobs: it picks bands, computes something from them, and sets the output format. Here they are separate members.
A typical true-colour evalscript:
//VERSION=3function setup() { return { input: ["B04", "B03", "B02"], output: { bands: 3 } };}function evaluatePixel(s) { return [2.5 * s.B04, 2.5 * s.B03, 2.5 * s.B02];}becomes either the true-color preset on a tile, or for a GeoTIFF:
{ "bands": ["red", "green", "blue"], "output": {"width": 512, "height": 512, "format": "image/tiff"}}with your own stretch applied when you display it.
The design’s mapping for common evalscripts (server-side expression is coming later; today, compute these from the bands on your side):
| Evalscript | Bands | Expression |
|---|---|---|
| True colour | red, green, blue |
preset true-color |
| False colour | nir08, red, green |
preset false-color |
| NDVI | red, nir08 |
(nir08 - red) / (nir08 + red) |
| NDWI | green, nir08 |
(green - nir08) / (green + nir08) |
| Moisture index (NDMI) | nir08, swir16 |
(nir08 - swir16) / (nir08 + swir16) |
Sentinel Hub evalscripts often use B08 for NIR. The cross-sensor band is nir08 (B8A); see the B08 trap.
Values: units and harmonizeValues
Section titled “Values: units and harmonizeValues”Sentinel Hub’s units names carry over: DN and REFLECTANCE are available now.
Sentinel Hub’s harmonizeValues removes the Sentinel-2 offset of processing baseline 04.00 and later and sets negative values to zero. The equivalent is:
| Sentinel Hub | satellitedata.net |
|---|---|
harmonizeValues: true |
units: "DN", harmonize: "offset_removed", clipNegative: true |
harmonizeValues: false |
units: "DN", harmonize: "none" |
All three sit in input.data[].processing. offset_removed without clipNegative keeps negative values (int16), which Sentinel Hub cannot return. The older download API on tiles.satellitedata.net calls the same option clamp. See Values, scale and offset.
Other differences
Section titled “Other differences”mosaickingOrderuses the same names:mostRecent(the default),leastRecent,leastCC.dataMask: there is nodataMaskpseudo-band yet. It is part of the unified cloud mask, coming later.Retry-Afteris in seconds, as HTTP defines it. Sentinel Hub sends milliseconds.- Errors are RFC 9457 problem documents with a stable
code; see Errors. - Output: lean v1 process returns GeoTIFF;
output.crsdefaults toEPSG:3857. PNG, JPEG, WebP and JSON are in the full contract. - Geometry: a GeoJSON geometry in
input.boundsis read as its bounding box; pixels outside the geometry are not masked. - Size: 2,500 pixels a side per request, the same as Sentinel Hub’s Process limit, and 20,000 a side in a job.
sentinelhub-py
Section titled “sentinelhub-py”Coming later sentinelhub-py will be able to point its OAuth session at /oauth/token, and its collection ids resolve as aliases. Its process requests will still need the evalscript replaced by bands and expression.