vercel/next.js · error
Route ${workStore.route} used `headers()` inside a function
Error message
Route ${workStore.route} used `headers()` inside a function cached with `unstable_cache()`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use `headers()` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache What it means
Error "Route ${workStore.route} used `headers()` inside a function cached with `unstable_cache()`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use `headers()` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache" thrown in vercel/next.js.
Source
Thrown at packages/next/src/server/request/headers.ts:70
// When using forceStatic we override all other logic and always just return an empty
// headers object without tracking
const underlyingHeaders = HeadersAdapter.seal(new Headers({}))
return makeUntrackedHeaders(underlyingHeaders)
}
if (workUnitStore) {
switch (workUnitStore.type) {
case 'cache': {
const error = new Error(
`Route ${workStore.route} used \`headers()\` inside "use cache". Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`
)
Error.captureStackTrace(error, headers)
applyOwnerStack(error)
workStore.invalidDynamicUsageError ??= error
throw error
}
case 'unstable-cache':
throw new Error(
`Route ${workStore.route} used \`headers()\` inside a function cached with \`unstable_cache()\`. Accessing Dynamic data sources inside a cache scope is not supported. If you need this data inside a cached function use \`headers()\` outside of the cached function and pass the required dynamic data in as an argument. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`
)
case 'generate-static-params':
throw new Error(
`Route ${workStore.route} used \`headers()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`
)
case 'prerender':
case 'prerender-client':
case 'validation-client':
case 'private-cache':
case 'prerender-runtime':
case 'prerender-legacy':
case 'request':
break
default:
workUnitStore satisfies never
}
}View on GitHub (pinned to 0eb3775416)
Solutions
- Call headers() outside the unstable_cache function and pass the values in as arguments.
Defensive patterns
Strategy: validation
When it happens
Trigger: headers() is called inside an unstable_cache function.
Common situations: Accessing headers inside a cached function; read them outside and pass as arguments.
AI-assisted analysis of vercel/next.js@0eb3775416 (2026-08-19).
Data as JSON: /api/errors/2a1c1d7fd1b0259d.
Report an issue: GitHub.