sveltejs/kit · error
Invalid response from route ${event.url.pathname}: handler s
Error message
Invalid response from route ${event.url.pathname}: handler should return a Response object What it means
Runtime contract check in the endpoint renderer: after awaiting the route's handler, the returned value was not a Response instance. SvelteKit endpoint handlers must return a Response (e.g. via Response.json() or new Response(...)); returning plain objects, undefined, or other values fails this instanceof check. The message names the route path whose handler misbehaved.
Source
Thrown at packages/kit/src/runtime/server/endpoint.js:54
if (state.prerendering && !state.prerendering.inside_reroute && !prerender) {
if (state.depth > 0) {
// if request came from a prerendered page, bail
throw new Error(`${event.route.id} is not prerenderable`);
} else {
// if request came direct from the crawler, signal that
// this route cannot be prerendered, but don't bail
return new Response(undefined, { status: 204 });
}
}
try {
const response = await with_request_store({ event, state }, () =>
handler(/** @type {import('@sveltejs/kit').RequestEvent<Record<string, any>>} */ (event))
);
if (!(response instanceof Response)) {
throw new Error(
`Invalid response from route ${event.url.pathname}: handler should return a Response object`
);
}
if (state.prerendering && (!state.prerendering.inside_reroute || prerender)) {
// The returned Response might have immutable Headers
// so we should clone them before trying to mutate them.
// We also need to clone the response body since it may be read twice during prerendering
const cloned = new Response(response.clone().body, {
status: response.status,
statusText: response.statusText,
headers: new Headers(response.headers)
});
cloned.headers.set('x-sveltekit-prerender', String(prerender));
if (state.prerendering.inside_reroute && prerender) {
// Without this, the route wouldn't be recorded as prerendered,
// because there's nothing after reroute that would do that.View on GitHub (pinned to 03f1687fe6)
Solutions
- Return a Response from the handler, e.g. `return Response.json({ ok: true })`
- Wrap accidental plain-object returns with Response.json(...)
- Check all code paths including early returns so none fall through to undefined
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at packages/kit/src/runtime/server/endpoint.js:54 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02).
Data as JSON: /api/errors/e8cae982ca1a1736.
Report an issue: GitHub.