mirlo

Conversaciones

Consultar y gestionar conversaciones entre tu organizacion y contactos

Las conversaciones agrupan todos los mensajes entre tu organizacion y un contacto.

Listar Conversaciones

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations" \
  -H "X-API-Key: sk_live_tu_api_key"

Parametros de Query

ParametroTipoDescripcion
skipnumberRegistros a saltar (paginacion). Default: 0
takenumberRegistros a retornar. Default: 20
searchstringBuscar por nombre o direccion del contacto
statusstringFiltrar por estado: active, closed, archived
contact_idUUIDFiltrar por contacto
servicestringFiltrar por servicio. Separar con coma para multiples (ej. whatsapp,messenger)
labelsstringFiltrar por etiquetas (separadas por coma). Retorna conversaciones con CUALQUIERA de las etiquetas
no_labelstrue | falseSi true, retorna solo conversaciones sin etiquetas. Tiene prioridad sobre labels
assigned_member_idUUIDFiltrar por agente asignado
organization_addressstringFiltrar por numero de la organizacion (ej. +521234567890)
sincestringConversaciones desde esta fecha (ISO 8601)
untilstringConversaciones hasta esta fecha (ISO 8601)
date_fieldstringCampo para filtrar por fecha: created_at (default) o last_message_timestamp
order_bystringCampo para ordenar. Default: last_message_timestamp
orderstringDireccion: asc o desc. Default: desc
broadcast_idUUIDFiltrar por campana de broadcast
is_broadcasttrue | falseSi true, solo conversaciones iniciadas por broadcast
crm_contact_idstringFiltrar por ID de contacto en el CRM
include_messagesnumberIncluir los ultimos N mensajes por conversacion (max: 50)

Response

{
  "data": [
    {
      "id": "37c9df0b-4ebe-4a23-a119-1fbab2e0d29f",
      "organization_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "contact_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "organization_address": "100000000000001",
      "contact_address": "+521234567890",
      "service": "whatsapp",
      "status": "active",
      "extra": {
        "member_id": "m1m2m3m4-m5m6-m7m8-m9m0-mambnmcndme",
        "labels": ["vip", "soporte"]
      },
      "last_message_at": "2026-01-22T18:30:00.000Z",
      "contact": {
        "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "name": "Juan Perez",
        "address": "+521234567890"
      }
    }
  ],
  "total": 45,
  "skip": 0,
  "take": 20
}

Obtener una Conversacion

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}" \
  -H "X-API-Key: sk_live_tu_api_key"

Actualizar una Conversacion

Permite modificar datos de una conversacion existente, incluyendo asignacion de agentes, etiquetas y archivado.

curl -X PATCH "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "extra": {
      "labels": ["vip", "soporte"]
    }
  }'

Campos actualizables

CampoTipoDescripcion
namestringNombre o titulo de la conversacion
statusstringEstado: active o closed
extraobjectDatos adicionales (ver abajo)

Campos de extra

CampoTipoDescripcion
member_idUUID | nullID del agente asignado. null para desasignar
labelsstring[]Etiquetas de la conversacion
archivedstring | nullTimestamp ISO 8601 para archivar. null para desarchivar
team_idUUID | nullID del equipo asignado
team_namestring | nullNombre del equipo asignado

Los campos de extra se mezclan con los valores existentes. No es necesario enviar todos los campos, solo los que quieras modificar.

Eliminar una Conversacion

curl -X DELETE "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}" \
  -H "X-API-Key: sk_live_tu_api_key"

Archivar Conversaciones

Existen dos formas de archivar una conversacion, dependiendo de si quieres preservar o limpiar la asignacion actual.

Archivar y limpiar (recomendado)

Archiva la conversacion, desasigna al agente, limpia el equipo y las etiquetas. La conversacion queda lista para empezar de cero si el contacto vuelve a escribir.

curl -X PATCH "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "extra": {
      "archived": "2026-01-22T18:30:00.000Z",
      "member_id": null,
      "assignment": null,
      "team_id": null,
      "team_name": null,
      "labels": []
    }
  }'

Este modo tambien limpia los campos de flujo automatico (flow_id, flow_member_id), de modo que al reactivarse la conversacion pase por el flujo de asignacion desde cero.

Archivar preservando datos

Archiva la conversacion pero mantiene el agente asignado, equipo y etiquetas. Util para archivar temporalmente sin perder contexto.

curl -X PATCH "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "extra": {
      "archived": "2026-01-22T18:30:00.000Z"
    }
  }'

Desarchivar

Para desarchivar manualmente una conversacion, envia archived: null:

curl -X PATCH "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "extra": {
      "archived": null
    }
  }'

Las conversaciones archivadas se desarchivan automaticamente cuando el contacto envia un nuevo mensaje. No es necesario desarchivar manualmente en ese caso.


Asignar un Agente

Asigna un miembro del equipo a la conversacion:

