Nova Reel start_async_invoke S3 output vs a Sume result URL

Nova Reel's start_async_invoke writes output.mp4 to your S3 bucket and needs IAM. A Sume job returns a result_url and durable media.sume.com links.

4 min readSume
All posts

With Amazon Nova Reel, start_async_invoke() takes an outputDataConfig with an s3Uri, and the finished video is written to that bucket in your AWS account. With Sume you do not provision a bucket: a job returns request_id, status_url and result_url, and the media sits on media.sume.com.

AWS facts are from the Nova user guide page on video generation access; Sume facts from Jobs and results and Runs, read 2026-10-01.

What does Nova Reel need before the first call?

Bedrock writes the file on your behalf, so the AWS role needs bedrock:InvokeModel and s3:PutObject. AWS recommends adding bedrock:GetAsyncInvoke and bedrock:ListAsyncInvokes so you can track status. Each invocation gets a folder in the bucket holding manifest.json, output.mp4 and generation-status.json. AWS says a 6 second video typically takes about 90 seconds.

What does a Sume job return instead?

Submit with mode: "async". The response carries request_id (the job id), status_url, result_url and next_poll_after_seconds. Poll the status until terminal is true, then read the result. The docs list media.sume.com as the host for first-party generated media artifacts.

Where the output lands, read 2026-10-01.
QuestionNova ReelSume
Where is the file?s3Uri you pass in outputDataConfigDurable media.sume.com HTTPS URL
Permissions to set upbedrock:InvokeModel, s3:PutObject, plus status actionsA Sume API key; no bucket policy
Status checkget_async_invoke with the invocationGET status_url, honoring next_poll_after_seconds
ExpiryYour bucket's lifecycle rulesMedia URLs do not expire

Who can open a Sume media URL?

Anyone holding it. The Runs page says the URLs are public to anyone with the link, so proxy or copy them if your product needs per-customer access control. That is the case where your own S3 bucket still makes sense: copy the file there after the job completes. See do Sume video URLs expire for the expiry details.

How do I read the result in code?

Poll, then fetch result_url. Keep the job id so a later process can read the same job.

const headers = { Authorization: "Bearer " + process.env.SUME_API_KEY };
const base = "https://api.sume.com/v1/jobs/";

async function result(jobId: string) {
  for (;;) {
    const s = await (await fetch(base + jobId + "/status", { headers })).json();
    if (s.terminal) break;
    await new Promise((r) => setTimeout(r, (s.next_poll_after_seconds ?? 5) * 1000));
  }
  return (await fetch(base + jobId + "/result", { headers })).json();
}

Sources

Related posts

More in Developers

All Developers posts

Written by Sume