fal webhook redirect 3xx is never retried: what Sume does instead

fal treats a 3xx from your webhook URL as a permanent failure. Sume does not follow redirects either, but counts a 3xx as a failed attempt, not an end.

4 min readSume
All posts

If your webhook URL answers with a redirect, fal does not follow it and treats the delivery as a permanent failure that is not retried. Sume does not follow redirects either, but its docs call a 3xx a failed attempt, so it counts against the 10 attempts rather than ending delivery at once. The practical fix is the same on both: register the final URL, with the right scheme and trailing slash, not one that redirects.

fal's rules are from the Retry policy section of its Webhooks page, read on 2026-10-02. Sume's are from Run webhooks and Webhooks.

What does fal do with a redirect or an internal address?

A 3xx response is not followed and is not retried. fal says to set webhook_url to the final destination directly and names two common pitfalls: http:// URLs that redirect to https://, and paths that redirect to add or remove a trailing slash.

Deliveries to URLs that resolve to a private, internal or loopback address, such as localhost or a public hostname whose DNS record points to 10.0.0.5, are dropped permanently before any request is sent. A hostname that fails to resolve at all is treated as a network error and retried.

What does Sume do?

A run webhook URL must be public HTTPS, at most 2048 characters. Localhost, private-network and non-HTTPS URLs are rejected at submit time with 400 invalid_request. The URL is validated again at delivery time, not only when you submit. Job webhooks follow the same rule: public HTTPS only, with localhost, private-network and non-HTTPS URLs rejected.

Redirects are not followed; the docs say a 3xx is a failed attempt and not a delivery. Because Sume retries failed attempts up to 10 times in total, a redirecting endpoint keeps being tried until the cap, then the delivery shows exhausted. The job or run itself is unaffected.

How do the rules line up?

The main difference is when a bad URL is caught.

fal's Retry policy section and Sume's Run webhooks and Webhooks pages, read 2026-10-02.
CasefalSume
3xx responsePermanent failure, not retriedFailed attempt; counts toward the 10
Private, internal or loopback targetDropped permanently before any requestRejected at submit with 400 invalid_request; checked again at delivery
Unresolvable hostnameNetwork error, retriedNot stated on the pages
http:// URLNot stated whether accepted; redirects to https:// are a named pitfallRejected: public HTTPS only

How do I check my URL before I go live?

Request the URL with curl -sI and confirm it answers 200 or 204 directly, with no Location header. Check both the scheme and the trailing slash. For Sume, the dashboard Webhooks tab has a Send test action (also POST /v1/webhooks/test-deliveries, scope account:write) that posts a dummy signed webhook.test payload to a URL you type, so you can see your endpoint answer before a real job runs.

Send test never replays a real job. To replay a real terminal event later, use Redeliver on the delivery row; it does not change the destination, so a new URL means a new job.

Sources

Related posts

More in Comparisons

All Comparisons posts

Written by Sume