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

> Ciclo de vida de los tokens de autenticación: generación automática, uso con X-Jelou-Token, gestión con CLI y ejemplos prácticos.

## ¿Qué son los runtime tokens?

Los runtime tokens (prefijo `jfn_rt_`) son credenciales que autentican las peticiones a tus funciones en producción. Cada función tiene al menos un token activo.

## Generación automática

El primer deploy de una función genera un token automáticamente:

```bash theme={null}
jelou functions deploy
# ✓ Deployed
# ▸ URL: https://mi-funcion.fn.jelou.ai
# ⚠ A default runtime token was created for this function.
#   Save it now — it will not be shown again.
# ▸ Token    jfn_rt_abc123...
```

<Warning>
  El token se muestra **una sola vez**. Los deploys subsiguientes no lo muestran. Si lo pierdes, crea uno nuevo con `jelou tokens create`.
</Warning>

## Cómo usarlos

Envía el token 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` (no `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 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

```bash theme={null}
jelou tokens create mi-funcion --name ci-deploy
# ✓ Created token "ci-deploy"
# ▸ Token    jfn_rt_def456...
# ⚠ Save this token now — it will not be shown again.
```

<Warning>
  Crear un token genera un **redeploy automático** de tu función. El código no cambia, pero la plataforma necesita actualizar los tokens disponibles en el entorno de ejecución.
</Warning>

### Revocar token

```bash theme={null}
jelou 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

Puedes tener varios tokens activos por función — uno por entorno, servicio o equipo:

* `default` — generado en el primer deploy
* `ci-staging` — para el pipeline de staging
* `brain-studio` — para Brain Studio
* `partner-api` — para un integrador externo

Revocar uno no afecta a los demás.

## ¿Perdiste el token?

1. Crea uno nuevo: `jelou tokens create mi-funcion --name nuevo`
2. El token anterior sigue activo (no se revoca automáticamente)
3. Si el token fue comprometido, revócalo: `jelou tokens revoke mi-funcion <id>`

## CI/CD

Crear tokens desde pipelines:

```bash theme={null}
# Crear token y extraer el valor con jq
TOKEN=$(jelou tokens create mi-funcion --name ci-staging --json | jq -r '.data.token')
echo "::add-mask::$TOKEN"
```

## Brain Studio

Configura tu función como servidor MCP externo:

| Campo        | Valor                                |
| ------------ | ------------------------------------ |
| URL          | `https://mi-funcion.fn.jelou.ai/mcp` |
| Header name  | `X-Jelou-Token`                      |
| Header value | `jfn_rt_abc123...`                   |
