Put customer review text in a Format's input, not instruction

For UGC testimonial variants, send review text in a Format run's input object, not instruction. Input is carried whole as a file the agent treats as data.

5 min readSume
All posts

Put the review text, product fields and any other data you pulled from outside in the run's input object, and keep instruction for your own short task. input is written whole to a file in the run's workspace and the agent is told it is caller-supplied data, not instructions, while instruction is composed into the prompt and only the first roughly 4,000 of its 8,000 accepted characters are carried.

For testing UGC testimonials at scale, that split is the whole design: the same short instruction on every item, and a different input per item.

What the API accepts and carries

input is a JSON object with no published field list: you choose the shape and the Format's recipe reads the keys it knows. The API checks only the type, the property count, the size and the media references.

The catalog has a Format built for this look, sume-close-camera-ugc, callable at the reserved sume handle by any key with formats:write. Read it first with GET /v1/formats/sume/sume-close-camera-ugc to see its description and io profile.

Limits on a Format run's input (read 2026-10-03)
CheckRule
TypeA JSON object; arrays, strings and numbers are refused
Top-level keysAt most 64; nested keys are not counted
SizeAt most 2 MiB (2097152 bytes) compact
Media URLs at any depthShare the run's budget of 30 in total, at most 30 images, 10 videos and 10 audio
instruction8000 characters accepted, about the first 4000 carried

A trust boundary, not a sandbox

Review text is exactly the kind of data you should not concatenate into instruction. Putting it in input tells the agent it is data. That is a trust boundary, not a sandbox: runs are spend-capped, so a hostile payload's blast radius is bounded by the cap, but do not pass raw untrusted text through on purpose.

Also keep identifiers on your side. input does not reach the structured output, so a review id you sent cannot be echoed back unless the run repeats it. Key results by the run id or by your Idempotency-Key.

Queue the variants

A bulk request takes 1 to 100 items, each the same body as a single run, so every variant carries its own input. Mint one Idempotency-Key per batch and cap each item. The sample queues two testimonials with a window of two.

When it finishes, branch on counts.failed before calling the batch done: queue completed only means every item is terminal. Read each child's receipt at /v1/format-runs/{run_id} for the media.

curl -sS -X POST "https://api.sume.com/v1/formats/sume/sume-close-camera-ugc/bulk-runs" \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "concurrency": 2,
    "items": [
      { "instruction": "Make a 9:16 testimonial clip from this review.",
        "input": { "review": "Arrived fast and the fit is perfect.", "product": "linen shirt" },
        "generation_spend_cap_usd": 8 },
      { "instruction": "Make a 9:16 testimonial clip from this review.",
        "input": { "review": "Washed ten times and it still looks new.", "product": "linen shirt" },
        "generation_spend_cap_usd": 8 }
    ]
  }'

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume