> For the complete documentation index, see [llms.txt](https://developers.admintotal.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.admintotal.com/api/autenticacion.md).

# Autenticación

Todas las peticiones realizadas a la API de Admintotal deben incluir un método de autenticación válido.

Actualmente se encuentran disponibles los siguientes métodos:

* **API Key &#x20;**<mark style="color:blue;">**(Recomendado)**</mark>
* **JWT**

## Autenticación mediante API Key <mark style="color:blue;">(Recomendado)</mark>

{% hint style="info" %}
**IMPORTANTE**\
Al utilizar este método es necesario almacenar el `api_key` de manera segura y evitar exponerlo en código fuente, repositorios públicos o aplicaciones cliente.
{% endhint %}

La autenticación mediante **API Key** es el método recomendado para consumir la API de Admintotal.

Primero es necesario autenticar al usuario mediante su nombre de usuario y contraseña. Si las credenciales son correctas, el servicio retornará un `api_key`.

Este valor deberá enviarse posteriormente en el header `api-key` de todas las peticiones realizadas a la API.

### Obtener API Key

<mark style="color:green;">**POST**</mark>**&#x20;** `https://{clave}.admintotal.com/api/v2/usuarios/login_usuario/`&#x20;

Este endpoint permite autenticar a un usuario y obtener el `api_key` que será utilizado como token de acceso para consumir los diferentes endpoints de la API.

{% tabs %}
{% tab title="Request Body" %}

| Name         | Type   | Description            |
| ------------ | ------ | ---------------------- |
| `username`   | string | Nombre del usuario     |
| `password`   | string | Contraseña del usuario |
| {% endtab %} |        |                        |

{% tab title="Ejemplo solicitud" %}

```json
{ 
    "username": "johndoe", 
    "password": "contraseña" 
}
```

{% endtab %}

{% tab title="200 OK" %}

```json
{
    "ok": true,
    "usuario": {
        "id": 104,
        "api_key": "...",
        "username": "johndoe",
        "nombre": "John Doe",
        ...
    }
}
```

{% endtab %}
{% endtabs %}

### Enviar el API Key

Una vez obtenido el `api_key`, deberá incluirse en el header de todas las peticiones:

{% tabs %}
{% tab title="Ejemplo" %}
`Api-key: {api_key}`&#x20;

```
GET https://{clave}.admintotal.com/api/v2/clientes/ 
Api-key: ...
```

{% endtab %}
{% endtabs %}

***

## Autenticación mediante JWT

{% hint style="info" %}
Al utilizar este método de autenticación, TODAS las peticiones realizadas a la API deberán incluir el header Authorization de la siguiente forma: `Authorization: Bearer {access_token}`
{% endhint %}

Admintotal también permite autenticarse utilizando **JSON Web Tokens (JWT)**.

Con este método se obtiene un `access token` y un `refresh token`. \
El `access token` deberá incluirse en el header `Authorization` de las peticiones.

### Obtener token JWT

<mark style="color:green;">**POST**</mark>**&#x20;** `https://{clave}.admintotal.com/api/v2/token/`&#x20;

Este endpoint permite autenticar al usuario y obtener los tokens necesarios para utilizar autenticación JWT.

{% tabs %}
{% tab title="Request Body" %}

| Name         | Type   | Description            |
| ------------ | ------ | ---------------------- |
| `username`   | string | Nombre del usuario     |
| `password`   | string | Contraseña del usuario |
| {% endtab %} |        |                        |

{% tab title="Ejemplo solicitud" %}

```json
{ 
    "username": "johndoe", 
    "password": "contraseña" 
}
```

{% endtab %}

{% tab title="200 OK" %}

```json
{ 
    "refresh": "eyJ0XAiO...", 
    "access": "eyJ0eXAiO..." 
}
```

{% endtab %}
{% endtabs %}

### Refrescar token JWT

El `access token` tiene un tiempo de vigencia limitado. Cuando expire, puede obtenerse uno nuevo utilizando el `refresh token`.

<mark style="color:green;">**POST**</mark>**&#x20;** `https://{clave}.admintotal.com/api/v2/refresh/`&#x20;

{% tabs %}
{% tab title="Request Body" %}

<table><thead><tr><th width="164.12109375">Name</th><th width="119.59765625">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>refresh</code></td><td>string</td><td>Refresh token obtenido durante la autenticación</td></tr></tbody></table>
{% endtab %}

{% tab title="Ejemplo solicitud" %}

```json
{ 
    "refresh": "eyJ0XAiO..." 
}
```

{% endtab %}

{% tab title="200 OK" %}

```json
{
    "access": "eyJ0eXAiO..." 
}
```

{% endtab %}
{% endtabs %}

## ¿Que método utilizar?

Utilizar **API Key** ofrece una implementación sencilla y permite autenticar las peticiones mediante un único valor.

Utilizar **JWT** puede ser una mejor opción cuando se requiere un mayor control sobre la duración de las credenciales de acceso.
