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

> Dónde va tu Lovable API Key, por qué su sitio son los Secrets y una función de backend, y cómo conectar GPT, Claude o DeepSeek sin exponer la clave.

- Canonical HTML: https://omniakey.com/es/blog/lovable-api-key
- Markdown: https://omniakey.com/es/blog/lovable-api-key.md
- Published: 2026-11-02 (updated 2026-11-02)
- Author: Kiki, COO at OmniaKey
- Language: es
- Category: API setup
- Reading time: 10 min
- All posts: https://omniakey.com/blog/llms.txt

---

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.

|Quieres|Clave|De dónde sale|
|-|-|-|
|Llamar a GPT, Resend u otro servicio de pago|Tu clave de ese servicio|Secrets, o el formulario de un conector|
|Usar la IA integrada de Lovable|`LOVABLE_API_KEY`|Lovable la genera por proyecto|
|Gestionar proyectos con la API de Lovable|Una 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 URL|Ninguna clave de API|OAuth 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](https://docs.lovable.dev/features/api-keys), revisada el 2 de noviembre de 2026). Sirve para gestionar y desplegar proyectos; no llama a modelos de IA ni crea aplicaciones ([Lovable API](https://docs.lovable.dev/integrations/lovable-api)), y no es la `LOVABLE_API_KEY` del proyecto ([documentación de IA](https://docs.lovable.dev/features/ai)).

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](https://docs.lovable.dev/integrations/any-api), 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](https://docs.lovable.dev/features/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](https://docs.lovable.dev/changelog)).

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](https://supabase.com/docs/guides/functions/secrets), 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](https://docs.lovable.dev/integrations/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](https://docs.lovable.dev/integrations/stripe), [Resend](https://docs.lovable.dev/integrations/resend), [API personalizadas](https://docs.lovable.dev/integrations/any-api), revisados el 2 de noviembre de 2026).

|Servicio|Dónde va la clave|Conviene saber|
|-|-|-|
|Stripe|El formulario Connect Stripe del chat del proyecto|Nunca pegues la clave como mensaje|
|Resend|El formulario de conexión|Las claves empiezan por `re_`|
|Google Maps|Dos claves en el formulario de conexión|La clave de servidor es privada; la del navegador es pública por diseño|
|Cualquier otro servicio|Un conector personalizado, o la clave en Secrets|El 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](https://docs.lovable.dev/integrations/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](https://docs.lovable.dev/integrations/security)).

## 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](https://omniakey.com/es/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](https://docs.lovable.dev/features/ai), [AI chat](https://docs.lovable.dev/features/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](https://docs.lovable.dev/features/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](https://docs.omniakey.com/es/api/openai-compatible) de OmniaKey, porque una sola clave llega a [GPT-6.1 Terra](https://omniakey.com/es/gpt-6-1-terra), [Claude Sonnet 5.5](https://omniakey.com/es/claude-sonnet-5-5) y [DeepSeek](https://omniakey.com/es/deepseek-flash).

1. Crea una clave en tu proveedor. En OmniaKey: regístrate en omniakey.com y abre Dashboard → tokens ([inicio rápido](https://docs.omniakey.com/es/quick-start)).

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](https://docs.lovable.dev/tips-tricks/security-best-practices)).

Desde el navegador, la llamada queda así ([supabase-js](https://supabase.com/docs/reference/javascript/functions-invoke)):

```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](https://omniakey.com/es/blog/cline-custom-api-key) y para [modelos personalizados en Factory Droid](https://omniakey.com/es/blog/factory-droid-custom-models).

## 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.

|Prueba|Estado|Qué devolvió|
|-|-|-|
|Petición previa (`OPTIONS`)|200|`*` y la lista de cabeceras permitidas|
|`gpt-6.1-terra`|200 en 3.28 s|Una respuesta, 53 tokens en total|
|`claude-sonnet-5-5`|200 en 2.85 s|Una respuesta, 134 tokens en total|
|`deepseek-flash`|200 en 1.75 s|Una respuesta, 92 tokens en total|
|Modelo fuera de la lista|400|`model must be one of: gpt-6.1-terra, claude-sonnet-5-5, deepseek-flash`|
|Sin secreto|500|`OMNIAKEY_API_KEY is not set`|
|Clave incorrecta|401|`Invalid 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](https://docs.lovable.dev/tips-tricks/security-best-practices), 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](https://docs.lovable.dev/features/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](https://docs.lovable.dev/features/security)).

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](https://developer.chrome.com/docs/devtools/search)). 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](https://docs.omniakey.com/es/api/authentication)).

## 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](https://docs.lovable.dev/features/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](https://supabase.com/docs/guides/functions/secrets)). 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](https://docs.lovable.dev/features/api-keys)).

## 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](https://docs.lovable.dev/features/ai), [Cloud](https://docs.lovable.dev/features/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](https://lovable.dev/pricing)); la tabla de planes de Lovable lista 100 credits a $25 al mes en Pro ([planes de suscripción](https://docs.lovable.dev/introduction/subscription-plans), revisados el 2 de noviembre de 2026).

Para OmniaKey, consulta las tarifas actuales en las páginas de [GPT-6.1 Terra](https://omniakey.com/es/gpt-6-1-terra), [Claude Sonnet 5.5](https://omniakey.com/es/claude-sonnet-5-5) y [DeepSeek](https://omniakey.com/es/deepseek-flash).

## 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](https://docs.omniakey.com/es/api/errors)).

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 de Secrets de Lovable](https://docs.lovable.dev/features/secrets), revisada el 2 de noviembre de 2026
- [Claves de API de Lovable](https://docs.lovable.dev/features/api-keys), revisada el 2 de noviembre de 2026
- [Lovable API](https://docs.lovable.dev/integrations/lovable-api), revisada el 2 de noviembre de 2026
- [Servidor MCP de Lovable](https://docs.lovable.dev/integrations/lovable-mcp-server), revisada el 2 de noviembre de 2026
- [Build with URL](https://docs.lovable.dev/integrations/build-with-url), revisada el 2 de noviembre de 2026
- [Funciones de IA de Lovable](https://docs.lovable.dev/features/ai), revisada el 2 de noviembre de 2026
- [Lovable AI chat](https://docs.lovable.dev/features/ai-chat), revisada el 2 de noviembre de 2026
- [Lovable Edge functions](https://docs.lovable.dev/features/edge-functions), revisada el 2 de noviembre de 2026
- [Lovable Cloud](https://docs.lovable.dev/features/cloud), revisada el 2 de noviembre de 2026
- [API personalizadas y conectores](https://docs.lovable.dev/integrations/any-api), revisada el 2 de noviembre de 2026
- [Integración con Stripe](https://docs.lovable.dev/integrations/stripe), revisada el 2 de noviembre de 2026
- [Integración con Resend](https://docs.lovable.dev/integrations/resend), revisada el 2 de noviembre de 2026
- [Integración con Google Maps](https://docs.lovable.dev/integrations/google-maps), revisada el 2 de noviembre de 2026
- [Seguridad de integraciones](https://docs.lovable.dev/integrations/security), revisada el 2 de noviembre de 2026
- [Integración con Supabase](https://docs.lovable.dev/integrations/supabase), revisada el 2 de noviembre de 2026
- [Seguridad de Lovable](https://docs.lovable.dev/features/security), revisada el 2 de noviembre de 2026
- [Security view de Lovable](https://docs.lovable.dev/features/security-view), revisada el 2 de noviembre de 2026
- [Buenas prácticas de seguridad de Lovable](https://docs.lovable.dev/tips-tricks/security-best-practices), revisadas el 2 de noviembre de 2026
- [Planes de suscripción de Lovable](https://docs.lovable.dev/introduction/subscription-plans), revisados el 2 de noviembre de 2026
- [Registro de cambios de Lovable](https://docs.lovable.dev/changelog), revisado el 2 de noviembre de 2026
- [Precios de Lovable](https://lovable.dev/pricing), revisados el 2 de noviembre de 2026
- [Secretos de Supabase Edge Function](https://supabase.com/docs/guides/functions/secrets), revisados el 2 de noviembre de 2026
- [Supabase functions.invoke](https://supabase.com/docs/reference/javascript/functions-invoke), revisado el 2 de noviembre de 2026
- [Búsqueda en Chrome DevTools](https://developer.chrome.com/docs/devtools/search), revisada el 2 de noviembre de 2026

Documentación propia de OmniaKey, revisada el 2 de noviembre de 2026: [inicio rápido](https://docs.omniakey.com/es/quick-start), [API compatible con OpenAI](https://docs.omniakey.com/es/api/openai-compatible), [autenticación](https://docs.omniakey.com/es/api/authentication) y [errores](https://docs.omniakey.com/es/api/errors).
