OpenClaw still lists sora-2 as a configured video provider: fix it
OpenClaw issue 158876: the bundled OpenAI video provider still defaults to sora-2, though /v1/videos returns 404. What to do now, and a Sume video call.

OpenClaw's bundled OpenAI provider still declares video generation with sora-2 as its default model, although OpenAI shut that model and the Videos API down on September 24, 2026. A report filed two days later says the provider still shows as configured, while every call to the endpoint returns 404. Until it is removed upstream, set a different video provider explicitly, for example Sume's /v1/videos route.
What the issue says
Issue 158876 was filed on September 26, 2026. It names extensions/openai/video-generation-provider.ts, which sets DEFAULT_OPENAI_VIDEO_MODEL to sora-2, and docs/tools/video-generation.md, which still lists OpenAI and sora-2 as supported. In the video_generate tool, action=list shows the provider as configured: yes.
The reporter explains why this matters: the endpoint https://api.openai.com/v1/videos returns HTTP 404, yet the provider remains a candidate, so the failure is silent on every invocation. Three fixes are proposed: remove the video capability from the provider, mark it unavailable so automatic selection skips it, or document the retirement so operators configure alternatives.
| Item | Value |
|---|---|
| Announced | March 24, 2026 |
| Shutdown | September 24, 2026 |
| Ids affected | sora-2, sora-2-pro, sora-2-2025-10-06, sora-2-2025-12-08, sora-2-pro-2025-10-06 |
| Replacement named by OpenAI | None listed; the video guide says no one-to-one replacement API is available |
Why a stale entry is worse than a missing one
A provider that is absent produces a clear message when you ask for a video. A provider that is present, marked configured and answering 404 sends the request down a path that cannot succeed, and the error may surface far from its cause. If your OpenClaw setup picks a video provider automatically, check which one it chose, not only whether videos are being created at all.
Point the tool at Sume
Sume's video API is asynchronous: POST /v1/videos returns a job with a polling_url, you poll until the status is completed, and you download from the content URL. The catalog lists the models you can name; read it with GET /v1/videos/models instead of guessing. Gemini Omni Flash 1.1 is the router's default when you send sume/auto, so naming it is a safe first test.
The script below submits a 5-second 720p clip, polls every 15 seconds and saves the file. It reads SUME_API_KEY from the environment and stops if it is empty.
import json, os, time, urllib.request
key = os.environ.get("SUME_API_KEY")
if not key:
raise SystemExit("SUME_API_KEY is not set")
H = {"Authorization": f"Bearer {key}", "Content-Type": "application/json"}
def call(url, body=None):
data = json.dumps(body).encode() if body else None
with urllib.request.urlopen(urllib.request.Request(url, data=data, headers=H)) as r:
return json.load(r)
job = call("https://api.sume.com/v1/videos", {
"model": "gemini-omni-flash-1.1",
"prompt": "A slow dolly shot along a rainy neon street at night",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9",
})
for _ in range(60):
st = call(job["polling_url"])
if st["status"] in ("completed", "failed", "cancelled"):
break
time.sleep(15)
print(st["status"])
if st["status"] == "completed":
req = urllib.request.Request(st["unsigned_urls"][0], headers=H)
with urllib.request.urlopen(req) as r, open("clip.mp4", "wb") as f:
f.write(r.read())Choosing a model
OpenAI's guide lists no replacement, so the choice is yours. The table gives limits straight from the Sume catalog, which you should confirm for your account with the models endpoint before pinning a value.
On price: Sume bills the provider list price times 1.25, rounded up to the cent for the clip. For the script above, 5 seconds at Omni's 720p list rate of $0.10 per second is $0.50 at list, or $0.625 after the multiplier, which rounds up to $0.63. The usage.cost field in the job result shows the amount actually billed.
| Model id | Seconds | Resolutions | Audio |
|---|---|---|---|
| gemini-omni-flash-1.1 | 3 to 10 | 360p, 720p, 1080p, 4K | yes |
| kling-3 | 4 to 15 | 720p, 1080p | yes |
| wan-3.0 | 2 to 30 | 480p, 720p, 1080p | yes |
| minimax-h3-max | 5 to 15 | 480p, 768p, 1080p | yes |
| seedance-2.5 | 4 to 30 | 480p, 720p, 1080p | yes |
Checklist for an operator
Search your agent configuration for sora-2 and sora-2-pro, remove OpenAI as a video candidate, set the explicit replacement, and run one clip through the whole path. Then watch the upstream issue for the change that removes the stale default.
Sources
Related posts
More in Integrations
- Plan in Claude Code over MCP, then hand the batch to bulk runs
Use Claude Code with Sume's hosted MCP to prototype one video and read costs, then run the real batch from your backend with Format bulk runs and a spend cap.
- Video generation MCP connector: six questions before you connect
Before you let an agent spend money through any MCP connector, ask six questions. Here are Sume's hosted MCP answers on auth, scopes, idempotency and spend.
- Voiceover plus a Lyria bed for a reel in one agent session over MCP
Ask an MCP client to run tts_create and music_create on Sume, then check the take with stt_create. Which tool does which job, and where the agent must wait.
- How to add an MCP server to ChatGPT with developer mode
Turn on ChatGPT developer mode, create an app for the server's URL, and sign in with OAuth. The steps, with Sume's hosted MCP server as the example.
Written by Sume