WaveSpeed API v3 predictions/result vs Sume /v1/jobs/status/result
Porting from WaveSpeed's api/v3 submit and predictions/{id}/result to Sume: base URLs, Bearer auth, idempotency keys, status and result routes side by side.

WaveSpeed's API is https://api.wavespeed.ai/api/v3, with a model-specific POST to submit and GET /predictions/{TASK_ID}/result to read; Sume's is https://api.sume.com/v1, with a model endpoint to submit and GET /v1/jobs/:id/status and /result to read. Both use a Bearer key, so a port is mostly route names, one new header and one different result shape.
WaveSpeed's side is from its REST API docs and Sume's from Jobs and results and the API reference, read 2026-10-02.
How do the two request flows line up?
WaveSpeed: submit, receive a task id and status URL, poll for results. Sume: submit with mode: "async", receive the job id (request_id), status_url, result_url, events_url and cancel_url, poll the status, then fetch the result once result_ready is true.
| Step | WaveSpeed | Sume |
|---|---|---|
| Base URL | https://api.wavespeed.ai/api/v3 | https://api.sume.com/v1 |
| Auth | Authorization: Bearer key | Authorization: Bearer key |
| Submit | POST to a model-specific path | POST to a model path, mode: async |
| Status and result | GET /predictions/{id}/result | GET /v1/jobs/:id/status, then /result |
| Cancel | Status cancelled exists | POST /v1/jobs/:id/cancel, before generation starts |
What do you need to add?
The new piece is Idempotency-Key. Sume's docs say not to retry unsafe submit requests without one, and the key is what makes a retry after a network error safe. Pick one key per logical job, such as a hash of the shot id and prompt, and reuse it on retry.
A request that works looks like the one in Sume's docs:
curl -X POST https://api.sume.com/v1/image-1.0/generate \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: shot-0042-v1" \
-d '{"prompt":"Product hero shot of a matte black bottle on marble","mode":"async"}'
# 202 -> request_id, status_url, result_url, next_poll_after_secondsWhat is different about results and errors?
Completed jobs return artifacts under https://media.sume.com, and Sume says raw provider URLs are not part of the public contract. Errors come in a JSON envelope with a code, message and request_id; include the request id when you contact support, and never include API keys or signed URLs.
WaveSpeed lists 400, 401, 429 and 500 on its page. Sume's table adds 402 insufficient_credits, 409 for invalid job operations, and 429 queue_full, which a WaveSpeed client will not already handle.
What does Sume not do?
Sume does not expose WaveSpeed's catalog of 1,000+ models; it serves its own catalog, so check the model list before mapping an id. Model-for-model parity is not claimed on these pages. The managed media API comparison covers pricing and catalog differences.
Sources
Related posts
More in Developers
- WaveSpeed polls at 2 seconds minimum; Sume: next_poll_after_seconds
WaveSpeed says start polling near 2 seconds and back off to 5-10. Sume returns next_poll_after_seconds so the server sets the pace. A runnable loop for each.
- Which Sume audio endpoint to call: TTS, STT, music, detach, timeline
A decision map for Sume's audio API: seven endpoints, what each takes in and returns, limits and list prices, and the order they chain in.
- Sume video tools: public URL or media import first? Per tool
Video captions takes a public HTTPS URL; trim, filter, inspect, frames, compose and detach need a workspace media.sume.com clip. A tool-by-tool input guide.
- Which voice does my avatar speak with? Check voice.status is ready
Sume TTS speaks in an avatar's voice when voice.status is ready. List avatars, check voice.status, then send avatar_id or avatar_handle on the TTS request.
Written by Sume