Conversas

Atendimentos e as mensagens trocadas neles, em todos os canais.

OperaçãoEndpoint
Listar conversasGET /conversations
Ler uma conversaGET /conversations/{id}
Listar mensagens de uma conversaGET /conversations/{id}/messages

Listar conversas

GET/conversations

Lista as conversas da organização, da mais recente para a mais antiga (pela data de início). Use updated_after para sincronizar só o que mudou desde a última leitura.

Permissão exigida na chave: conversas:read.

Parâmetros de consulta

NomeTipoObrigatórioDescrição
limitinteironãoQuantos itens por página, de 1 a 100. Padrão 50.
cursortextonãoValor de next_cursor da página anterior. Omita para a primeira página.
statusopen, pending, snoozed, resolved, closednãoSó conversas nesta situação.
channelwhatsapp, voice, instagram, messenger, telegram, email, sms, webchat, appnãoSó conversas deste canal.
contact_idtextonãoSó conversas deste contato.
created_aftertextonãoSó conversas iniciadas a partir deste instante. ISO 8601, por exemplo 2026-11-01T00:00:00Z.
created_beforetextonãoSó conversas iniciadas antes deste instante. ISO 8601, por exemplo 2026-11-01T00:00:00Z.
updated_aftertextonãoSó conversas alteradas a partir deste instante. ISO 8601, por exemplo 2026-11-01T00:00:00Z.

Resposta 200

Uma página de objetos Conversation em data, e next_cursor para a próxima. Veja Paginação.

Erros

StatusQuando
400invalid_parameter: Parâmetro inválido.
401unauthenticated: Não autenticado. invalid_credential: Credencial inválida.
403insufficient_scope: Escopo insuficiente.
429rate_limited: Limite de requisições atingido. Tente de novo depois do tempo indicado em Retry-After.
500internal_error: Erro interno. Tente de novo; se persistir, fale com o suporte informando o X-Request-Id.

O corpo segue o formato de Erros.

Exemplo

curl "https://app.conectaai.io/api/v1/conversations" \
  -H "Authorization: Bearer $CONECTAAI_API_KEY"

Resposta 200:

{
  "data": [
    {
      "id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "contact_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "channel": "whatsapp",
      "channel_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "status": "open",
      "protocol": "20261109-0042",
      "origin": "inbound",
      "handled_by": "ai",
      "assigned_user_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "department_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "active_agent_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "priority": 0,
      "tags": [
        "sem-conexao"
      ],
      "summary": "Cliente sem conexão desde a manhã. A IA verificou o contrato e abriu chamado técnico.",
      "created_at": "2026-11-09T14:32:05.120Z",
      "updated_at": "2026-11-09T14:32:05.120Z",
      "last_message_at": "2026-11-09T14:32:05.120Z",
      "first_response_at": "2026-11-09T14:32:05.120Z",
      "escalated_at": "2026-11-09T14:32:05.120Z",
      "resolved_at": "2026-11-09T14:32:05.120Z"
    }
  ],
  "next_cursor": null
}

Ler uma conversa

GET/conversations/{id}

Devolve uma conversa da organização pelo identificador.

Permissão exigida na chave: conversas:read.

Parâmetros de caminho

NomeTipoObrigatórioDescrição
idtextosimIdentificador do recurso.

Resposta 200

Um objeto Conversation.

Erros

StatusQuando
401unauthenticated: Não autenticado. invalid_credential: Credencial inválida.
403insufficient_scope: Escopo insuficiente.
404not_found: Recurso não encontrado.
429rate_limited: Limite de requisições atingido. Tente de novo depois do tempo indicado em Retry-After.
500internal_error: Erro interno. Tente de novo; se persistir, fale com o suporte informando o X-Request-Id.

O corpo segue o formato de Erros.

Exemplo

curl "https://app.conectaai.io/api/v1/conversations/<id>" \
  -H "Authorization: Bearer $CONECTAAI_API_KEY"

Resposta 200:

{
  "id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
  "contact_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
  "channel": "whatsapp",
  "channel_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
  "status": "open",
  "protocol": "20261109-0042",
  "origin": "inbound",
  "handled_by": "ai",
  "assigned_user_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
  "department_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
  "active_agent_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
  "priority": 0,
  "tags": [
    "sem-conexao"
  ],
  "summary": "Cliente sem conexão desde a manhã. A IA verificou o contrato e abriu chamado técnico.",
  "created_at": "2026-11-09T14:32:05.120Z",
  "updated_at": "2026-11-09T14:32:05.120Z",
  "last_message_at": "2026-11-09T14:32:05.120Z",
  "first_response_at": "2026-11-09T14:32:05.120Z",
  "escalated_at": "2026-11-09T14:32:05.120Z",
  "resolved_at": "2026-11-09T14:32:05.120Z"
}

Listar mensagens de uma conversa

GET/conversations/{id}/messages

Lista as mensagens de uma conversa em ordem cronológica, da primeira para a última. Notas internas da equipe não aparecem.

Permissão exigida na chave: conversas:read.

Parâmetros de caminho

NomeTipoObrigatórioDescrição
idtextosimIdentificador do recurso.

Parâmetros de consulta

