Supabase 'requested path is invalid': causa y solución
Si al confirmar un correo, iniciar sesión con Google o abrir un enlace de tu app ves una página en blanco con {"error":"requested path is invalid"}, significa que el navegador terminó en la dirección de la API de Supabase (https://tu-proyecto.supabase.co/...) en una ruta que no existe, en lugar de llegar a tu sitio. La causa casi siempre es la Site URL o las Redirect URLs mal configuradas en Supabase, o un redirectTo incorrecto en tu código.
Por qué pasa
Tu proyecto de Supabase tiene una dirección propia (https://abcdefgh.supabase.co) que es la API: tu app le habla por rutas como /auth/v1/... o /rest/v1/.... No es una página web. Si alguien abre esa dirección (o una ruta inventada dentro de ella) en el navegador, el servidor de Supabase responde con un error como este.
En el flujo de login o confirmación pasa así:
- El usuario da clic en el enlace del correo.
- Supabase verifica el token.
- Supabase lo redirige a la URL de tu app (la Site URL o el
redirectTo). - Si esa URL está vacía, mal escrita o apunta a la propia API de Supabase, el usuario termina en una ruta inválida.
Solución paso a paso
1. Revisa la Site URL
- Panel de Supabase → Authentication → URL Configuration.
- En Site URL pon la dirección pública de tu app, por ejemplo:
https://tunegocio.mx
No pongas la URL de Supabase (...supabase.co) ni dejes http://localhost:3000 si tu app ya está publicada. Según la guía de Redirect URLs de Supabase, la Site URL es a donde se manda al usuario cuando no se especifica otra redirección.
2. Agrega tus Redirect URLs
En la misma pantalla, en Redirect URLs, agrega todas las direcciones donde vive tu app:
https://tunegocio.mx/**
https://www.tunegocio.mx/**
https://tu-proyecto.vercel.app/**
http://localhost:5173/**
** acepta cualquier ruta. Supabase recomienda usar ** para desarrollo y vistas previas, y la ruta exacta para producción cuando sea posible. Si tu código manda a una URL que no está en la lista, Supabase la ignora y usa la Site URL.
3. Revisa el redirectTo en tu código
Busca en tu proyecto dónde se llama al login o al registro:
await supabase.auth.signUp({
email,
password,
options: {
emailRedirectTo: `${window.location.origin}/bienvenida`,
},
});
await supabase.auth.signInWithOAuth({
provider: "google",
options: { redirectTo: `${window.location.origin}/panel` },
});
Usar window.location.origin hace que la redirección vaya al dominio donde está el usuario. Si en tu código aparece la URL de Supabase como redirectTo, ahí está el problema.
4. Revisa la plantilla del correo
En Authentication → Email Templates, el enlace debe ser {{ .ConfirmationURL }}. Si alguien lo reemplazó por un enlace armado a mano hacia supabase.co, el usuario terminará en una ruta inválida.
5. Revisa tu variable de entorno de Supabase
La URL que usa tu app debe ser la base del proyecto, sin rutas extra:
# Correcto
VITE_SUPABASE_URL=https://abcdefgh.supabase.co
# Incorrecto
VITE_SUPABASE_URL=https://abcdefgh.supabase.co/rest/v1
Ver variables de entorno en Vite y React.
6. Prueba de nuevo con un enlace nuevo
Los enlaces de confirmación ya usados o vencidos no sirven. Pide un correo nuevo después de cambiar la configuración.
Cómo confirmar que es este problema
Antes de cambiar nada, verifica a dónde te está mandando Supabase:
- Abre el correo de confirmación y, en lugar de dar clic, copia el enlace (clic derecho → Copiar dirección del enlace).
- Pégalo en un bloc de notas. Busca el parámetro
redirect_to=. - Lo que viene después de
redirect_to=es a donde llegará el usuario. Si está vacío, apunta asupabase.coo alocalhost, ya encontraste la causa.
Si redirect_to sí apunta a tu dominio y aun así ves el error, revisa que ese dominio esté en la lista de Redirect URLs: si no coincide, Supabase usa la Site URL en su lugar.
Recuperar contraseña e invitaciones
El mismo error aparece en el flujo de “olvidé mi contraseña” y en las invitaciones de usuarios, porque usan el mismo mecanismo de redirección. En recuperación de contraseña, el redirectTo debe apuntar a una página de tu app que muestre el formulario para escribir la nueva contraseña:
await supabase.auth.resetPasswordForEmail(email, {
redirectTo: `${window.location.origin}/nueva-contrasena`,
});
Si esa página no existe en tu app, el usuario llegará bien pero no podrá cambiar nada. Muchas apps hechas con IA generan el botón de “olvidé mi contraseña” pero no la página de destino.
Apps móviles
Si tu app es móvil (Flutter, React Native, Expo), la redirección suele ser un enlace profundo como miapp://login-callback. Ese esquema también debe estar en Redirect URLs, y la app debe estar configurada para abrirse con él. Si falta en cualquiera de los dos lados, el usuario se queda en el navegador.
Casos frecuentes
Pasa solo en mi dominio, no en la vista previa de Lovable/Bolt. Agregaste el dominio pero no lo pusiste en Site URL ni en Redirect URLs. Si tu app es de Lovable, ver Lovable error verifying email.
Pasa con el login de Google. Además de lo anterior, en Google Cloud Console la URI de redirección autorizada debe ser la de Supabase (https://abcdefgh.supabase.co/auth/v1/callback); la de tu app va en Supabase, no en Google.
Abrí la URL de Supabase en el navegador para “ver mi base de datos”. Es normal ver este error: la URL de la API no es un panel. Tu base de datos se ve en supabase.com/dashboard.
Tras confirmar, aparece 404 en mi app. La redirección ya funciona, pero tu hosting no conoce la ruta. Ver error 404 en Vercel.
Errores comunes
- Poner la Site URL con
wwwy usar el dominio sinwww(o al revés). - Agregar
https://tunegocio.mxsin/**y redirigir a/bienvenida: no coincide. - Cambiar de dominio y olvidar actualizar Supabase.
- Probar con un enlace viejo después de corregir la configuración.
Si el correo ni siquiera llega, el problema es el envío: supabase error sending confirmation email. Y si tus usuarios no pueden entrar y no encuentras la causa, en Black Engine revisamos tu configuración de Supabase y tu código contigo por WhatsApp.
Preguntas frecuentes
¿Qué significa requested path is invalid en Supabase?
Que se pidió una ruta que no existe en la API de tu proyecto de Supabase. Casi siempre ocurre porque un enlace (de confirmación, de login o de tu app) apunta a la dirección de Supabase en lugar de a tu sitio.
¿Por qué me pasa al dar clic en el correo de confirmación?
Porque la Site URL o la URL de redirección no apuntan a tu app. Supabase verifica al usuario y luego lo manda a esa URL; si apunta a la API, aparece este error.
¿Dónde cambio la Site URL en Supabase?
En el panel de Supabase, en Authentication → URL Configuration. Ahí están la Site URL y la lista de Redirect URLs permitidas.
¿El usuario quedó confirmado aunque vio el error?
Muchas veces sí: la verificación ocurre antes de la redirección. Revisa en Authentication → Users si el usuario ya aparece como confirmado.