Why an API returns 404 Not Found, and how to fix it

An API returns 404 when no route matches your path or method, or when the id doesn't exist for your credentials. How to tell them apart and fix each.

5 min readSume
All posts

An API returns 404 Not Found for one of two reasons: no route matches the request, because the path, version, or HTTP method is wrong, or the route exists but the resource you named doesn't, at least not for the credentials you sent. Read the response body before you change anything, because the fixes differ: a wrong address needs a new URL, and a missing resource needs a different id or key.

The HTTP definitions are quoted from RFC 9110, read 2026-09-28. The Sume API is the worked example: its 404 bodies are read from its current code, alongside its Errors and spend and Errors and rate limits docs.

What does 404 Not Found mean on an API?

RFC 9110 says a 404 means the server did not find a current representation for the target resource, or is not willing to disclose that one exists. It doesn't say whether the condition is temporary or permanent.

A wrong method has its own status in the spec: 405 Method Not Allowed, whose response must list the supported methods in an Allow header. Not every server sends it. In current code the Sume API doesn't: a request with the wrong method gets the same 404 as a path that doesn't exist.

How do I tell a wrong URL from a missing resource?

Read the body. On the Sume API, each case answers differently in current code:

From Sume's Errors and spend, Runs and results and Create a run docs and current API code, read 2026-09-28.
What went wrongWhat Sume returnsFix
A path outside /v1, such as a missing version prefix404 with {"message":"Route not found"}Add the /v1 prefix.
An unknown path under /v1, or the wrong method404 not_found, API route was not found.Check the path and method in the API reference.
A Format run read under the Format's own path404 format_run_wrong_path, with the right route in details.did_you_meanRead runs at GET /v1/format-runs/{run_id}.
An unknown job id, or one created in another workspace or with another member's key404 not_found, API job was not found.Check the id and the key that created it.
An unknown or archived Format, or a team handle you can't see404 format_not_foundCheck the address and the key.

Why does an API return 404 for an id I know exists?

Because the id isn't visible to the credentials you sent. RFC 9110 lets a server that wants to hide a forbidden resource answer 404 instead of 403.

On Sume, jobs are looked up inside the key's own workspace and owner in current code, and the docs define 404 not_found as a resource that does not exist in the current workspace. On the Formats API, a run belonging to another owner reads the same as one that does not exist. Scope problems aren't hidden this way: on the Formats API, a key missing a scope gets 403 insufficient_scope, never a 404. List and recover video jobs shows how to find the ids your key can see, and 401 vs 403 vs 404 covers the other two codes.

Why does my POST return 404 when the URL looks right?

Check the method and the exact path. In current code a path the API doesn't define gets API route was not found.: POST /v1/videos/generations answers 404, while the documented route is POST /v1/videos. A known path called with the wrong method gets the same answer.

The key is checked first. In current code the key check runs on every /v1 path before the not-found answer, so a bad key gets 401 even on a wrong path. API route was not found. therefore means the key passed and the address is what's wrong.

Should I retry a 404?

Not as is. A 404 carries no hint about whether or when it might clear, so fix the path, the method, the id, or the key first. In current code Sume marks a 404 retryable: false with next_action: fix_input. Retryable HTTP status codes lists the errors that do deserve another try.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume