Higgsfield upload URL: 1 hour, MP4 and WAV. Sume takes public URLs
Higgsfield inputs go through a presigned upload that expires in one hour. Sume has no upload step: pass public HTTPS URLs in frame_images or input_references.

To feed an image, video or audio file to a Higgsfield model you first call POST https://api.higgsfield.ai/files/generate-upload-url, upload to the presigned URL it returns, and then pass the resulting public URL as image_url, video_url or audio_url. Sume has no upload step in the video API: you pass a public HTTPS URL directly in frame_images or input_references.
Higgsfield's three-step upload
Higgsfield's upload page lists the constraints. The presigned upload URL expires after one hour. The content type you ask for must match the file you upload. Images can be JPEG, JPG, PNG, WebP or GIF, audio can be WAV or X-WAV, and video must be MP4. Uploads are tagged x-amz-tagging: retention=temporary. The page says not to send your Higgsfield credentials to the storage URL, and it does not state a file size limit.
| Item | Higgsfield | Sume |
|---|---|---|
| Getting a file in | Presigned upload, then use the public URL | Host the file yourself on public HTTPS |
| URL lifetime | Upload URL valid for one hour | Your URL must stay reachable until the job fetches it |
| Formats named | Images JPEG/JPG/PNG/WebP/GIF, audio WAV, video MP4 | Per model: see supported_input_references |
| Where the field goes | image_url, video_url, audio_url | frame_images[], input_references[] |
| Failure mode | Mismatched content type on upload | input_media_unreachable or image_not_fetchable |
Where the Sume fields go
On /v1/videos, first and last frames go in frame_images with a frame_type of first_frame or last_frame. Style or content references go in input_references. If you send both, frame_images takes precedence and the request is treated as image-to-video. Which reference types a model accepts (image_url, video_url, audio_url) is listed in supported_input_references from GET /v1/videos/models.
curl -X POST https://api.sume.com/v1/videos \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2",
"prompt": "A character walking through a forest",
"frame_images": [{
"type": "image_url",
"image_url": {"url": "https://example.com/first-frame.png"},
"frame_type": "first_frame"
}]
}'When the input cannot be fetched
The Sume troubleshooting section says a failed generation can come from reference images that are not accessible over public HTTPS or not in a supported format. The error table lists image_not_fetchable and input_media_unreachable for media Sume could not fetch or mirror safely, with the advice to check that the input is a public HTTPS URL and then retry.
Porting tip
If you are porting a Higgsfield integration, the upload helper can usually be replaced by a plain upload to your own bucket and a URL that outlives the job. A URL that was valid only for an hour is a poor fit for a queued job, so keep the object reachable until the job is terminal.
Sources
Related posts
More in Developers
- Higgsfield webhook retries: two hours vs Sume's ten attempts
Higgsfield retries 5xx for up to two hours and wants a reply in ten seconds. Sume makes 10 attempts, 30 seconds apart, then lets you redeliver by hand.
- Hugging Face id on Sume video models: the field is always null
Sume's GET /v1/videos/models returns a hugging_face_id on every row, and it is null. Here is what that means for Wan, LTX and other open-weights video models.
- Aspect ratios the Sume Images API names, and which one 4:5 is
Sume's Images API names 17 normalized aspect ratios plus auto. Here is the list, what 4:5 means, and why you read the model's own list before pinning one.
- Verify a Sume job.completed webhook in Python (stdlib)
A stdlib Python verifier for Sume job webhooks: HMAC SHA-256 over timestamp.raw_body, five-minute tolerance, rotation-safe, and it refuses an empty secret.
Written by Sume