Skip to main content
POST
Create a presigned upload

Authorizations

Authorization
string
header
required

Organisation API key, sent as Authorization: Bearer chk_live_….

  • chk_live_… — real inference, real credits, livemode: true.
  • chk_test_… — identical pipeline against the fixture backend, test credits, livemode: false.

Keys are stored hashed; only the prefix (chk_live_a1b2…) is ever displayed again. A key may be scoped to a subset of endpoint families — calling outside its scopes is a 403.

Headers

Idempotency-Key
string

Client-generated key (a UUID is ideal) making this POST safe to retry. The first request is executed and its response stored for 24 h; any replay with the same key returns that stored response with Idempotent-Replayed: true and bills nothing. Reusing a key with a different payload is a 409 idempotency_key_reuse.

Required string length: 8 - 255

Body

application/json
endpoint
enum<string>
required

Endpoint the upload is destined for. Required: the size ceiling written into the presigned URL is per endpoint, and a walkaround video is not held to the same limit as a plate photo.

Available options:
vehicle.analyse,
vehicle.segment,
vehicle.identify,
vin.read,
plate.read,
document.read,
dashboard.read,
engine.detect,
video.onboard,
damage.detect,
damage.severity,
tire.read,
tire.detect,
parts.recognize,
parts.segment,
parts.decompose,
pricing.vehicle,
pricing.repair,
render.background,
render.enhance,
render.plate,
render.360,
render.video,
viewer.hotspots,
inspections
content_type
string

MIME type of the file you are about to upload. Sent verbatim on the PUT.

Examples:

"video/mp4"

"image/jpeg"

"audio/wav"

filename
string

Kept for your own traceability; never interpreted.

Maximum string length: 255

Response

Upload slot created.

object
string
required
Allowed value: "upload"
upload_ref
string
required

Pass this as input_ref / input_refs once the bytes are uploaded.

Pattern: ^upl_[1-9A-HJ-NP-Za-km-z]{8,32}$
Example:

"upl_7Qm2hV9tXbLd"

url
string<uri>
required

Presigned PUT target. Send the raw bytes with the declared Content-Type and no authentication header — the signature is in the URL.

expires_at
integer<int64>
required

After this instant the URL is refused and a new upload must be created.

Example:

1755300000

max_bytes
integer
required

Hard ceiling enforced by storage, in bytes.

Required range: x >= 1
Example:

524288000

method
string
Allowed value: "PUT"