> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Tokens de Autenticación

> Runtime tokens legacy: uso con X-Jelou-Token, gestión con CLI, y migración a API keys de plataforma.

## ¿Qué son los runtime tokens?

Los runtime tokens (prefijo `jfn_rt_`) son credenciales **legacy** que autentican peticiones a funciones desplegadas antes de la migración a API keys de plataforma. Las funciones desplegadas hoy no reciben ningún runtime token — usan una [API key de plataforma](#alternativa-recomendada-api-keys) desde el primer deploy.

<Warning>
  La creación de nuevos runtime tokens (`jelou functions tokens create`) está **deprecada** y responde `410 Gone`. Los deploys tampoco generan uno automáticamente. Si tu función es nueva o perdiste tu runtime token, usa una [API key de plataforma](#alternativa-recomendada-api-keys).
</Warning>

## Cómo usarlos

Si tu función ya tenía un runtime token activo antes de la migración, sigue funcionando: envíalo en el header `X-Jelou-Token`:

<Tabs>
  <Tab title="curl">
    ```bash theme={null}
    curl -X POST https://mi-funcion.fn.jelou.ai \
      -H "Content-Type: application/json" \
      -H "X-Jelou-Token: jfn_rt_abc123..." \
      -d '{"telefono": "593987654321"}'
    ```
  </Tab>

  <Tab title="Node.js">
    ```javascript theme={null}
    const res = await fetch("https://mi-funcion.fn.jelou.ai", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "X-Jelou-Token": process.env.JELOU_FUNCTION_TOKEN,
      },
      body: JSON.stringify({ telefono: "593987654321" }),
    });
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests, os

    res = requests.post(
        "https://mi-funcion.fn.jelou.ai",
        headers={
            "Content-Type": "application/json",
            "X-Jelou-Token": os.environ["JELOU_FUNCTION_TOKEN"],
        },
        json={"telefono": "593987654321"},
    )
    ```
  </Tab>
</Tabs>

| Regla         | Detalle                                                                               |
| ------------- | ------------------------------------------------------------------------------------- |
| Header        | `X-Jelou-Token` (los runtime tokens legacy no se validan vía `Authorization: Bearer`) |
| Formato       | No query param, no body — solo header                                                 |
| Tamaño máximo | 4 KB                                                                                  |
| Sin token     | `401 { "error": "Unauthorized" }`                                                     |

## Gestión con CLI

### Listar tokens

```bash theme={null}
jelou functions tokens list mi-funcion
# ▸ Name          Prefix          Last Used              Created
# ▸ default       jfn_rt_abc1..   4/7/2026, 10:30:00 AM  4/1/2026, 2:00:00 PM
# ▸ ci-deploy     jfn_rt_def4..   never                  4/5/2026, 9:00:00 AM
```

### Crear token adicional (deprecado)

<Warning>
  `jelou functions tokens create` responde `410 Gone`: *"Runtime tokens are deprecated. Create an API key in the apps configuration section ([https://apps.jelou.ai](https://apps.jelou.ai)) and send it as `Authorization: Bearer <key>`..."*. Ya no es posible crear runtime tokens nuevos, ni siquiera adicionales para un token existente.
</Warning>

```bash theme={null}
jelou functions tokens create mi-funcion --name ci-deploy
# ✗ 410 Runtime tokens are deprecated. Create an API key in the apps
#   configuration section (https://apps.jelou.ai) and send it as
#   `Authorization: Bearer <key>` when invoking the function.
```

Para credenciales nuevas, usa una API key de plataforma — ver [alternativa recomendada](#alternativa-recomendada-api-keys) más abajo.

### Revocar token

Revocar tokens existentes (creados antes de la deprecación) sigue funcionando:

```bash theme={null}
jelou functions tokens revoke mi-funcion <token-id>
# ? Revoke token jfn_rt_def4... for mi-funcion? (y/N) y
# ✓ Token revoked
```

<Warning>
  Revocar un token también genera un **redeploy automático**. Los clientes que usen ese token empezarán a recibir `401` una vez que el redeploy termine.
</Warning>

## Múltiples tokens

Si tu función ya tiene varios tokens activos de antes de la deprecación (uno por entorno, servicio o equipo), puedes seguir listándolos y revocándolos individualmente. Revocar uno no afecta a los demás.

## ¿Perdiste el token?

Ya no puedes generar un reemplazo con el CLI. En su lugar:

1. Crea una API key en [apps.jelou.ai](https://apps.jelou.ai)
2. Envíala como `Authorization: Bearer <key>` — ver [alternativa recomendada](#alternativa-recomendada-api-keys)
3. Si el runtime token anterior fue comprometido, revócalo: `jelou functions tokens revoke mi-funcion <id>`

## Alternativa recomendada: API keys

El mecanismo soportado para autenticar funciones nuevas (todo deploy nuevo usa esto desde el inicio) o para reemplazar un runtime token perdido es una API key de plataforma, no un runtime token:

```bash theme={null}
curl -X POST https://mi-funcion.fn.jelou.ai \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_..." \
  -d '{"telefono": "593987654321"}'
```

Consulta la [guía de autenticación](/guides/functions/autenticacion#api-keys-recomendado) para el flujo completo.

## CI/CD

En pipelines, usa una API key de plataforma en vez de crear runtime tokens:

```bash theme={null}
# La API key se crea una sola vez en apps.jelou.ai y se guarda como secret de CI
curl -X POST https://mi-funcion.fn.jelou.ai \
  -H "Authorization: Bearer ${{ secrets.FUNCTION_API_KEY }}" \
  -H "Content-Type: application/json" \
  -d '{"telefono": "593987654321"}'
```

## Brain Studio

Configura tu función como servidor MCP externo usando tu API key:

| Campo        | Valor                                |
| ------------ | ------------------------------------ |
| URL          | `https://mi-funcion.fn.jelou.ai/mcp` |
| Header name  | `Authorization`                      |
| Header value | `Bearer sk_...`                      |

Si tu función es legacy y todavía usa un runtime token, usa `X-Jelou-Token` / `jfn_rt_abc123...` en su lugar. Consulta la [guía de Brain Studio](/guides/functions/brain) para el flujo completo.
