Sume /v1/images 400 unsupported_parameter: check descriptors

Sume rejects an image parameter the model does not list. seed, output_compression, pixel size and stream also return 400 in v1. How to preflight it.

5 min readSume
All posts

POST /v1/images returns 400 unsupported_parameter when a request sets something the chosen model does not list. Sume rejects it rather than silently dropping it. In v1 several fields are in the schema but no model advertises them, so seed, output_compression and explicit pixel size fail for every model.

Fields that fail in v1

The Image API doc marks these as accepted by the schema but not served, so they return an error today.

From the Image API doc, read 2026-10-05
FieldResult in v1
seed400 unsupported_parameter
output_compression400 unsupported_parameter
size as explicit pixels400 unsupported_parameter
stream: true400 streaming_not_supported
non-empty provider.options400 unsupported_parameter
provider slug other than sume400 provider_not_available

Preflight against the catalog

Each catalog row publishes typed descriptors: enum, range or boolean. Fetch the row and check your request before you send it. This script exits non-zero when a field is not supported, so it can run in CI.

const id = 'bytedance-seed/seedream-4.5';
const want = ['prompt', 'aspect_ratio', 'n'];
const res = await fetch('https://api.sume.com/v1/images/models', {
  headers: { Authorization: `Bearer ${process.env.SUME_API_KEY}` },
});
const row = (await res.json()).data.find((m) => m.id === id);
if (!row) throw new Error('model not in catalog');
const miss = want.filter((k) => !(k in row.supported_parameters));
if (miss.length) {
  console.error('unsupported:', miss);
  process.exit(1);
}

Streaming and progress

Every catalog row reports supports_streaming: false, and stream: true returns 400 streaming_not_supported. For progress, submit with mode: "async" and read GET /v1/jobs/:id/events, or use a webhook for the terminal event. mode: "subscribe" is an alias of sync and gives a single bounded wait.

Edits and references

Reference images go in input_references, and the count a model accepts is a range descriptor on that field. An edit with a mask uses mask_url, which must be a public HTTPS URL and applies to ChatGPT Image 2.5 edits. Check the field exists on the row before you send it.

Related posts

More in Developers

All Developers posts

Written by Sume