curl -X PATCH "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "extra": {
      "member_id": "m1m2m3m4-m5m6-m7m8-m9m0-mambnmcndme"
    }
  }'

Para desasignar, envia "member_id": null.

Al asignar un agente se crea automaticamente un registro de asignacion con timestamp. Al desasignar o archivar, se actualiza el conteo de interacciones activas del miembro.


Asignar a un Equipo

Transfiere la conversacion a un equipo. El sistema busca un miembro disponible del equipo y le asigna la conversacion automaticamente.

curl -X POST "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}/assign-team" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "team_id": "t1t2t3t4-t5t6-t7t8-t9t0-tatbtctdtet",
    "team_name": "Soporte Nivel 2"
  }'
CampoTipoRequeridoDescripcion
team_idUUIDSiID del equipo destino
team_namestringNoNombre del equipo (para referencia)

Notas

Las notas permiten agregar comentarios internos a una conversacion que no son visibles para el contacto.

Crear una Nota

curl -X POST "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}/notes" \
  -H "X-API-Key: sk_live_tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Cliente solicito seguimiento la proxima semana",
    "member_id": "m1m2m3m4-m5m6-m7m8-m9m0-mambnmcndme",
    "organization_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
  }'
CampoTipoRequeridoDescripcion
contentstringSiContenido de la nota
member_idstringNoID del miembro que crea la nota
organization_idstringSiID de la organizacion
actorstringNoIdentificador del actor (ej. nombre del agente)

Listar Notas

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}/notes" \
  -H "X-API-Key: sk_live_tu_api_key"

Eliminar una Nota

curl -X DELETE "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}/notes/{note_id}" \
  -H "X-API-Key: sk_live_tu_api_key"

Eventos (Audit Trail)

Obtiene el historial de eventos de una conversacion: asignaciones, cambios de etiquetas, archivados, etc.

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}/events" \
  -H "X-API-Key: sk_live_tu_api_key"

Parametros de Query

ParametroTipoDescripcion
typesstringFiltrar por tipo de evento (separados por coma): assignment, label_added, label_removed

Response

[
  {
    "id": "evt-123",
    "conversation_id": "37c9df0b-4ebe-4a23-a119-1fbab2e0d29f",
    "type": "assignment",
    "data": {
      "member_id": "m1m2m3m4-m5m6-m7m8-m9m0-mambnmcndme",
      "assigned_by": "manual"
    },
    "created_at": "2026-01-22T18:30:00.000Z"
  }
]

Etiquetas Enriquecidas

Retorna las etiquetas de una conversacion junto con sus asociaciones a secuencias/flujos automaticos.

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/{conversation_id}/labels/enriched" \
  -H "X-API-Key: sk_live_tu_api_key"

Response

{
  "labels": [
    {
      "name": "vip",
      "source": "messages",
      "isApplied": true,
      "sequences": {
        "triggers": [
          { "flowId": "flow-123", "name": "VIP Onboarding", "status": "active" }
        ],
        "interrupts": []
      }
    }
  ]
}

Direcciones por Etiqueta

Obtiene las direcciones de contacto (numeros de telefono) de todas las conversaciones que tienen una etiqueta especifica. Util para crear listas de destinatarios para broadcasts.

curl -X GET "https://api.mirlo.com/v2/messages/organizations/{organization_id}/conversations/addresses-by-label?label=vip&organization_id={organization_id}" \
  -H "X-API-Key: sk_live_tu_api_key"

Parametros de Query

ParametroTipoRequeridoDescripcion
labelstringSiNombre de la etiqueta
organization_idUUIDSiID de la organizacion

Response

{
  "addresses": ["+521234567890", "+529876543210"]
}

Estados de Conversacion

EstadoDescripcion
activeConversacion activa con mensajes recientes
closedConversacion cerrada

El archivado no es un valor del campo status. Una conversacion archivada tiene status: "active" pero con extra.archived establecido. Para filtrar conversaciones archivadas, usa el parametro status=archived en el listado, que internamente filtra por el campo extra.


Referencia de Endpoints

Todos bajo https://api.mirlo.com/v2/messages/organizations/{organization_id}

MetodoEndpointDescripcion
GET.../conversationsListar conversaciones
GET.../conversations/{id}Obtener una conversacion
PATCH.../conversations/{id}Actualizar conversacion (extra, status, name)
DELETE.../conversations/{id}Eliminar una conversacion
POST.../conversations/{id}/assign-teamTransferir a un equipo
POST.../conversations/{id}/notesCrear nota
GET.../conversations/{id}/notesListar notas
DELETE.../conversations/{id}/notes/{note_id}Eliminar nota
GET.../conversations/{id}/eventsHistorial de eventos
GET.../conversations/{id}/labels/enrichedEtiquetas con secuencias
GET.../conversations/addresses-by-labelDirecciones por etiqueta

En esta pagina