Make's Accepted 200: why Sume won't retry a failed scenario
Make answers 200 Accepted as soon as the webhook is queued, so Sume sees success even if the scenario later fails. Reconcile by job id and use Redeliver.

When Sume posts a finished job to a Make custom webhook, Make's default answer is HTTP 200 with the body "Accepted", sent before your scenario runs. Sume counts that as a delivered event and stops retrying. If the scenario then errors, nothing re-sends the event, so you need your own reconciliation by job id.
Two different failure points
There are two places where a Sume result can fail to reach your scenario's logic, and only one of them is retried by Sume.
| Failure | Sume sees | Sume retries? |
|---|---|---|
| Make rejects the request (rate limit 429, or a full queue) | A non-2xx answer | Yes: up to 10 attempts, 30 s apart by default |
| Make queues it, the scenario fails later | 200 Accepted | No: the delivery is already a success |
| Your scenario is switched off or paused | Depends on Make's reply to the hook | Check the delivery row on the job |
Make's queue numbers
Make's webhooks page says that each webhook holds 667 queue items for every 10,000 credits licensed per month, up to 10,000 items, and that a full queue makes Make reject all incoming data over the limit. It also says incoming data always lands in the queue. The page does not name the status code for a full queue, so treat any non-2xx as a refusal that Sume will retry.
Keep a ledger keyed by job id
The cheap fix is a table with one row per Sume job: job_id, the state you last saw, and a timestamp. Write the row when you submit. Mark it done at the end of the scenario, not at the start. A reconcile run then asks Sume about every row that is not done.
Sume's job envelope has terminal and result_ready booleans on GET /v1/jobs/{id}/status. A scheduled reconcile can stop on terminal and then fetch the result. Never submit the paid request again to "fix" a missing event; the job already exists.
import json, os, urllib.request
def status(job_id):
req = urllib.request.Request(
f"https://api.sume.com/v1/jobs/{job_id}/status",
headers={"Authorization": "Bearer " + os.environ["SUME_API_KEY"]},
)
with urllib.request.urlopen(req, timeout=10) as r:
return json.load(r)
for job_id in open("open_jobs.txt").read().split():
s = status(job_id)
print(job_id, s.get("status"), "terminal=" + str(s.get("terminal")))Redeliver or re-read
Once you know which jobs finished without a successful scenario run, you have two options. Re-read the result and process it directly, or call POST /v1/jobs/{job_id}/webhook/redeliver (scope jobs:write) so the real terminal event arrives again with a new signature. Redeliver does not use up the automatic attempts and does not change the destination URL. Make your scenario idempotent on job_id, because the same job can legitimately arrive twice.
Limits
To make Make wait for the end of your scenario before it answers needs a Webhook response module, and then Sume's 10-second attempt timeout becomes your budget. For anything that runs longer than a few seconds, keep the default early "Accepted" and rely on the ledger instead.
Sources
Related posts
More in Integrations
- Mattermost incoming webhook for Sume jobs: markdown, 16,383 chars
Post a Sume job result to Mattermost with an incoming webhook: text is markdown, attachments sit at top level, and posts up to 16,383 characters are supported.
- MCP agent: trim, then captions? video-captions create is not listed
On Sume's hosted MCP, video_trim is a listed tool but captions are not creatable from tools_list. Use the REST endpoint for the burn step in an agent chain.
- Sume MCP allow_write and allow_paid: accepted, not required, no bypass
Old agent prompts still send allow_write and allow_paid to Sume MCP. The server accepts both, but only the OAuth scope or an API key grants access.
- MCP conflicting_payload_fields: image_url or avatar_id, not both
Sume's avatar-image-to-video_create and kling-motion-control_create take image_url XOR avatar_id or avatar_handle. Both returns conflicting_payload_fields.
Written by Sume