API reference
Images
Raw photos, uploaded as bytes and addressed by id from then on. An image is typed by its content, not its declared type, and every URL you get back is a short-lived signed one.
The Image object
Attributes
idstringCrockford-base32 ULID (26 chars).mime_typeenumimage/jpegimage/pngimage/webp
urlstring (URL)Time-limited signed URL to the original image. Fetch a fresh one fromGET /v1/images/{id}when it expires.url_expires_attimestampWhenurlstops working.created_attimestampRFC 3339 / ISO 8601 timestamp.
The Image object
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYS",
"mime_type": "image/jpeg",
"url": "https://example.com/…",
"url_expires_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z"
}Upload an image
POST/v1/images
Single-shot upload via multipart/form-data. The bytes flow through this endpoint to Supabase Storage, and the image is only reported as created once they are on disk — so the returned id is immediately referenceable from POST /v1/products. If any step fails the upload is rolled back whole; a partially-stored image is never returned.
This is the single-product path, paired with POST /v1/products. For a catalogue, skip the upload entirely: POST /v1/imports takes each photo as an https:// URL and fetches it for you.
Limits: body must be ≤ 10 MB. Accepted formats: JPEG, PNG, WebP — detected from the file's bytes; the multipart Content-Type you declare is ignored.
Form fields:
file(required): the image bytes.
Example:
curl -X POST https://api.veeton.com/v1/images \
-H "Authorization: Bearer ak_..." \
-F "file=@./crewneck-front.jpg"
Parameters
filestringrequiredThe image bytes, as amultipart/form-datafield. JPEG, PNG or WebP, up to 10 MB; typed from the bytes.
Returns
Returns a ImageUpload object with status 201.
Errors
400Invalid request
413Payload too large
415Unsupported media type
500Server error
POST/v1/images
curl https://api.veeton.com/v1/images \
-H "Authorization: Bearer $VEETON_KEY" \
-F "file=@./photo.jpg"Response · 201
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYS",
"mime_type": "image/jpeg",
"created_at": "2026-04-27T14:32:00Z"
}Retrieve an image
GET/v1/images/{image_id}
Returns the image metadata and a short-lived signed URL pointing at the original bytes. Useful for re-fetching expired URLs or inspecting reference images attached to a Product. The URL TTL is one hour — re-fetch on expiry, do not cache.
Parameters
image_idstringrequiredCrockford-base32 ULID (26 chars).
Returns
Returns a Image object with status 200.
Errors
404Not found
500Server error
GET/v1/images/{image_id}
curl https://api.veeton.com/v1/images/01HX5K2MZ7A3Q4FBNDC0EVDXY1 \
-H "Authorization: Bearer $VEETON_KEY"Response · 200
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYS",
"mime_type": "image/jpeg",
"url": "https://example.com/…",
"url_expires_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z"
}