Inicio API e integraciones | Claves, endpoints y webhooks Cómo extraer datos por lotes vía API (Data Extract API)

Cómo extraer datos por lotes vía API (Data Extract API)

Última actualización el Sep 22, 2026

Aviso importante: esta API no seguirá evolucionando. La forma recomendada hoy para la extracción masiva de datos es la nueva documentación: CloudHumans Data Export.


Cuándo usarla

  • Necesitas exportar datos históricos de tickets para BI, auditoría o un dashboard externo
  • Quieres alimentar informes personalizados con datos completos de Cloud Chat
  • Necesitas rastrear eventos de entrega de campañas y envíos proactivos

Requisitos previos

  • API Key generada por un usuario administrador o supervisor — ver Cómo obtener tu API Key en Cloud Chat

  • CLOUDCHAT_DOMAIN y ACCOUNT_ID

  • Período de extracción de máximo 5 días (120 horas) por solicitud

Esta API está destinada exclusivamente a la extracción histórica por lotes. Para consultas en tiempo real o acciones sobre tickets, usa las otras APIs de la Guía Maestra.


Sobre este artículo

La Data Extract API permite exportar datos completos de tus tickets directamente desde tu cuenta en Cloud Chat — fechas, estados, responsables, tiempos de respuesta y mucho más. Ideal para informes personalizados e integraciones externas.


Solicitud base

curl --location 'https://{CLOUDCHAT_DOMAIN}/api/v2/accounts/{ACCOUNT_ID}/data_extracts?startDate=2025-03-27T01:58:59&endDate=2025-03-28T01:59:00&type=BASE_TICKET_METRICS' \
  --header 'Accept: application/json' \
  --header 'api_access_token: {API_TOKEN}'

