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.

Higgsfield retries network failures and 5xx responses for up to two hours and treats any 4xx as permanent. Your endpoint has ten seconds to answer. Sume retries a failed delivery up to 10 times in total, with a fixed delay of 30 seconds by default and a 10-second timeout per attempt, and you can redeliver by hand after the automatic attempts run out.
Retry rules compared
The retry windows are different shapes. Higgsfield's is long and time-based. Sume's is short and count-based: with the default spacing, ten attempts cover roughly four and a half minutes between the first and the last. If your receiver can be down for longer than that, plan for the redeliver call and for polling.
| Rule | Higgsfield | Sume |
|---|---|---|
| Retried | Network failures and 5xx, for up to two hours | Network errors and non-2xx, up to 10 attempts |
| Not retried | 4xx responses are permanent | Not exempted: any non-2xx is retried |
| Reply deadline | Ten seconds | 10 seconds per attempt |
| Spacing | Not stated on the page | Fixed, 30 seconds by default, not exponential |
| Duplicates | Possible; deduplicate by request_id and terminal status | Possible; use job_id as the idempotency key |
| After giving up | Poll the status URL | Redeliver per job, or poll status_url |
Make the handler idempotent
Both providers say the same thing about duplicates: they can happen, so your handler must be idempotent. Record the event durably first, then return a 2xx. Higgsfield's page says to acknowledge valid duplicates with 2xx and reject envelopes you do not recognise. On Sume, key your table on job_id.
When the receiver was down too long
Sume's POST /v1/jobs/{job_id}/webhook/redeliver (needs jobs:write) re-sends the job's real terminal event with a fresh timestamp and signature. It does not use up one of the automatic ten attempts, and it does not change the destination URL. Higgsfield's webhook page describes no manual replay, so for a long outage you would read request_id status over the API instead.
The two answer one question the same way in the end. A webhook is a speed-up, and the status endpoint is the source of truth. Keep polling available for the events that never arrive.
Checklist
Four habits cover both APIs.
- Return
2xxfast and do the work after. - Deduplicate on the job or request id plus the terminal status.
- On Sume, expect a retry after any non-2xx, including a 4xx you meant as final.
- Keep a slow polling sweep for jobs with no event.
Sources
Related posts
More in Developers
- Hugging Face id on Sume video models: the field is always null
Sume's GET /v1/videos/models returns a hugging_face_id on every row, and it is null. Here is what that means for Wan, LTX and other open-weights video models.
- Aspect ratios the Sume Images API names, and which one 4:5 is
Sume's Images API names 17 normalized aspect ratios plus auto. Here is the list, what 4:5 means, and why you read the model's own list before pinning one.
- Verify a Sume job.completed webhook in Python (stdlib)
A stdlib Python verifier for Sume job webhooks: HMAC SHA-256 over timestamp.raw_body, five-minute tolerance, rotation-safe, and it refuses an empty secret.
- Image job still running after 50 seconds: slow or stuck?
Sume's docs say an image still running at 50 seconds is usually stuck, not slow. What to read first, when not to resubmit, and when to cancel.
Written by Sume