/v1/videos failed: 'Could not download an input media URL' fix

A /v1/videos job fails with 'Could not download an input media URL (image_url)' when Sume cannot fetch your input. Make the URL public https and resubmit.

4 min readSume
All posts

When a frame_images or input_references URL cannot be fetched, the poll response is a failed job with this public error string: "Could not download an input media URL (image_url). Verify the URL is publicly reachable, then retry." The fix is to host the file at a public HTTPS URL and submit a new job.

What the poll returns

This is the poll body the Sume docs show for the case (shortened to the fields that matter).

{
  "id": "job_01HXYZ",
  "status": "failed",
  "error": "Could not download an input media URL (image_url). Verify the URL is publicly reachable, then retry."
}

Why the text looks like this

Sume remaps the raw worker error before it reaches you. The same remap sits behind GET /v1/jobs/{id}/status, so a failed job reads the same on both routes. You see the media type in brackets, such as image_url, but the URL that caused the failure stays private.

Fix list

Check these in order. The docs only promise the reachability rule; the other items are common causes.

  • Open the URL in a private browser window. If it asks for a login, it is not public.
  • Use HTTPS. The docs say reference images must be available over public HTTPS.
  • Avoid short-lived signed links that expire before the worker fetches them.
  • Check that the bracketed type (image_url, video_url, audio_url) names the field you expect.

A poll that surfaces the message

Poll the job, print the error, and resubmit with a corrected URL.

import asyncio, os
import httpx

async def main():
    headers = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
    job_id = os.environ["JOB_ID"]
    async with httpx.AsyncClient(base_url="https://api.sume.com", headers=headers) as c:
        st = (await c.get(f"/v1/videos/{job_id}")).json()
        if st["status"] == "failed":
            print("failed:", st.get("error"))
        else:
            print(st["status"])

asyncio.run(main())

Retry rule

Do not retry the same body in a loop. The content endpoint answers 409 job_failed for a failed job, which is not retryable.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume