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

# Autenticación

> Cómo autenticar tus llamadas a la API de Shimli usando tu token de API.

Shimli usa **autenticación por token**. Cada cliente tiene un token de API único que identifica todas sus llamadas.

## Cómo obtener tu token

1. Inicia sesión en [shimli.app](https://shimli.app).
2. Ve a **Configuración → API**.
3. Tu token aparece ahí. Cópialo.

<Callout type="warning">
  Trata tu token como una contraseña. Nunca lo expongas en código del lado del cliente que sea público, ni lo subas a repositorios públicos de Git.
</Callout>

## Cómo enviar el token

Hay dos formas de enviar el token. Ambas son equivalentes.

### Opción 1: En el body del request (recomendada)

Incluye el campo `token` dentro del JSON del body:

```json theme={null}
{
  "token": "TOKEN_SHIMLI",
  "type": "text",
  "body": "Hola",
  "to": "50499999999",
  "instance": "ID_INSTANCE"
}
```

Esta es la forma **más usada** y funciona en todos los endpoints que reciben body.

### Opción 2: Como query parameter

Para endpoints GET (o cuando no puedes enviar body), usa el query param `token` o `api-token`:

```
GET https://api.shimli.app/v1/campaigns?token=TOKEN_SHIMLI&page=1&limit=10
```

```
GET https://api.shimli.app/v1/client?api-token=TOKEN_SHIMLI
```

## Formato del token

El token es una cadena alfanumérica de longitud variable. No tiene un prefijo fijo (como `Bearer` o `sk-`).

## Rotación de tokens

Si tu token se compromete:

1. Ve a **Configuración → API** en el dashboard.
2. Haz clic en **Rotar token**.
3. El token anterior deja de funcionar inmediatamente.
4. Actualiza todas tus integraciones con el nuevo token.

<Callout type="info">
  No hay límite en la cantidad de veces que puedes rotar tu token. Te recomendamos rotarlo periódicamente como buena práctica de seguridad.
</Callout>

## Errores de autenticación

Si el token es inválido o falta, recibirás un error:

```json theme={null}
{
  "statusCode": 401,
  "body": {
    "err": true,
    "message": "Unauthorized"
  }
}
```

Verifica que estás enviando el token correcto y que no tenga espacios en blanco al copiarlo.
