La API REST de Chat2Desk OnCloud permite enviar y recibir mensajes, administrar clientes, diálogos, operadores, etiquetas, plantillas y tickets, y recibir eventos en tiempo real en tu propio servidor mediante webhooks. Esta guía reúne lo necesario para empezar y consultar cada grupo de endpoints; el detalle de cada parámetro está en la referencia de Postman.

En resumen
https://api.chat2desk.com.mx/v1 y autenticación con tu token en el encabezado Authorization, sin el prefijo Bearer.429 Too many requests.En esta página: Primeros pasos · Recursos y endpoints · Fechas, filtros y límites · Webhooks · Canal externo · Preguntas frecuentes
https://api.chat2desk.com.mx/v1
Todas las rutas de esta página son relativas a esa URL.
Authorization. El valor es el token directo, sin el prefijo Bearer:Authorization: <tu_token>
Trata el token como un secreto: no lo pongas en código de cliente ni en repositorios públicos, y no lo compartas en tickets de soporte. Guárdalo en una variable de entorno o en un gestor de secretos. Más sobre claves y seguridad en la guía de administración de claves API.
Esta consulta es de solo lectura: devuelve tus canales, con los transportes (mensajeros) conectados en cada uno.
curl -H "Authorization: TU_TOKEN" https://api.chat2desk.com.mx/v1/channels
Con el botón siguiente se abre Postman y se crea una copia de la colección en tu espacio de trabajo, lista para probar cada endpoint. Antes de enviar solicitudes, guarda tu token en la variable token de la colección.
| Término | Qué significa |
|---|---|
| Cliente | Persona que envía o recibe mensajes a través de Chat2Desk |
| Transporte | Mensajero, red social o chat en línea compatible: WhatsApp, Telegram, Facebook, Instagram, Viber, chat en línea y otros |
| Canal | Conexión de un transporte con tu cuenta; un canal puede tener varios clientes |
| Diálogo | Conversación (chat) con un cliente; se asigna a un operador y cambia de estado |
| Solicitud (request) | Conjunto de mensajes dentro de un diálogo: empieza con el primer mensaje del cliente y termina al cerrar el diálogo |

