Bulk queue finished_at: measure the wall time of a 100-item batch
A Sume bulk queue sets finished_at when every item is terminal, so created_at to finished_at is your wall time. It does not mean every item succeeded.

Sume sets finished_at on a bulk queue when its status becomes completed, which means every item is terminal. The gap from created_at to finished_at is the wall time of your batch. It is not a success measure: completed does not mean every item succeeded, so read counts.failed and counts.canceled too.
The fields
A queue receipt carries created_at, updated_at and finished_at as ISO-8601 timestamps. finished_at stays null until the queue completes. Poll status_url with backoff; each child is minutes of work for video, so polling every second gains nothing and uses read budget.
| Field | Meaning |
|---|---|
| created_at | When the queue was accepted |
| updated_at | Last change to the queue |
| finished_at | Set when status is completed; otherwise null |
| counts.failed, counts.canceled | Items that did not succeed |
| status | queued, running or completed |
Using the number honestly
Wall time depends on the window, on workspace generation concurrency, and on how long each run takes, which varies by Format. One batch is one data point, so do not publish a rate from it.
- Record
finished_at - created_atwith the concurrency you asked for, the item count and the Format version. - Separate the time of failed items; a failed item that never started frees its slot immediately and can make a batch look quick.
- If you cancel a child, the queue marks it
canceledand the next item starts.
Reading the result with the timing
After finished_at appears, fetch each child by run_id and record its own status and spend. A queue that finished fast with several failed items is a different story from one that finished slowly with all items completed.
The receipt usage on each child gives the generation spend, and GET /v1/usage stays the billing record, so use it, not your own sum, for invoices.
For a client report, quote the facts you measured, such as the item count, the concurrency setting and the elapsed time, and avoid projecting them onto a different Format or a bigger catalog without a new pilot.
Tradeoff
The queue has no publicly documented position or depth field, so you cannot predict finish time from a single poll. Treat wall time as a result to log, not a promise to give a client.
Sources
Related posts
More in Formats
- Bulk run concurrency 3 with 8 items: what the 202 receipt shows
With concurrency 3 and 8 items, the Sume 202 shows three running and five queued. Item 3 starts when item 0 finishes. Here is how the window and counts behave.
- Bulk run has no empty item: skip sheet rows without a finished script
A Sume bulk item must name at least one of instruction, input, previous_run_id or attachments. Filter unfinished sheet rows on your side before you send.
- One dead image URL fails the whole 100-item Sume bulk create
Sume fetches every attachment at create time, so one broken image URL in a bulk body fails the create before any queue exists. Check URLs first.
- Commit several Sume Format files in one PUT: a change set
PUT a files list to a Sume Format's contents URL and it is one commit with one version bump. Files you do not name stay as they are. Existing paths need a sha.
Written by Sume