Quando usar
- Você precisa exportar dados históricos de tickets para BI, auditoria ou dashboard externo
- Você quer alimentar relatórios customizados com dados completos do Cloud Chat
- Você precisa rastrear eventos de entrega de campanhas e disparos proativos
Pré-requisitos
-
API Key gerada por usuário administrador ou supervisor — ver Como encontrar sua API Key no Cloud Chat
-
CLOUDCHAT_DOMAINeACCOUNT_ID -
Período de extração de no máximo 5 dias (120 horas) por requisição
Esta API é destinada exclusivamente para extração histórica em lote. Para consultas em tempo real ou ações em tickets, use as outras APIs do Guia Mestre.
Sobre este artigo
A Data Extract API permite exportar dados completos dos seus tickets diretamente da sua conta no Cloud Chat — datas, status, responsáveis, tempos de resposta e muito mais. Ideal para relatórios personalizados e integrações externas.
Requisição 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}'
Onde encontrar os parâmetros
-
CLOUDCHAT_DOMAIN— parte da URL ao fazer login na sua conta
-
ACCOUNT_ID— após o login, o ID aparece na URL comoapp/accounts/{id}/dashboard. Ex: emcloudhumans.com/app/accounts/1/conversations/6341oaccount_idé1 -
API_TOKEN— gere a partir de um perfil administrador ou supervisor (na configuração do perfil)
Parâmetros obrigatórios
-
startDate— Data e hora de início (UTC) no formatoyyyy-MM-ddTHH:mm:ss. Ex:2025-03-27T01:58:59 -
endDate— Data e hora de término (UTC). Deve ser posterior astartDatee o intervalo não pode ultrapassar 5 dias (120 horas). Ex:2025-03-28T01:59:00 -
type— Tipo de dados a exportar (ver lista abaixo) -
account_id— ID da conta, informado no caminho da URL
Tipos disponíveis
-
BASE_TICKET_METRICS -
TICKET_METRICS_WITH_AGENT_INFORMATION -
TICKET_SUMMARY -
CAMPAIGN_DELIVERY_EVENTS -
SINGLE_CONTACT_DELIVERY_EVENTS
Parâmetro opcional: rangeFilterProperty
Define qual campo de data é usado para aplicar os filtros de período.
| Valor | Comportamento |
|---|---|
CREATED_AT (padrão) |
Filtra pela data de criação |
UPDATED_AT |
Filtra pela data da última atualização |
Intervalo de datas
Para garantir estabilidade e performance, o intervalo máximo permitido por requisição é de 5 dias.
Para exportar períodos maiores (ex: 30 dias), divida em múltiplas requisições — 6 chamadas consecutivas com janelas de 5 dias cobrem um mês inteiro.
Limite de requisições (rate limit)
A Data Extract API aplica um limite de 20 requisições por minuto por token. Tokens distintos da mesma conta têm orçamentos independentes.
O que acontece ao ultrapassar o limite
Requisições além do limite recebem HTTP 429 Too Many Requests:
{
"error": "Rate limit exceeded. Retry later.",
"retry_after": 42
}
Recomendações
-
Respeite o cabeçalho
Retry-Afterantes de tentar novamente. Loops de retry sem backoff amplificam o bloqueio -
Para extrações grandes (ex: 30 dias), combine janelas de 5 dias com espaçamento entre requisições — 20/min é folgado para o volume típico
-
Se sua integração precisa de throughput maior de forma sustentada, acione o suporte
1. BASE_TICKET_METRICS
Retorna dados básicos dos tickets. Campos retornados:
| Campo | Tipo | Descrição | Dado Possivelmente Sensível |
|---|---|---|---|
ticketId |
Inteiro | ID interno do ticket | Não |
displayTicketId |
Inteiro | ID exibido ao usuário no Cloud Chat — visível na URL e na busca por filtros | Não |
inboxId |
Inteiro | ID da caixa de entrada | Não |
accountId |
Inteiro | ID da conta | Não |
accountName |
Texto | Nome da conta | Não |
ticketStatus |
Texto | Status do ticket: open (Aberto), resolved (Resolvido), pending (Pendente), snoozed (Adiado) | Não |
teamName |
Texto | Nome do time responsável | Não |
ticketPriorityName |
Texto | Prioridade: low, medium, high, urgent | Não |
ticketType |
Texto | Tipo do ticket (primeira tag associada) | Não |
inboxName |
Texto | Nome da caixa de entrada | Não |
ticketTitle |
Texto | Título do ticket — pode conter nome ou telefone do contato | Sim |
channel |
Texto | Canal de comunicação (ex: Whatsapp) | Não |
tags |
Texto | Tags do ticket separadas por vírgula | Não |
createdAt |
Timestamp | Data e hora de criação do ticket | Não |
firstReplyAt |
Timestamp | Data e hora da primeira resposta | Não |
firstReplyTime |
Decimal | Tempo até a primeira resposta (em minutos) | Não |
resolvedAt |
Timestamp | Data e hora de resolução | Não |
totalResolutionTimeMin |
Decimal | Tempo total de resolução (em minutos) | Não |
agentId |
Inteiro | ID do agente responsável | Não |
ticketOwner |
Texto | Nome do agente responsável | Sim |
ticketOwnerEmail |
Texto | E-mail do agente responsável | Sim |
contactId |
Inteiro | ID do contato | Não |
contactName |
Texto | Nome do contato | Sim |
contactEmail |
Texto | E-mail do contato | Sim |
contactPhone |
Texto | Telefone do contato | Sim |
campaignId |
Inteiro | ID da campanha que originou o ticket, se aplicável | Não |
proactivelyInitiated |
Booleano | Indica se o ticket foi iniciado proativamente | Não |
Ao configurar fuso horário da conta (ex: GMT-3), os campos timestamp (createdAt, firstAgentAssignmentTime, firstReplyAt, firstAgentFirstReplyTime, resolvedAt, firstReplyTime, firstReplierAgentAssignmentTime, firstReplierAgentFirstReplyTime, repliedAt, readAt, receivedAt, sentAt) são retornados no fuso configurado. Sem fuso configurado, os horários vêm em UTC.
Configuração: Configuração de fuso horário.
Exemplo de resposta
[
{
"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
Inclui detalhes sobre o agente que respondeu e resolveu. Campos adicionais:
| Campo | Tipo | Descrição | Dado Possivelmente Sensível |
|---|---|---|---|
ticketLink |
Texto | URL direta para o ticket no Cloud Chat | Não |
agentOnResolutionId |
Inteiro | ID do agente humano que resolveu o ticket | Não |
agentOnResolutionName |
Texto | Nome do agente humano que resolveu | Sim |
agentOnResolutionEmail |
Texto | E-mail do agente humano que resolveu | Sim |
firstAgentReplyId |
Inteiro | ID do primeiro agente humano que respondeu | Não |
firstAgentReplyName |
Texto | Nome do primeiro agente humano que respondeu | Sim |
firstAgentReplyEmail |
Texto | E-mail do primeiro agente humano que respondeu | Sim |
firstAgentAssignmentTime |
Timestamp | Data e hora em que o ticket foi atribuído ao primeiro agente | Não |
firstAgentFirstReplyTime |
Timestamp | Data e hora da primeira resposta do agente | Não |
firstReplierAgentAssignmentTime |
Timestamp | Data e hora de atribuição do agente que respondeu primeiro | Não |
firstReplierAgentFirstReplyTime |
Timestamp | Timestamp da primeira resposta do agente que respondeu primeiro | Não |
firstAgentReplyTimeMin |
Decimal | Tempo entre atribuição e primeira resposta do agente (min) | Não |
firstAgentResolutionTimeMin |
Decimal | Tempo entre atribuição e resolução do ticket (min) | Não |
csatScore |
Numérico | Nota de satisfação (CSAT) atribuída pelo cliente | Não |
csatFeedback |
Texto | Comentário textual deixado pelo cliente na pesquisa CSAT | Sim |
contactCustomFields |
JSON | Campos customizados do contato — podem conter dados pessoais | Sim |
conversationCustomFields |
JSON | Campos customizados da conversa — podem conter dados pessoais | Sim |
conversationAdditionalFields |
JSON | Metadados adicionais da conversa — podem conter dados pessoais | Sim |
Exemplo de resposta
[
{
"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— tempo entrefirstAgentAssignmentTimeefirstAgentFirstReplyTime -
firstAgentResolutionTimeMin— tempo entrefirstAgentAssignmentTimeeresolvedAt
3. TICKET_SUMMARY
Retorna a transcrição completa da conversa do ticket. Campos retornados:
| Campo | Tipo | Descrição | Dado Possivelmente Sensível |
|---|---|---|---|
ticketId |
Inteiro | ID interno do ticket | Não |
displayTicketId |
Inteiro | ID exibido ao usuário no Cloud Chat — visível na URL e na busca por filtros | Não |
ticketLink |
Texto | URL direta para o ticket no Cloud Chat | Não |
summary |
Texto | Transcrição completa da conversa entre cliente e atendente | Sim |
[
{
"ticketId": 1111,
"displayTicketId": 1111,
"ticketLink": "https://cloudchat.cloudhumans.com/app/accounts/99999/conversations/1111",
"summary": "CONTATO: Oi\nUSUÁRIO: Olá!"
}
]
4. CAMPAIGN_DELIVERY_EVENTS
Retorna eventos de entrega de campanhas do WhatsApp, rastreando por contato e campanha o status das mensagens.
Campos retornados:
| Campo | Tipo | Descrição | Dado Possivelmente Sensível |
|---|---|---|---|
id |
Inteiro | ID único do evento de entrega | Não |
campaignId |
Inteiro | ID da campanha | Não |
campaignTitle |
Texto | Título da campanha | Não |
audience |
Texto | Audiência/lista utilizada na campanha | Não |
contactId |
Inteiro | ID do contato destinatário | Não |
contactName |
Texto | Nome do contato destinatário | Sim |
contactEmail |
Texto | E-mail do contato destinatário | Sim |
contactPhoneNumber |
Texto | Telefone do contato destinatário | Sim |
ticketId |
Inteiro | ID do ticket gerado pelo disparo, se houver | Não |
displayTicketId |
Texto | ID exibido ao usuário no Cloud Chat — visível na URL e na busca por filtros | Não |
messageSent |
Booleano | Flag que indica se a mensagem foi enviada à API do WhatsApp (Meta) | Não |
sentAt |
Timestamp | Data e hora do envio | Não |
messageReceived |
Booleano | Flag que indica se a mensagem foi entregue ao dispositivo do contato | Não |
receivedAt |
Timestamp | Data e hora da entrega | Não |
messageRead |
Booleano | Flag que indica se a mensagem foi lida (depende das configurações de privacidade do contato) | Não |
readAt |
Timestamp | Data e hora da leitura | Não |
messageReplied |
Booleano | Flag que indica se a mensagem foi respondida | Não |
repliedAt |
Timestamp | Data e hora da primeira resposta | Não |
error |
Texto | Erro de entrega: número inválido, sem WhatsApp, bloqueio, etc. | Não |
createdAt |
Timestamp | Data e hora de criação do registro | Não |
updatedAt |
Timestamp | Data e hora da última atualização | Não |
Exemplo de resposta
[
{
"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
Retorna eventos de entrega de mensagens proativas de disparo único (não campanhas). Campos retornados:
| Campo | Tipo | Descrição | Dado Possivelmente Sensível |
|---|---|---|---|
id |
Inteiro | ID único do evento de entrega | Não |
contactId |
Inteiro | ID do contato destinatário | Não |
contactName |
Texto | Nome do contato destinatário | Sim |
contactEmail |
Texto | E-mail do contato destinatário | Sim |
contactPhoneNumber |
Texto | Telefone do contato destinatário | Sim |
ticketId |
Inteiro | ID do ticket gerado pelo disparo, se houver | Não |
displayTicketId |
Texto | ID exibido ao usuário no Cloud Chat — visível na URL e na busca por filtros | Não |
messageSent |
Booleano | Flag que indica se a mensagem foi enviada à API do WhatsApp (Meta) | Não |
sentAt |
Timestamp | Data e hora do envio | Não |
messageReceived |
Booleano | Flag que indica se a mensagem foi entregue ao dispositivo do contato | Não |
receivedAt |
Timestamp | Data e hora da entrega | Não |
messageRead |
Booleano | Flag que indica se a mensagem foi lida (depende das configurações de privacidade do contato) | Não |
readAt |
Timestamp | Data e hora da leitura | Não |
messageReplied |
Booleano | Flag que indica se a mensagem foi respondida | Não |
repliedAt |
Timestamp | Data e hora da primeira resposta | Não |
error |
Texto | Erro de entrega: número inválido, sem WhatsApp, bloqueio, etc. | Não |
createdAt |
Timestamp | Data e hora de criação do registro | Não |
updatedAt |
Timestamp | Data e hora da última atualização | Não |
Exemplo de resposta
[
{
"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"
}
]
Observações
-
Para consultas em tempo real (não histórico): Como consultar contatos, tickets e mensagens em tempo real via API
-
Para alterar dados de tickets via API: Como atualizar e agir em tickets via API
-
Visão geral de todas as APIs disponíveis: Guia Mestre — Como acessar e operar dados do Cloud Chat via API