Dónde encontrar los parámetros

  • CLOUDCHAT_DOMAIN — parte de la URL al iniciar sesión en tu cuenta

  • ACCOUNT_ID — después de iniciar sesión, el ID aparece en la URL como app/accounts/{id}/dashboard. Ej.: en cloudhumans.com/app/accounts/1/conversations/6341 el account_id es 1

  • API_TOKEN — genéralo desde un perfil administrador o supervisor (en "Configurações do perfil" (Configuración del perfil), en tu propio entorno — usa el dominio de tu cuenta, ej.: https://TU-DOMINIO.cloudhumans.com/app/accounts/{ACCOUNT_ID}/profile/settings. El dominio varía según la instancia: cloudchat, cloudchat2, cloudchat3…)


Parámetros obligatorios

  • startDate — Fecha y hora de inicio (UTC) en el formato yyyy-MM-ddTHH:mm:ss. Ej.: 2025-03-27T01:58:59

  • endDate — Fecha y hora de término (UTC). Debe ser posterior a startDate y el intervalo no puede superar 5 días (120 horas). Ej.: 2025-03-28T01:59:00

  • type — Tipo de datos a exportar (ver la lista abajo)

  • account_id — ID de la cuenta, indicado en la ruta de la URL

Tipos disponibles

  • BASE_TICKET_METRICS

  • TICKET_METRICS_WITH_AGENT_INFORMATION

  • TICKET_SUMMARY

  • CAMPAIGN_DELIVERY_EVENTS

  • SINGLE_CONTACT_DELIVERY_EVENTS


Parámetro opcional: rangeFilterProperty

Define qué campo de fecha se usa para aplicar los filtros de período.

Valor Comportamiento
CREATED_AT (predeterminado) Filtra por la fecha de creación
UPDATED_AT Filtra por la fecha de la última actualización

Intervalo de fechas

Para garantizar estabilidad y rendimiento, el intervalo máximo permitido por solicitud es de 5 días.

Para exportar períodos mayores (ej.: 30 días), divídelo en varias solicitudes — 6 llamadas consecutivas con ventanas de 5 días cubren un mes entero.


Límite de solicitudes (rate limit)

La Data Extract API aplica un límite de 20 solicitudes por minuto por token. Tokens distintos de la misma cuenta tienen presupuestos independientes.

Qué pasa al superar el límite

Las solicitudes que superan el límite reciben HTTP 429 Too Many Requests:

{
  "error": "Rate limit exceeded. Retry later.",
  "retry_after": 42
}

Recomendaciones

  • Respeta el encabezado Retry-After antes de intentar de nuevo. Los bucles de reintento sin backoff amplifican el bloqueo

  • Para extracciones grandes (ej.: 30 días), combina ventanas de 5 días con espaciado entre solicitudes — 20/min es holgado para el volumen típico

  • Si tu integración necesita mayor throughput de forma sostenida, contacta al soporte


1. BASE_TICKET_METRICS

Devuelve datos básicos de los tickets. Campos devueltos:

Campo Tipo Descripción Dato Posiblemente Sensible
ticketId Entero ID interno del ticket No
displayTicketId Entero ID mostrado al usuario en Cloud Chat — visible en la URL y en la búsqueda por filtros No
inboxId Entero ID de la bandeja de entrada No
accountId Entero ID de la cuenta No
accountName Texto Nombre de la cuenta No
ticketStatus Texto Estado del ticket: open (Abierto), resolved (Resuelto), pending (Pendiente), snoozed (Aplazado) No
teamName Texto Nombre del equipo responsable No
ticketPriorityName Texto Prioridad: low, medium, high, urgent No
ticketType Texto Tipo del ticket (primera etiqueta asociada) No
inboxName Texto Nombre de la bandeja de entrada No
ticketTitle Texto Título del ticket — puede contener el nombre o el teléfono del contacto Sí
channel Texto Canal de comunicación (ej.: Whatsapp) No
tags Texto Etiquetas del ticket separadas por comas No
createdAt Timestamp Fecha y hora de creación del ticket No
firstReplyAt Timestamp Fecha y hora de la primera respuesta No
firstReplyTime Decimal Tiempo hasta la primera respuesta (en minutos) No
resolvedAt Timestamp Fecha y hora de resolución No
totalResolutionTimeMin Decimal Tiempo total de resolución (en minutos) No
agentId Entero ID del agente responsable No
ticketOwner Texto Nombre del agente responsable Sí
ticketOwnerEmail Texto Correo electrónico del agente responsable Sí
contactId Entero ID del contacto No
contactName Texto Nombre del contacto Sí
contactEmail Texto Correo electrónico del contacto Sí
contactPhone Texto Teléfono del contacto Sí
campaignId Entero ID de la campaña que originó el ticket, si aplica No
proactivelyInitiated Booleano Indica si el ticket se inició de forma proactiva No

Al configurar la zona horaria de la cuenta (ej.: GMT-3), los campos de tipo timestamp (createdAt, firstAgentAssignmentTime, firstReplyAt, firstAgentFirstReplyTime, resolvedAt, firstReplyTime, firstReplierAgentAssignmentTime, firstReplierAgentFirstReplyTime, repliedAt, readAt, receivedAt, sentAt) se devuelven en la zona configurada. Sin zona horaria configurada, los horarios vienen en UTC.

Configuración: Configuración de zona horaria.

Ejemplo de respuesta

[
  {
    "ticketId": 123456,
    "displayTicketId": 7890,
    "inboxId": 101,
    "accountId": 42,
    "accountName": "Minha Empresa",
    "ticketStatus": "resolved",
    "teamName": "Meu Time",
    "ticketPriorityName": "High",
    "ticketType": "suporte",
    "inboxName": "WhatsApp",
    "ticketTitle": "+5511999999999",
    "channel": "Whatsapp",
    "createdAt": "2025-03-27T09:53:14.791Z",
    "firstReplyAt": "2025-03-27T10:09:29.225Z",
    "firstReplyTime": 16.24,
    "resolvedAt": "2025-03-27T13:20:15.830Z",
    "totalResolutionTimeMin": 207.01,
    "tags": "suporte,prioridade_alta",
    "agentId": 42,
    "ticketOwner": "ClaudIA",
    "ticketOwnerEmail": "[email protected]",
    "contactId": 998877,
    "contactName": "Contact Name",
    "contactEmail": "[email protected]",
    "contactPhone": "+5511887774411",
    "campaignId": 123,
    "proactivelyInitiated": true
  }
]

2. TICKET_METRICS_WITH_AGENT_INFORMATION

Incluye detalles sobre el agente que respondió y resolvió. Campos adicionales:

Campo Tipo Descripción Dato Posiblemente Sensible
ticketLink Texto URL directa al ticket en Cloud Chat No
agentOnResolutionId Entero ID del agente humano que resolvió el ticket No
agentOnResolutionName Texto Nombre del agente humano que lo resolvió Sí
agentOnResolutionEmail Texto Correo electrónico del agente humano que lo resolvió Sí
firstAgentReplyId Entero ID del primer agente humano que respondió No
firstAgentReplyName Texto Nombre del primer agente humano que respondió Sí
firstAgentReplyEmail Texto Correo electrónico del primer agente humano que respondió Sí
firstAgentAssignmentTime Timestamp Fecha y hora en que el ticket fue asignado al primer agente No
firstAgentFirstReplyTime Timestamp Fecha y hora de la primera respuesta del agente No
firstReplierAgentAssignmentTime Timestamp Fecha y hora de asignación del agente que respondió primero No
firstReplierAgentFirstReplyTime Timestamp Timestamp de la primera respuesta del agente que respondió primero No
firstAgentReplyTimeMin Decimal Tiempo entre la asignación y la primera respuesta del agente (min) No
firstAgentResolutionTimeMin Decimal Tiempo entre la asignación y la resolución del ticket (min) No
csatScore Numérico Nota de satisfacción (CSAT) otorgada por el cliente No
csatFeedback Texto Comentario textual dejado por el cliente en la encuesta CSAT Sí
contactCustomFields JSON Campos personalizados del contacto — pueden contener datos personales Sí
conversationCustomFields JSON Campos personalizados de la conversación — pueden contener datos personales Sí
conversationAdditionalFields JSON Metadatos adicionales de la conversación — pueden contener datos personales Sí

Ejemplo de respuesta

[
  {
    "ticketId": 11111,
    "displayTicketId": 11111,
    "accountName": "account name",
    "inboxName": "WhatsApp",
    "ticketLink": "https://cloudchat.cloudhumans.com/app/accounts/99999/conversations/11111",
    "ticketStatus": "resolved",
    "createdAt": "2025-03-27T13:00:40.897954",
    "resolvedAt": "2025-03-27T15:38:02.743726",
    "agentOnResolutionId": 225,
    "agentOnResolutionName": "ClaudIA",
    "agentOnResolutionEmail": "[email protected]",
    "firstAgentReplyId": 111,
    "firstAgentReplyName": "ClaudIA",
    "firstAgentReplyEmail": "[email protected]",
    "firstAgentAssignmentTime": "2025-03-27T13:16:13.001269",
    "firstAgentFirstReplyTime": "2025-03-27T13:17:01.344971",
    "firstAgentReplyTimeMin": 0.81,
    "firstAgentResolutionTimeMin": 141.83,
    "csatScore": null,
    "csatFeedback": "",
    "contactCustomFields": "{}",
    "conversationCustomFields": "{}",
    "conversationAdditionalFields": "{}"
  }
]
  • firstAgentReplyTimeMin — tiempo entre firstAgentAssignmentTime y firstAgentFirstReplyTime

  • firstAgentResolutionTimeMin — tiempo entre firstAgentAssignmentTime y resolvedAt


3. TICKET_SUMMARY

Devuelve un resumen de la conversación del ticket. Campos devueltos:

Campo Tipo Descripción Dato Posiblemente Sensible
ticketId Entero ID interno del ticket No
displayTicketId Entero ID mostrado al usuario en Cloud Chat — visible en la URL y en la búsqueda por filtros No
ticketLink Texto URL directa al ticket en Cloud Chat No
summary Texto Resumen de la conversación entre el cliente y el agente — puede venir truncado en conversaciones largas Sí
[
  {
    "ticketId": 1111,
    "displayTicketId": 1111,
    "ticketLink": "https://cloudchat.cloudhumans.com/app/accounts/99999/conversations/1111",
    "summary": "CONTATO: Oi\nUSUÁRIO: Olá!"
  }
]

El campo summary no garantiza la transcripción íntegra de la conversación: consolida fragmentos y, en conversaciones largas, el contenido puede venir cortado. Si necesitas el historial completo, usa el envío de la transcripción por correo electrónico desde la propia conversación, en lugar de la API.


4. CAMPAIGN_DELIVERY_EVENTS

Devuelve eventos de entrega de campañas de WhatsApp, rastreando por contacto y campaña el estado de los mensajes.

Campos devueltos:

Campo Tipo Descripción Dato Posiblemente Sensible
id Entero ID único del evento de entrega No
campaignId Entero ID de la campaña No
campaignTitle Texto Título de la campaña No
audience Texto Audiencia/lista utilizada en la campaña No
contactId Entero ID del contacto destinatario No
contactName Texto Nombre del contacto destinatario Sí
contactEmail Texto Correo electrónico del contacto destinatario Sí
contactPhoneNumber Texto Teléfono del contacto destinatario Sí
ticketId Entero ID del ticket generado por el envío, si lo hay No
displayTicketId Texto ID mostrado al usuario en Cloud Chat — visible en la URL y en la búsqueda por filtros No
messageSent Booleano Flag que indica si el mensaje fue enviado a la API de WhatsApp (Meta) No
sentAt Timestamp Fecha y hora del envío No
messageReceived Booleano Flag que indica si el mensaje fue entregado al dispositivo del contacto No
receivedAt Timestamp Fecha y hora de la entrega No
messageRead Booleano Flag que indica si el mensaje fue leído (depende de la configuración de privacidad del contacto) No
readAt Timestamp Fecha y hora de la lectura No
messageReplied Booleano Flag que indica si el mensaje fue respondido No
repliedAt Timestamp Fecha y hora de la primera respuesta No
error Texto Error de entrega: número inválido, sin WhatsApp, bloqueo, etc. No
createdAt Timestamp Fecha y hora de creación del registro No
updatedAt Timestamp Fecha y hora de la última actualización No

Ejemplo de respuesta

[
  {
    "id": 103,
    "campaignId": 5502,
    "campaignTitle": "Natal 2025 - Promoção Especial",
    "audience": "lista_fidelidade_natal",
    "contactId": 9003,
    "contactName": "Carla Souza",
    "contactEmail": "[email protected]",
    "contactPhoneNumber": "+55 31 99999-99999",
    "ticketId": 78414,
    "displayTicketId": "2027",
    "messageSent": false,
    "sentAt": null,
    "messageReceived": false,
    "receivedAt": null,
    "messageRead": false,
    "readAt": null,
    "messageReplied": false,
    "repliedAt": null,
    "error": "Número de telefone inválido ou não registrado no WhatsApp",
    "createdAt": "2025-12-10T09:00:00.000Z",
    "updatedAt": "2025-12-10T09:00:00.000Z"
  }
]

5. SINGLE_CONTACT_DELIVERY_EVENTS

Devuelve eventos de entrega de mensajes proactivos de envío único (no campañas). Campos devueltos:

Campo Tipo Descripción Dato Posiblemente Sensible
id Entero ID único del evento de entrega No
contactId Entero ID del contacto destinatario No
contactName Texto Nombre del contacto destinatario Sí
contactEmail Texto Correo electrónico del contacto destinatario Sí
contactPhoneNumber Texto Teléfono del contacto destinatario Sí
ticketId Entero ID del ticket generado por el envío, si lo hay No
displayTicketId Texto ID mostrado al usuario en Cloud Chat — visible en la URL y en la búsqueda por filtros No
messageSent Booleano Flag que indica si el mensaje fue enviado a la API de WhatsApp (Meta) No
sentAt Timestamp Fecha y hora del envío No
messageReceived Booleano Flag que indica si el mensaje fue entregado al dispositivo del contacto No
receivedAt Timestamp Fecha y hora de la entrega No
messageRead Booleano Flag que indica si el mensaje fue leído (depende de la configuración de privacidad del contacto) No
readAt Timestamp Fecha y hora de la lectura No
messageReplied Booleano Flag que indica si el mensaje fue respondido No
repliedAt Timestamp Fecha y hora de la primera respuesta No
error Texto Error de entrega: número inválido, sin WhatsApp, bloqueo, etc. No
createdAt Timestamp Fecha y hora de creación del registro No
updatedAt Timestamp Fecha y hora de la última actualización No

Ejemplo de respuesta

[
  {
    "id": 321,
    "contactId": 555777,
    "contactName": "Maria Silva",
    "contactEmail": "[email protected]",
    "contactPhoneNumber": "+55 11 98888-7777",
    "ticketId": 78414,
    "displayTicketId": "2027",
    "messageSent": true,
    "sentAt": "2025-08-01T12:00:05.000Z",
    "messageReceived": true,
    "receivedAt": "2025-08-01T12:00:08.000Z",
    "messageRead": true,
    "readAt": "2025-08-01T12:01:30.000Z",
    "messageReplied": false,
    "repliedAt": null,
    "error": null,
    "createdAt": "2025-08-01T11:59:59.000Z",
    "updatedAt": "2025-08-01T12:01:30.000Z"
  }
]

Paso a paso práctico

  1. Genera tu API Key en un perfil administrador o supervisor ("Configurações do perfil" (Configuración del perfil) → consulta "Cómo obtener tu API Key").
  2. Elige dónde ejecutarla: es una llamada HTTP GET — usa un cliente de API (Postman, Insomnia) o la terminal con curl. No hace falta programar.
  3. Arma la URL reemplazando los campos entre {}: https://{TU_DOMINIO}/api/v2/accounts/{ACCOUNT_ID}/data_extracts?startDate=2025-03-27T00:00:00&endDate=2025-03-27T23:59:59&type=TICKET_METRICS_WITH_AGENT_INFORMATION
  4. Agrega el encabezado de autenticación (obligatorio — sin él devuelve 401): api_access_token: {TU_API_KEY}
  5. Envía la solicitud (botón Send en Postman, o ejecuta el curl).
  6. Lee el resultado: llega un JSON con la lista de tickets; cada campo está descrito en las tablas de tipos de este artículo.

Observaciones