API de Chat2Desk OnCloud

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.

Un servidor con una llave envía solicitudes a la nube de Chat2Desk y recibe respuestas, representadas por un recuadro con llaves y otro con una palomita verde

En resumen

  • URL base https://api.chat2desk.com.mx/v1 y autenticación con tu token en el encabezado Authorization, sin el prefijo Bearer.
  • Más de 70 operaciones agrupadas en 11 recursos: clientes, mensajes y solicitudes, diálogos, webhooks, operadores, etiquetas, tickets, plantillas, Chatbot Autoservicio, tipos de datos y otros.
  • Webhooks firmados con HMAC-SHA256: hasta 5 simultáneos y hasta 24 eventos en cada uno.
  • Envío de mensajes limitado a unos 15–20 por segundo; al excederlo, la API responde 429 Too many requests.
  • Canal externo para atender desde Chat2Desk a los usuarios de tu propia app, bot o CRM.

En esta página: Primeros pasos · Recursos y endpoints · Fechas, filtros y límites · Webhooks · Canal externo · Preguntas frecuentes

Ver la referencia completa de la API

Abrir la colección de Chat2Desk en Postman

Primeros pasos

URL base

https://api.chat2desk.com.mx/v1

Todas las rutas de esta página son relativas a esa URL.

Autenticación

  1. Entra a tu cuenta de Chat2Desk con un usuario administrador.
  2. Abre la sección API & Scripts > API: ahí está tu token.
  3. Envíalo en cada solicitud, en el encabezado 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.

Tu primera solicitud

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

Prueba la API en Postman

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.

Abrir la colección de Chat2Desk en Postman

Conceptos clave

TérminoQué significa
ClientePersona que envía o recibe mensajes a través de Chat2Desk
TransporteMensajero, red social o chat en línea compatible: WhatsApp, Telegram, Facebook, Instagram, Viber, chat en línea y otros
CanalConexión de un transporte con tu cuenta; un canal puede tener varios clientes
DiálogoConversació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

Recursos y endpoints

Mapa de los once grupos de la API de Chat2Desk OnCloud alrededor de la URL base: clientes, mensajes y solicitudes, diálogos, webhooks, operadores, etiquetas, tickets, plantillas, Chatbot Autoservicio, tipos de datos y otros

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.

Clientes

MétodoRutaQué hace
GET/clientsLista 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}/transportTransportes disponibles para ese cliente
GET/clients/{id}/dialogsDiálogos del cliente
GET/clients/{id}/questionsOpciones 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/clientsCrea 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_fieldsCampos personalizados de la ficha del cliente

Mensajes y solicitudes

MétodoRutaQué hace
GET/messagesLista 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/messagesEnvía un mensaje a un cliente, con botones o adjuntos; tiene límite de velocidad
POST/messages/inboxRegistra el mensaje entrante de un cliente mediante un canal externo
POST/messages/importImporta 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}/readMarca un mensaje como leído por el operador
GET/messages/{id}/unreadMarca un mensaje como no leído
GET/messages/{id}/transferAsigna el diálogo del mensaje a un operador
GET/messages/{id}/transfer_to_groupAsigna 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}/messagesMensajes de una solicitud
PUT/requests/closeCierra una solicitud

Diálogos

MétodoRutaQué hace
GET/dialogsLista los diálogos
GET/dialogs/{id}Datos de un diálogo
GET/dialogs/unansweredDiá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

Webhooks

MétodoRutaQué hace
GET/webhooksLista los webhooks activos
GET/webhooks/{id}Datos de un webhook
POST/webhooksCrea un webhook para uno o varios eventos y, opcionalmente, para ciertos canales
PUT/webhooks/{id}Actualiza un webhook
DELETE/webhooks/{id}Elimina un webhook

Operadores

