Sume job error details.input_field: the parameter that failed
When a provider rejects one request field, Sume publishes its name as details.input_field beside provider_error_message. Map it back to your body and fix it.

details.input_field is the name of the request parameter that a provider objected to. It sits on the error object of a failed Sume job beside details.provider_error_type and details.provider_error_message, so you can fix that one field in a new request instead of guessing which input broke.
Read it on GET /v1/jobs/{id} under data.job.error.details. The video poll at GET /v1/videos/{id} flattens the same error to a plain string and drops details, as the poll error string post shows, so go to the jobs endpoint when you need the field.
Two shapes the repo tests pin
The job-error tests in the repository store a raw worker error and assert what the public job exposes. Two of those fixtures show the field at work.
The second row is a test fixture, not a Sume rule. Sume checks duration, resolution and aspect_ratio against its own model catalog before it accepts a video job, and answers 400 unsupported_capability when a value is outside the model's list, so a provider-side value error should be rare. The Video Generation page lists the per-model limits.
| Fixture | provider_error_type | input_field | Public message |
|---|---|---|---|
| A provider could not fetch an input image | file_download_error | image_url | Could not download an input media URL (image_url). Verify the URL is publicly reachable, then retry. |
| A provider checked a value | value_error | duration | duration must be one of [4, 5, 8, 10] |
What the field can contain
Sume copies the field name from the stored provider_error_field, and only when it passes a strict filter.
- Letters, digits and underscores only, 1 to 60 characters long.
- Never a URL, a path or free text, so the name is safe to log and to show in a UI.
provider_error_typefollows the same filter, which is why you see tokens such asvalue_errorand not a sentence.provider_error_messageis the provider's sentence after masking and the 300-character cap, covered in the redacted URL post.
Map the name back to your body
The name is the provider's name for the field, and for fields that Sume passes through unchanged it matches the key in your request. When it does not match, treat it as a pointer and search your body for the closest key. This script prints the field and your matching value.
import json, os, urllib.request
def get(path):
req = urllib.request.Request(
"https://api.sume.com" + path,
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]},
)
with urllib.request.urlopen(req) as res:
return json.load(res)
body = json.loads(os.environ["REQUEST_BODY"])
job = get("/v1/jobs/" + os.environ["SUME_JOB_ID"])["data"]["job"]
details = (job.get("error") or {}).get("details") or {}
field = details.get("input_field")
print("field:", field, "| your value:", body.get(field))
print("provider said:", details.get("provider_error_message"))Fix it and submit a new request
A failed job is terminal, so the fix is a new submit. Change the one field and send the request again.
- Use a new
Idempotency-Keywhen the body changed. The same key with a different body returns409 idempotency_conflict, as described in Generation admission. - If
retryableis false andnext_actionisfix_input, an unchanged resubmit fails the same way. - If the field is a URL such as
image_url, open it in a private browser window first. It must be a public HTTPS link, as Media inputs requires.
Sources
Related posts
More in Developers
- Sume job failed artifact_too_large: shrink the output
A finished file that storage refuses with HTTP 413 fails as artifact_too_large and is not retryable. Shorten the cut, lower the resolution or the bitrate.
- Sume content_policy_rejected: image, music and video messages
Sume scans a provider's rejection text for six phrases and answers with one of three fixed content-policy messages and next_action fix_input.
- Sume job failed: generation_output_unavailable, retry or not
generation_output_unavailable means Sume could not copy a finished output into its storage. Retryable true gives retry_later; false gives contact_support.
- Sume job failed: image_content_rejected, what to change
image_content_rejected marks a non-retryable failure at an image-input stage such as first_frame. Sume sets next_action to fix_input: swap the picture.
Written by Sume