Errors

HTTP status codes, error codes, and recommended handling for the SateAIs API.

Synchronous errors (4xx / 5xx)

Immediate error responses (e.g. invalid request, auth failure) share the same envelope:

{
  "error": {
    "code": "INSUFFICIENT_CREDITS",
    "message": "Your credit balance is insufficient. Please purchase more credits."
  }
}

Asynchronous job failures

When a job transitions to failed, the error details are returned as flat fields on the Get job status response:

{
  "job_id": "351e635d-7c25-4ae8-a2a5-60c01a6f434c",
  "status": "failed",
  "created_at": "2026-03-12T15:00:00Z",
  "completed_at": "2026-03-12T15:31:15Z",
  "result_path": null,
  "error_code": "VALIDATION_ERROR",
  "error_message": "Polygon area (52.6 km²) exceeds 50 km² limit for endpoint 'timeseries'"
}

For 5xx failures, error_message returns a fixed string to avoid leaking internal details:

An internal error occurred. Please try again later or contact [support](mailto:console-support@spcsft.com).

Error codes

HTTPCodeMeaningRecommended action
400VALIDATION_ERRORInvalid request body, bad parameter, or polygon area exceeds the per-endpoint cap (newbuilding ≤ 30,000 km², timeseries ≤ 50 km²). Rejected before credits are consumed.Fix the request. Do not retry unchanged.
401UNAUTHORIZEDMissing, malformed, or revoked API key.Check Authorization header.
402INSUFFICIENT_CREDITSNot enough credits for the job.Purchase credits in the Console.
403FORBIDDENKey lacks permission for this endpoint.Check plan entitlements.
404NOT_FOUNDJob ID does not exist.Verify the UUID.
404SCENE_NOT_FOUNDNo Sentinel-1 scene within ±14 days of the requested date.Widen date range or pick another date.
404INSUFFICIENT_SCENESFewer than two scenes found for newbuilding/timeseries.Widen the date range.
410GONEResult file is past the 30-day retention window.Result is unavailable; resubmit if needed.
429RATE_LIMIT_EXCEEDEDRequest rate or concurrent-job limit exceeded.Back off exponentially.
500INTERNAL_ERRORUnexpected server error.Retry with backoff; contact support if persistent.
502EXTERNAL_SERVICE_ERRORUpstream satellite-data provider error.Retry after a few minutes.
504TIMEOUTRequest timed out.Retry with backoff.

Retrying safely

  • Idempotent GETs (GET /api/v1/jobs/*) — safe to retry unconditionally.
  • POST detection requests — if you receive 5xx or a network error without a response, check whether a job_id was created before retrying to avoid duplicate jobs.
  • Use exponential backoff (start 1 s, cap 30 s, max 5 attempts) for 429, 5xx, and 504.

Tracing a failed job

If a job transitions to failed:

  1. Call Get job status to read error_code and error_message.
  2. Map error_code to the table above for recommended actions.
  3. Surface error_message to the end user where appropriate.

The error field is deprecated and returns the same value as error_code. Use error_code + error_message in new integrations.

Failed jobs do not consume credits.

Next steps

On this page