Sume mode webhook without a webhook_url: no delivery is armed

On a Sume Format run, communication.mode is descriptive; only a webhook_url arms delivery. Send the URL, then keep status_url as your backup.

4 min readSume
All posts

Setting communication.mode to webhook does not turn on webhooks for a Sume Format run. The field is descriptive only: the URL arms delivery. A run with mode: "webhook" and no webhook_url has nothing to deliver to, so you must poll status_url.

What each field does

communication.mode is async (the default) or webhook. communication.webhook_url is a public HTTPS URL of up to 2048 characters, and callback_url is an accepted alias. Top-level webhook_url, callback_url and mode are fal-shaped aliases that Sume folds into communication; the same value on both layers is fine, but values that disagree return 400 invalid_request.

Webhook-related fields on a Format run create (read 2026-10-06)
FieldEffect
communication.webhook_urlArms one terminal delivery
communication.callback_urlAlias for webhook_url; send one or the other
communication.modeasync or webhook; descriptive only
Top-level webhook_url / callback_url / modeNormalized into communication; conflicts are 400

What arrives and what does not

When the URL is set, Sume sends one signed format.run.terminal POST when the run completes or fails. A canceled run and a skipped run send nothing. The create receipt shows webhook_delivery.status as not_armed until the run is terminal, which is normal.

  • Always keep status_url and result_url; a webhook is an alternative to a poll loop, not a replacement for being able to poll.
  • After you cancel, read the cancel response and poll status_url. Do not wait for a POST.
  • If you missed a delivery, POST /v1/format-runs/{run_id}/webhook/redeliver with formats:write re-sends it.

Verifying on the create response

The create receipt is the cheapest test. Look for webhook_delivery.url and a status of not_armed, which means the URL is stored and no delivery is due yet. If the block is absent or the URL is empty, fix the body before you wait on a POST that cannot come.

On the receiving side, answer any 2xx within 10 seconds. Sume makes up to 10 attempts with backoff, honors a Retry-After on 429 or 503, and never follows redirects, so register the final URL.

For bulk queues the same rule applies per item: the queue has no webhook, so each child needs its own communication.webhook_url. If you forget it on some items, those children never deliver, and your batch counter will stay short even though the runs finished.

Tradeoff

Because the mode is only a label, a wrong value fails silently. Check webhook_delivery.url on the create receipt: if it is missing, no URL was stored and no POST will come.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume