The id you referenced doesn’t exist, was deleted, or belongs to an organization or profile your key can’t see. This is also the response for scope mismatches: a profile-scoped key requesting a post on a different profile getsDocumentation Index
Fetch the complete documentation index at: https://docs.letmepost.dev/llms.txt
Use this file to discover all available pages before exploring further.
404, not 403. We do that on purpose — 403 would leak the fact that the resource exists somewhere.
What triggers it
POST /v1/postswith anaccount.idthat doesn’t belong to your org.GET /v1/posts/:idwith an id that’s been deleted or belongs to another org.GET /v1/accounts/:idagainst a profile-scoped key with aprofileIdmismatch.- A typo in any UUID parameter.
Response shape
not_found.json
Why we 404 instead of 403
Imagine a profile-scoped key that probes account ids across the org until one of them returns403 instead of 404. That 403 would leak which ids exist. So every cross-profile, cross-org, or scope-mismatch path returns the same 404 response — no observable difference between “doesn’t exist” and “exists but you can’t see it.”
Related
- Authentication — profile-scoping rules.
unauthorized— when role-level permission is the issue, not scope.