Resumen
Una conversación es un hilo con un lead en un canal y una cuenta de empresa: WhatsApp, correo electrónico, el chat web (chatbot), Facebook, Instagram, SMS o TikTok. Un lead puede tener varias conversaciones en el mismo canal y cuenta de empresa, una por cada dirección de contacto (teléfono, correo electrónico o usuario) que haya usado, así que usa el id de la conversación como clave de tu copia. Recibes los metadatos de la conversación, nunca sus mensajes:
channel_type: el canal, onullpara un canal que esta versión de la API no conoce.status:activeoarchiveden la bandeja de entrada del equipo.assignee: el miembro del equipo al que está asignada la conversación, onull.reply_mode:humanmientras una persona ha tomado el control de la conversación, incluido un chat de WhatsApp que se atiende desde la app WhatsApp Business, yaien los demás casos.aisignifica que no hay una toma de control activa; no significa que haya un asistente configurado o respondiendo en ese canal. Una toma de control con límite de tiempo vuelve aaicuando termina, y en ese momento la conversación recibe una versión nueva.last_inbound_atylast_outbound_at: cuándo llegó el último mensaje del cliente y cuándo salió hacia él el último mensaje que no falló. Los mensajes suprimidos, el historial de WhatsApp importado y los mensajes de los visitantes del chat web no cuentan como entrantes, así que una conversaciónchatbotlo trae comonull. El historial de WhatsApp importado sí cuenta como saliente.
El nombre, el teléfono o el usuario del contacto viajan en el lead vinculado, no en la conversación. Para ver el conjunto de todos los canales de un lead, lee la faceta response del lead con GET /v1/leads/{id}.
Usa GET /v1/conversations y GET /v1/conversations/{id} para consultar conversaciones; GET /v1/conversations?lead= lista las conversaciones de un lead. Para mantener una copia, sigue el feed de cambios: lo explica Sincroniza una copia.
GET /
Devuelve una página de conversaciones del equipo, una por canal, cuenta de empresa y dirección de contacto: canal, estado en la bandeja de entrada, responsable y la hora de los últimos mensajes recibidos y enviados. Envía lead para obtener las conversaciones de un lead. El contenido de los mensajes nunca se exporta.
Parámetros de consulta
limitinteger Rango 1–100 Por defecto25Elementos por página, de 1 a 100. Por defecto, 25.
cursorstring 1–512 caracteresEl
next_cursorde la página anterior. Omítelo en la primera página.leadstring Prefijo del idlead_…Solo las conversaciones vinculadas a este lead: el
leadde cada elemento es este identificador. Un lead de otro equipo, o que no existe, no coincide con nada.
Cabeceras
Totem-Teamstring Condicional Prefijo del idteam_…El equipo que se lee, como identificador
team_…. Omítelo si la clave lee un solo equipo; es obligatorio si lee varios (400 team_required). Si lo envías, debe indicar un equipo que la clave lee: un identificador mal formado recibe400 invalid_request, y un equipo fuera de la clave,404 team_not_accessible, igual que una petición sin la cabecera cuando la clave ya no lee ningún equipo.
Respuesta
Devuelve una lista de objetos Conversation.
objectstringSiempre
list.dataArray<Conversation>Los elementos de esta página.
has_morebooleantruesi hay otra página: pídela connext_cursor, aunque esta traiga menos elementos quelimit.next_cursorstring Puede ser nullCursor opaco de la página siguiente, o null en la última. No lo interpretes.
Errores
- 400
team_requiredFalta el equipo - 403
team_state_restrictedEquipo restringido - 403
sector_restrictedSector restringido - 404
team_not_accessibleEquipo no accesible - 409
capture_not_readyLos datos del equipo aún se están preparando - 429
quota_exceededCuota diaria superada
curl 'https://api.totemstudio.ai/v1/conversations?limit=25' \
-H "Authorization: Bearer $TOTEM_API_KEY" \
-H "Totem-Team: $TOTEM_TEAM_ID"{
"object": "list",
"data": [
{
"id": "conv_m3GhGjRHmFbww1g10oqOp7j3gWqPJ",
"object": "conversation",
"livemode": false,
"team": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"lead": "lead_r72EfbRNUzuqORFJR0O8HxAwEXd93jGUTYMaMMXKSF0QbLS8CiUKJpEP34LFQG",
"channel_type": "whatsapp",
"status": "active",
"assignee": "mem_h548E7UiYhutHhucVrQCzkM0eaea0",
"reply_mode": "ai",
"created_at": "2026-09-28T10:16:00.000Z",
"last_inbound_at": "2026-10-01T08:58:00.000Z",
"last_outbound_at": "2026-10-01T08:59:30.000Z",
"version": 12,
"updated_at": "2026-10-01T08:59:31.040Z"
}
],
"has_more": false,
"next_cursor": null
}GET /
Devuelve una conversación por su identificador, sin el contenido de los mensajes. Una conversación que esta clave no puede leer, o que se eliminó, responde 404 resource_missing.
Parámetros de ruta
idstring Obligatorio Prefijo del idconv_…El identificador público de la conversación.
Respuesta
Devuelve un objeto Conversation.
idstring Prefijo del idconv_…Identificador público del registro.
objectstringSiempre
conversation.livemodebooleantrueen datos reales;falseen los datos de ejemplo.teamstring Prefijo del idteam_…El equipo al que pertenece este registro.
leadstring Puede ser null Prefijo del idlead_…El lead al que está vinculada la conversación, o null si no está vinculada o el lead ya no existe. El nombre, el teléfono y el usuario solo aparecen en el lead.
channel_typestring Puede ser nullEl canal:
whatsapp,email,chatbot(el chat web),facebook,instagram,smsotiktok; null si es un valor que esta versión no conoce. Un lead puede tener varias conversaciones en el mismo canal y cuenta de empresa, una por cada dirección de contacto (teléfono, correo electrónico o usuario) que haya usado, así que usa elidcomo clave de tu copia.Valores posiblessmswhatsappfacebookinstagramtiktokchatbotemail
statusstring Puede ser nullactiveoarchiveden la bandeja del equipo; null si es un valor que esta versión no conoce.Valores posiblesactivearchived
assigneestring Puede ser null Prefijo del idmem_…El miembro del equipo asignado a la conversación (ver
/members), o null.reply_modestringhumanmientras una persona ha tomado la conversación, incluido un chat de WhatsApp que se atiende desde la app WhatsApp Business;aien otro caso.aisignifica que no hay una toma activa, no que haya un asistente configurado o respondiendo en este canal. Una toma temporal vuelve aaicuando caduca, y la versión del registro cambia entonces.Valores posiblesaihuman
created_atstring Puede ser null Formatodate-timeCuándo se creó la conversación (UTC).
last_inbound_atstring Puede ser null Formatodate-timeEl último mensaje del cliente (UTC). No cuentan: mensajes borrados, historial de WhatsApp importado ni los turnos del visitante del chat web, así que una conversación
chatbotda null. Los contenidos compartidos de Instagram no se distinguen y sí cuentan.last_outbound_atstring Puede ser null Formatodate-timeEl último mensaje enviado al cliente que no falló (UTC), lo enviara quien lo enviara. El historial de WhatsApp importado sí cuenta.
versioninteger Rango ≥ 1Aumenta cada vez que cambia alguno de los campos exportados del registro. Aplica un cambio solo si su versión es mayor que la que guardas.
updated_atstring Formatodate-timeCuándo registró Totem esta versión (UTC). No es la hora en que ocurrió el hecho.
Errores
- 403
team_state_restrictedEquipo restringido - 403
sector_restrictedSector restringido - 404
resource_missingRecurso no encontrado - 409
capture_not_readyLos datos del equipo aún se están preparando
curl 'https://api.totemstudio.ai/v1/conversations/conv_m3GhGjRHmFbww1g10oqOp7j3gWqPJ' \
-H "Authorization: Bearer $TOTEM_API_KEY"{
"id": "conv_m3GhGjRHmFbww1g10oqOp7j3gWqPJ",
"object": "conversation",
"livemode": false,
"team": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"lead": "lead_r72EfbRNUzuqORFJR0O8HxAwEXd93jGUTYMaMMXKSF0QbLS8CiUKJpEP34LFQG",
"channel_type": "whatsapp",
"status": "active",
"assignee": "mem_h548E7UiYhutHhucVrQCzkM0eaea0",
"reply_mode": "ai",
"created_at": "2026-09-28T10:16:00.000Z",
"last_inbound_at": "2026-10-01T08:58:00.000Z",
"last_outbound_at": "2026-10-01T08:59:30.000Z",
"version": 12,
"updated_at": "2026-10-01T08:59:31.040Z"
}Una conversación en un canal: su estado, su responsable y la hora de los últimos mensajes, nunca su contenido.
Atributos
idstring Prefijo del idconv_…Identificador público del registro.
objectstringSiempre
conversation.livemodebooleantrueen datos reales;falseen los datos de ejemplo.teamstring Prefijo del idteam_…El equipo al que pertenece este registro.
leadstring Puede ser null Prefijo del idlead_…El lead al que está vinculada la conversación, o null si no está vinculada o el lead ya no existe. El nombre, el teléfono y el usuario solo aparecen en el lead.
channel_typestring Puede ser nullEl canal:
whatsapp,email,chatbot(el chat web),facebook,instagram,smsotiktok; null si es un valor que esta versión no conoce. Un lead puede tener varias conversaciones en el mismo canal y cuenta de empresa, una por cada dirección de contacto (teléfono, correo electrónico o usuario) que haya usado, así que usa elidcomo clave de tu copia.Valores posiblessmswhatsappfacebookinstagramtiktokchatbotemail
statusstring Puede ser nullactiveoarchiveden la bandeja del equipo; null si es un valor que esta versión no conoce.Valores posiblesactivearchived
assigneestring Puede ser null Prefijo del idmem_…El miembro del equipo asignado a la conversación (ver
/members), o null.reply_modestringhumanmientras una persona ha tomado la conversación, incluido un chat de WhatsApp que se atiende desde la app WhatsApp Business;aien otro caso.aisignifica que no hay una toma activa, no que haya un asistente configurado o respondiendo en este canal. Una toma temporal vuelve aaicuando caduca, y la versión del registro cambia entonces.Valores posiblesaihuman
created_atstring Puede ser null Formatodate-timeCuándo se creó la conversación (UTC).
last_inbound_atstring Puede ser null Formatodate-timeEl último mensaje del cliente (UTC). No cuentan: mensajes borrados, historial de WhatsApp importado ni los turnos del visitante del chat web, así que una conversación
chatbotda null. Los contenidos compartidos de Instagram no se distinguen y sí cuentan.last_outbound_atstring Puede ser null Formatodate-timeEl último mensaje enviado al cliente que no falló (UTC), lo enviara quien lo enviara. El historial de WhatsApp importado sí cuenta.
versioninteger Rango ≥ 1Aumenta cada vez que cambia alguno de los campos exportados del registro. Aplica un cambio solo si su versión es mayor que la que guardas.
updated_atstring Formatodate-timeCuándo registró Totem esta versión (UTC). No es la hora en que ocurrió el hecho.
{
"id": "conv_m3GhGjRHmFbww1g10oqOp7j3gWqPJ",
"object": "conversation",
"livemode": false,
"team": "team_r9uYrIW4gSFJJ6hZQ9ip1UIpPaAD1CF7NR",
"lead": "lead_r72EfbRNUzuqORFJR0O8HxAwEXd93jGUTYMaMMXKSF0QbLS8CiUKJpEP34LFQG",
"channel_type": "whatsapp",
"status": "active",
"assignee": "mem_h548E7UiYhutHhucVrQCzkM0eaea0",
"reply_mode": "ai",
"created_at": "2026-09-28T10:16:00.000Z",
"last_inbound_at": "2026-10-01T08:58:00.000Z",
"last_outbound_at": "2026-10-01T08:59:30.000Z",
"version": 12,
"updated_at": "2026-10-01T08:59:31.040Z"
}