Image contract
Know exactly what you receive.
Vieunite separates a selectable artwork version, its descriptive metadata, and the temporary URL that delivers the image bytes. Use each layer for its intended lifetime.
Three layers form one asset delivery
renditionThe opaque available_versions[].key selected by an editor. Persist this with the artwork reference.
assets + available_versionsJSON metadata describing thumbnails, source geometry, delivery geometry, MIME type and access.
A short-lived capability. A GET to this URL returns binary image bytes, not JSON or base64.
Available image content
Availability is per artwork. Do not assume that every work has every row below; read available_versions from the current response.
| Content | What it preserves | How it is provided |
|---|---|---|
| Safe thumbnail | One composition-safe thumbnail for every selectable version, up to 960px on its longest edge. It keeps the version ratio. | The hosted Picker and preview experience proxy the bytes. Authenticated artwork metadata can expose the default assets.thumbnail.url. |
Curator-supplied versioncrop is typical | The uploaded composition, ratio and orientation. Delivery may be proportionally downscaled to the current 3840px display bound, so source and delivery can differ. | Its label is derived from its real dimensions: 4K, 1080p or Uploaded. Request the version key through the signed URL endpoint. |
Curator-supplied squaresquare | An independently uploaded, validated 1:1 composition with its own delivery file and thumbnail. | Displayed as Square. It is optional and is never generated from the display crop or original. |
Automatic 1080pauto_1080p | A proportional downscale of an eligible 4K source. Composition, orientation and ratio are unchanged. | Generated at ingestion and returned as a separate selectable version. It is not generated on each API request. |
Original Ratiooriginal | The uploaded original composition and full pixel geometry. | Returned as Original Ratio, never “Original Ratio · 4K”. Delivery is normally protected and can require the additional restricted-rights scope. |
| Collection cover | A cover and up to three preview images sourced from artworks in that collection. | Returned under collection.cover. It is presentation metadata, not a collection rendition and has no collection-level signed asset request. |
1080p and 4K do not imply 16:9. A version can be landscape, portrait or square. For example, 1080p delivery can be 1920 × 1080, 1080 × 1920, 1920 × 1920 or another ratio-preserving size. Vieunite does not synthesize a square crop, a 16:9 crop or any other requested canvas.
- No generated cropNo reframing, padding, stretching or ratio change.
- No rotation assumptionResolution class is independent of landscape or portrait orientation.
- No upscaleThe automatic 1080p version is created only from an eligible 4K source.
Current file format
The current Collection image pipeline normalises delivered artwork images and thumbnails to RGB progressive JPEG. The API remains MIME-described so integrations can evolve without changing stored rendition keys.
| Property | Current contract | Integration rule |
|---|---|---|
| Media type | image/jpeg | Read mime_type and the final HTTP Content-Type; do not infer format from a URL suffix. |
| Colour / encoding | RGB, progressive JPEG | Treat the delivered file as the presentation asset. Source file metadata is not part of the delivery contract. |
| Orientation | EXIF orientation is applied to the pixels during ingestion. | Use returned width, height, orientation and ratio; do not depend on EXIF rotation. |
| Watermark | A verified, invisible provenance watermark is embedded during ingestion. | The signed URL grants access to an existing watermarked object; it does not create a new customer-specific file at request time. |
| Payload | Binary image bytes over HTTPS | Use the signed URL directly as an image source or download it with GET. It is never returned as base64 inside API JSON. |
available_versions[] format
This array is the authoritative list of versions an editor can choose and a CMS can request. The authenticated catalogue and reference responses include source and delivery facts.
{
"key": "auto_1080p",
"name": "1080p",
"source_kind": "derived",
"resolution_class": "1080p",
"ratio": "9:16",
"orientation": "portrait",
"preview": {
"width": 540,
"height": 960,
"mime_type": "image/jpeg"
},
"source": {
"width": 2160,
"height": 3840
},
"delivery": {
"width": 1080,
"height": 1920,
"mime_type": "image/jpeg"
},
"is_default": false
}
| Field | Meaning | What the CMS should do |
|---|---|---|
key | Opaque selectable version identity. | Persist unchanged as the artwork reference's rendition. |
name | Human-readable UI label such as Square, 4K, 1080p, Uploaded or Original Ratio. | Display it, but never use it as an API identity. |
source_kind | crop, derived or original. | Use it to explain provenance, not to construct a key. |
resolution_class | 4k, 1080p or other, independent of orientation and ratio. | Use as a display/filter label only. |
ratio | The source composition's reduced width:height label. | Preserve the returned string. It is not a crop request. |
orientation | landscape, portrait or square. | Choose layout behaviour without assuming a fixed canvas. |
preview | Safe thumbnail width, height and MIME type. | These dimensions describe the thumbnail only; this object is not a delivery URL. |
source | Uploaded source dimensions, or the parent source for a derived resize. | Use for provenance and quality decisions, not final rendering dimensions. |
delivery | Width, height and MIME type of the file returned by the signed URL. | Use for width/height, aspect-ratio reservation and media handling. |
is_default | The current default version. | Use only when no editor-selected rendition exists. |
A derived 1080p item deliberately keeps the 4K parent dimensions under source while delivery describes the smaller file. Preview experiences omit both source and delivery so original resolution is never exposed there.
assets format
The assets map contains physical helper files for the artwork record. It is useful for a default catalogue card or schema.org output, but it is not the list of editor-selectable versions.
{
"assets": {
"thumbnail": {
"id": "asset_art_456_thumbnail",
"variant": "thumbnail",
"url": "https://assets.example.com/public/artworks/art_456/thumbnail.jpg",
"access": "public",
"width": 540,
"height": 960,
"mime_type": "image/jpeg"
}
}
}
| Field | Meaning |
|---|---|
id | Physical asset identifier. Useful for diagnostics; it is not the artwork or rendition identity. |
variant | Physical role such as thumbnail, display or original. |
url | A direct or short-lived URL when current access and scopes allow it; otherwise null. |
access | Current access policy such as public, authorized, signed_url_required or restricted. |
width / height | Physical asset pixel dimensions. |
mime_type | Physical asset media type. |
signed_url_required | Conditional compatibility flag on some protected helper assets. Use the dedicated signed URL workflow for selected delivery. |
GET /v1/capabilities publishes the current helper asset vocabulary. That list is not a rendition catalogue. Always enumerate selectable content from available_versions.
Request the selected delivery
Call the signed URL endpoint from your CMS backend with assets:signed_url:create. Despite the legacy request field name variant, its value is the opaque available_versions[].key.
curl --request POST "https://collection.vieunite.com/v1/assets/signed-urls" \
-H "Authorization: Bearer $VIEUNITE_TENANT_TOKEN" \
-H "Content-Type: application/json" \
--data '{
"requests": [
{
"artwork_id": "art_456",
"variants": [
"crop",
"auto_1080p",
"original"
]
}
],
"expires_in": 900
}'
{
"data": [
{
"asset_id": "asset_art_456_display__1080p",
"artwork_id": "art_456",
"variant": "display__1080p",
"version_key": "auto_1080p",
"url": "https://assets.example.com/...?Expires=...&Signature=...",
"expires_at": "2026-07-16T16:45:00Z",
"access": "signed_url"
}
],
"denied": [
{
"artwork_id": "art_456",
"variant": "original",
"reason": "restricted"
}
]
}
version_keyis the join key.Match it to the storedrenditionandavailable_versions[].key.variantis physical.It can bedisplayfor a requestedcrop, ordisplay__1080pforauto_1080p. Do not persist it.- Dimensions and MIME are not repeated.Read them from the matching
available_versions[].deliveryobject and confirm the final HTTP headers. - The signed URL is already authorized.Use GET without the tenant Bearer token. Treat the URL itself as a secret capability until it expires.
| Limit | Value |
|---|---|
| Artwork requests per call | Up to 100 |
| Version keys per artwork | Up to 20 |
| Default lifetime | 900 seconds |
| Allowed lifetime | 60–3600 seconds |
No variant or variants | The server requests the current is_default version. |
Handle partial delivery
A successful HTTP 200 can contain both issued grants and denied items. Process every element instead of treating the batch as all-or-nothing.
| Denied reason | Meaning |
|---|---|
unavailable | The artwork is not currently visible under publication, plan, safety or rights policy. |
missing_uploaded_version | The artwork has no valid default selectable version. |
version_unavailable | The requested rendition key is absent or no longer valid. |
unavailable_asset | The linked delivery asset cannot be served under its current state or policy. |
restricted | The tenant lacks the approved rights:restricted:read scope. |
missing_storage_key | The version exists but its delivery object is not configured. |
Where each form is provided
| Surface | What it provides | Use it for |
|---|---|---|
| Hosted Picker | Safe proxied thumbnails and, after redemption, { provider, type, id, rendition }. | Editor discovery and selection. It never returns high-resolution URLs to browser application code. |
| Preview experience | Public metadata, safe thumbnail metadata and proxied thumbnail bytes. No storage URL, source dimensions or delivery dimensions. | Evaluation and hosted Vieunite UI only. Its internal media routes are not a tenant integration contract. |
| Authenticated catalogue / resolve | Artwork metadata, rights, assets, complete available_versions, source and delivery dimensions. | CMS server-side discovery, current-state resolution and rendering decisions. |
| Signed URL API | JSON containing temporary delivery grants and per-item denials. | Authorizing one selected version close to render or download time. |
| Asset host | The binary JPEG after a GET to the issued URL. | An <img> source or controlled backend download. |
Recommended CMS flow
- 1
Persist the selectionSave provider, type, artwork ID and the exact Picker
rendition. - 2
Resolve current truthRequest
rights,availability,assets,available_versions,versionandupdated_at. - 3
Find the version descriptorMatch the stored rendition to
available_versions[].keyand readdelivery. - 4
Request a grantSend that same rendition key to
POST /v1/assets/signed-urls. - 5
Render with rightsUse the matching
version_key, reserve the returned delivery dimensions, and honour license, allowed uses and credit-display requirements. - 6
Refresh instead of persisting URLsRe-resolve after a resource change and request a new URL after
expires_at.
- Do not persist signed URLs in CMS content fields.
- Do not log signed query strings or send them to analytics.
- Do not construct rendition keys from names, dimensions, ratios or orientations.
- Do not assume every artwork has 1080p, 4K, square and Original Ratio versions.
- Do reserve image layout from
delivery.widthanddelivery.heightto avoid layout shift.