Skip to content

POST /v1/process

Cuts an area out of the scenes in a time range, or out of scenes you name, and returns a GeoTIFF. The body follows the v1 contract’s Process request, modelled on the Sentinel Hub Process API without evalscripts. Lean v1 accepts a subset of it.

Method and path POST /v1/process
Key needed
Request application/json
Response image/tiff up to 4 MB inline; larger outputs 303 See Other to a one-hour link
Lean OpenAPI renderProcess
Full contract renderProcess

Available now

Member Meaning Default
input.bounds.bbox west, south, east, north in longitude and latitude (4 numbers, or 6 with heights)
input.bounds.geometry a GeoJSON Polygon or MultiPolygon instead of bbox; lean v1 reads its bounding box
input.bounds.properties.crs CRS84 only CRS84
input.data one source (no data fusion)
input.data[0].type collection id or any alias: sentinel-2-l2a, S2L2A, landsat-ot-l2, landsat-c2-l2, …
input.data[0].dataFilter.timeRange {"from": ..., "to": ...} in RFC 3339; the API searches the window and keeps the first scenes, in mosaickingOrder, whose footprints together cover the box, at most 6
input.data[0].dataFilter.maxCloudCoverage scene cloud cover ceiling, 0 to 100 100
input.data[0].dataFilter.mosaickingOrder mostRecent, leastRecent or leastCC mostRecent
input.data[0].dataFilter.ids lean extension: 1 to 6 scene ids to mosaic, in order, instead of timeRange
input.data[0].processing.units REFLECTANCE (float32 physical values) or DN (stored integers) REFLECTANCE
input.data[0].processing.harmonize none or offset_removed offset_removed
input.data[0].processing.clipNegative set converted values below 0 to 0 false
bands common names, native names or aliases; see Bands every spectral band
output.width, output.height size in pixels, at most 2,500 a side; give one and the other follows the box
output.resx, output.resy pixel size in CRS units, instead of width and height
output.crs an EPSG code (EPSG:32615) or OGC URI EPSG:3857
output.format image/tiff image/tiff
output.sampleType AUTO, or the type units and harmonize produce (see below)

Unknown members are rejected with 400 invalid-body, so a typo fails loudly. Members of the contract that lean v1 does not offer (preset, expression, processing.cloudMask, dataFilter.platform, more than one data source, PNG, JPEG, WebP or JSON output) are also rejected with invalid-body, with a detail saying they are not available in lean v1.

units harmonize GeoTIFF type
REFLECTANCE either FLOAT32, nodata NaN
DN offset_removed (Sentinel-2) INT16, so values below zero survive
DN none, or any Landsat UINT16, as stored

sampleType, if given, must match. See Values, scale and offset.

The GeoTIFF’s band descriptions are Earth Search asset keys, such as red, nir08 and scl, in the order you asked for them. The response carries the credit line in X-Attribution.

Terminal window
curl -s -L -X POST https://api.satellitedata.net/v1/process \
-H "X-API-Key: $SDN_API_KEY" \
-H "Content-Type: application/json" \
-o red-nir.tif \
-d '{
"input": {
"bounds": {"bbox": [-93.3, 44.9, -93.2, 45.0]},
"data": [{
"type": "sentinel-2-l2a",
"dataFilter": {
"timeRange": {"from": "2026-07-01T00:00:00Z", "to": "2026-07-31T23:59:59Z"},
"maxCloudCoverage": 20,
"mosaickingOrder": "leastCC"
}
}]
},
"bands": ["red", "nir08"],
"output": {"width": 512, "height": 512, "crs": "EPSG:4326"}
}'

This returns float32 reflectance (the defaults), one band per requested band.

Status Meaning
200 the GeoTIFF, when it is 4 MB or less
303 Location is a presigned link to the GeoTIFF, valid for one hour; the file is deleted after a day

HTTP clients follow the 303 on their own (curl -L, Python requests).

Limit Value
Output size 2,500 pixels a side; use jobs for up to 20,000
Output values (width × height × bands) 150,000,000
Scenes in one mosaic 6
Render time 29 seconds
Status Code When
400 invalid-body malformed JSON, an unknown member, a value out of range, a band asked for twice, a sampleType that does not match, or a contract member lean v1 does not offer; errors[].pointer names the member
401 invalid-key no key or an unknown key
404 unknown-collection type is not a collection or alias
404 not-found no scenes under the cloud ceiling over the box in the time range
413 output-too-large over 2,500 pixels a side or 150 million values; limits gives the numbers
422 unknown-band a band the collection or scene lacks, or a pseudo-band such as dataMask; the detail suggests close names
422 harmonize-unavailable bandpass_adjusted or nbar
422 units-unavailable a unit other than REFLECTANCE or DN
429 rate-limited, quota-exhausted over the rate or monthly limit
504 render-timeout the render ran past 29 seconds; use a job

From the full contract: expression (band math, or an index id such as ndvi), preset, processing.cloudMask, resampling other than nearest, pixelSelection, dataFilter.platform, up to four data sources (data fusion), exact geometry clipping, PNG, JPEG, WebP and JSON output (with per-scene metadata), and unit metering.