Format run instruction: 8000 characters accepted, about 4000 carried
A Sume Format run instruction accepts 8,000 characters, but only the first ~4,000 reach the agent as prompt text. Put long data in input, carried whole.

The instruction on a Sume Format run accepts up to 8,000 characters, but only the first ~4,000 are carried to the run as prompt text. Anything longer is accepted and then not used, so put long material in input, which is written whole to a file the agent reads, at any size up to 2 MiB.
The numbers come from the Create a run docs, which have a table headed "accepted and carried".
What is accepted and what is carried?
Three fields, three different answers.
| Field | Accepted | Carried to the run |
|---|---|---|
instruction | 8000 characters | The first ~4000 characters, as prompt text |
input | 2 MiB (2097152 UTF-8 bytes, compact), 64 top-level keys | All of it, as a file the agent reads; never truncated |
| The Format body | No cap beyond 100 MiB per package file | All of it, attached as files |
Why does the cap not produce an error?
The API accepts up to 8,000 characters, and the docs say only the first ~4000 are carried as prompt text. Their advice is blunt: keep the instruction well inside ~4000 characters and put data in input. The docs do not describe a warning for an instruction past 4000 characters, so do not rely on one; if a run ignored the end of your brief, the length is the first thing to check.
What belongs in input instead?
Scripts, price tables, product copy, shot lists, and anything a supplier or customer wrote. input is written to /workspace/inputs/sume-action-input.json and the agent is told to read it as data, never as instructions, which makes it the right place for untrusted text as well. The Format recipe decides which keys it reads, so say in the instruction where to look.
One edge: an empty input ({}) adds no file and no block, byte-identical to omitting it. A Format that says "read product_url from the input" then has nothing to read. A body that names none of instruction, input, previous_run_id or attachments is 400 invalid_request.
{
"instruction": "Vertical 9:16, 20 seconds. Follow the script in input.script and the prices in input.price. No BGM.",
"input": {
"script": { "segments": [{ "tag": "Intro", "text": "..." }] },
"price": { "list": "31,000", "sale": "22,940" }
},
"generation_spend_cap_usd": 40
}How does this interact with the Format recipe?
The Format comes first in what the agent receives, as the how; your instruction comes after it, so where the two disagree the model follows what you asked for. That ordering is also why a long instruction that restates the recipe is wasted characters: the recipe already lives in the Format package.
The 4 MiB body cap is a separate limit: the whole request over 4 MiB is 413 payload_too_large, with details.limit_bytes. Send media by URL, not inline. See scraped copy into input for the injection angle.
How do I check what the agent received?
Every receipt carries a thread_id. Open that thread in the Agents dashboard to read what the run did, and compare it with your brief. If the run followed the start of your instruction but not the end, count the characters before you debug anything else.
Sources
Related posts
More in Formats
- Format run status_url or result_url: which one do I poll?
Poll status_url for a small payload, then read result_url once the run is terminal. result_url answers 409 run_not_completed while the run is in flight.
- Format run stuck in queued: read queue.state and retry_after_seconds
A Sume Format run that stays queued carries a queue block. waiting is normal; runtime_unavailable means nothing claimed it. What to read, and when to ticket.
- Format run failed with unattended_blocked: why it never half-finishes
Over the API, a Sume Format run is told approvals are granted. If it still cannot finish it fails with unattended_blocked, never a half-done completed.
- OpenAI response_format json_schema to a Sume output_schema
Moving a json_schema from OpenAI structured outputs to a Sume Format run: the field name, what transfers, no JSON mode, and why output comes once, post-run.
Written by Sume