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.

4 min readSume
All posts

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.

Who retries what (Make Help Center and Sume docs, read 2026-10-05)
FailureSume seesSume retries?
Make rejects the request (rate limit 429, or a full queue)A non-2xx answerYes: up to 10 attempts, 30 s apart by default
Make queues it, the scenario fails later200 AcceptedNo: the delivery is already a success
Your scenario is switched off or pausedDepends on Make's reply to the hookCheck 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

All Integrations posts

Written by Sume