n8n logon8n Automation Hub
Debugging notes

Facebook's Graph API Said "Unable to Fetch Video File From URL" for a URL That Was Actually Fine

Debugging notes · n8n workflow · September 5, 2026

A portfolio-marketing workflow posting an n8n build breakdown to a Facebook Page failed with a file-fetch error on a video URL that, checked directly, was serving a normal 200 response the whole time.

Workflow at a glance
  1. Workflow: WF - Portfolio Video Publisher (ajXAX9PjKb2WenZ6), node "Post to Facebook" — an HTTP Request node calling the Graph API's /videos endpoint with a file_url
  2. Error: Graph API 400 Bad Request: Unable to fetch video file from URL
  3. The failing URL, checked directly after the fact, returns a normal 200 OK with the correct video/mp4 content type and a valid file — nothing wrong with the file, the path, or nginx's serving of it
  4. Most likely cause: a transient failure on Meta's side fetching the file at that specific moment, not a bug in the workflow or the hosting
  5. No retry was configured on the node before this check, so the one failed fetch ended the whole publish attempt for that video
  6. Fix applied live via the n8n API: retryOnFail: true, maxTries: 3, waitBetweenTries: 3000; workflow confirmed still active: true
Diagram of the Portfolio Video Publisher's Facebook posting node highlighted where the fetch error occurred

Node diagram reconstructed from the live workflow via the n8n API.

The file was never actually broken

The Portfolio Video Publisher workflow posts short build-breakdown videos — real n8n workflows, explained — to a Facebook Page, an Instagram account, and Threads, once a day. One run failed at the Facebook step with Unable to fetch video file from URL, a Graph API error that means Meta's own servers tried to download the file_url passed in the request and couldn't.

The URL in question, https://phonezait.de/portfolio-videos/system_health_check.mp4, was checked directly after the fact: a plain curl HEAD request returns 200 OK, Content-Type: video/mp4, and a normal content length. Nothing about the file, its path, or nginx's handling of that path is broken. That rules out the two most common causes of this specific Graph API error — a URL that isn't actually publicly reachable, or a file that's missing or corrupted — leaving a transient failure on Meta's end fetching the file at that particular moment as the most likely explanation.

Why "the URL works when I check it" isn't the same as "it worked when Facebook tried"

Facebook's video upload-by-URL flow has Meta's own infrastructure reach out and download the file server-side, separate from and after whatever request Meta's API gateway itself received. That download can fail for reasons that have nothing to do with the source server — a timeout on Meta's crawler, a transient DNS hiccup on their end, temporary rate limiting between Meta's data centers and an external host. None of that shows up as anything wrong from the source side; the server logs a normal successful request whenever anyone actually re-checks the URL, because the URL genuinely is fine by the time anyone looks.

That's the same shape of problem as the Google Sheets 503s covered elsewhere on this site: an external service having a bad moment on one specific call, with no way to reproduce it on demand and nothing actually wrong to "fix" in the usual sense.

The fix: treat it like any other flaky external fetch

The Post to Facebook node had no retryOnFail configured — confirmed by reading its live configuration before making any change. It was updated via the n8n API to retryOnFail: true, maxTries: 3, waitBetweenTries: 3000, matching the pattern already used for the workflow's Google Sheets 503 issue and the Groq rate-limit fix covered elsewhere on this site. If Meta's fetch fails once, the node now gets two more chances, three seconds apart, before the whole publish attempt for that video is marked as failed.

This doesn't fix a bug in the traditional sense — there was nothing wrong with the request, the file, or the hosting — it just stops a single unlucky moment on Meta's infrastructure from silently costing this workflow a day's post on one platform while Instagram and Threads (posted by separate nodes downstream) go out normally.

What confirmed it

The node's configuration was read back from the n8n API after the change: retryOnFail: true, maxTries: 3, waitBetweenTries: 3000 on Post to Facebook. The source video URL was independently re-verified as reachable and correctly served, which is what points at a transient fetch failure on Meta's side rather than anything actually broken here. The workflow was re-fetched and is still active: true.

A scheduled n8n workflow that occasionally just... doesn't run, with no error you can find afterward?

I harden n8n workflows against exactly this kind of silent, transient-API skipped cycle.