Skip to content
Home›Developers

Order imagery from code

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.

Authentication

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.

POST https://api.atolys.com/v1/catalogue/search

Takes GeoJSON geometry, a datetime range and filters. Returns STAC items with thumbnails, so you can show a preview before anyone spends money.

Create a tasking order

POST https://api.atolys.com/v1/tasking/orders
FieldTypeNotes
geometryrequiredGeoJSONPolygon or MultiPolygon. Minimum billable area 25 km².
sensorrequiredstringoptical_50cm, multispectral_3m, sar_1m.
prioritystringrush, standard (default) or monitoring with a cadence.
windowobjectStart and end dates. Ignored for rush, which takes the next usable pass.
cloud_cover_maxintegerPercent. A capture above this is not billed and is re-tasked.
licencerequiredstringinternal, commercial, government. See licensing.
processing_levelstringL1 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"
  }'

Order status

GET https://api.atolys.com/v1/tasking/orders/{id}

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.

DELETE https://api.atolys.com/v1/tasking/orders/{id}

Cancels before capture at no charge. After capture the scene is billed, because the satellite has already spent the pass.

Webhooks

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"
    }
  }
}

Statuses

StatusMeaning
scheduledPasses allocated, waiting for the window.
capturedImaged, waiting for the next ground station contact.
processingDownlinked, being orthorectified and processed.
deliveredAssets available. Webhook has fired.
retaskedFailed your quality limits, rebooked automatically, not billed.

Connected sites

GET https://api.atolys.com/v1/sites

For connectivity customers: throughput, latency, availability and incident history per site, so link health can sit on your own dashboard instead of ours.

Errors

CodeMeaning
400 area_too_smallPolygon below the 25 km² minimum.
400 no_feasible_passNo pass in your window for that sensor. The response lists the nearest alternatives.
403 licence_not_permittedRequested licence tier is not enabled on the account, usually government end-use.
409 budget_exceededProject spend cap reached. Raise it in the console.
429 rate_limitedBack off; Retry-After tells you how long.

Limits

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.

Request an API key