Leonardo.Ai API alternative for image generation: Sume Images
Leonardo's API submits to /generations and returns a generationId. Sume POST /v1/images works from a model catalog with idempotent retries. Compared.

Is Sume a good Leonardo.Ai API alternative?
If you want a model catalog with machine-readable capabilities and idempotent submits, yes. If your product is built around Leonardo's own models and style presets, no: Sume does not host Leonardo's models, and its style options come from whichever catalog model you pick.
What does the Leonardo API look like?
Leonardo's quick start has you send a POST to https://cloud.leonardo.ai/api/rest/v1/generations with dimensions, a model id, style and a prompt. The response carries a generationId, which you use to fetch the finished images. You can instead configure a webhook callback URL to receive results instead of polling. Models are addressed by id (the example shows a UUID), and styles by styleUUID.
Billing is worth noting: the page says API plans are distinct from Leonardo web app plans, that usage is billed in dollars, and that remaining credit appears on the API Access page.
What does Sume Images look like?
Sume uses POST /v1/images with a model slug and a prompt. Pass sume/auto to let the Image Router pick. GET /v1/images/models lists models with their supported parameters, and GET /v1/images/models/{model_id}/endpoints returns capabilities and pricing for one model. Parameters are typed descriptors (enum, range or boolean), and a field the model does not list is rejected with 400 unsupported_parameter instead of ignored.
The Sume response returns hosted image URLs in a data array. The call blocks up to 30 seconds by default; longer work returns a 202 job envelope you read through the standard job endpoints.
| Aspect | Leonardo.Ai | Sume Images |
|---|---|---|
| Submit | POST /api/rest/v1/generations | POST /v1/images |
| Handle for result | generationId | Job id plus hosted URLs |
| Model selector | Model id (UUID) plus styleUUID | Catalog slug or sume/auto |
| Completion | Fetch by id, or webhook | Poll, sync/subscribe, or signed webhook |
| Retry safety | Not covered in the page I read | Idempotency-Key header on submits |
Where is Leonardo ahead?
Leonardo has its own model line and a style system tuned for its community use, and its generation endpoint takes direct knobs for dimensions and style. Sume's catalog is broader in third-party model families but you cannot reach Leonardo-specific models or style UUIDs through it. For text-to-image products that depend on a particular Leonardo look, switching changes your output.
How do reference images and masks compare?
Both platforms support image-guided work, but the contract differs. In Sume's catalog, capabilities live on the model entry. For example, the ChatGPT Image 2.5 entries support up to 16 image references, an optional mask_url, and background set to auto, transparent or opaque, with quality from auto to max (omitted defaults to high). Other models list different parameters, which is why you read the descriptor before sending a field.
I could not confirm Leonardo's reference-image and mask parameters from the quick start page alone, so check its endpoint reference before assuming parity. Whatever you find, the Sume pattern is the same: pick the model, read its supported parameters, and expect a 400 if you send something it does not list.
- Use public HTTPS image URLs for references. Localhost, private-network and non-HTTPS URLs are rejected before generation.
- Sume image
sizefields have limits per model; for GPT Image 2.5 both edges must be multiples of 16 with a maximum edge of 3840. - Auto routing keeps you off a single model, but Sume does not disclose which family ran:
job.modelstayssume/auto.
What changes when you port?
Replace the generation id with a Sume job id, replace the model UUID with a catalog slug, and add an Idempotency-Key header on every submit. Handle 402 insufficient_credits and 429 queue_full explicitly; the first means top up the workspace balance, the second means wait for an existing job to finish.
Check one thing first: cost. Sume bills the captured amount in USD per image (usage.cost), so compare that against your Leonardo per-image spend using a few real prompts. Read GET /v1/images/models/{model_id}/endpoints for each model's pricing first.
curl -X POST https://api.sume.com/v1/images \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: leo-port-001" \
-d '{"model":"sume/auto","prompt":"Isometric cutaway of a tiny bakery, soft pastel light"}'Sources
Related posts
More in Comparisons
- Live vs file transcription cost: gpt-live-transcribe and batch rates
Streaming transcription costs 2 to 4 times file transcription on vendor pages. When live is worth it, and when Sume's $0.01 per minute file job is enough.
- Mirelo SFX video-to-sound vs how Sume adds sound to video
Mirelo generates sound effects synced to existing video. Sume has no video-to-SFX route; here is what it does offer for sound on a clip, and where each fits.
- Mubert Render 25-minute tracks and licence limits vs Sume Music
Mubert Render makes tracks up to 25 minutes on paid plans but bars streaming release. Sume Music makes song-length tracks at $0.125 each; loop for longer.
- Murf API alternative for video voiceover: where Sume fits
Murf is a voice API with Falcon, dubbing and 150+ voices. Sume has an async TTS route and turns a script into a talking video; it has no dubbing API.
Written by Sume