Concepts

How it works

Understand the asynchronous job lifecycle used by every SateAIs detection API.

Satellite imagery analysis takes minutes to tens of minutes depending on the model and area. Every SateAIs detection endpoint is asynchronous: you submit a job, poll for its status, then fetch the result.

The three-step lifecycle

1. POST /api/v1/detect/{type}                →  receive job_id (status = "pending")
2. GET  /api/v1/jobs/{job_id}                →  poll until status = "completed"
3. GET  /api/v1/jobs/{job_id}/result.geojson →  fetch the GeoJSON result (302 redirect to S3)

Job statuses

StatusDescription
pendingJob received, queued for processing.
processingCurrently running inference.
completedFinished successfully. Result is available for 30 days.
failedFailed. See the error field for the reason. No credits are charged.

Poll every ~1 minute. Polling faster increases load without accelerating completion and may trigger rate limits.

Runtime depends mostly on analyzed area. The ranges below reflect small-to-large AOIs observed in production. Submit a small test job first to gauge the upper bound for your workload.

DetectionTypical runtimeSuggested first poll
ship~15 min5 min after submission
oilslick~50 min10 min after submission
newbuilding1–40 min (area-dependent)5 min after submission
timeseries1–15 min (area-dependent)2 min after submission

ship / oilslick process a single Sentinel-1 scene each, so runtime is relatively stable. newbuilding / timeseries scale with the polygon area — a 1 km² AOI finishes in about a minute, while approaching the per-endpoint size cap can take tens of minutes.

Result retention

Results are stored for 30 days after completion. After that, GET /api/v1/jobs/{job_id}/result.geojson returns 410 Gone. The job metadata itself (status, timestamps) is retained indefinitely.

Failure handling

If a job fails:

  • status transitions to failed.
  • The error field contains a machine-readable code and human-readable message.
  • No credits are charged for failed jobs.
  • Clients should surface the error code to users and optionally retry.

See Errors for the full list of error codes.

Next steps

On this page