API
esc

Type to search.

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

  • idstring
    Crockford-base32 ULID (26 chars).
  • mime_typeenum
    • image/jpeg
    • image/png
    • image/webp
  • urlstring (URL)
    Time-limited signed URL to the original image. Fetch a fresh one from GET /v1/images/{id} when it expires.
  • url_expires_attimestamp
    When url stops working.
  • created_attimestamp
    RFC 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

  • filestringrequired
    The image bytes, as a multipart/form-data field. JPEG, PNG or WebP, up to 10 MB; typed from the bytes.

Returns

Returns a ImageUpload object with status 201.

Errors
  • 400

    Invalid request

  • 413

    Payload too large

  • 415

    Unsupported media type

  • 500

    Server 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_idstringrequired
    Crockford-base32 ULID (26 chars).

Returns

Returns a Image object with status 200.

Errors
  • 404

    Not found

  • 500

    Server 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"
}