GPT-6 Sol y Claude Opus 5.5 ya disponiblesGPT-6 Sol por la mitad del precio de 5.6 Sol

Lovable API Key: dónde añadirla y cómo protegerla

Dónde va la clave, las cuatro cosas que la gente llama Lovable API Key, una función que ejecutamos con GPT, Claude y DeepSeek, y qué hacer si una clave se filtra.

Kiki, OmniaKey COO10 min de lectura
En esta página

En Lovable, tu Lovable API Key va en Secrets: abre More → Settings → Secrets en la barra del proyecto o usa el formulario Add secret que aparece en el chat del proyecto. El código del backend la lee desde ahí, así que la clave nunca llega al navegador. Pegarla en un mensaje del chat o dejarla en el código del frontend la deja a la vista de cualquiera.

Respuesta rápida

  • Tu propia clave (GPT, Claude, Resend): Secrets, o el formulario que muestra el conector.
  • Las claves de Lovable: LOVABLE_API_KEY se genera sola; una clave de espacio de trabajo (lov_…) exige Business o Enterprise.
  • GPT, Claude o DeepSeek con tu clave: pide a Lovable una función de backend, porque el conector de IA integrado no puede usar tu clave.
  • Si se filtra: revócala primero en el proveedor y luego sustituye el secreto.

¿Qué Lovable API Key necesitas?

Lovable API Key puede referirse a cuatro cosas distintas.

QuieresClaveDe dónde sale
Llamar a GPT, Resend u otro servicio de pagoTu clave de ese servicioSecrets, o el formulario de un conector
Usar la IA integrada de LovableLOVABLE_API_KEYLovable la genera por proyecto
Gestionar proyectos con la API de LovableUna clave de espacio de trabajo (lov_…)Workspace settings → API keys & OAuth → Workspace access tokens → New API key, Business o Enterprise, owner o admin
Usar el servidor MCP o Build with URLNinguna clave de APIOAuth en MCP; nada en Build with URL

La clave de espacio de trabajo solo se envía a la API de Lovable, en la cabecera Lovable-API-Key, y su valor se muestra una vez (documentación de claves de API, revisada el 2 de noviembre de 2026). Sirve para gestionar y desplegar proyectos; no llama a modelos de IA ni crea aplicaciones (Lovable API), y no es la LOVABLE_API_KEY del proyecto (documentación de IA).

Todo lo que viene después trata de la primera fila: tu propia clave.

Dónde se añade una clave de API en Lovable

  1. Lovable te lo pide. Cuando una función necesita una clave, abre el formulario Add secret en el chat del proyecto. Escribe el valor ahí, no como mensaje: el formulario lo guarda directo en los secretos del proyecto y lo mantiene fuera del historial del chat (documentación de API personalizadas de Lovable, revisada el 2 de noviembre de 2026).
  2. La añades tú. Abre More → Settings → Secrets en la barra del proyecto, pulsa Add secret e introduce uno o varios pares de nombre y valor (documentación de Secrets).

El registro de cambios de Lovable del 26 de agosto de 2026 llama a esta entrada More → Cloud → Secrets, así que búscala ahí si tu menú es distinto (registro de cambios).

Reglas que sorprenden a mucha gente:

  • Solo escritura: puedes sustituir o borrar un valor, nunca volver a leerlo.
  • Los nombres VITE_ se rechazan; son valores de compilación que el navegador ve y van en .env.
  • Los nombres SUPABASE_ y LOVABLE_ están reservados y se rellenan solos.
  • Los secretos pertenecen a un proyecto. Después de un remix vuelves a introducir los tuyos, porque solo se recrean las claves que genera Lovable.

En tu propio proyecto de Supabase, la vista del backend tiene un botón Manage secrets que abre el panel de Supabase, donde el almacén es Edge Function Secrets (secretos de Supabase, revisada el 2 de noviembre de 2026). Dos proyectos de Lovable que comparten un proyecto de Supabase se sobrescriben los secretos, LOVABLE_API_KEY incluida (integración con Supabase).

¿Dónde van las claves de Resend, Stripe y Google Maps?

No todas las claves entran directas en Secrets: estos servicios tienen formularios de conector (Stripe, Resend, API personalizadas, revisados el 2 de noviembre de 2026).

