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

# Autenticación con JWT en la A3ERP API: guía completa

> Obtén un token JWT mediante POST /api/login y úsalo como Bearer token en la cabecera Authorization de cada petición a la A3ERP API.

La A3ERP API usa **JSON Web Tokens (JWT)** para autenticar todas las peticiones. El flujo es sencillo: primero obtienes un token enviando tus credenciales al endpoint de login, y luego incluyes ese token en la cabecera `Authorization` de cada llamada posterior.

<Warning>
  **Sin un token JWT válido, todos los endpoints devuelven un error 401 Authorization Required.** Debes autenticarte antes de poder usar cualquier funcionalidad de la API.
</Warning>

***

## Cómo funciona la autenticación

<Steps>
  <Step title="Codifica tus credenciales en Base64">
    Las credenciales de acceso deben enviarse en la cabecera `Authorization` usando el esquema **HTTP Basic**, lo que significa que debes codificar el par `usuario:contraseña` en Base64.

    Por ejemplo, si tu usuario es `admin` y tu contraseña es `mipassword`, el valor a codificar es:

    ```
    admin:mipassword
    ```

    Puedes codificarlo en Base64 desde la terminal:

    ```bash theme={null}
    echo -n "admin:mipassword" | base64
    # Resultado: YWRtaW46bWlwYXNzd29yZA==
    ```

    O desde cualquier herramienta online o lenguaje de programación.
  </Step>

  <Step title="Llama a POST /api/login">
    Envía una petición `POST` al endpoint de login incluyendo las credenciales codificadas en la cabecera `Authorization`:

    ```bash theme={null}
    curl -X POST https://<domain>:<port>/api/login \
      -H "Authorization: Basic YWRtaW46bWlwYXNzd29yZA==" \
      -H "Accept: application/json"
    ```

    En formato HTTP:

    ```http theme={null}
    POST /api/login HTTP/1.1
    Host: <domain>:<port>
    Authorization: Basic YWRtaW46bWlwYXNzd29yZA==
    Accept: application/json
    ```
  </Step>

  <Step title="Extrae el token de la respuesta">
    Si las credenciales son correctas, la API responde con código **200** y un JSON que contiene el token JWT en el campo `token`:

    ```json theme={null}
    {
      "Codigo": "string",
      "Alarma": "string",
      "Tipo": "string",
      "token": "{JWT Token}"
    }
    ```

    | Campo    | Descripción                                                           |
    | -------- | --------------------------------------------------------------------- |
    | `Codigo` | Código de respuesta interno de A3ERP.                                 |
    | `Alarma` | Mensaje de aviso asociado al login, si lo hay.                        |
    | `Tipo`   | Tipo de respuesta.                                                    |
    | `token`  | El **token JWT** que deberás usar en todas las peticiones siguientes. |

    Guarda el valor del campo `token` — lo necesitarás en cada llamada a la API.
  </Step>

  <Step title="Incluye el token en cada petición">
    Para llamar a cualquier endpoint autenticado, añade el token JWT en la cabecera `Authorization` usando el esquema **Bearer**:

    ```bash theme={null}
    curl -X GET https://<domain>:<port>/api/clientes \
      -H "Authorization: Bearer {JWT Token}" \
      -H "Accept: application/json"
    ```

    En formato HTTP:

    ```http theme={null}
    GET /api/clientes HTTP/1.1
    Host: <domain>:<port>
    Authorization: Bearer {JWT Token}
    Accept: application/json
    ```

    Sustituye `{JWT Token}` por el valor exacto que recibiste en el campo `token` de la respuesta de login.
  </Step>
</Steps>

***

## Caducidad del token

Los tokens JWT tienen una **fecha de expiración**. Cuando un token caduca, la API vuelve a devolver un **401 Authorization Required** en tus peticiones, aunque el token tuviera formato válido.

Si recibes un 401 en una petición que antes funcionaba, vuelve a autenticarte llamando a `POST /api/login` para obtener un token nuevo.

```bash theme={null}
# Vuelve a hacer login para obtener un token fresco
curl -X POST https://<domain>:<port>/api/login \
  -H "Authorization: Basic {base64(usuario:contraseña)}"
```

***

## Ejemplo completo

El siguiente ejemplo muestra el flujo completo: obtener el token y usarlo en una consulta de clientes.

**Paso 1 — Obtener el token:**

```bash theme={null}
curl -X POST https://miservidor.miempresa.com:5555/api/login \
  -H "Authorization: Basic YWRtaW46bWlwYXNzd29yZA==" \
  -H "Accept: application/json"
```

**Respuesta:**

```json theme={null}
{
  "Codigo": "OK",
  "Alarma": "",
  "Tipo": "LOGIN",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
```

**Paso 2 — Usar el token:**

```bash theme={null}
curl -X GET https://miservidor.miempresa.com:5555/api/clientes \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Accept: application/json"
```

***

## Siguientes pasos

Con la autenticación configurada, ya puedes explorar todos los endpoints disponibles. Consulta cómo paginar y filtrar los resultados de tus consultas:

<Card title="Paginación y Filtros" icon="filter" href="/conceptos/paginacion-y-filtrado">
  Aprende a paginar resultados, aplicar filtros SQL y ordenar los datos devueltos por la API.
</Card>
