Skip to main content
POST
Create an image record

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json

The metadata for a new image record. The pixels are uploaded separately; size is the total byte size of the file you will upload. Set resumable to also receive the presigned upload plan in the same response. Server-controlled fields (id, created_by, organization_id, upload_status) are not accepted here.

name
string
required

Filename or label for the image.

Example:

"sample.tif"

size
integer
required

Total size of the image file in bytes.

Example:

4194304

image_type
enum<string>
default:TIFF

Image format. Only TIFF is currently supported.

Available options:
TIFF
additional_info
Additional Info · object

Arbitrary JSON metadata to store alongside the image.

folder_id
string<uuid> | null

Optional folder to place the image in; it must belong to your organization. API clients typically have no folders and omit this.

resumable
boolean
default:false

Set to true to also open a resumable upload in the same call: the response then carries upload with presigned part URLs sized for size (so size must be exact). PUT each chunk to its URL, then call POST /upload/{image_id}/complete — no separate /init call needed.

Response

The image record was created; upload the pixels next.

The created image record, plus — when resumable: true was requested — the presigned upload plan under upload (otherwise null).

id
string
required
name
string
required
upload_status
enum<string>
required

Lifecycle of a resumable S3 multipart image upload.

uploading -> row created, bytes still being PUT directly to S3 processing -> object landed in S3, backend is converting it off the event loop ready -> conversion done, shape populated, image is usable failed -> aborted or conversion failed (orphan-sweep cron will reap it)

Available options:
uploading,
processing,
ready,
failed
image_type
enum<string>
required
Available options:
TIFF
size
integer
required
created_at
string<date-time>
required
shape
integer[] | null
folder_id
string<uuid> | null
processed_at
string<date-time> | null
upload_error
string | null
upload
InitUploadResponse · object | null

The presigned multipart plan: PUT each chunk of the file to its url (in part order), then call /complete — no body needed, the server verifies the uploaded parts with storage directly.

The internal S3 object key is deliberately not exposed: the presigned urls already encode everything the client needs, and the key layout is a server-side implementation detail we keep off the public contract.

Example: