Higgsfield statuses: nsfw and canceled mapped to Sume job states
Higgsfield returns queued, in_progress, completed, failed, nsfw or canceled. How each maps to Sume's video and job statuses, including cancelled vs canceled.

Higgsfield has six request statuses: queued, in_progress, completed, failed, nsfw and canceled. Sume has two vocabularies for the same video job. The /v1/videos route says pending, in_progress, completed, failed and cancelled. The jobs API says queued, processing, completed, failed and canceled. There is no separate nsfw status on Sume's pages: a rejection is a failed job with a public error.
The mapping
Use this table when you translate a Higgsfield client. The non-terminal pair is queued and in_progress on Higgsfield. The terminal four are completed, failed, nsfw and canceled.
| Higgsfield | Sume `/v1/videos` | Sume `/v1/jobs` | Terminal |
|---|---|---|---|
queued | pending | queued | No |
in_progress | in_progress | processing | No |
completed | completed | completed | Yes |
failed | failed | failed | Yes |
nsfw | failed with an error | failed with a public error | Yes |
canceled | cancelled | canceled | Yes |
Two spellings of one state
Note the spelling. The video route uses cancelled with two Ls, as the OpenRouter-compatible wire does, and the jobs API uses canceled. Webhook events use job.canceled. The same job is visible at both GET /v1/videos/{id} and GET /v1/jobs/{id}/status, so pick one vocabulary in your code and normalize at the edge.
Where nsfw goes
Higgsfield's nsfw is a terminal status for content that was rejected, with no output and no charge. Sume's closest signal is the job error: a failed job carries public metadata such as category, stage, retryability and a next action, and the category generation_rejected means to inspect events and fix unsupported input. Branch on the error category, not on a status string.
Normalizing in your client
Normalize to one internal enum: queued, running, done, failed, canceled.
Treat completed as success only when a result is present.
Never retry a rejected job unchanged; change the input.
Store the raw provider status next to your normalized one for support.
- Normalize to one internal enum: queued, running, done, failed, canceled.
- Treat
completedas success only when the result is ready. - Never retry a rejected job unchanged; change the input.
- Store the raw status next to your normalized one for support.
Sources
Related posts
More in Developers
- Higgsfield upload URL: 1 hour, MP4 and WAV. Sume takes public URLs
Higgsfield inputs go through a presigned upload that expires in one hour. Sume has no upload step: pass public HTTPS URLs in frame_images or input_references.
- Higgsfield webhook retries: two hours vs Sume's ten attempts
Higgsfield retries 5xx for up to two hours and wants a reply in ten seconds. Sume makes 10 attempts, 30 seconds apart, then lets you redeliver by hand.
- Ideogram color_palette parameter: brand colours in Sume prompts
Ideogram's API takes a color_palette parameter. The Sume image API has no palette field, so brand colours go in the prompt and a reference swatch image.
- Ideogram negative_prompt: what to send to the Sume image API instead
Ideogram has a negative_prompt parameter, but Sume's image API does not. Rewrite exclusions as positive instructions and check each result.
Written by Sume