Create Upload Url
Changed onMint a short-lived signed PUT URL for direct-to-storage upload.
Two-step flow for files above the gateway's ~32 MiB inbound cap:
- POST /v1/uploads/url with {filename, mime_type} → {upload_url, storage_key, ...}.
- PUT raw bytes to upload_url with Content-Type: <mime_type>.
- POST /v1/uploads/register with {storage_key} to receive a standard FileUploadResponse whose url is reusable as an attachment in start_design_task.
Files are still capped, with a typed upload_too_large 413 at register time when the actual size is known. The ceiling is per-workspace: read it from GET /v1/uploads/limits as max_file_bytes rather than assuming the 250 MB deployment maximum, because a free workspace is capped lower (ENG-6169). Signed URLs expire after expires_in_seconds (default 600s, max 3600s).
Request
- Base URLhttps://api.moda.app/v1
- URLhttps://api.moda.app/v1/uploads/url
- AuthHTTP bearer
Headers
Calendar-dated API version pin. New integrations should pin 2026-05-01 to opt into the newest response shapes. For back-compat the server also accepts requests with no header and resolves them to the current default (today: 2026-04-12); that default advances on each sunset date. Any unsupported value returns 400 unsupported_version.
Request body
Response
Successful Response
Changes
- info
added the non-success response with the status
- info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status - info
added the optional property
to the response with the status
- info