ServicioDónde va la claveConviene saber
StripeEl formulario Connect Stripe del chat del proyectoNunca pegues la clave como mensaje
ResendEl formulario de conexiónLas claves empiezan por re_
Google MapsDos claves en el formulario de conexiónLa clave de servidor es privada; la del navegador es pública por diseño
Cualquier otro servicioUn conector personalizado, o la clave en SecretsEl código del servidor lee el secreto

Google Maps es la excepción. Su clave de navegador es pública por diseño y llega al frontend como VITE_LOVABLE_CONNECTOR_GOOGLE_MAPS_BROWSER_KEY; la restricción por sitio web impide que otros sitios la reutilicen (Google Maps, revisada el 2 de noviembre de 2026). La clave de servidor sigue siendo privada. Las credenciales de los conectores se guardan cifradas y nadie puede volver a leerlas, ni siquiera Lovable (seguridad de integraciones).

Cómo conectar GPT, Claude o DeepSeek con tu propia clave

Primero comprueba si necesitas una clave: el conector de IA integrado no usa ninguna. Lovable genera una LOVABLE_API_KEY por proyecto y ejecuta GPT-6 Astra por defecto; los modelos de chat Claude solo están en las apps TanStack Start nuevas creadas desde el 13 de mayo de 2026 (documentación de IA, AI chat, revisadas el 2 de noviembre de 2026).

Ese conector no puede usar tu clave: siempre pasa por Lovable y cobra créditos del espacio de trabajo. La documentación de Lovable, tal como la leímos el 2 de noviembre de 2026, no menciona DeepSeek. Para usar tu clave, pide a Lovable que llame al proveedor desde una función de backend con la clave en Secrets.

No hay un botón de crear función: describe la función en el chat del proyecto y Lovable la escribe y la despliega (Edge functions). Las apps TanStack Start nuevas (creadas desde el 13 de mayo de 2026, o el 22 de junio de 2026 en Enterprise) reciben una server function; las apps React + Vite anteriores reciben una Edge Function, que es código que se ejecuta en el servidor.

Nuestro código usa la API compatible con OpenAI de OmniaKey, porque una sola clave llega a GPT-6.1 Terra, Claude Sonnet 5.5 y DeepSeek.

  1. Crea una clave en tu proveedor. En OmniaKey: regístrate en omniakey.com y abre Dashboard → tokens (inicio rápido).

  2. Pega este prompt en el chat del proyecto:

    text
    Add an AI chat feature that uses my own API key, not the built-in AI connector.
    Create a backend function named "chat". It reads OMNIAKEY_API_KEY from Secrets and calls
    POST https://api.omniakey.com/v1/chat/completions with the model and messages the frontend sends.
    Only allow these models: gpt-6.1-terra, claude-sonnet-5-5, deepseek-flash.
    Require a signed-in user. Never put the key in frontend code.
    Ask me for the key with the Add secret form.
    
  3. Escribe la clave en el formulario Add secret con el nombre OMNIAKEY_API_KEY.

No hemos ejecutado ese prompt en Lovable, porque no tenemos cuenta de Lovable, y los pasos de Lovable vienen de su documentación. La función debería quedar así; esta es la copia que ejecutamos en nuestro propio equipo.

ts
// supabase/functions/chat/index.ts
// El navegador envía { model, messages }; esta función añade la clave de API en el servidor.
const corsHeaders = {
  "Access-Control-Allow-Origin": "*",
  "Access-Control-Allow-Headers": "authorization, x-client-info, apikey, content-type",
};

const ALLOWED_MODELS = ["gpt-6.1-terra", "claude-sonnet-5-5", "deepseek-flash"];

function json(body: unknown, status = 200) {
  return new Response(JSON.stringify(body), {
    status,
    headers: { ...corsHeaders, "Content-Type": "application/json" },
  });
}