MétodoRutaQué hace
GET/operatorsLista tus operadores, con sus derechos de acceso y si pueden recibir chats nuevos
GET/operators/{id}Datos de un operador
GET/operators/statusesEstatus de trabajo disponibles
GET/operators_groupsGrupos de operadores
PUT/operators/{id}?status_id=Cambia el estatus de trabajo de un operador

Etiquetas

MétodoRutaQué hace
GET/tagsLista las etiquetas, con descripción y grupo
GET/tags/{id}Datos de una etiqueta
POST/tagsCrea una etiqueta
POST/tags/assign_toAsigna una o varias etiquetas a un cliente o a una solicitud
POST/tag_groupsCrea un grupo de etiquetas
DELETE/tags/{id}/delete_fromQuita una etiqueta de un cliente o de una solicitud (la etiqueta sigue disponible)

Tickets

MétodoRutaQué hace
GET/ticketsLista los tickets; se filtra por quien reporta, responsable, estatus, prioridad y solicitud
GET/tickets/{id}Datos de un ticket
POST/ticketsCrea un ticket
PUT/tickets/{id}Edita un ticket
DELETE/tickets/{id}Elimina un ticket

Plantillas

MétodoRutaQué hace
GET/templatesLista las plantillas de la cuenta
GET/templates/{id}Datos de una plantilla
POST/templatesCrea 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_groupsLista los grupos de plantillas
GET/templates_groups/{id}Datos de un grupo
POST/templates_groupsCrea un grupo de plantillas
PUT/templates_groups/{id}Cambia el nombre de un grupo
DELETE/templates_groups/{id}Elimina un grupo

Chatbot Autoservicio

MétodoRutaQué hace
GET/scenarios/menu_itemsLista las opciones del Chatbot Autoservicio (lleva el channel_id en el cuerpo, aunque sea un GET)
POST/scenarios/send_menu_itemEnvía una opción del menú a un cliente

Tipos de datos y valores

MétodoRutaQué hace
GET/help/api_modesNiveles de acceso a la API
GET/help/transportsTransportes disponibles y sus adjuntos admitidos
GET/help/message_typesTipos de mensaje
GET/help/dialog_statesEstados de un diálogo
GET/help/rolesRoles de operador
GET/help/ticketsEstatus y prioridades de un ticket
GET/countriesPaíses
GET/regionsRegiones

Otros

MétodoRutaQué hace
GET/companies/infoInformación general de la empresa
GET/companies/api_infoVersión de la API, nivel de acceso y número de solicitudes al mes
GET/statisticsDatos 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_dataURL y marcas UTM de los chats de los clientes
GET/channelsTus canales y los transportes conectados
PUT/companiesGuarda información de texto de tu empresa (hay tres campos)
PUT/companies/switch_modeCambia el modo de trabajo de la empresa, que afecta a las respuestas automáticas
POST/qr_decodeDecodifica un código QR y devuelve la URL de su imagen
GET/gateway/delete_outboxBorra todos los mensajes salientes pendientes de la cuenta, sin parámetros ni filtro. Úsalo con precaución

Fechas, filtros y límites

Formato de fechas

No todos los endpoints usan el mismo formato. Como regla general:

  • Mensajes y preguntas de cliente (messages, clients/{id}/questions): DD-MM-AAAA.
  • Estadísticas y analítica web (statistics, web_analytics_data): AAAA-MM-DD.

Revisa siempre el parámetro concreto en la referencia.

