# Acceso al API

{% hint style="info" icon="eyes" %}
Para usar el API de B2Chat y acceder a todas sus funcionalidades, primero debes obtener un token de acceso, el cual es esencial para la autenticación y el uso de los servicios disponibles.
{% endhint %}

## Generación del token de acceso

Para generar el token de acceso a todos los servicios del API, necesitas una cuenta de B2Chat con permisos de administrador. Con esta cuenta, podrás obtener tu usuario y contraseña, los cuales te permitirán generar el token en el endpoint de autenticación.

Sigue estos pasos para obtener el token:

1. Inicia sesión en tu cuenta de B2Chat.
2. Dirígete al menú y selecciona "Ajustes generales".&#x20;
3. En el submenú, elige la opción "Integraciones".
4. Selecciona la opción "BotApi".&#x20;
5. Copia los datos de username (client\_id) y password (client\_secret).

<figure><img src="/files/C4L9NzsToSMo9hOaTv7N" alt=""><figcaption></figcaption></figure>

Una vez que hayas obtenido estos datos, envíalos al servicio de autenticación. Como respuesta, recibirás el token de acceso al API de B2Chat, el cual estará vinculado a la suscripción correspondiente al username y password ingresados.

El token generado tendrá una vigencia de 24 horas. Si antes de su vencimiento vuelves a solicitar la autenticación para la misma suscripción, el API devolverá el mismo token mientras siga siendo válido.

## Acceso al servicio de autenticación

## POST /oauth/token

>

```json
{"openapi":"3.0.3","info":{"title":"B2Chat Auth API","version":"1.1.0"},"servers":[{"url":"https://api.b2chat.io"}],"security":[{"basicAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"type":"http","scheme":"basic"}}},"paths":{"/oauth/token":{"post":{"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type"],"properties":{"grant_type":{"type":"string","enum":["client_credentials"]}}}}}},"responses":{"200":{"description":"Token de acceso generado correctamente","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string","description":"Token JWT generado"},"token_type":{"type":"string","description":"Tipo de token retornado (normalmente `bearer`)"},"expires_in":{"type":"integer","description":"Tiempo de expiración en segundos"},"scope":{"type":"string","description":"Ámbito autorizado para el token"}}}}}},"400":{"description":"Parámetro `grant_type` incorrecto o faltante","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Tipo de error"},"error_description":{"type":"string","description":"Descripción del error"}}}}}},"401":{"description":"Credenciales inválidas","content":{"application/json":{"schema":{"type":"object","properties":{"timestamp":{"type":"integer","description":"Marca de tiempo en milisegundos"},"status":{"type":"integer","description":"Código de estado HTTP"},"error":{"type":"string","description":"Tipo de error"},"message":{"type":"string","description":"Mensaje de error detallado"},"path":{"type":"string","description":"Ruta del endpoint al que se hizo la solicitud"}}}}}},"405":{"description":"El método HTTP no está permitido para este endpoint","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Tipo de error"},"error_description":{"type":"string","description":"Descripción del error"}}}}}},"500":{"description":"Error inesperado en el servidor","content":{"application/json":{"schema":{"type":"object","properties":{"timestamp":{"type":"integer","description":"Marca de tiempo en milisegundos"},"status":{"type":"integer","description":"Código de estado HTTP"},"error":{"type":"string","description":"Tipo de error"},"message":{"type":"string","description":"Mensaje general de error"},"path":{"type":"string","description":"Ruta del endpoint afectado"}}}}}}}}}}}
```

{% hint style="warning" %}
La respuesta de este endpoint proporciona un token de tipo `bearer`, y el campo `expires_in` indica el tiempo restante, en segundos, hasta su expiración.

Si no hay un token activo para la suscripción de B2Chat, se generará uno nuevo con una vigencia de 24 horas. Si ya existe un token válido, se reutilizará el mismo y `expires_in` mostrará el tiempo restante.
{% endhint %}

## Verificación de estado del servicio

Puedes verificar el estado de disponibilidad del servicio realizando una solicitud al siguiente endpoint

## GET /health

>

```json
{"openapi":"3.0.3","info":{"title":"B2Chat Auth API","version":"1.1.0"},"servers":[{"url":"https://api.b2chat.io"}],"paths":{"/health":{"get":{"responses":{"200":{"description":"El servicio está disponible y operativo","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}}}}}},"401":{"description":"Credenciales inválidas","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}}}}}},"405":{"description":"El método HTTP no está permitido para este endpoint","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}}}}}},"500":{"description":"Error interno del servidor o el servicio no está disponible","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"}}}}}}}}}}}
```

{% hint style="success" %}
**Buena práctica**: Implementa un mecanismo automático de renovación del token en tu integración.\
Si al consumir cualquier endpoint de la API recibes un error `401 Unauthorized`, significa que el token ha expirado o no es válido. En ese caso, tu sistema debe solicitar un nuevo token de forma automática.\
Esta estrategia garantiza la continuidad del servicio y evita interrupciones en los procesos que dependen de la API.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://b2chat.gitbook.io/b2chat-api-central/como-empezar/acceso-al-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
