Create Asset Upload
Begin a direct-to-S3 upload. Returns an asset_id and a presigned upload_url; PUT the file bytes to upload_url, then call POST /v3/assets//complete. Unlike POST /v3/assets (which proxies the bytes), this never sends the file through the API.
Authorizations
HeyGen API key. Obtain from your HeyGen dashboard.
Headers
Optional client-supplied key for safely retrying mutations. Subsequent calls within 24 hours that share this key replay the original response — even if the request body differs slightly (a warning is logged). A retry that arrives while the original is still in flight gets a 409 request_in_progress. Keys must be 1–255 characters from [A-Za-z0-9_:.-]; a UUID is a safe default. Scope is per-endpoint and per-resource: the same key on a different route or path parameter is independent.
1 - 255^[A-Za-z0-9_\-:.]{1,255}$Body
Request to begin a presigned direct-to-S3 upload (POST /v3/assets/direct-uploads).
Original filename for reference/metadata. The stored object's extension is derived from content_type.
Declared MIME type (e.g. 'video/mp4'). Verified against the stored bytes at completion.
Exact byte size of the file. Signed into the upload URL so it cannot be exceeded.
Optional SHA256 of the file as hex. When provided, S3 enforces it on upload.
Response
Successful response
Presigned upload instructions.