Límites de uso

  • Envío de mensajes (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.
  • Webhooks: hasta 5 simultáneos y hasta 24 eventos en cada uno.
  • Listados: los endpoints con parámetro limit admiten un máximo de 200 elementos por solicitud.
  • Consumo mensual: GET /companies/api_info devuelve tu nivel de acceso y el número de solicitudes al mes.

Buenas prácticas

  • No des por hecho que un 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.
  • Usa los parámetros documentados para filtrar por fechas. No asumas que repetir una misma clave acota un rango si la referencia no lo dice.
  • Envía mensajes solo a clientes que ya existen: crea primero el cliente con POST /clients.
  • Responde rápido a los webhooks con un código 2xx y procesa el contenido después, de forma asíncrona.
  • Verifica la firma de los webhooks antes de confiar en su contenido.
  • Una solicitud inválida responde 400 con un mensaje que indica el campo con problema; léelo antes de reintentar.

Webhooks

Diagrama del flujo de un webhook de Chat2Desk: envío del evento, cuerpo crudo, cálculo de la firma HMAC-SHA256, comparación y respuesta, con los reintentos a los 10 segundos, 5 minutos y 2 horas

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.

  • Límites: hasta 5 webhooks simultáneos y hasta 24 eventos en cada uno.
  • Canales: el campo 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.

Reintentos y desactivación

Si tu servidor no responde con éxito, Chat2Desk reintenta:

  1. A los 10 segundos.
  2. A los 5 minutos.
  3. A las 2 horas.

Si pasan 5 horas sin una respuesta exitosa, el webhook se desactiva automáticamente.

Verifica la firma

Cada entrega trae dos encabezados:

EncabezadoContenido
X-SignatureFirma HMAC-SHA256 en hexadecimal
X-TimestampMarca de tiempo Unix, en segundos, del envío

Para comprobar que la notificación viene de Chat2Desk y no se alteró:

  1. Calcula clave = MD5(tu_token_de_API) y usa su representación hexadecimal de 32 caracteres (no los 16 bytes crudos).
  2. Arma el mensaje: cuerpo_crudo_de_la_solicitud seguido del valor de X-Timestamp.
  3. Calcula HMAC-SHA256(clave, mensaje) en hexadecimal.
  4. Compárala con X-Signature usando una comparación en tiempo constante, no un ==.
  5. Si no coinciden, rechaza la notificación.
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);
}

Eventos disponibles

Estos son los 24 eventos que puedes pedir en el campo events:

EventoCuándo ocurre
inboxLlega un mensaje entrante de un cliente
outboxChat2Desk envía un mensaje saliente a un cliente
outbox_statusCambia el estado de entrega de un mensaje saliente: pending, sent, failed, scheduled, canceled, delivered o seen
commentSe agrega un comentario interno en un diálogo
operator_status_changedCambia el estatus de un operador
operator_authentication_updatedSe actualiza la autenticación de un operador
new_clientSe crea un cliente
new_tagSe crea una etiqueta
new_requestEmpieza una solicitud nueva
add_tag_to_clientSe asigna una etiqueta a un cliente
add_tag_to_requestSe asigna una etiqueta a una solicitud
delete_tag_from_clientSe quita una etiqueta de un cliente
delete_tag_from_requestSe quita una etiqueta de una solicitud
client_updatedSe actualizan los datos de un cliente
client_added_to_blacklistUn cliente se agrega a la lista negra
close_dialogSe cierra un diálogo
close_requestSe cierra una solicitud
dialog_transferredUn diálogo se transfiere a otro operador
device_updatedSe actualiza un dispositivo
new_ticketSe crea un ticket
ticket_updatedSe actualiza un ticket
ticket_deletedSe elimina un ticket
new_qr_codeSe reconoce un código QR
ai_hints_requestedSe 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.

Canal externo

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.

  • Entrada: POST /messages/inbox con el mensaje de tu usuario.
  • Salida: webhook con los eventos outbox y outbox_status.
  • Estado de entrega: PUT /messages/{id}/status/{estatus}.
  • Activación: soporte técnico crea un canal nuevo con el transporte «canal externo» y te entrega su 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.

Preguntas frecuentes

¿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.

¿Necesitas ayuda con tu integración?

Cuéntanos qué quieres conectar y te orientamos. Si todavía no tienes cuenta, empieza con la prueba gratuita.

Una persona programando en una laptop y otra colocando la última pieza de un rompecabezas con íconos de chat, base de datos y engranaje, que representa la ayuda con una integración de Chat2Desk