I’m building an n8n workflow that:
-
fetches my starred GitHub repos
-
for each repo, calls the GitHub API to get the latest release
To build the “latest release” URL, I’m taking the repo URL from the previous node and appending a path:
{{ $json.url + "/releases/latest" }}
In the n8n preview this looks correct, e.g.:
https://api.github.com/repos/immich-app/immich/releases/latest
But the HTTP Request node returns:
404 - {"message":"Not Found"}
If I hardcode that exact URL (the one shown in preview) into the HTTP Request node, it works.
So the same URL string appears to work when hardcoded, but fails when generated via expression. What could cause this in n8n?
@jumping822 Even though your dynamic URL string looks right in the preview, it may not always send the same value at runtime in the HTTP Request node. Your actual call might be hitting a wrong or malformed URL and returning 404. Using n8n’s GitHub node is a better idea to get the latest release info than using an HTTP Request manually to append the paths.
Hi @jumping822 !
This is expected behavior. The URL preview does not guarantee the exact runtime value.
GitHub API fields often include templated URLs or hidden characters, so appending paths can silently break requests. That’s why the hardcoded URL works while the expression fails.
Use .trim(), construct the URL explicitly from owner/repo fields, or use the GitHub node to avoid this entirely.