Runway Agent 'Ask before generating' vs a Sume spend cap

Runway Agent can pause for approval before each generation. A Sume API run has nobody to click approve, so the control is a per-run spend cap. How each works.

5 min readSume
All posts

In Runway Agent, the Ask before generating media setting shows the model, prompt and estimated credit cost for each step and waits for your go-ahead. The default, Automatically generate, starts as soon as the plan is made. Over Sume's Format API nobody can click approve, so the matching control is generation_spend_cap_usd on the request: a ceiling set before the run starts, up to $500.

The two controls

Approval vs cap (read 2026-10-04)
QuestionRunway AgentSume Format run
DefaultAutomatically generateThe Format's own cap; $400 for a Format that never set one
Who approvesYou, per step, if Ask before generating is onNobody; approvals are pre-granted for unattended runs
What you see firstModel, prompt and estimated credit costThe cap, echoed on the receipt as usage.generation_spend_cap_usd_micros
Per-run overrideSession setting; Set as default for new sessionsgeneration_spend_cap_usd on each request
Lifting the limitSwitch the modenull runs at the $500 platform maximum; 0 is rejected

Why the default matters for workflows

Runway's workflow page warns that with Automatically generate, workflow runs start immediately and consume credits without a confirmation step, and suggests Ask before generating for workflows with several generation nodes. The same reasoning is why Sume refuses a body that cannot spend: a run with a cap of 0 is a 400, since a run that cannot spend cannot deliver.

Set the cap in code

Send the cap with an idempotency key built from the thing being made. The receipt echoes the cap in USD micros, so 25 dollars reads as 25000000.

import json, os, urllib.request

def create_run(order_id: str, cap_usd: float) -> dict:
    body = {
        "instruction": "Vertical 9:16 product teaser, no captions.",
        "input": {"product_url": "https://shop.example.com/p/8823"},
        "generation_spend_cap_usd": cap_usd,
    }
    req = urllib.request.Request(
        "https://api.sume.com/v1/formats/sume/sume-product-commercial/runs",
        data=json.dumps(body).encode(),
        method="POST",
        headers={
            "Authorization": "Bearer " + os.environ["SUME_API_KEY"],
            "Content-Type": "application/json",
            "Idempotency-Key": f"order-{order_id}-v1",
        },
    )
    with urllib.request.urlopen(req) as resp:
        return json.load(resp)["data"]

run = create_run("8823", 25)
print(run["id"], run["usage"]["generation_spend_cap_usd_micros"])

When you still want a preview

Previews belong to the MCP surface. On a paid MCP tool such as generate_video, dry_run=true returns an admission and cost preview without submitting the job, and max_spend_usd is enforced only when you send it. A Format run has no dry run; its protection is the cap.

Sources

Related posts

More in Comparisons

All Comparisons posts

Written by Sume