For local files with no URL (use POST /assets/import when a URL exists — the server streams it directly). Returns a short-lived signed PUT URL: upload the bytes to uploadUrl with the matching Content-Type header, then call the complete endpoint to finalize the asset. Spends no credits.
Authorization
bearerAuth assets:writeIn: header
Scope: assets:write
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/assets/uploads" \ -H "Content-Type: application/json" \ -d '{ "mimeType": "image/jpeg" }'{ "assetId": "string", "uploadUrl": "http://example.com", "method": "PUT", "headers": {}, "maxBytes": 0, "expiresAt": "2019-08-24T14:15:22Z", "completeUrl": "string"}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}{ "error": { "code": "string", "message": "string", "requestId": "string" }}Finalize a direct upload POST
Call after PUTting the bytes to uploadUrl. Probes the file (size limits, dimensions/duration), stores a normalized copy, and returns the finished asset. Idempotent: completing again returns the same asset.
Create a media process POST
Starts a generation process and charges team credits. V1 types: image-generation, video-generation, image-upscale, video-upscale. The model must match the type (see GET /models). Always send an Idempotency-Key: retries with the same key and body return the original process instead of double-charging; the same key with a different body returns idempotency_conflict. input is validated per process type AND against the model's published capabilities (aspectRatios, resolutions, videoLengths from GET /models) — unsupported values are rejected with invalid_request, never silently coerced. Internal fields (batchId, filteringId, agent context) are ignored. metadata (flat string/number/boolean/null values, max 16 keys) is echoed back on reads. Optional webhookUrl receives a one-shot completion/failure notification.