> ## 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: obtén tu token JWT para la A3ERP API

> Llama a POST /api/login con tus credenciales en Base64 para obtener el token JWT necesario para autenticar todas las peticiones a la A3ERP API.

La A3ERP API protege todos sus recursos mediante **JSON Web Tokens (JWT)**. Para obtener tu token debes realizar una única llamada de autenticación al endpoint `POST /api/login`, enviando tus credenciales codificadas en Base64. Una vez obtenido, incluye el token en la cabecera `Authorization` de cada petición posterior. Sin él, la API rechazará cualquier llamada con un error `401`.

***

## POST /api/login

**URL:** `POST https://<domain>:<port>/api/login`

### Cabecera requerida

<ParamField header="Authorization" type="string" required>
  Credenciales del usuario codificadas en Base64 con el esquema **Basic**.

  Formato: `Basic <base64(usuario:contraseña)>`

  Ejemplo: `Basic dXN1YXJpbzpjb250cmFzZcOxYQ==`
</ParamField>

### Cómo codificar tus credenciales en Base64

<Steps>
  <Step title="Construye la cadena de credenciales">
    Une tu usuario y contraseña con dos puntos: `usuario:contraseña`
  </Step>

  <Step title="Codifica en Base64">
    **En JavaScript (navegador o Node.js):**

    ```bash theme={null}
    btoa('usuario:contraseña')
    // Resultado: "dXN1YXJpbzpjb250cmFzZcOxYQ=="
    ```

    **En Bash / terminal Linux o macOS:**

    ```bash theme={null}
    echo -n 'usuario:contraseña' | base64
    # Resultado: dXN1YXJpbzpjb250cmFzZcOxYQ==
    ```
  </Step>

  <Step title="Añade el prefijo Basic">
    Antepón la palabra `Basic` seguida de un espacio al valor codificado:

    `Basic dXN1YXJpbzpjb250cmFzZcOxYQ==`
  </Step>
</Steps>

### Ejemplo de petición HTTP

```http theme={null}
POST /api/login HTTP/1.1
Host: <domain>:<port>
Authorization: Basic dXN1YXJpbzpjb250cmFzZcOxYQ==
Accept: */*
```

***

## Respuesta 200 — Token JWT

Cuando las credenciales son correctas, la API devuelve un objeto JSON con el token y la información del usuario validado.

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

### Campos de la respuesta

<ResponseField name="Codigo" type="string">
  Código identificador del usuario o registro validado en el sistema A3ERP.
</ResponseField>

<ResponseField name="Alarma" type="string">
  Mensaje de alerta o aviso asociado al usuario en el momento del acceso. Normalmente vacío si no hay incidencias.
</ResponseField>

<ResponseField name="Tipo" type="string">
  Tipo de usuario autenticado (por ejemplo, cliente, proveedor, representante, persona o usuario de API).
</ResponseField>

<ResponseField name="token" type="string">
  **Token JWT** que debes incluir en todas las peticiones posteriores a la API. Este valor tiene un tiempo de expiración; cuando caduque, deberás solicitar un nuevo token repitiendo esta llamada.
</ResponseField>

***

## Uso del token en peticiones posteriores

Una vez obtenido el token, inclúyelo en la cabecera `Authorization` de cada llamada usando el esquema **Bearer**:

```http theme={null}
Authorization: Bearer {token}
```

### Ejemplo de petición autenticada

```http theme={null}
GET /api/clientes HTTP/1.1
Host: <domain>:<port>
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Accept: */*
```

<Warning>
  Sin un token JWT válido, **todos los endpoints** de la A3ERP API devuelven **401 Authorization Required**. Asegúrate de incluir siempre el token y de renovarlo antes de que expire para evitar interrupciones en tu integración.
</Warning>
