Choose a category
Flat files have a 25 MiB upload limit. Banners also require
banner_placement
set to top or bottom. Use the specialized Studio flow for background
packages; uploading one image does not create a complete background scene.
Upload and list assets
Grant your API keyassets:write to upload and delete assets. It includes
assets:read, which permits listing and downloading. Asset access does not
grant permission to submit inference jobs; grant each destination endpoint
separately.
id, category, legacy kind, name, content
type, size_bytes, total_size_bytes, state, creation timestamp, and signed
links. Scene sizes include every image layer and the generated YAML. The
legacy kind field remains supported for uploads and responses. If you send
both category and kind, they must match.
data, has_more, and next_cursor from the list response. Pass the
returned UUID cursor as cursor for the next page. The maximum limit is 100.
Use GET /v1/assets/{id} to refresh an asset’s metadata and signed links.
Files in misc use download_url with an attachment disposition so browsers
download them. Fetch signed links without forwarding your API key.
For an available background scene, the detail response also includes files.
Each entry contains its relative path, size_bytes, and signed download_url.
Download every entry to preserve the complete scene package. The dashboard
packages these files as a ZIP download.
For a background package, POST /v1/assets accepts category=background,
name, interior_id, generated yaml, and the files image,
non_floor_rgba, floor_rgba, and to_ignore_mask. You can also send brands
as a JSON-encoded array. Existing Studio routes remain supported.
Select an asset for rendering
Forrender.plate, send a license_plate or logo asset UUID as
logo_asset_id with mode=logo:
logo_asset_id with logo or the legacy logo_ref. The API
checks ownership, category, and availability before resolving the private
file for the worker.
Custom background scenes keep their historical numeric background_id in
addition to their asset UUID. Continue using background: "custom--<ID>"
with render.background. Existing logo and banner asset selectors remain
supported.
The preview render.video contract accepts a logo asset through
branding.logo_asset_id. Do not combine it with branding.logo,
branding.logo_url, or branding.logo_ref. This contract does not change
the video endpoint’s availability or enable its rendering engine.
Quota and deletion
Permanent assets and inference inputs share your organization’s existing storage quota. CarHub reserves space before uploading. UseGET /v1/uploads/usage to inspect the total stored_bytes, reserved_bytes,
and available_bytes. asset_bytes and asset_reserved_bytes show the asset
portion of those totals. Input retention and output accounting remain unchanged.
deleted: true
and state: "deleting"; this confirms the request, while physical deletion
may still be pending. Metadata remains visible without signed links while
deletion is pending. CarHub retries delete_failed assets, and releases quota
only after storage confirms removal. After deletion completes, retrieving the
asset returns 404.
Input retention, input deletion, and input space-recovery operations never
select permanent assets. Failed uploads also keep their reservation until
their partial files have been removed.