NomeTipoObrigatórioDescrição
limitinteironãoQuantos itens por página, de 1 a 100. Padrão 50.
cursortextonãoValor de next_cursor da página anterior. Omita para a primeira página.

Resposta 200

Uma página de objetos Message em data, e next_cursor para a próxima. Veja Paginação.

Erros

StatusQuando
400invalid_parameter: Parâmetro inválido.
401unauthenticated: Não autenticado. invalid_credential: Credencial inválida.
403insufficient_scope: Escopo insuficiente.
404not_found: Recurso não encontrado.
429rate_limited: Limite de requisições atingido. Tente de novo depois do tempo indicado em Retry-After.
500internal_error: Erro interno. Tente de novo; se persistir, fale com o suporte informando o X-Request-Id.

O corpo segue o formato de Erros.

Exemplo

curl "https://app.conectaai.io/api/v1/conversations/<id>/messages" \
  -H "Authorization: Bearer $CONECTAAI_API_KEY"

Resposta 200:

{
  "data": [
    {
      "id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "conversation_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "author_type": "customer",
      "author_user_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "author_agent_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "text": null,
      "caption": null,
      "media": {
        "kind": "texto",
        "mime_type": "image/jpeg",
        "file_name": null,
        "duration_sec": 0
      },
      "status": "sending",
      "reply_to_message_id": "8f0c2a4e-1b7d-4c55-9a1e-3d2f6b7c8a90",
      "deleted": false,
      "created_at": "2026-11-09T14:32:05.120Z"
    }
  ],
  "next_cursor": null
}

Objeto Conversation

Um atendimento, do primeiro contato à resolução.

CampoTipoDescrição
idtextoIdentificador da conversa.
contact_idtextoContato com quem a conversa acontece. Leia em GET /contacts/{id}.
channelwhatsapp, voice, instagram, messenger, telegram, email, sms, webchat, appCanal do atendimento: whatsapp, voice (telefone), instagram, messenger, telegram, email, sms, webchat (chat do site) ou app (app do assinante).
channel_idtexto ou nullCanal configurado em que a conversa entrou.
statusopen, pending, snoozed, resolved, closedopen: em andamento. pending: aguardando o cliente. snoozed: adiada pela equipe. resolved: resolvida. closed: encerrada.
protocoltexto ou nullNúmero de protocolo mostrado ao cliente.
origininbound, template, campaigninbound: o cliente iniciou. template: a equipe iniciou por modelo aprovado. campaign: veio de uma campanha.
handled_byai, human, hybridQuem conduz a conversa agora: ai (agente de IA), human (atendente) ou hybrid.
assigned_user_idtexto ou nullAtendente responsável, quando há.
department_idtexto ou nullSetor da conversa, quando há.
active_agent_idtexto ou nullAgente de IA que conduz a conversa, quando há.
priorityinteiroPrioridade definida pela equipe. 0 é a padrão.
tagslista de textoEtiquetas aplicadas, pelo slug. A lista completa está em GET /tags.
summarytexto ou nullResumo da conversa gerado pela IA, quando já existe.
created_attextoQuando a conversa começou. Data e hora em ISO 8601, UTC.
updated_attextoÚltima alteração da conversa. Data e hora em ISO 8601, UTC.
last_message_attextoÚltima mensagem trocada. Data e hora em ISO 8601, UTC.
first_response_attexto ou nullPrimeira resposta ao cliente, da IA ou de gente. Data e hora em ISO 8601, UTC.
escalated_attexto ou nullQuando a conversa foi passada para atendimento humano. Data e hora em ISO 8601, UTC.
resolved_attexto ou nullQuando a conversa foi resolvida. Data e hora em ISO 8601, UTC.

Objeto Message

Uma mensagem de uma conversa. Notas internas da equipe não aparecem.

CampoTipoDescrição
idtextoIdentificador da mensagem.
conversation_idtextoConversa da mensagem.
author_typecustomer, ai, human_agent, system, eventcustomer: o cliente. ai: o agente de IA. human_agent: um atendente. system: aviso automático do sistema. event: registro de acontecimento (por exemplo, início de ligação).
author_user_idtexto ou nullAtendente que escreveu, quando author_type é human_agent.
author_agent_idtexto ou nullAgente de IA que escreveu, quando author_type é ai.
texttexto ou nullTexto da mensagem. Em áudio, a transcrição; em imagem ou documento, a descrição que o sistema registrou. null em mensagem apagada.
captiontexto ou nullLegenda que o cliente escreveu junto do anexo, quando há.
mediaobjeto ou nullAnexo da mensagem, sem link para o arquivo. null quando é só texto.
media.kindtextoTipo do anexo: image, video, audio, audio_voicenote, document, sticker, location, contact e outros.
media.mime_typetexto ou nullTipo MIME do arquivo.
media.file_nametexto ou nullNome do arquivo, quando informado.
media.duration_secinteiro ou nullDuração em segundos, para áudio e vídeo.
statussending, sent, delivered, read, failed ou nullSituação de entrega das mensagens enviadas ao cliente.
reply_to_message_idtexto ou nullMensagem respondida, quando é uma resposta.
deletedbooleanoA mensagem foi apagada. O texto não é devolvido.
created_attextoQuando a mensagem foi registrada. Data e hora em ISO 8601, UTC.