Skip to content

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.

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
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.

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=3
function 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.

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.

  • mosaickingOrder uses the same names: mostRecent (the default), leastRecent, leastCC.
  • dataMask: there is no dataMask pseudo-band yet. It is part of the unified cloud mask, coming later.
  • Retry-After is 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.crs defaults to EPSG:3857. PNG, JPEG, WebP and JSON are in the full contract.
  • Geometry: a GeoJSON geometry in input.bounds is 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.

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.