windmill-labs/windmill · error · Error
Resource not found at ${path} or not visible to you: ${e.bod
Error message
Resource not found at ${path} or not visible to you: ${e.body} What it means
In the Windmill TypeScript client (typescript-client/client.ts), getResource(path) fetches a Windmill resource by path and throws this Error when the request fails outside the tolerated case. undefinedIfEmpty lets callers treat 404 as 'no resource'; any other failure status (401/403/500) — or a 404 when undefinedIfEmpty is false — produces this error, with the response body appended to aid diagnosis.
Source
Thrown at typescript-client/client.ts:138
} else {
console.log(
`MockedAPI present, but resource not found at ${path}, falling back to real API`
);
}
}
const workspace = getWorkspace();
try {
return await ResourceService.getResourceValueInterpolated({
workspace,
path,
});
} catch (e: any) {
if (undefinedIfEmpty && e.status === 404) {
return undefined;
} else {
throw Error(
`Resource not found at ${path} or not visible to you: ${e.body}`
);
}
}
}
/**
* Get the true root job id
* @param jobId job id to get the root job id from (default to current job)
* @returns root job id
*/
export async function getRootJobId(jobId?: string): Promise<string> {
const workspace = getWorkspace();
jobId = jobId ?? getEnv("WM_JOB_ID");
if (jobId === undefined) {
throw Error("Job ID not set");
}
return await JobService.getRootJobId({ workspace, id: jobId });View on GitHub (pinned to e474e8803c)
Solutions
- Verify the resource path is correct and the resource exists in the target workspace (Resources page).
- Confirm the job/script runs in the same workspace as the resource, or prefix with the right workspace path.
- Check token/worker permissions — 403 means the caller cannot see the resource.
- If the resource may legitimately be absent, call getResource(path, undefinedIfEmpty=true) and handle undefined.
- Inspect e.body in the error message for the server's actual reason.
Example fix
// before
const db = await getResource('u/alice/postgres') // throws when missing
// after
const db = await getResource('u/alice/postgres', true)
if (!db) throw new Error('postgres resource not configured')
await useDb(db) Defensive patterns
Strategy: try-catch
Type guard
function isNotFound(e: unknown): e is { status: number; body: string } {
return typeof e === 'object' && e !== null && (e as any).status === 404
} Try / catch
try {
const res = await getResource(path, true)
} catch (e) {
if (e?.status === 404) {
console.warn(`Resource ${path} not found`) // only non-404 failures reach here when undefinedIfEmpty=true
} else if (e?.status === 403) {
throw new Error(`No permission to read resource ${path}`)
} else throw e
} Prevention
- Pass undefinedIfEmpty=true for resources that may legitimately be missing.
- Copy resource paths from the Resources page instead of typing them.
- Verify the job's workspace matches the resource's workspace.
- Check token/worker permissions for 403 failures.
When it happens
Trigger: getResource('u/user/foo') where the resource path doesn't exist (404 with undefinedIfEmpty falsy); the workspace's token lacks read permission on the resource (403); the worker/job runs in a different workspace than the resource; the HTTP call otherwise fails with a non-404 status.
Common situations: Typo'd or renamed resource path in a script; resource moved between folders/users so the relative path no longer resolves; running a job under a different workspace than where the resource lives; expired/insufficient token returning 403; passing undefinedIfEmpty=false to a lookup that legitimately may not exist.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Bundle not found
- Source map not found
- Job ID not set
- Invalid note at index ${index}: position must be an object w
- Invalid note at index ${index}: size must be an object with
AI-assisted analysis of windmill-labs/windmill@e474e8803c (2026-09-03).
Data as JSON: /api/errors/075f5924e2b1ad78.
Report an issue: GitHub.