Together AI video status values vs Sume job statuses (canceled)

Together's video job has five statuses, including cancelled. Sume has five too, but spells it canceled and adds terminal and result_ready flags. Map them here.

5 min readSume
All posts

Together AI's video job reports one of queued, in_progress, completed, failed or cancelled; Sume reports queued, processing, completed, failed or canceled. Two names differ, and the Sume status endpoint adds terminal and result_ready booleans so a client can stop polling without a switch statement.

Together's side is from its video generation overview and Sume's from Jobs and results and the API reference, all read on 2026-10-02.

What are the Together AI video statuses?

Together's overview creates a job with client.videos.create() and checks it with client.videos.retrieve(job_id). The listed statuses are queued (awaiting processing), in_progress (actively generating), completed (the video is available), failed, and cancelled (terminated by the user). When status is completed, the video URL is in outputs.video_url.

The page lists prompt, model, width, height, guidance_scale, negative_prompt, steps, fps and seconds as parameters in its example, so the job is sized in pixels and seconds rather than a named quality tier.

What are the Sume job statuses?

Sume lists five job statuses and marks which are terminal. Only queued and processing are non-terminal. processing covers running and being finalized.

The spelling of the cancelled state is the one trap: Sume writes canceled with one l, and a =="cancelled" check ported from Together will never match.

Together AI vs Sume job statuses, read 2026-10-02
MeaningTogether AISumeTerminal on Sume
WaitingqueuedqueuedNo
Runningin_progressprocessingNo
Done, result readycompletedcompletedYes
Terminal failurefailedfailedYes
Stopped on requestcancelledcanceledYes

How do you stop polling on Sume?

Sume's docs say to poll with exponential backoff and stop on completed, failed or canceled, and not to resubmit the original paid request just because a local process timed out. The status payload carries terminal and result_ready, and next_poll_after_seconds when Sume has a preferred interval. This loop honors all three:

import os, time, requests

H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
BASE = "https://api.sume.com/v1/jobs"

def wait(job_id, deadline_s=1200):
    end, delay = time.time() + deadline_s, 5
    while time.time() < end:
        r = requests.get(f"{BASE}/{job_id}/status", headers=H, timeout=30)
        r.raise_for_status()
        s = r.json()
        if s.get("terminal"):
            return s
        time.sleep(s.get("next_poll_after_seconds") or delay)
        delay = min(delay * 2, 30)
    raise TimeoutError(f"still running: {job_id}")

What happens when you cancel?

Together's page lists cancelled as a status. Sume's cancel route, POST /v1/jobs/:id/cancel, works only before generation starts. After that it returns 409 job_generation_already_started with details.cancelable: false, and the job runs to completion. Cancelling a job that is already canceled is idempotent.

Billing follows the same line: Sume reserves its USD estimate at submit time, captures it on success, and releases or refunds the reservation on failure or cancellation before capture.

What does a Together port still need?

Change the cancelled spelling, read result_url instead of outputs.video_url, and size jobs with Sume's catalog fields instead of steps and guidance_scale. Sume's docs do not describe those two Together parameters, so do not assume they pass through. See the Sume Videos API comparison for the endpoint-level mapping.

Sources

Related posts

More in Comparisons

All Comparisons posts

Written by Sume