Data and API
Calibrated products in standard formats, delivered into your own cloud account or pulled through a STAC API. Nothing proprietary, nothing to decode.
Product levels
Levels are cumulative. You can order any level and reprocess older scenes to a newer calibration at no charge.
| Level | Optical | Thermal | Radar | Multispectral |
|---|---|---|---|---|
| L1B | Radiometrically corrected, sensor geometry | At-sensor radiance | SLC (complex) | Top-of-atmosphere radiance |
| L1C | Orthorectified reflectance | Not used | GRD (detected) | Orthorectified reflectance |
| L2 | Surface reflectance, cloud mask | Land surface temperature | GEC (geocoded, calibrated) | Surface reflectance, indices |
| L3 | Mosaics, cloud-free composites | Monthly composites | Coherence and change pairs | Weekly composites, field statistics |
Formats and metadata
Every file opens in QGIS, GDAL, ArcGIS and the common Python and R stacks without a plugin.
| Format | Used for | Notes |
|---|---|---|
| Cloud-optimised GeoTIFF (COG) | All raster products | Internal tiling and overviews, readable by range request, deflate or ZSTD compression |
| STAC 1.0 JSON | Metadata for every scene | Extensions: eo, view, sar, proj, projection; one item per scene |
| SICD (NITF 2.1) | Radar SLC | Complex data with full phase history, standard in interferometry tools |
| GeoJSON | Masks, detections, polygons | WGS 84, one feature per object, attributes in properties |
| GeoParquet | Field statistics and detections at scale | Columnar, partitioned by month; opens in DuckDB, GeoPandas, BigQuery |
Find and fetch scenes
The API follows the open STAC specification, so existing clients work. Authentication uses OAuth 2 client credentials.
Search with curl
curl -s -X POST https://api.perihel.example/stac/v1/search \
-H "Authorization: Bearer $PERIHEL_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"collections": ["perihel-multispectral-l2a"],
"bbox": [-101.1, 37.7, -100.7, 37.9],
"datetime": "2025-07-01T00:00:00Z/2025-07-31T23:59:59Z",
"query": { "eo:cloud_cover": { "lt": 10 } },
"limit": 20
}'The same query in Python
from pystac_client import Client
import rasterio
api = Client.open("https://api.perihel.example/stac/v1",
headers={"Authorization": f"Bearer {token}"})
items = api.search(
collections=["perihel-multispectral-l2a"],
bbox=[-101.1, 37.7, -100.7, 37.9],
datetime="2025-07-01/2025-07-31",
query={"eo:cloud_cover": {"lt": 10}},
).item_collection()
with rasterio.open(items[0].assets["data"].href) as src:
ndvi = (src.read(7) - src.read(4)) / (src.read(7) + src.read(4))Task and receive
Order a new acquisition through the same API. The response tells you the first opportunity; a webhook calls you when the scene is delivered.
Tasking request
POST /v1/tasks
{
"sensor": "radar",
"mode": "stripmap",
"polarisation": "VV",
"geometry": { "type": "Polygon", "coordinates": [[[22.0,39.4],[22.4,39.4],[22.4,39.7],[22.0,39.7],[22.0,39.4]]] },
"window": { "start": "2025-09-12T00:00:00Z", "end": "2025-09-14T00:00:00Z" },
"priority": "high",
"webhook": "https://example.com/hooks/perihel"
}
201 Created
{ "task_id": "TSK-482913", "status": "accepted", "first_opportunity": "2025-09-13T04:32:11Z" }Sample delivery
Push delivery writes into a bucket you own, with a checksum and a delivery receipt next to each scene. Supported targets: Amazon S3, Google Cloud Storage and Azure Blob Storage.
What arrives in your bucket
s3://your-bucket/perihel/
perihel-radar-grd/
2025/09/13/
PH-RAD-20250913-043157-0881.tif 412 MB COG, float32
PH-RAD-20250913-043157-0881.json 6 KB STAC item
PH-RAD-20250913-043157-0881.sha256 1 KB checksum
_receipt/2025-09-13T04:51:20Z.json delivery receiptService levels
These are the figures written into the contract, measured and reported monthly.
| Measure | Commitment | Measured over |
|---|---|---|
| Delivery after downlink, median | L1B 25 min, L2 60 min | Calendar month |
| Delivery after downlink, 95th percentile | Within 90 minutes | Calendar month |
| Tasking acknowledgement | Within 30 minutes of request | Calendar month |
| Satellite availability | 99.5 percent | Calendar month |
| Successful delivery of acquired scenes | 99.9 percent | Calendar quarter |
| API availability | 99.9 percent | Calendar month |
| Archive retention | 7 years, reprocessable | Contract term |
| Support response, severity 1 | 30 minutes, 24 hours a day | Per incident |
Questions about data
Yes. A sandbox API serves a sample of scenes from each sensor with the same schema as production. Ask for a key on the contact page.
Yes. Push delivery supports any region of S3, Google Cloud Storage and Azure Blob Storage. Data residency is set in the contract.
Scenes are encrypted on the satellite, in transit to the ground station and in your bucket with keys that you control. See the compliance page for details.
We keep an archive copy for 7 years for reprocessing, or delete it on written request and send a certificate.
Test the API before you sign
A sandbox key and an engineer to answer questions are free.