Errors & status codes

The error envelope, every error code, and retry guidance.

Every error response uses one envelope:

{
  "error": {
    "code": "study_not_found",
    "message": "No study 'a1b2c3d4' for this organization"
  }
}

Some errors include extra context fields next to code and message (for example detected_series on series-selection failures). A validation_error carries details, a list of { "field": "patient.dob", "message": "..." }.

Unknown routes answer 404 not_found and unsupported methods 405 method_not_allowed, in the same envelope. Anything unexpected on our side is 500 internal_error with no further detail; retry with backoff.

Error codes

HTTPCodeWhenWhat to do
401invalid_api_keyMissing or unknown X-API-KeyCheck the header and key value
403key_revokedKey was revokedUse your replacement key
400unsupported_file_typeFile is not .dcm or .zipRepackage the study
400no_filesNo file part in the submitSend the study as multipart form data with the file in file
400unsupported_scan_typescan_type is not a known body regionUse one of the values listed in the message
404study_not_foundUnknown study id for your orgCheck the study_id from the submit response
404results_not_readyreport.html requested before the read completesPoll GET /studies/{id} until complete
422no_processable_seriesNo usable DICOM series found; the study was not keptInspect detected_series reasons; resubmit with a different series
422series_not_foundseries_uid not in the upload; the study was not keptCheck the UID against detected_series and resubmit
422body_part_mismatchscan_type disagrees with the DICOM BodyPartExamined; the study was not keptResubmit with the right scan_type
422validation_errorMalformed requestSee details for field errors
422scan_type_undetectedThe DICOM header does not say what was scanned; the study was not keptResubmit with scan_type
429rate_limitedToo many write requests this hourWait for Retry-After
502upload_failed / processing_failedThe study could not be stored or dispatched; nothing was keptRetry the submit
500internal_errorUnexpected failure on our sideRetry with backoff; contact support if it persists
503storage_unavailable / auth_unavailableUpstream dependency issueRetry with backoff

Retry guidance

Study status values

StatusMeaning
uploadedStored, not yet dispatched
queuedWaiting for a worker
processingThe read is running; step says where it is
completeResults available
errorFailed; error field has the reason

These five are the only values any route returns.

Next: Changelog