Helpers must require TLS in production, apply timeouts, and raise on non-2xx status.
Errors and recovery
Condition
Resolution
JSON parse failure
Capture the status and request correlation metadata without logging tokens or image content.
ENGINE_ADAPTER_UNAVAILABLE
Wait for a production-certified Cloud engine adapter or evaluate the Android AAR.
Production checklist
Require HTTPS outside loopback development
Set open and read timeouts
Validate response fields with fetch
Do not claim a native Ruby gem
Public contract reference
These are the callable methods and HTTP operations used by this guide. Inputs, results, lifecycle rules, and denial behavior are part of the versioned customer contract.
Cloud upload contract
Upload bytes are authenticated, bounded, MIME-checked, idempotent, and tenant-scoped.
POST /v1/uploads
http
Persist one validated image and return a tenant-scoped upload identifier.
Inputs for POST /v1/uploads
Input
Type
Required
Meaning
Authorization
Bearer token
Yes
Production RS256 token with bounded time claims and cloud-scan entitlement.
idempotencyKey
UUID/string
Yes
Tenant-scoped key reused only for an identical retry.
contentBase64
base64 string
Yes
Locally bounded PNG, JPEG, or WebP bytes.
contentType
string
Yes
image/png, image/jpeg, or image/webp matching the file magic bytes.
Result
2xx JSON containing uploadId and non-sensitive upload metadata.
Lifecycle
Upload before creating a job; retain the idempotency key for retries of the same bytes.
Trust boundary
Tenant and site come only from the verified token; request bodies cannot override tenant scope.
Failure behavior
401/403 for invalid or unentitled identity.
409 for a reused key with different content.
4xx for invalid MIME, magic bytes, base64, or size; 429 for quota limits.
Cloud job creation contract
A job references same-tenant uploads and selects a bounded scan profile.
POST /v1/jobs
http
Create an asynchronous scan job from one or more previously accepted uploads.
Inputs for POST /v1/jobs
Input
Type
Required
Meaning
idempotencyKey
UUID/string
Yes
Tenant-scoped key for identical job retries.
uploadIds
string[]
Yes
Existing upload IDs owned by the authenticated tenant and site.
profile
string
Yes
An allowlisted profile such as still-image-dense.
callback
HTTPS URL
No
Optional policy-validated callback; production delivery requires the documented callback controls.
Result
2xx JSON containing jobId, queued status, and correlation metadata.
Lifecycle
Create after uploads succeed, then poll status until completed or failed.
Trust boundary
Callbacks reject non-HTTPS and non-global destinations, pin validated addresses, follow no redirects, and HMAC-sign payloads.