List your Sume Formats in Python and keep the video ones
Page through GET /v1/formats with next_cursor, keep io.output_kind video, and print each vanity_invoke_url. A runnable snippet with field caveats.

GET /v1/formats returns the Formats your key's workspace owns plus the first-party catalog, in keyset pages: while has_more is true, send next_cursor back as cursor (Format API). The snippet below walks every page and keeps those whose io.output_kind is video.
The snippet
The key needs the formats:read scope. limit is passed as 50.
import os, requests
H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
url = "https://api.sume.com/v1/formats"
params = {"limit": 50}
formats = []
while True:
r = requests.get(url, headers=H, params=params, timeout=30)
r.raise_for_status()
body = r.json()
formats += body["data"]
if not body["has_more"]:
break
params["cursor"] = body["next_cursor"]
for f in formats:
kind = (f.get("io") or {}).get("output_kind")
if kind == "video":
print(f["handle"], f["slug"], f["vanity_invoke_url"])Fields to read
| Field | Use |
|---|---|
| handle, slug, vanity_invoke_url | The address to POST runs to |
| invoke_url | The opaque skl_ path that survives renames; persist it if stored URLs must stay valid |
| io | input_kind and output_kind; null on older Formats |
| generation_spend_cap_usd_micros | The cap a run inherits when it names none ($400 for a Format that never set one) |
| version | Bumped on every edit; the receipt shows which version ran |
Two traps
A Format you never ran over the API can show status: inactive and api_trigger_enabled: false until its first run, and it still runs. Do not gate your integration on those two values being true.
A personal key lists personal Formats and a team key lists that workspace's; neither lists the other's. If an expected Format is missing, you probably hold the other key.
Sources
Related posts
More in Developers
- List Sume jobs for one run_id and count them by status (curl and jq)
GET /v1/jobs filters by run_id, scope and status and returns up to 100 rows. A short curl and jq script gives a count per status for one run.
- Log requested vs stored model ids to find retired ids still in config
Sume runs a retired image id as its successor and stores the successor on the job. Compare the two ids after each submit to find stale config.
- Log the Sume request_id in Python JSON logs, no keys or URLs
A small logging helper for failed /v1/videos calls: keep error.code, request_id and job id, and leave out the API key and signed media URLs.
- Longest AI video clip in one API call: max seconds per Sume model
In one Sume call, Seedance 2.5 and Wan 3.0 reach 30 seconds, Seedance 2.0, Kling v3 Pro and MiniMax reach 15, Gemini Omni Flash 1.1 stops at 10. Full table.
Written by Sume