Black Friday price variants: one clip, twelve caption jobs, $2.40

Test twelve Black Friday price points on one video: submit twelve video-captions jobs with different cues at $0.20 each and a unique idempotency key per price.

5 min readSume
All posts

Twelve price-point versions of one Black Friday video cost $2.40 in caption jobs. Generate or edit the clip once, then submit twelve POST /v1/video-captions jobs that differ only in cues, because each accepted caption job is $0.20. Black Friday is 27 November 2026, so a test run in early November still leaves time to pick a winner.

The arithmetic

Costs from the Sume API pricing page and docs.sume.com/models/video-captions, read 2026-10-01. Totals are computed here.
ItemRateCountTotal
Base clipyour own, or a model clip1varies
Caption job with cues$0.20 per accepted job12$2.40
Extra round of 12$0.20 per accepted job12$2.40
Failed or refused submitnot charged if not accepted-$0.00

Why not one render with twelve overlays

A caption job burns the cues you send onto one video and returns one video. There is no way to ask it for twelve outputs in a single call, so you submit twelve. That is also what you want for a test: each job is independent, has its own job id and can be judged on its own. Keep every cue phrase-level and short, since a price card is two or three words.

Submit them

Use one idempotency key per business intent: the clip plus the price. A retry then returns the same job instead of billing a second time. This loop submits four of the twelve; extend the tuple. Pace real batches against your generation limits.

import json, os, urllib.request

URL = "https://api.sume.com/v1/video-captions"
CLIP = "https://example.com/offer.mp4"

def submit(price):
    body = {"video_url": CLIP, "style": "slam", "cues": [
        {"text": "BLACK FRIDAY", "start": 0.5, "end": 3.0},
        {"text": f"${price}", "start": 3.2, "end": 7.0}]}
    req = urllib.request.Request(
        URL, json.dumps(body).encode(),
        {"Authorization": "Bearer " + os.environ["SUME_API_KEY"],
         "Content-Type": "application/json",
         "Idempotency-Key": f"bf-offer-price-{price}"})
    with urllib.request.urlopen(req) as r:
        return json.load(r)

def main():
    for price in (19, 29, 39, 49):
        out = submit(price)
        print(price, out["data"]["request_id"])

main()

Read results, not hunches

Post each variant to a comparable audience and compare on the platform's own numbers. Sume does not measure ad performance, so the test design and the sample size are yours. Check offers against what you actually charge; a price shown in a video is a claim, and consumer-protection rules about sale prices differ by country.

Limits

Each submit reserves its $0.20 up front, so a late submit can be refused with 402 insufficient_credits if the balance runs short, and a burst can hit 429 queue_full or 429 rate_limited; see the admission notes. A restyle with source_caption_id reuses the word timings but is still a render, billed the same. Requests refused before a job is accepted never reach billing.

Sources

Related posts

More in Pricing

All Pricing posts

Written by Sume