Cada tabla lista el método, la ruta y lo que hace la operación. Los parámetros, tipos de dato y ejemplos de cada una están en la referencia completa.
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /clients | Lista tus clientes; se filtra por teléfono, etiquetas, campos de la ficha y más |
| GET | /clients/{id} | Datos extendidos de un cliente |
| GET | /clients/{id}/transport | Transportes disponibles para ese cliente |
| GET | /clients/{id}/dialogs | Diálogos del cliente |
| GET | /clients/{id}/questions | Opciones del Chatbot Autoservicio que se enviaron al cliente en un periodo |
| GET | /clients/{id}/last_question | Última opción del Chatbot Autoservicio enviada al cliente |
| POST | /clients | Crea un cliente (solo se puede escribir a clientes que ya existen en Chat2Desk) |
| PUT | /clients/{id} | Modifica los datos de un cliente |
| GET | /custom_client_fields | Campos personalizados de la ficha del cliente |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /messages | Lista los mensajes (de clientes, a clientes y del sistema), con estado de entrega y lectura donde se admite |
| GET | /messages/{id} | Datos de un mensaje |
| POST | /messages | Envía un mensaje a un cliente, con botones o adjuntos; tiene límite de velocidad |
| POST | /messages/inbox | Registra el mensaje entrante de un cliente mediante un canal externo |
| POST | /messages/import | Importa mensajes anteriores (entrantes, salientes y adjuntos) que no están en Chat2Desk |
| PUT | /messages/{id}/status/{estatus} | Cambia el estado de entrega de un mensaje saliente (solo canal externo) |
| GET | /messages/{id}/read | Marca un mensaje como leído por el operador |
| GET | /messages/{id}/unread | Marca un mensaje como no leído |
| GET | /messages/{id}/transfer | Asigna el diálogo del mensaje a un operador |
| GET | /messages/{id}/transfer_to_group | Asigna el diálogo a un grupo de operadores; el sistema elige al operador según las reglas del grupo |
| GET | /requests/{id} | Datos de una solicitud |
| GET | /requests/{id}/messages | Mensajes de una solicitud |
| PUT | /requests/close | Cierra una solicitud |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /dialogs | Lista los diálogos |
| GET | /dialogs/{id} | Datos de un diálogo |
| GET | /dialogs/unanswered | Diálogos atrasados: sin respuesta durante el número de segundos indicado |
| PUT | /dialogs/{id} | Cambia el estado de un diálogo (abierto o cerrado) y lo asigna a un operador |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /webhooks | Lista los webhooks activos |
| GET | /webhooks/{id} | Datos de un webhook |
| POST | /webhooks | Crea un webhook para uno o varios eventos y, opcionalmente, para ciertos canales |
| PUT | /webhooks/{id} | Actualiza un webhook |
| DELETE | /webhooks/{id} | Elimina un webhook |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /operators | Lista tus operadores, con sus derechos de acceso y si pueden recibir chats nuevos |
| GET | /operators/{id} | Datos de un operador |
| GET | /operators/statuses | Estatus de trabajo disponibles |
| GET | /operators_groups | Grupos de operadores |
| PUT | /operators/{id}?status_id= | Cambia el estatus de trabajo de un operador |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /tags | Lista las etiquetas, con descripción y grupo |
| GET | /tags/{id} | Datos de una etiqueta |
| POST | /tags | Crea una etiqueta |
| POST | /tags/assign_to | Asigna una o varias etiquetas a un cliente o a una solicitud |
| POST | /tag_groups | Crea un grupo de etiquetas |
| DELETE | /tags/{id}/delete_from | Quita una etiqueta de un cliente o de una solicitud (la etiqueta sigue disponible) |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /tickets | Lista los tickets; se filtra por quien reporta, responsable, estatus, prioridad y solicitud |
| GET | /tickets/{id} | Datos de un ticket |
| POST | /tickets | Crea un ticket |
| PUT | /tickets/{id} | Edita un ticket |
| DELETE | /tickets/{id} | Elimina un ticket |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /templates | Lista las plantillas de la cuenta |
| GET | /templates/{id} | Datos de una plantilla |
| POST | /templates | Crea una plantilla (no puede pertenecer a un usuario y a un grupo a la vez) |
| PUT | /templates/{id} | Edita una plantilla |
| DELETE | /templates/{id} | Elimina una plantilla |
| GET | /templates_groups | Lista los grupos de plantillas |
| GET | /templates_groups/{id} | Datos de un grupo |
| POST | /templates_groups | Crea un grupo de plantillas |
| PUT | /templates_groups/{id} | Cambia el nombre de un grupo |
| DELETE | /templates_groups/{id} | Elimina un grupo |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /scenarios/menu_items | Lista las opciones del Chatbot Autoservicio (lleva el channel_id en el cuerpo, aunque sea un GET) |
| POST | /scenarios/send_menu_item | Envía una opción del menú a un cliente |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /help/api_modes | Niveles de acceso a la API |
| GET | /help/transports | Transportes disponibles y sus adjuntos admitidos |
| GET | /help/message_types | Tipos de mensaje |
| GET | /help/dialog_states | Estados de un diálogo |
| GET | /help/roles | Roles de operador |
| GET | /help/tickets | Estatus y prioridades de un ticket |
| GET | /countries | Países |
| GET | /regions | Regiones |
| Método | Ruta | Qué hace |
|---|---|---|
| GET | /companies/info | Información general de la empresa |
| GET | /companies/api_info | Versión de la API, nivel de acceso y número de solicitudes al mes |
| GET | /statistics | Datos estadísticos: tiempos de reacción y respuesta de los operadores, clientes nuevos y más (requiere la función de pago «Estadísticos Extendidos») |
| GET | /web_analytics_data | URL y marcas UTM de los chats de los clientes |
| GET | /channels | Tus canales y los transportes conectados |
| PUT | /companies | Guarda información de texto de tu empresa (hay tres campos) |
| PUT | /companies/switch_mode | Cambia el modo de trabajo de la empresa, que afecta a las respuestas automáticas |
| POST | /qr_decode | Decodifica un código QR y devuelve la URL de su imagen |
| GET | /gateway/delete_outbox | Borra todos los mensajes salientes pendientes de la cuenta, sin parámetros ni filtro. Úsalo con precaución |
No todos los endpoints usan el mismo formato. Como regla general:
messages, clients/{id}/questions): DD-MM-AAAA.statistics, web_analytics_data): AAAA-MM-DD.Revisa siempre el parámetro concreto en la referencia.
POST /messages): unos 15–20 mensajes por segundo (puede variar). Si lo excedes, la API responde 429 Too many requests. Reintenta con una pausa creciente.limit admiten un máximo de 200 elementos por solicitud.GET /companies/api_info devuelve tu nivel de acceso y el número de solicitudes al mes.GET es de solo lectura. Algunos (marcar mensajes como leídos, transferir diálogos, vaciar el buzón de salida) modifican datos de tu cuenta. Lee la descripción de cada endpoint antes de automatizar llamadas masivas.POST /clients.2xx y procesa el contenido después, de forma asíncrona.400 con un mensaje que indica el campo con problema; léelo antes de reintentar.
Un webhook te envía una solicitud HTTP a tu servidor cada vez que ocurre un evento, para que no tengas que consultar la API cada pocos segundos. Se crean con POST /webhooks: indicas la dirección de tu servidor (se recomienda https), los eventos y, si quieres, los canales.
channels limita los eventos de mensajes y diálogos a ciertos canales; si lo omites, recibes los de todos. Los eventos que no dependen de un canal (operadores, cambios de cliente) llegan siempre.Si tu servidor no responde con éxito, Chat2Desk reintenta:
Si pasan 5 horas sin una respuesta exitosa, el webhook se desactiva automáticamente.
Cada entrega trae dos encabezados:
| Encabezado | Contenido |
|---|---|
X-Signature | Firma HMAC-SHA256 en hexadecimal |
X-Timestamp | Marca de tiempo Unix, en segundos, del envío |
Para comprobar que la notificación viene de Chat2Desk y no se alteró:
clave = MD5(tu_token_de_API) y usa su representación hexadecimal de 32 caracteres (no los 16 bytes crudos).cuerpo_crudo_de_la_solicitud seguido del valor de X-Timestamp.HMAC-SHA256(clave, mensaje) en hexadecimal.X-Signature usando una comparación en tiempo constante, no un ==.El error más común es el cuerpo. Firma los bytes exactos que envió Chat2Desk, antes de que tu framework los convierta a JSON. Si el cuerpo se reformatea (otro orden de llaves u otros espacios), la firma no coincidirá aunque el contenido parezca igual.
Python
import hashlib
import hmac
def firma_valida(token_api: str, cuerpo_crudo: bytes, x_timestamp: str, x_signature: str) -> bool:
clave = hashlib.md5(token_api.encode()).hexdigest() # 32 caracteres hexadecimales
mensaje = cuerpo_crudo + x_timestamp.encode()
esperada = hmac.new(clave.encode(), mensaje, hashlib.sha256).hexdigest()
return hmac.compare_digest(esperada, x_signature)
Node.js
const crypto = require('crypto');
// cuerpoCrudo: Buffer con los bytes exactos recibidos, antes de JSON.parse
function firmaValida(tokenApi, cuerpoCrudo, xTimestamp, xSignature) {
const clave = crypto.createHash('md5').update(tokenApi).digest('hex');
const mensaje = Buffer.concat([cuerpoCrudo, Buffer.from(xTimestamp)]);
const esperada = crypto.createHmac('sha256', clave).update(mensaje).digest('hex');
const a = Buffer.from(esperada);
const b = Buffer.from(xSignature);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Estos son los 24 eventos que puedes pedir en el campo events:
| Evento | Cuándo ocurre |
|---|---|
inbox | Llega un mensaje entrante de un cliente |
outbox | Chat2Desk envía un mensaje saliente a un cliente |
outbox_status | Cambia el estado de entrega de un mensaje saliente: pending, sent, failed, scheduled, canceled, delivered o seen |
comment | Se agrega un comentario interno en un diálogo |
operator_status_changed | Cambia el estatus de un operador |
operator_authentication_updated | Se actualiza la autenticación de un operador |
new_client | Se crea un cliente |
new_tag | Se crea una etiqueta |
new_request | Empieza una solicitud nueva |
add_tag_to_client | Se asigna una etiqueta a un cliente |
add_tag_to_request | Se asigna una etiqueta a una solicitud |
delete_tag_from_client | Se quita una etiqueta de un cliente |
delete_tag_from_request | Se quita una etiqueta de una solicitud |
client_updated | Se actualizan los datos de un cliente |
client_added_to_blacklist | Un cliente se agrega a la lista negra |
close_dialog | Se cierra un diálogo |
close_request | Se cierra una solicitud |
dialog_transferred | Un diálogo se transfiere a otro operador |
device_updated | Se actualiza un dispositivo |
new_ticket | Se crea un ticket |
ticket_updated | Se actualiza un ticket |
ticket_deleted | Se elimina un ticket |
new_qr_code | Se reconoce un código QR |
ai_hints_requested | Se solicitan sugerencias de IA |
Usa estos nombres exactamente al suscribirte. Para operator_status_changed, device_updated y new_ticket, los nombres más nuevos que aparecen en algunos materiales (operator_status_updated, device_update, ticket_created) se rechazan en la API de producción.
Cada entrega incluye el tipo de evento en hook_type, la hora en event_time y los datos del mensaje o del objeto. Por ejemplo, un inbox trae message_id, type, text, transport, client_id, dialog_id, channel_id, el objeto client, request_id, attachments, is_new_request e is_new_client.
El canal externo integra en Chat2Desk cualquier canal de mensajería que no sea nativo: la mensajería de tu app, un portal o cualquier sistema que envíe y reciba mensajes por API. Los operadores lo atienden junto con WhatsApp y el resto de los canales, con chatbots, Chatbots Conversacionales y respuestas automáticas incluidos.
POST /messages/inbox con el mensaje de tu usuario.outbox y outbox_status.PUT /messages/{id}/status/{estatus}.channel_id (solo visible por la API, con GET /channels).Todos los pasos, los campos del mensaje y los estados de entrega están en la guía del canal externo.
¿Dónde obtengo mi token? En tu cuenta de Chat2Desk, con un usuario administrador, en la sección API & Scripts > API.
¿Cómo se envía el token? En el encabezado Authorization, con el valor del token directo, sin el prefijo Bearer.
¿Cuál es la URL base de la API? https://api.chat2desk.com.mx/v1.
¿Cuántos mensajes puedo enviar por segundo? Unos 15–20 con POST /messages; si lo excedes, la API responde 429 Too many requests.
¿Cuántos webhooks puedo tener? Hasta 5 simultáneos, cada uno con hasta 24 eventos.
¿Cómo sé que un webhook viene de Chat2Desk? Cada entrega trae las cabeceras X-Signature y X-Timestamp; calcula la firma HMAC-SHA256 como se explica en la sección de webhooks y compárala en tiempo constante.
¿Hay un entorno de pruebas? No. Para probar se crean canales y transportes de prueba; para un canal externo de prueba, pídelo a soporte.
¿Cómo sé si un cliente tiene WhatsApp? Envía un mensaje y espera el evento outbox_status (hasta unos 20 segundos): si el número no tiene cuenta de WhatsApp, el evento trae el error app.wa_client_not_found.
¿Dónde veo todos los parámetros? En la referencia completa de la API, también disponible como colección de Postman.
Cuéntanos qué quieres conectar y te orientamos. Si todavía no tienes cuenta, empieza con la prueba gratuita.