Deno.serve(async (req) => {
  if (req.method === "OPTIONS") {
    return new Response("ok", { headers: corsHeaders });
  }

  const apiKey = Deno.env.get("OMNIAKEY_API_KEY");
  if (!apiKey) {
    return json({ error: "OMNIAKEY_API_KEY is not set" }, 500);
  }

  const { model, messages } = await req.json();
  if (!ALLOWED_MODELS.includes(model)) {
    return json({ error: `model must be one of: ${ALLOWED_MODELS.join(", ")}` }, 400);
  }

  const upstream = await fetch("https://api.omniakey.com/v1/chat/completions", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${apiKey}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ model, messages, max_tokens: 800 }),
  });

  const data = await upstream.json();
  if (!upstream.ok) {
    return json({ error: data.error?.message ?? "upstream error" }, upstream.status);
  }
  return json({ reply: data.choices[0].message.content, model: data.model, usage: data.usage });
});

Nuestra copia de prueba omite la comprobación de sesión para poder llamarla desde un script; el prompt de arriba pide a Lovable que la añada, porque las buenas prácticas de seguridad de Lovable dicen que las decisiones de autenticación se toman en el servidor (buenas prácticas).

Desde el navegador, la llamada queda así (supabase-js):

ts
const { data, error } = await supabase.functions.invoke("chat", {
  body: { model: "deepseek-flash", messages: [{ role: "user", content: "Say hello in five words." }] },
});

Con otro proveedor, cambia la URL y los ID de modelo por los de su documentación. Una clave de OmniaKey también sirve para una clave de API personalizada en Cline y para modelos personalizados en Factory Droid.

Qué pasó cuando la ejecutamos

Ejecutamos la función en nuestro propio equipo, no en Lovable, con Deno 2.9.8 el 2 de noviembre de 2026, y la llamamos como lo haría un navegador, con una cabecera Origin y una petición CORS previa.

PruebaEstadoQué devolvió
Petición previa (OPTIONS)200* y la lista de cabeceras permitidas
gpt-6.1-terra200 en 3.28 sUna respuesta, 53 tokens en total
claude-sonnet-5-5200 en 2.85 sUna respuesta, 134 tokens en total
deepseek-flash200 en 1.75 sUna respuesta, 92 tokens en total
Modelo fuera de la lista400model must be one of: gpt-6.1-terra, claude-sonnet-5-5, deepseek-flash
Sin secreto500OMNIAKEY_API_KEY is not set
Clave incorrecta401Invalid token (request id: …)

Una llamada por modelo, así que cada tiempo es una muestra; deepseek-flash respondió como deepseek-v4-1-flash-261017.

Por qué solo ves "non-2xx status code"

Cuando hay un error, supabase.functions.invoke solo te da Edge Function returned a non-2xx status code, y data es null. El mensaje real de la función está en await error.context.json():

ts
if (error) {
  const details = await error.context.json();
  console.error(details.error);
}
  • 401: la clave es incorrecta. La nuestra decía Invalid token (request id: …).
  • 500 con OMNIAKEY_API_KEY is not set: falta el secreto o tiene otro nombre.
  • 400: el modelo no está en tu lista.

Cómo comprobar si tu clave está expuesta

Una clave en el código del frontend la ven los usuarios y hay que tratarla como comprometida (buenas prácticas, revisadas el 2 de noviembre de 2026).

  • Quick security scan se ejecuta solo en cada publicación.
  • Deep security scan no: se inicia desde la Security view del proyecto (Security view).
  • Busca el grupo Leaked secrets & credentials.
  • Los dos análisis son gratuitos; solo las correcciones masivas consumen las 10 correcciones gratuitas y luego créditos (análisis de seguridad).

A mano: en Chrome, abre las herramientas de desarrollo de tu app publicada, pulsa Command+Option+F en Mac o Control+Shift+F en Windows y Linux, y busca en los archivos cargados los primeros caracteres de tu clave. Si ves un valor VITE_ con una clave privada, actúa, porque esos valores se compilan para el navegador (búsqueda en DevTools). Una búsqueda limpia solo cubre los archivos que cargó ese momento, así que ejecuta también el análisis.

Esconder la clave no impide que desconocidos llamen a tu función: cualquiera puede llamar a una función sin comprobación de sesión, y cada llamada gasta tu clave. La documentación de Lovable pide exigir la sesión en el servidor; nuestra lista de modelos permitidos y max_tokens: 800 limitan cada llamada; la documentación de OmniaKey recomienda una clave por entorno con un límite de gasto (documentación de API de OmniaKey).

