The post/get helpers must check response.ok, apply timeouts, and parse structured errors.
Errors and recovery
Condition
Resolution
401 or 403
Refresh the bearer token and confirm it grants cloud-scan for the intended tenant and site.
Request times out
Abort the fetch, retain the idempotency key, and retry with bounded backoff.
Production checklist
Keep credentials server-side
Use AbortController timeouts
Reuse idempotency keys only for identical retries
Do not advertise this REST client as an npm SDK
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.