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.

4 min readSume
All posts

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.

Fixtures from the API and api-jobs test suites, read 2026-10-10
Fixtureprovider_error_typeinput_fieldPublic message
A provider could not fetch an input imagefile_download_errorimage_urlCould not download an input media URL (image_url). Verify the URL is publicly reachable, then retry.
A provider checked a valuevalue_errordurationduration 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_type follows the same filter, which is why you see tokens such as value_error and not a sentence.
  • provider_error_message is 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-Key when the body changed. The same key with a different body returns 409 idempotency_conflict, as described in Generation admission.
  • If retryable is false and next_action is fix_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

All Developers posts

Written by Sume