Build an image model capability matrix from GET /v1/images/models

A short Python script that reads Sume's image catalog and prints each model's reference-image limit and aspect ratios, so you stop guessing per model.

4 min readSume
All posts

To compare image models on Sume without guessing, call GET /v1/images/models and read each model's supported_parameters. Sume publishes typed capability descriptors there, so a 20-line script can print a matrix of reference-image limits and aspect ratios for every listed model.

New image models keep arriving: Higgsfield's changelog lists FLUX 3 Image on 2026-10-01 and Ideogram 4.5 on 2026-09-30 (Higgsfield changelog, read 2026-10-02). A catalog read tells you what Sume lists today instead of what a launch post implies.

What does the catalog tell me about each model?

Each row has an id, architecture (input and output modalities), and supported_parameters. Parameters use three descriptor types, and Sume rejects a request that sets a parameter the model does not list with 400 unsupported_parameter rather than dropping it silently.

Reference-image support is the input_references range. A model whose range is min 0, max 0 is text-to-image only and rejects references.

Descriptor types in Sume's Image API docs, read 2026-10-02
DescriptorMeaningExample field
enumA discrete allowlist of string valuesaspect_ratio
rangeAny integer between min and maxn, input_references
booleanPresent means supported, absent means unsupportedprompt

How do I print the matrix?

Send your API key as a bearer token and loop over data. The script below tolerates a missing descriptor, because a model only lists what it supports.

import os
import requests

resp = requests.get(
    "https://api.sume.com/v1/images/models",
    headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"},
    timeout=30,
)
resp.raise_for_status()

print("id | max references | aspect ratios")
for model in resp.json().get("data", []):
    params = model.get("supported_parameters", {})
    refs = params.get("input_references", {}).get("max", 0)
    ratios = params.get("aspect_ratio", {}).get("values", [])
    print(f"{model['id']} | {refs} | {len(ratios)}")

Why read endpoints too?

GET /v1/images/models/{model_id}/endpoints returns the definitive parameter set and the pricing lines for a model. Sume serves every catalog model through a single sume endpoint in v1, so model-level and endpoint-level parameters are identical.

sume/auto is not in the list on purpose: Sume picks the family and job.model stays sume/auto. If you need a pinned model for a series, pick it from this catalog.

What should I do with the output?

Save the matrix next to your prompts and rerun it before you change a model id. If a model you read about is not in the output, it is not listed for your key today; use a listed model or sume/auto instead. See the Image API docs for the full field list.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume