Skip to main content
Most image endpoints accept either a multipart file or an upload reference. Videos and multi-asset requests require an upload reference.

Choose an input encoding

Multipart uploads are capped at 10 MB per file. The model’s parameters are the same in either encoding.

Create and use an upload

  1. Create a presigned upload with POST /v1/uploads.
  2. Follow the returned method. Preserve every signed header or form field exactly.
  3. Submit input_ref (or input_refs) in JSON to the inference endpoint.
render.enhance and render.plate accept 1–30 ordered images. Send an ordered input_refs array in JSON or repeat the images multipart field. One input still returns result.images[]; the former result.image response is no longer part of the 2026-09-11 contract. Send size_bytes when you know the exact file size. CarHub reserves that size and returns a PUT request:
Omit size_bytes when the client cannot determine it. CarHub reserves the endpoint’s maximum input size. The response uses POST and includes fields. Add every field to a multipart form, then add the file as file. The storage policy accepts between one byte and the endpoint maximum. CarHub verifies the object and endpoint limit when you first use the reference. For an exact PUT, it also verifies the declared size. A bounded POST keeps the maximum size accounted while its link remains valid, because the link can still overwrite the file. The next use after expiry reconciles the actual size. You do not call a completion endpoint.
An upload reference is opaque and organisation-scoped. Do not attempt to construct one or share it across organisations. It remains reusable until you delete it or the organisation’s retention policy removes it.
Input storage is shared by all API keys in an organisation, across test and live mode. Direct multipart inputs and files fetched from URLs through MCP also count. Outputs, Dashboard assets and renderer backgrounds do not count. An unused presigned link keeps its reservation after the link expires. Use POST /v1/uploads/deletions to preview and delete abandoned links. CarHub waits for a still-valid link to expire, removes any late upload, then releases its reservation. Use GET /v1/uploads/usage and GET /v1/uploads to inspect stored and reserved bytes. Use storage:read to inspect uploads. Use storage:write to manage uploads, including deletion; it also includes read access. For input uploads alone, grant uploads:create and leave inventory permissions disabled. The key also needs permission for the destination inference endpoint, either individually or through its family. New keys with no scopes have no business access. Historical empty scope lists are migrated to * to preserve their access. General * access includes storage. See SDK licences and permissions for the Hub permission controls. For field names, content types and endpoint-specific parameters, use the generated API reference.