Qué hacer si una clave quedó expuesta

  1. Revócala en el servicio que la emitió y crea otra allí; la documentación de Lovable solo ofrece Rotate para su propia clave (documentación de Secrets).
  2. Sustituye el valor en Secrets, en el formulario del conector o en Supabase. En Supabase la función lee el secreto nuevo al instante, sin volver a desplegar (secretos de Supabase). La documentación de Lovable no dice si su backend integrado, Cloud, hace lo mismo, así que llama a la función una vez para confirmarlo.
  3. Saca la clave del código del frontend o de .env y vuelve a ejecutar el Deep security scan.
  4. Revisa la página de uso de tu proveedor en busca de llamadas que no hiciste.

Las claves de Lovable funcionan de otra manera. LOVABLE_API_KEY tiene una acción Rotate, para editor y superiores, que emite una clave nueva y actualiza el entorno de la Edge Function. Una clave de espacio de trabajo (lov_…) que GitHub secret scanning reporta se revoca sola; en cualquier otro sitio, revócala tú (documentación de claves de API).

Cuánto cuesta

La factura de Lovable y la de tu proveedor van por separado: con tu propia clave, el proveedor cobra el uso del modelo y tu app solo usa Cloud para ejecutar la función (documentación de IA, Cloud, revisadas el 2 de noviembre de 2026).

El conector de IA integrado cobra créditos del espacio de trabajo: Free, Pro y Business tienen una asignación mensual de 4-credit para IA, quedarse sin ella devuelve 402 y pasarse del límite de velocidad devuelve 429. El plan Free también da 5 build credits al día, hasta 30 al mes, más 20 Cloud credits (precios); la tabla de planes de Lovable lista 100 credits a $25 al mes en Pro (planes de suscripción, revisados el 2 de noviembre de 2026).

Para OmniaKey, consulta las tarifas actuales en las páginas de GPT-6.1 Terra, Claude Sonnet 5.5 y DeepSeek.

Preguntas frecuentes

¿Dónde encuentro mi Lovable API key?

Depende de qué clave hablemos. LOVABLE_API_KEY se genera por proyecto y está en los Secrets de ese proyecto, donde puedes rotarla pero nunca leerla. Una clave de espacio de trabajo sale de Workspace settings → API keys & OAuth → Workspace access tokens y se muestra una vez.

¿Existe una Lovable API Key gratis?

Lo más parecido es LOVABLE_API_KEY: el conector de IA integrado la genera para cada proyecto, y los espacios de trabajo Free, Pro y Business tienen una asignación mensual de 4-credit para usarla. Una clave de espacio de trabajo necesita un plan Business o Enterprise.

¿Puedo usar mi propia clave de OpenAI con Lovable AI?

Con el conector de IA integrado no, porque siempre pasa por Lovable y cobra créditos del espacio de trabajo. Para tu propia clave, pide a Lovable una función de backend que llame al proveedor directamente, con la clave en Secrets.

¿La clave de API va en Secrets o en .env?

En Secrets, cuando la clave es privada y la lee el código del backend. .env es para los valores VITE_, que se compilan dentro de la app y se ven en el navegador.

¿Por qué Lovable no conecta con GPT, Claude o DeepSeek?

Lee primero el mensaje de la función, que nombra el problema:

  • 500 con OMNIAKEY_API_KEY is not set: falta el secreto o está guardado con otro nombre.
  • 401: la clave es incorrecta o está revocada.
  • 400: el ID del modelo no está en tu lista permitida.
  • 404: la URL base es incorrecta; la nuestra termina en /v1/chat/completions, y casi todos los errores de configuración vienen de un sufijo de protocolo equivocado (documentación de errores de OmniaKey).

En el navegador solo ves Edge Function returned a non-2xx status code, así que registra error.context como arriba para saber cuál es.

Fuentes consultadas

Documentación propia de OmniaKey, revisada el 2 de noviembre de 2026: inicio rápido, API compatible con OpenAI, autenticación y errores.

Modelos de este artículo

Lovableclave de APISecretsEdge FunctionsGPT-6.1 TerraClaude Sonnet 5.5DeepSeek

Artículos relacionados

Artículos recientes

Guías populares