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

# Obtener token

Genera un token de acceso temporal para autenticar las solicitudes en los endpoints de la API de Trazo. Este token es requerido para interactuar con los recursos protegidos y su validez está determinada por el parámetro `expires_in`.

## Endpoint

<mark style="color:blue;">`GET`</mark> `{{base_url}}/token`

## Headers

| Nombre                                           | Tipo   | Descripción           |
| ------------------------------------------------ | ------ | --------------------- |
| Authorization <mark style="color:red;">\*</mark> | String | `Bearer {{auth_key}}` |

{% hint style="info" %}
Asegúrate de incluir la palabra clave **Bearer** seguida de un espacio antes de tu llave de autenticación `auth_key`.
{% endhint %}

## Response

{% tabs %}
{% tab title="200 OK " icon="octagon-check" %}
{% code overflow="wrap" %}

```json
{
    "access_token": "das87...82fdh",
    "expires_in": 3600
}
```

{% endcode %}
{% endtab %}

{% tab title="401 Unauthorized" icon="octagon-xmark" %}
{% code overflow="wrap" %}

```json
{
    "status": "unauthorized",
    "code": "Q001",
    "error": "La autorización no se encuentra en el formato correcto o no está habilitada en el sistema de Trazo"
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### **Atributos de la respuesta**

* **`access_token`** *(string)*: Token de portador (Bearer token) que se utilizará para autenticar las siguientes solicitudes.
* **`expires_in`** *(integer)*: Tiempo de vigencia del token expresado en segundos (ej. 3600 segundos equivalente a 1 hora).

***

## Ejemplo

{% tabs %}
{% tab title="cURL" %}
{% code overflow="wrap" %}

```bash
curl --request GET '{{base_url}}/token' \
  --header 'Authorization: Bearer {{auth_key}}'
```

{% endcode %}
{% endtab %}

{% tab title="Node.js - Axios" %}
{% code overflow="wrap" %}

```javascript
const axios = require('axios');

const config = {
  method: 'get',
  url: '{{base_url}}/token',
  headers: { 
    'Authorization': 'Bearer {{auth_key}}'
  }
};

axios(config)
  .then((response) => {
    // Formatea el JSON para que se imprima ordenado en la consola
    console.log(JSON.stringify(response.data, null, 2));
  })
  .catch((error) => {
    console.error('Error en la autenticación:', error.response ? error.response.data : error.message);
  });
```

{% endcode %}
{% endtab %}

{% tab title="Python - Requests" %}
{% code overflow="wrap" %}

```python
import requests

url = "{{base_url}}/token"
headers = { 
    "Authorization": "Bearer {{auth_key}}"
}

try:
    # Usamos .get() directo en lugar de .request("GET")
    response = requests.get(url, headers=headers)
    response.raise_for_status()
    
    # Parseamos la respuesta directamente a un diccionario de Python
    token_data = response.json()
    print(token_data)

except requests.exceptions.RequestException as error:
    print(f"Error al obtener el token: {error}")
```

{% endcode %}
{% endtab %}
{% endtabs %}

### Autenticación en otros Endpoints

Una vez obtenido el `access_token`, este debe ser enviado en el encabezado `x-auth-token` para consumir cualquier otro servicio protegido de Trazo.

#### **Ejemplo de uso posterior (cURL)**

{% code overflow="wrap" %}

```bash
curl --request POST '{{base_url}}/transaction' \
  --header 'x-auth-token: {{access_token}}' \
  --header 'Content-Type: application/json'
```

{% endcode %}

Puedes revisar una implementación completa en la sección [Generar Cobro](/documentation/cobros/generar-cobro.md).
