A REST API over the catalogue, tasking, delivery and your connected sites. STAC-compliant metadata, signed webhooks, and a sandbox that returns real archive scenes over a test area.
Bearer tokens, scoped per project so imagery spend can be attributed. Sandbox keys (key_test_…) return real archive scenes over a fixed test polygon in Central Europe, at no charge.
Takes GeoJSON geometry, a datetime range and filters. Returns STAC items with thumbnails, so you can show a preview before anyone spends money.
// npm i @atolys/node import { Atolys } from "@atolys/node"; const atolys = new Atolys(process.env.ATOLYS_API_KEY); // what do we already hold over this field? const scenes = await atolys.catalogue.search({ geometry: { type: "Polygon", coordinates: aoi }, datetime: "2026-04-01/2026-09-01", sensor: ["multispectral"], cloud_cover_max: 20 });
| Field | Type | Notes |
|---|---|---|
| geometryrequired | GeoJSON | Polygon or MultiPolygon. Minimum billable area 25 km². |
| sensorrequired | string | optical_50cm, multispectral_3m, sar_1m. |
| priority | string | rush, standard (default) or monitoring with a cadence. |
| window | object | Start and end dates. Ignored for rush, which takes the next usable pass. |
| cloud_cover_max | integer | Percent. A capture above this is not billed and is re-tasked. |
| licencerequired | string | internal, commercial, government. See licensing. |
| processing_level | string | L1 to L4. Defaults to L2. |
curl -X POST https://api.atolys.com/v1/tasking/orders \ -H "Authorization: Bearer $ATOLYS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "geometry": { "type": "Polygon", "coordinates": [[[17.10,48.14],[17.18,48.14],[17.18,48.19],[17.10,48.19],[17.10,48.14]]] }, "sensor": "optical_50cm", "priority": "standard", "window": { "start": "2026-09-24", "end": "2026-10-01" }, "cloud_cover_max": 15, "licence": "internal", "processing_level": "L2" }'
{
"id": "ord_7Hs2QpLd4M",
"status": "scheduled",
"sensor": "optical_50cm",
"area_km2": 118.4,
"price": { "amount": 1362.00, "currency": "EUR" },
"passes": [
{ "at": "2026-09-25T09:41:00Z", "off_nadir_deg": 12.4, "confidence": "high" },
{ "at": "2026-09-27T09:33:00Z", "off_nadir_deg": 21.8, "confidence": "medium" }
],
"delivery": { "method": "s3", "bucket": "customer-eo-data" }
}
Shows the scheduled passes, which ones were attempted, why an attempt failed, and the assets delivered so far. Monitoring orders list every capture in the series.
Cancels before capture at no charge. After capture the scene is billed, because the satellite has already spent the pass.
Signed with HMAC-SHA256 and timestamped. Events: order.scheduled, capture.attempted, capture.delivered, capture.failed, order.completed.
{
"type": "capture.delivered",
"data": {
"order_id": "ord_7Hs2QpLd4M",
"scene_id": "sc_A19f3Qm",
"captured_at": "2026-09-25T09:41:12Z",
"cloud_cover": 4.2,
"off_nadir_deg": 12.4,
"processing_level": "L2",
"assets": {
"visual": "https://delivery.atolys.com/…/visual.tif",
"metadata": "https://delivery.atolys.com/…/stac.json"
}
}
}| Status | Meaning |
|---|---|
| scheduled | Passes allocated, waiting for the window. |
| captured | Imaged, waiting for the next ground station contact. |
| processing | Downlinked, being orthorectified and processed. |
| delivered | Assets available. Webhook has fired. |
| retasked | Failed your quality limits, rebooked automatically, not billed. |
For connectivity customers: throughput, latency, availability and incident history per site, so link health can sit on your own dashboard instead of ours.
| Code | Meaning |
|---|---|
| 400 area_too_small | Polygon below the 25 km² minimum. |
| 400 no_feasible_pass | No pass in your window for that sensor. The response lists the nearest alternatives. |
| 403 licence_not_permitted | Requested licence tier is not enabled on the account, usually government end-use. |
| 409 budget_exceeded | Project spend cap reached. Raise it in the console. |
| 429 rate_limited | Back off; Retry-After tells you how long. |
60 requests per minute on search, 20 per minute on tasking, per project. Delivery URLs are valid for seven days; assets stay available in the console for the retention period on your contract.