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

# Autenticación

> Cómo la plataforma protege tus funciones con runtime tokens, cómo usar X-Jelou-Token, y cómo hacer funciones públicas.

Toda función desplegada está protegida por defecto con un **runtime token**. Las peticiones sin token válido reciben `401 Unauthorized`.

## Inicio rápido

<Steps>
  <Step title="Despliega tu función">
    ```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...
    ```

    El primer deploy genera un runtime token automáticamente.

    <Warning>
      **Guarda el token inmediatamente.** No se mostrará de nuevo. Si lo pierdes, crea uno nuevo con `jelou tokens create`.
    </Warning>
  </Step>

  <Step title="Llama con el token">
    ```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 '{"query": "test"}'
    ```

    Respuesta exitosa:

    ```json theme={null}
    { "results": [] }
    ```

    Sin token o con token inválido:

    ```json theme={null}
    { "error": "Unauthorized", "message": "Missing or invalid X-Jelou-Token header" }
    ```
  </Step>
</Steps>

## ¿Cómo funciona?

1. Al hacer el primer deploy, la plataforma genera un runtime token (prefijo `jfn_rt_`)
2. Cada petición debe incluir ese token en el header `X-Jelou-Token`
3. Si el token es válido, la petición llega a tu handler. Si no, retorna `401`

## Rutas sin autenticación

Las rutas `/__health` y `/openapi.json` nunca requieren token. Los triggers cron tampoco — la plataforma los autentica automáticamente.

## Ejemplos de uso

<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" }),
    });
    const data = await res.json();
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests
    import 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"},
    )
    data = res.json()
    ```
  </Tab>

  <Tab title="Brain Studio (MCP)">
    Para conectar tu función como servidor MCP externo en Brain Studio:

    1. URL: `https://mi-funcion.fn.jelou.ai/mcp`
    2. Header: `X-Jelou-Token` → `jfn_rt_abc123...`

    <Tip>
      Consulta la [guía de Brain Studio](/guides/functions/brain) para instrucciones paso a paso.
    </Tip>
  </Tab>
</Tabs>

<Warning>
  La plataforma no valida nada — tu código es responsable.
</Warning>
