Uploads
Generation inputs (first/last frames, image-edit sources, lipsync portraits and audio, reference media)
must be public URLs. POST /v1/uploads turns a local file into a CDN URL you can pass to any
generate request.
bash
curl -X POST "https://api.aiveed.io/v1/uploads" \
-H "X-API-Key: $AIVEED_API_KEY" \
-F "file=@portrait.png" -F "kind=image"
# → { "url": "https://...", "kind": "image", ... }
# Use it as a first frame:
curl -X POST "https://api.aiveed.io/v1/generate/video" \
-H "X-API-Key: $AIVEED_API_KEY" -H "Content-Type: application/json" \
-d '{"model": "seedance-2-fast", "prompt": "The portrait comes to life and smiles",
"resolution": "480p", "duration": "6", "first_frame_url": "PASTE_URL_HERE"}'Limits
| kind | Max size | Allowed extensions |
|---|---|---|
image | 10 MB | .jpg .jpeg .png .webp .avif |
audio | 5 MB | .mp3 .wav .aac .m4a .mp4 .ogg |
video | 50 MB | .mp4 .mov .avi .webm .mpg .mpeg |
Oversized files → 413 PAYLOAD_TOO_LARGE; disallowed types →
415 UNSUPPORTED_MEDIA_TYPE. Uploads are free (0 credits), require the generate
scope, and image uploads pass the same content screen as generation.
Retention
Image and audio uploads are stored durably — the returned URL does not expire and is safe to keep and reuse in later requests. Video uploads are transient (roughly 90 days): use the URL as a generation input promptly and re-upload if you need it again later.